fastlion-amis
Version:
一种MIS页面生成工具
1,177 lines • 69.2 kB
JavaScript
"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