UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

1,177 lines 69.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.TableStore = exports.Row = exports.Column = void 0; var tslib_1 = require("tslib"); var mobx_state_tree_1 = require("mobx-state-tree"); var iRenderer_1 = require("./iRenderer"); var tpl_builtin_1 = require("../utils/tpl-builtin"); var isEqual_1 = (0, tslib_1.__importDefault)(require("lodash/isEqual")); var find_1 = (0, tslib_1.__importDefault)(require("lodash/find")); var helper_1 = require("../utils/helper"); var tpl_1 = require("../utils/tpl"); var manager_1 = require("./manager"); var sub_1 = require("../utils/sub"); var crud_1 = require("./crud"); var commonTableFunction_1 = require("./utils/commonTableFunction"); var lodash_1 = require("lodash"); exports.Column = mobx_state_tree_1.types .model('Column', { label: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), type: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.string, 'plain'), name: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.string), value: mobx_state_tree_1.types.frozen(), groupName: '', toggled: false, toggable: true, expandable: false, checkdisable: false, isPrimary: false, searchable: mobx_state_tree_1.types.maybe(mobx_state_tree_1.types.frozen()), enableSearch: true, sortable: false, filterable: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), fixed: '', align: '', index: 0, rawIndex: 0, combined: false, combinedNull: true, breakpoint: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), pristine: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), remark: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), undefined), className: '', map: mobx_state_tree_1.types.frozen(), }) .actions(function (self) { return ({ toggleToggle: function () { self.toggled = !self.toggled; var table = (0, mobx_state_tree_1.getParent)(self, 2); if (!table.activeToggaleColumns.length) { self.toggled = true; } table.persistSaveToggledColumns(); }, setToggled: function (value) { self.toggled = value; }, setEnableSearch: function (value) { self.enableSearch = value; }, setMapValue: function (obj) { self.map = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.map), obj); // self.map = Object.assign(obj, self.map) } }); }); exports.Row = mobx_state_tree_1.types .model('Row', { storeType: 'Row', id: mobx_state_tree_1.types.identifier, parentId: '', key: mobx_state_tree_1.types.string, pristine: mobx_state_tree_1.types.frozen({}), data: mobx_state_tree_1.types.frozen({}), rowSpans: mobx_state_tree_1.types.frozen({}), index: mobx_state_tree_1.types.number, newIndex: mobx_state_tree_1.types.number, path: '', expandable: false, checkdisable: false, checked: false, isHover: false, children: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.late(function () { return exports.Row; })), []), depth: mobx_state_tree_1.types.number, // 当前children位于第几层,便于使用getParent获取最顶层TableStore }) .views(function (self) { return ({ get modified() { if (!self.data) { return false; } return Object.keys(self.data).some(function (key) { return !(0, isEqual_1.default)(self.data[key], self.pristine[key]); }); }, getDataWithModifiedChilden: function () { var data = (0, tslib_1.__assign)({}, self.data); if (data.children && self.children) { data.children = self.children.map(function (item) { return item.getDataWithModifiedChilden(); }); } return data; }, get collapsed() { var table = (0, mobx_state_tree_1.getParent)(self, self.depth * 2); if (table.dragging) { return true; } var from = self; while (from && from !== table) { if (!table.isExpanded(from)) { return true; } from = (0, mobx_state_tree_1.getParent)(from, 2); } return false; }, get expanded() { return !this.collapsed; }, get moved() { return self.index !== self.newIndex; }, get locals() { var children = null; if (self.children.length) { children = self.children.map(function (item) { return item.locals; }); } var parent = (0, mobx_state_tree_1.getParent)(self, 2); return (0, helper_1.createObject)((0, helper_1.extendObject)((0, mobx_state_tree_1.getParent)(self, self.depth * 2).data, { index: self.index, // todo 以后再支持多层,目前先一层 parent: parent.storeType === exports.Row.name ? parent.data : undefined }), children ? (0, tslib_1.__assign)((0, tslib_1.__assign)({}, self.data), { children: children }) : self.data); }, get checkable() { var table = (0, mobx_state_tree_1.getParent)(self, self.depth * 2); return table && table.itemCheckableOn ? (0, tpl_1.evalExpression)(table.itemCheckableOn, self.locals) : true; }, get draggable() { var table = (0, mobx_state_tree_1.getParent)(self, self.depth * 2); return table && table.itemDraggableOn ? (0, tpl_1.evalExpression)(table.itemDraggableOn, self.locals) : true; } }); }) .actions(function (self) { return ({ toggle: function () { (0, mobx_state_tree_1.getParent)(self, self.depth * 2).toggle(self); }, toggleExpanded: function () { (0, mobx_state_tree_1.getParent)(self, self.depth * 2).toggleExpanded(self); }, change: function (values, savePristine) { self.data = (0, helper_1.immutableExtends)(self.data, values); savePristine && (self.pristine = self.data); }, reset: function () { self.newIndex = self.index; self.data = self.pristine; }, setCheckdisable: function (bool) { self.checkdisable = bool; }, setCheckded: function (bool) { self.checked = bool; }, setIsHover: function (value) { self.isHover = value; }, replaceWith: function (data) { Object.keys(data).forEach(function (key) { if (key !== 'id') { self[key] = data[key]; } }); if (Array.isArray(data.children)) { var arr = data.children; var pool = arr.concat(); // 把多的删了先 if (self.children.length > arr.length) { self.children.splice(arr.length, self.children.length - arr.length); } var index = 0; var len = self.children.length; while (pool.length) { // 因为父级id未更新,所以需要将子级的parentId正确指向父级id var item = (0, tslib_1.__assign)((0, tslib_1.__assign)({}, pool.shift()), { parentId: self.id }); if (index < len) { self.children[index].replaceWith(item); } else { var row = exports.Row.create(item); self.children.push(row); } index++; } } } }); }); exports.TableStore = iRenderer_1.iRendererStore .named('TableStore') .props({ visitMap: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}), rowSpanIndexsInterval: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}), textWidhMap: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}), headTextWidhMap: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}), modefiedMap: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), { dataSetId: '', modifiedDataSet: {} }), // ui属性表格项目可见性 columns: mobx_state_tree_1.types.array(exports.Column), rawColumns: mobx_state_tree_1.types.array(exports.Column), rows: mobx_state_tree_1.types.array(exports.Row), expandedRows: mobx_state_tree_1.types.array(mobx_state_tree_1.types.string), primaryField: 'id', orderBy: '', orderDir: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.literal('asc'), mobx_state_tree_1.types.literal('desc')), 'asc'), draggable: false, dragging: false, selectable: false, multiple: true, showIndex: false, footable: mobx_state_tree_1.types.frozen(), expandConfig: mobx_state_tree_1.types.frozen(), isNested: false, columnsTogglable: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.union(mobx_state_tree_1.types.boolean, mobx_state_tree_1.types.literal('auto')), 'auto'), itemCheckableOn: '', itemDraggableOn: '', hideCheckToggler: false, combineNum: 0, combineFromIndex: 0, formsRef: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()), []), maxKeepItemSelectionLength: 0, keepItemSelectionOnPageChange: false, // Jay stickyWidths: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}), mobileUI: false, orderColumns: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), new Map()), filterColumns: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), new Map()), originColumns: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.array(mobx_state_tree_1.types.frozen()), []), tableLayout: '', tableExpandLength: 0, columnsInfo: mobx_state_tree_1.types.optional(mobx_state_tree_1.types.frozen(), {}) }) .views(function (self) { function getColumnsExceptBuiltinTypes() { return self.columns.filter(function (item) { return !/^__/.test(item.type); }); } // Jay function getRawColumnsExceptBuiltinTypes() { return self.rawColumns.filter(function (item) { return !/^__/.test(item.type); }); } function getForms() { return self.formsRef.map(function (item) { return ({ store: (0, manager_1.getStoreById)(item.id), rowIndex: item.rowIndex }); }); } function getFilteredColumns() { var filterCols = self.columns.filter(function (item) { // 提取公共条件 var commonConditions = self.selectable && !self.dragging && self.rows.length; var isMobileCheck = (0, helper_1.isMobile)() ? true : !self.hideCheckToggler; var hasFootableColumnsOrNested = getFootableColumns().length || self.isNested; // return item && // isVisible( // item.pristine, // hasVisibleExpression(item.pristine) ? self.data : {} // ) && // (item.type === '__checkme' // ? self.selectable && // !self.dragging && // (isMobile() ? true : !self.hideCheckToggler) && // self.rows.length // : item.type === '__dragme' // ? self.dragging // : item.type === '__expandme' // ? (getFootableColumns().length || self.isNested) && !self.dragging // : (item.toggled || !item.toggable) && // (!self.footable || // !item.breakpoint || // !isBreakpoint(item.breakpoint))) if (!item || !(0, helper_1.isVisible)(item.pristine, (0, helper_1.hasVisibleExpression)(item.pristine) ? self.data : {})) return false; // 这几个是特殊展示的 switch (item.type) { case '__checkme': return commonConditions && isMobileCheck; case '__dragme': return self.dragging; case '__expandme': return hasFootableColumnsOrNested && !self.dragging; case '__pseudoColumn': return self.showIndex; default: return (item.toggled || !item.toggable); // && (!self.footable || // !item.breakpoint || // !isBreakpoint(item.breakpoint)) } }); if (self.footable && (0, helper_1.isMobile)() && self.tableLayout === 'vertical') { var expandedCol = filterCols.find(function (item) { return item.type === '__expandme'; }); filterCols = filterCols.filter(function (item) { return item.type !== '__expandme'; }); expandedCol && filterCols.push(expandedCol); } return filterCols; } function getFootableColumns() { return self.columns.filter(function (item) { return item.type === '__checkme' || item.type === '__dragme' || item.type === '__expandme' || item.type === '__pseudoColumn' ? false : (item.toggled || !item.toggable) && self.footable && item.breakpoint && (0, helper_1.isBreakpoint)(item.breakpoint); }); } function getLeftFixedColumns() { if (self.dragging) { return []; } var columns = getFilteredColumns().filter(function (item) { return item.fixed === 'left'; }); // 有才带过去,没有就不带了 if (columns.length) { columns = getFilteredColumns().filter(function (item) { return item.fixed === 'left' || /^__/.test(item.type); }); } return columns; } function getRightFixedColumns() { if (self.dragging) { return []; } return getFilteredColumns().filter(function (item) { return item.fixed === 'right'; }); } function isSelected(row) { return !!~getSelectedRows().indexOf(row); } function isExpanded(row) { return self.expandedRows.includes(row.id); } function getTogglable() { if (self.columnsTogglable === 'auto') { return self.columns.filter(function (item) { return !/^__/.test(item.type); }).length > 5; } return self.columnsTogglable; } function getToggableColumns() { return self.columns.filter(function (item) { return (0, helper_1.isVisible)(item.pristine, self.data) && item.toggable !== false; }); } function getActiveToggableColumns() { return getToggableColumns().filter(function (item) { return item.toggled; }); } function getModifiedRows(rows, modifiedRows) { if (rows === void 0) { rows = []; } if (modifiedRows === void 0) { modifiedRows = []; } rows = rows && rows.length ? rows : self.rows; // 每次初始化的时候初始化的时候初始化修改map for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) { var item = rows_1[_i]; if (item.children && item.children.length) { getModifiedRows(item.children, modifiedRows); } } // 如果没有修改的数据-有可能是前端分页导致的数据-尝试检查是否要更新编辑数据缓存 return Object.values(self.modefiedMap.modifiedDataSet); } function getFlatRows() { var ret = []; var fn = function (rows) { rows.forEach(function (row) { ret.push(row); row.expanded && row.children.length > 0 && fn(row.children); }); }; fn(self.rows); return ret; // return flattenTree<IRow>(self.rows) } function getModified() { return getModifiedRows().length; } function getMovedRows() { return (0, helper_1.flattenTree)(self.rows).filter(function (item) { return item.moved; }); } function getMoved() { return getMovedRows().length; } function getHovedRow() { return (0, helper_1.flattenTree)(self.rows).find(function (item) { return item.isHover; }); } function getUnSelectedRows() { return (0, helper_1.flattenTree)(self.rows).filter(function (item) { return !item.checked; }); } function getSelectedRows() { return (0, helper_1.flattenTree)(self.rows).filter(function (item) { return item.checked; }); } function getData(superData) { return (0, helper_1.createObject)(superData, { items: self.rows.map(function (item) { return item.data; }), selectedItems: getSelectedRows().map(function (item) { return item.data; }), unSelectedItems: getUnSelectedRows().map(function (item) { return item.data; }) }); } function hasColumnHidden() { return self.columns.findIndex(function (column) { return !column.toggled; }) !== -1; } function getTableHeadRows() { var filtedColumns = getFilteredColumns(); return (0, commonTableFunction_1.getHeadRows)(filtedColumns); } function getColumnGroup() { var columns = getFilteredColumns(); var len = columns.length; if (!len) { return []; } var groups = [ { label: columns[0].groupName, colSpan: 1, rowSpan: 1, index: columns[0].index, has: [columns[0]] } ]; var needGroup = columns.find(function (item) { return !!item.groupName; }); if (needGroup) { for (var i = 1; i < len; i++) { var prev = groups[groups.length - 1]; var current = columns[i]; if (current.groupName && current.groupName === prev.label) { prev.colSpan++; prev.has.push(current); } else { groups.push({ label: current.groupName, colSpan: 1, rowSpan: 1, index: current.index, has: [current] }); } } } if (groups.length === 1 && !groups[0].label) { groups.pop(); } return groups.map(function (item) { var rowSpan = !item.label || (item.has.length === 1 && item.label === item.has[0].label) ? 2 : 1; return (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { rowSpan: rowSpan, label: rowSpan === 2 ? item.label || item.has[0].label : item.label }); }); } function getFirstToggledColumnIndex() { var column = self.columns.find(function (column) { return !/^__/.test(column.type) && column.toggled; }); return column == null ? null : column.index; } function getSearchableColumns() { return self.columns.filter(function (column) { return column.searchable && (0, helper_1.isObject)(column.searchable); }); } function getActivedSearchableColumns() { return self.columns.filter(function (column) { return column.searchable && (0, helper_1.isObject)(column.searchable) && column.enableSearch; }); } return { get columnsData() { return getColumnsExceptBuiltinTypes(); }, get rawColumnsData() { return getRawColumnsExceptBuiltinTypes(); }, get forms() { return getForms(); }, get searchableColumns() { return getSearchableColumns(); }, get activedSearchableColumns() { return getSearchableColumns().filter(function (column) { return column.enableSearch; }); }, get filteredColumns() { return getFilteredColumns(); }, get footableColumns() { return getFootableColumns(); }, get leftFixedColumns() { return getLeftFixedColumns(); }, get rightFixedColumns() { return getRightFixedColumns(); }, get toggableColumns() { return getToggableColumns(); }, get activeToggaleColumns() { return getActiveToggableColumns(); }, get someChecked() { return !!getSelectedRows().length; }, get allChecked() { return !!(getSelectedRows().length === self.checkableRows.length && self.checkableRows.length); }, isSelected: isSelected, get allExpanded() { return !!(self.expandedRows.length === self.tableExpandLength && self.tableExpandLength); }, isExpanded: isExpanded, get toggable() { return getTogglable(); }, get modified() { return getModified(); }, get modifiedRows() { return getModifiedRows(); }, get unSelectedRows() { return getUnSelectedRows(); }, get selectedRows() { return getSelectedRows(); }, get checkableRows() { return (0, helper_1.flattenTree)(self.rows).filter(function (item) { return item.checkable; }); }, get expandableRows() { return self.rows.filter(function (item) { return item.expandable; }); }, get moved() { return getMoved(); }, get movedRows() { return getMovedRows(); }, get hoverRow() { return getHovedRow(); }, get disabledHeadCheckbox() { var _a, _b; var selectedLength = (_b = (_a = self.data) === null || _a === void 0 ? void 0 : _a.selectedItems) === null || _b === void 0 ? void 0 : _b.length; var maxLength = self.maxKeepItemSelectionLength; if (!self.data || !self.keepItemSelectionOnPageChange || !maxLength) { return false; } return maxLength === selectedLength; }, get firstToggledColumnIndex() { return getFirstToggledColumnIndex(); }, getData: getData, get columnGroup() { return getColumnGroup(); }, get tableHeadRows() { return getTableHeadRows(); }, get flatRows() { return getFlatRows(); }, getRowById: function (id) { return (0, helper_1.findTree)(self.rows, function (item) { return item.id === id; }); }, getItemsByName: function (name) { return this.forms .filter(function (form) { return form.rowIndex === parseInt(name, 10); }) .map(function (item) { return item.store; }); }, // 是否隐藏了某列 hasColumnHidden: function () { return hasColumnHidden(); }, getExpandedRows: function () { var list = []; (0, helper_1.eachTree)(self.rows, function (i) { if (self.expandedRows.includes(i.id)) { list.push(i); } }); return list; } }; }) .actions(function (self) { // 前态的option 防止每次init的时候少少字段 var preInitOption = {}; function update(config) { config.primaryField !== void 0 && (self.primaryField = config.primaryField); config.selectable !== void 0 && (self.selectable = config.selectable); config.columnsTogglable !== void 0 && (self.columnsTogglable = config.columnsTogglable); config.draggable !== void 0 && (self.draggable = config.draggable); config.hideCheckToggler !== void 0 && (self.hideCheckToggler = !!config.hideCheckToggler); if (typeof config.orderBy === 'string') { setOrderByInfo(config.orderBy, config.orderDir === 'desc' ? 'desc' : 'asc'); } config.orderColumns !== void 0 && (self.orderColumns = config.orderColumns); config.filterColumns !== void 0 && (self.filterColumns = config.filterColumns); config.multiple !== void 0 && (self.multiple = config.multiple); config.showIndex !== void 0 && (self.showIndex = config.showIndex); config.footable !== void 0 && (self.footable = config.footable); config.expandConfig !== void 0 && (self.expandConfig = config.expandConfig); config.itemCheckableOn !== void 0 && (self.itemCheckableOn = config.itemCheckableOn); config.itemDraggableOn !== void 0 && (self.itemDraggableOn = config.itemDraggableOn); config.hideCheckToggler !== void 0 && (self.hideCheckToggler = !!config.hideCheckToggler); config.combineNum !== void 0 && (self.combineNum = parseInt(config.combineNum, 10) || 0); config.combineFromIndex !== void 0 && (self.combineFromIndex = parseInt(config.combineFromIndex, 10) || 0); config.maxKeepItemSelectionLength !== void 0 && (self.maxKeepItemSelectionLength = config.maxKeepItemSelectionLength); config.keepItemSelectionOnPageChange !== void 0 && (self.keepItemSelectionOnPageChange = config.keepItemSelectionOnPageChange); // Aug config.mobileUI !== void 0 && (self.mobileUI = !!config.mobileUI); config.tableLayout && (self.tableLayout = config.tableLayout); config.columnsInfo !== void 0 && (self.columnsInfo = config.columnsInfo); if (config.columns && Array.isArray(config.columns)) { var columns = config.columns .filter(function (column) { return column; }) .concat(); if (!columns.length) { columns.push({ type: 'text', label: '空' }); } //Aug // columns['unshift']({ // type: '__expandme', // toggable: false, // fixed: 'left', // className: 'Table-expandCell', // label: self.mobileUI ? false : undefined, // }); if (config.showIndex) { columns.unshift({ type: '__pseudoColumn', toggable: false, // Jay fixed: 'left', className: 'Table-pseudoColumn' }); } columns.unshift({ type: '__checkme', // fixed: 'left', fixed: self.mobileUI ? (config.tableLayout == 'horizontal' ? 'left' : undefined) : 'left', toggable: false, className: 'Table-checkCell', label: self.mobileUI ? false : undefined, //Aug }); columns.unshift({ type: '__dragme', toggable: false, className: 'Table-dragCell' }); columns = columns.map(function (item, index) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { index: index, rawIndex: index - (config.showIndex ? 4 : 3), type: item.type || 'plain', pristine: item, toggled: item.toggled !== false, breakpoint: item.breakpoint, isPrimary: index === (config.showIndex ? 4 : 3), className: item.className || '' })); }); self.columns.replace(columns); } // Jay if (config.rawColumns && Array.isArray(config.rawColumns)) { var columns = config.rawColumns .filter(function (column) { return column; }) .concat(); if (!columns.length) { columns.push({ type: 'text', label: '空' }); } //Aug // columns['unshift']({ // type: '__expandme', // toggable: false, // fixed: 'left', // className: 'Table-expandCell', // label: self.mobileUI ? false : undefined, // }); if (config.showIndex) { columns.unshift({ type: '__pseudoColumn', toggable: false, // Jay fixed: 'left', className: 'Table-pseudoColumn' }); } columns.unshift({ type: '__checkme', // fixed: 'left', fixed: self.mobileUI ? (config.tableLayout == 'horizontal' ? 'left' : undefined) : 'left', toggable: false, className: 'Table-checkCell', label: self.mobileUI ? false : undefined, //Aug }); columns.unshift({ type: '__dragme', toggable: false, className: 'Table-dragCell' }); columns = columns.map(function (item, index) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { index: index, rawIndex: index - (config.showIndex ? 4 : 3), type: item.type || 'plain', pristine: item, toggled: item.toggled !== false, breakpoint: item.breakpoint, isPrimary: index === (config.showIndex ? 4 : 3), className: item.className || '' })); }); self.rawColumns.replace(columns); } } // 初始化 forced 是否强制更新 function initmodifiedMap(forced) { if (forced === void 0) { forced = false; } var modefiedMap = (0, lodash_1.cloneDeep)(self.modefiedMap); // 如果强制更新 或者 datasetid发生变化 即数据源发生变化 就进行初始化 if (forced || (self.data.dataSetId !== modefiedMap.dataSetId)) { if (self.data.dataSetId !== modefiedMap.dataSetId) modefiedMap.dataSetId = self.data.dataSetId; // 即数据源发生变化更新数据源id // 发现数据集更新了就进行修改数据的更新 modefiedMap.modifiedDataSet = {}; // 强制更新一下视图 } self.modefiedMap = modefiedMap; } function updateColumns(columns) { if (columns && Array.isArray(columns)) { columns = columns.filter(function (column) { return column; }).concat(); if (!columns.length) { columns.push({ type: 'text', label: '空' }); } // columns.unshift({ // type: '__expandme', // toggable: false, // // Jay // fixed: 'left', // className: 'Table-expandCell' // }); if (self.showIndex) { columns.unshift({ type: '__pseudoColumn', toggable: false, // Jay fixed: 'left', className: 'Table-pseudoColumn' }); } columns.unshift({ type: '__checkme', fixed: self.mobileUI ? (self.tableLayout == 'horizontal' ? 'left' : undefined) : 'left', toggable: false, className: 'Table-checkCell' }); columns.unshift({ type: '__dragme', toggable: false, // Jay fixed: 'left', className: 'Table-dragCell' }); columns = columns.map(function (item, index) { return ((0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), { index: index, rawIndex: index - (self.showIndex ? 4 : 3), type: item.type || 'plain', pristine: item.pristine || item, toggled: item.toggled !== false, breakpoint: item.breakpoint, isPrimary: index === (self.showIndex ? 4 : 3) })); }); self.columns.replace(columns); } } // 更新折叠操作列 function updateOperation(foldColumns) { var temp = self.columns.map(function (col) { var _a, _b; var item = col.pristine; var fold = foldColumns === null || foldColumns === void 0 ? void 0 : foldColumns.includes('scale' + item.name); if ((_a = self.textWidhMap) === null || _a === void 0 ? void 0 : _a.operation) { var textWidhMap = (0, lodash_1.cloneDeep)(self.textWidhMap); // 对应进行调整 textWidhMap.operation.textWidth = !fold ? (_b = textWidhMap.operation) === null || _b === void 0 ? void 0 : _b.foldTextWidth : textWidhMap === null || textWidhMap === void 0 ? void 0 : textWidhMap.operation.unfoldTextWidth; setTextWidth((0, tslib_1.__assign)({}, textWidhMap)); } if ((item === null || item === void 0 ? void 0 : item.type) === 'operation') { var props = { style: { overFlow: 'hidden' }, label: [ { type: 'button', label: '', size: 'xs', level: 'link', icon: fold ? 'fa fa-step-backward' : 'fa fa-step-forward', actionType: 'scale' + item.name }, item.label[1] ] }; return (0, tslib_1.__assign)((0, tslib_1.__assign)((0, tslib_1.__assign)({}, col), props), { pristine: (0, tslib_1.__assign)((0, tslib_1.__assign)({}, item), props) }); } return col; }); self.columns.replace(temp); } function combineCell(arr, keys) { if (!keys.length || !arr.length) { return arr; } var key = keys.shift(); var rowIndex = 0; var row = arr[rowIndex]; row.rowSpans[key] = 1; // 区间数组 var currentInterval = []; var value = (0, tpl_builtin_1.resolveVariable)(key, row.data); for (var i = 1, len = arr.length; i < len; i++) { var current = arr[i]; // 合并部分 if ((0, isEqual_1.default)((0, tpl_builtin_1.resolveVariable)(key, current.data), value)) { row.rowSpans[key] += 1; current.rowSpans[key] = 0; } else { if (row.rowSpans[key] > 1) { // 先行记录一次 combineCell(arr.slice(rowIndex, i), keys.concat()); } rowIndex = i; row = current; row.rowSpans[key] = 1; value = (0, tpl_builtin_1.resolveVariable)(key, row.data); } } // 区间对象 //走完数组 if (row.rowSpans[key] > 1 && keys.length) { combineCell(arr.slice(rowIndex, arr.length), keys.concat()); } return arr; } function combineColumnCell(arr, combinedColumns) { var _a, _b; for (var _i = 0, combinedColumns_1 = combinedColumns; _i < combinedColumns_1.length; _i++) { var _c = combinedColumns_1[_i], name = _c.name, combinedNull = _c.combinedNull; var i = 0; while (i < arr.length) { if (arr[i].rowSpans[name] !== 0) { arr[i].rowSpans[name] = 1; } var j = i + 1; while (j < arr.length && (0, isEqual_1.default)(combinedNull ? (0, tpl_builtin_1.resolveVariable)(name, arr[i].data) : (_a = (0, tpl_builtin_1.resolveVariable)(name, arr[i].data)) !== null && _a !== void 0 ? _a : Math.random(), combinedNull ? (0, tpl_builtin_1.resolveVariable)(name, arr[j].data) : (_b = (0, tpl_builtin_1.resolveVariable)(name, arr[j].data)) !== null && _b !== void 0 ? _b : Math.random())) { arr[i].rowSpans[name]++; arr[j].rowSpans[name] = 0; j++; } i = j; } } return arr; } function autoCombineCell(arr, columns, maxCount, fromIndex, combinedColumns) { if (fromIndex === void 0) { fromIndex = 0; } if (combinedColumns.length == 0) { if (!columns.length || !maxCount || !arr.length) { return arr; } } // 如果是嵌套模式,通常第一列都是存在差异的,所以从第二列开始。 fromIndex = fromIndex || (arr.some(function (item) { return Array.isArray(item.children) && item.children.length; }) ? 1 : 0); var keys = []; var len = columns.length; for (var i = 0; i < len; i++) { var column = columns[i]; // maxCount 可能比实际配置的 columns 还有多。 if (!column) { break; } // if ('__' === column.type.substring(0, 2)) { // maxCount++; // continue; // } var key = column.name; if (!key) { break; } keys.push(key); } while (fromIndex--) { keys.shift(); } while (keys.length > maxCount) { keys.pop(); } var rows = combineCell(arr, keys); if (combinedColumns.length > 0) { return combineColumnCell(rows, combinedColumns); } return rows; } function initChildren(children, depth, pindex, parentId, path) { if (path === void 0) { path = ''; } depth += 1; return children.map(function (item, index) { item = (0, helper_1.isObject)(item) ? item : { item: item }; var id = (0, helper_1.guid)(); return { // id: String(item && (item as any)[self.primaryField] || `${pindex}-${depth}-${key}`), id: id, parentId: parentId, key: String(pindex + "-" + depth + "-" + index), path: "" + path + index, depth: depth, index: index, newIndex: index, pristine: item, data: item, rowSpans: {}, children: item && Array.isArray(item.children) ? initChildren(item.children, depth, index, id, "" + path + index + ".") : [], expandable: !!((item && Array.isArray(item.children) && item.children.length) || (self.footable && self.footableColumns.length)) }; }); } function setTextWidth(textWidhMap) { self.textWidhMap = textWidhMap; } function initRows(rows, getEntryId, reUseRow, option) { if (option) { preInitOption = option; } var _option = option || preInitOption; var arr = []; // 更新了数据源也进行重新计算 if ((_option === null || _option === void 0 ? void 0 : _option.caculateWidth) === false && !(0, helper_1.isMobile)()) { setTextWidth({}); } for (var index in rows) { var item = rows[index]; var id = getEntryId ? getEntryId(item, +index) : (0, helper_1.guid)(); arr.push({ // id: getEntryId ? getEntryId(item, key) : String(item && (item as any)[self.primaryField] || `${key}-1-${key}`), id: id, key: String(index + "-1-" + index), depth: 1, index: +index, newIndex: +index, pristine: item, path: "" + index, data: item, checked: selectedIds.includes(item[crud_1.DATAKEYID]), rowSpans: {}, children: item && Array.isArray(item.children) ? initChildren(item.children, 1, +index, id, index + ".") : [], expandable: !!((item && Array.isArray(item.children) && item.children.length) || (self.footable && self.footableColumns.length)) }); } var combinedColumns = self.filteredColumns.filter(function (item) { return item.combined; }).map(function (item) { return ({ name: item.name, combinedNull: item.combinedNull }); }); if (self.combineNum || combinedColumns.length) { arr = autoCombineCell(arr, self.filteredColumns.filter(function (item) { return item.name; }), self.combineNum, self.combineFromIndex, combinedColumns); var rowSpanIndexsInterval_1 = {}; // 遍历计算-rowspan区间 arr.map(function (_) { Object.keys(_.rowSpans).map(function (key) { // 如果有rowSpan if (_.rowSpans[key]) { rowSpanIndexsInterval_1[key] = rowSpanIndexsInterval_1[key] || [0]; rowSpanIndexsInterval_1[key].push(_.rowSpans[key] + ((0, lodash_1.last)(rowSpanIndexsInterval_1[key]) || 0)); } }); }); self.rowSpanIndexsInterval = (0, tslib_1.__assign)({}, rowSpanIndexsInterval_1); } // 有更新数据才走这里 if (self.modifiedRows.length) // 合并修改信息到新数组 for (var _i = 0, arr_1 = arr; _i < arr_1.length; _i++) { var item = arr_1[_i]; var dataId = item.data[crud_1.DATAKEYID]; var modifiedData = !!dataId && self.modefiedMap.modifiedDataSet[dataId]; if (modifiedData) { item.data = (0, tslib_1.__assign)({}, modifiedData); } } replaceRow(arr, reUseRow); self.isNested = self.rows.some(function (item) { return item.children.length; }); var expand = self.footable && self.footable.expand; if (expand === 'first' || (self.expandConfig && self.expandConfig.expand === 'first')) { self.rows.length && self.expandedRows.push(self.rows[0].id); } else if ((expand === 'all' && !self.footable.accordion) || (self.expandConfig && self.expandConfig.expand === 'all' && !self.expandConfig.accordion)) { self.expandedRows.replace(self.rows.map(function (item) { return item.id; })); } // 如果有 autoUnfold 字段 if (!(0, lodash_1.isNil)(_option === null || _option === void 0 ? void 0 : _option.autoUnfold)) { self.expandedRows.replace(getToggleExpandLevelIds((_option === null || _option === void 0 ? void 0 : _option.autoUnfold) || 0)); } // 获取展开后总长度 self.tableExpandLength = getToggleExpandLevelIds(Infinity).length; // console.log(self, option?.autoUnfold, getToggleExpandLevelIds(option?.autoUnfold || 0), self.rows) self.dragging = false; } // 尽可能的复用 row function replaceRow(arr, reUseRow) { if (reUseRow === false) { self.rows.replace(arr.map(function (item) { return exports.Row.create(item); })); return; } var pool = arr.concat(); // 把多的删了先 if (self.rows.length > arr.length) { self.rows.splice(arr.length, self.rows.length - arr.length); } var index = 0; var len = self.rows.length; while (pool.length) { var item = pool.shift(); if (index < len) { self.rows[index].replaceWith(item); } else { var row = exports.Row.create(item); self.rows.push(row); } index++; } } function updateSelected(selected, valueField) { clearSelectItem(); self.rows.forEach(function (item) { if (~selected.indexOf(item.pristine)) { item.setCheckded(true); selectedIds.push(item.data[crud_1.DATAKEYID]); } else if ((0, find_1.default)(selected, function (a) { return a[valueField || 'value'] && a[valueField || 'value'] == item.pristine[valueField || 'value']; })) { item.setCheckded(true); selectedIds.push(item.data[crud_1.DATAKEYID]); } }); updateCheckDisable(); } function toggleAll() { var _a; var maxLength = self.maxKeepItemSelectionLength; var keep = self.keepItemSelectionOnPageChange; if (self.allChecked) { clearSelectItem(); } else { var selectedItems_1 = (_a = self.data) === null || _a === void 0 ? void 0 : _a.selectedItems; if (keep && maxLength && selectedItems_1 && maxLength >= selectedItems_1.length) { // 剩下的没有被选中的项 var restCheckableRows = self.checkableRows.filter(function (item) { return !item.checked; }); // 没被选中的项中,下标小于最大允许选中项数量 var checkableRows_1 = restCheckableRows.filter(function (item, i) { return i < maxLength - selectedItems_1.length; }); self.checkableRows.map(function (item, index) { // 如果存在可以选中的项 if (checkableRows_1[index]) { item.setCheckded(true); selectedIds.push(item.data[crud_1.DATAKEYID]); } }); // self.selectedRows.replace([...self.selectedRows, ...checkableRows]); } else { // 全选可选中的项 self.checkableRows.map(function (item) { item.setCheckded(true); selectedIds.push(item.data[crud_1.DATAKEYID]); }); } } } // 全部反选 function checkReverse() { self.rows.forEach(function (item) { if (item.checkable) { if (item.checked) { var idx = selectedIds.indexOf(item.data[crud_1.DATAKEYID]); selectedIds.splice(idx, 1); } else { selectedIds.push(item.data[crud_1.DATAKEYID]); } item.setCheckded(!item.checked); } }); } function checkAll() { var _a; if (!self.allChecked) { var maxLength_1 = self.maxKeepItemSelectionLength; var keep = self.keepItemSelectionOnPageChange; var selectedItems_2 = (_a = self.data) === null || _a === void 0 ? void 0 : _a.selectedItems; if (keep && maxLength_1 && selectedItems_2 && maxLength_1 >= selectedItems_2.length) { // 剩下的没有被选中的项 var restCheckableRows = self.checkableRows.filter(function (item) { return !item.checked; }); // 没被选中的项中,下标小于最大允许选中项数量 var checkableRows_2 = restCheckableRows.filter(function (item, i) { return i < maxLength_1 - selectedItems_2.length; }); //可选中的,下标小于最大允许选中项数量未选中全选 self.checkableRows.map(function (item, index) { // 如果存在可以选中的项 if (checkableRows_2[index]) { item.setCheckded(true); selectedIds.push(item.data[crud_1.DATAKEYID]); } }); } else { // 可选中的全选 self.checkableRows.map(function (item) { item.setCheckded(true); selectedIds.push(item.data[crud_1.DATAKEYID]); }); } } } function dealHeaderValue() { return self.columnsData.map(function (column) { var _a; if (!((_a = column.pristine) === null || _a === void 0 ? void 0 : _a.hidden) && column.type != 'operation') { var label = (0, commonTableFunction_1.getColumnShowLabel)(column); return label.replaceAll('\n', '').replaceAll('\r', ''); } return undefined; }).filter(Boolean).join('\t'); } function dealCellValue(originValue, columnName, clearFormat, originColumn, isCopyCell) { if (clearFormat === void 0) { clearFormat = false; } var column = originColumn || self.columnsData.find(function (column) { return column.name === columnName; }); return (0, commonTableFunction_1.getCellValue)(originValue, column, clearFormat, isCopyCell); } function getCopyCellValue(rowIndex, columnName, clearFormat) { if (clearFormat === void 0) { clearFormat = false; } var items = self.rows.map(function (row) { return row.data; }); var value = items[rowIndex][columnName]; return dealCellValue(value, columnName, clearFormat, undefined, true); } function getCopy