fastlion-amis
Version:
一种MIS页面生成工具
680 lines • 79.1 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CrudBody = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importStar(require("react"));
var helper_1 = require("../../../utils/helper");
var utils_1 = require("../utils");
var antd_1 = require("antd");
var __1 = require("../../..");
var Button_1 = tslib_1.__importDefault(require("../../../components/Button"));
var icons_1 = require("../../../components/icons");
var LionCopyItem_1 = tslib_1.__importDefault(require("../../Lion/components/LionCopyItem"));
var lodash_1 = require("lodash");
var storage_1 = require("../../../utils/storage");
var Table_1 = require("../../Table");
var filter_schema_1 = tslib_1.__importDefault(require("../../../utils/filter-schema"));
var types_1 = require("../types");
var OverflowWrapper_1 = tslib_1.__importDefault(require("../../../components/OverflowWrapper"));
var AiTool_1 = tslib_1.__importDefault(require("../../Table/AiTool"));
var LodopFuncs_1 = require("../../../utils/print/LodopFuncs");
var tools_1 = require("../../../utils/shell/tools");
var utils_2 = require("../../Lion/utils/utils");
var api_1 = require("../../../utils/api");
var ExpressPrint_1 = require("../../Lion/ExpressPrint/ExpressPrint");
var BatchOperation_1 = require("../../../components/Lion/BatchOperation");
var crud_1 = require("../../../store/crud");
// 渲染具体工具按钮的方法-容器方法在外部调用
var ToolButton = function (_a) {
var props = _a.props, reload = _a.reload, toolbar = _a.toolbar, _b = _a.index, index = _b === void 0 ? 0 : _b, _c = _a.childProps, childProps = _c === void 0 ? {} : _c, toolbarRenderer = _a.toolbarRenderer, renderToolbar = _a.renderToolbar, getTableStore = _a.getTableStore, filtercont = _a.filtercont, tableStore = _a.tableStore, handleQuery = _a.handleQuery, handleAction = _a.handleAction, tableInstance = _a.tableInstance, setCrudState = _a.setCrudState, advanceFilterForm = _a.advanceFilterForm, search = _a.search, afterSearchFn = _a.afterSearchFn, control = _a.control, modes = _a.modes, quickEditDataCheck = _a.quickEditDataCheck, crudRef = _a.crudRef, handleFakeAnimation = _a.handleFakeAnimation, setModes = _a.setModes, setAutoWidth = _a.setAutoWidth, bulkActionRender = _a.bulkActionRender, renderMoreToolbar = _a.renderMoreToolbar, originFilterData = _a.originFilterData, setTotal = _a.setTotal, showColumnsFilter = _a.showColumnsFilter, autoWidth = _a.autoWidth;
var render = props.render, name = props.name, store = props.store, __ = props.translate, card = props.card, listItem = props.listItem, cross = props.cross, header = props.header, filter = props.filter, cx = props.classnames, primaryField = props.primaryField, mode = props.mode, headerBulkActions = props.headerBulkActions, footerBulkActions = props.footerBulkActions, headerToolbar = props.headerToolbar, headerActions = props.headerActions, inModal = props.inModal;
var _d = (0, react_1.useState)(false), toolActionSwitch = _d[0], setToolActionSwitch = _d[1]; //工具栏按钮开关按钮
var pageSwitchRef = (0, react_1.useRef)(null);
var type = toolbar.type || toolbar;
var toolBarAction = function () { reload(); };
var inSmallDialog = function () {
var _a, _b;
return !!((_b = (_a = crudRef === null || crudRef === void 0 ? void 0 : crudRef.current) === null || _a === void 0 ? void 0 : _a.closest('div[role="dialog"]')) === null || _b === void 0 ? void 0 : _b.className.includes('Modal--sm'));
};
var handleItemAction = function (action, ctx) {
handleAction(undefined, action, ctx, false);
};
var handleChangePage = function (page, perPage) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var syncLocation, env, pageField, perPageField, autoJumpToTopOnPagerChange, affixOffsetTop, loadDataOnce, query, queryParams, advanced, filter_1, scrolledY, offsetTop;
var _a;
var _b;
return tslib_1.__generator(this, function (_c) {
switch (_c.label) {
case 0:
syncLocation = props.syncLocation, env = props.env, pageField = props.pageField, perPageField = props.perPageField, autoJumpToTopOnPagerChange = props.autoJumpToTopOnPagerChange, affixOffsetTop = props.affixOffsetTop, loadDataOnce = props.loadDataOnce;
query = (_a = {},
_a[pageField || 'page'] = page,
_a);
if (!!loadDataOnce) return [3 /*break*/, 2];
return [4 /*yield*/, quickEditDataCheck()];
case 1:
_c.sent();
_c.label = 2;
case 2:
if (perPage) {
query[perPageField || 'perPage'] = perPage;
}
store.updateQuery(query, syncLocation && (env === null || env === void 0 ? void 0 : env.updateLocation) ? env.updateLocation : undefined, pageField, perPageField);
if (advanceFilterForm === null || advanceFilterForm === void 0 ? void 0 : advanceFilterForm.confirmAdvancedFilter()) {
advanced = advanceFilterForm === null || advanceFilterForm === void 0 ? void 0 : advanceFilterForm.confirmAdvancedFilter();
filter_1 = (advanced === null || advanced === void 0 ? void 0 : advanced.advancedFilter.length) || (advanced === null || advanced === void 0 ? void 0 : advanced.advancedFilterSub.length) || Object.keys(advanced === null || advanced === void 0 ? void 0 : advanced.advancedHeader).length;
if (filter_1) {
queryParams = advanceFilterForm === null || advanceFilterForm === void 0 ? void 0 : advanceFilterForm.confirmAdvancedFilter();
}
}
if (Object.keys(filtercont).length) {
queryParams = filtercont;
}
search(undefined, undefined, undefined, false, afterSearchFn, undefined, undefined, queryParams);
if (autoJumpToTopOnPagerChange && control) {
control === null || control === void 0 ? void 0 : control.scrollIntoView();
scrolledY = window.scrollY;
offsetTop = (_b = affixOffsetTop !== null && affixOffsetTop !== void 0 ? affixOffsetTop : env === null || env === void 0 ? void 0 : env.affixOffsetTop) !== null && _b !== void 0 ? _b : 0;
scrolledY && window.scroll(0, scrolledY - offsetTop);
}
return [2 /*return*/];
}
});
}); };
var renderType = function (schema) {
var _a, _b;
var ctx = props.ctx, cx = props.classnames, ns = props.classPrefix, __ = props.translate, card = props.card, listItem = props.listItem, cross = props.cross, env = props.env;
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement(LionCopyItem_1.default, { showItems: [{
value: (_b = (_a = schema.name) !== null && _a !== void 0 ? _a : schema.labelId) !== null && _b !== void 0 ? _b : "",
label: __('Alert.copyName'),
icon: "fa fa-sticky-note-o"
}], env: env },
react_1.default.createElement(antd_1.Popover, { placement: "bottomLeft", overlayClassName: cx('Tool-action'), getPopupContainer: env.getModalContainer, trigger: ['hover'], content: function () {
if (!(listItem || card || cross))
return react_1.default.createElement(react_1.default.Fragment, null);
return react_1.default.createElement("div", { className: 'crud-mode-exchange' },
react_1.default.createElement(Button_1.default, { disabled: modes == 'table' || modes == undefined, classPrefix: ns, onClick: function () {
setModes('table');
handleFakeAnimation();
}, size: "sm" },
react_1.default.createElement(icons_1.Icon, { icon: '#icon-tooltool_table', className: "icon", symbol: true }),
"\u8868\u683C"),
listItem && react_1.default.createElement(Button_1.default, { disabled: modes == 'list', classPrefix: ns, onClick: function () {
getTableStore(null);
setModes('list');
handleFakeAnimation();
}, size: "sm" },
react_1.default.createElement(icons_1.Icon, { icon: '#icon-tooltool_list', className: "icon", symbol: true }),
"\u5217\u8868"),
card && react_1.default.createElement(Button_1.default, { disabled: modes == 'cards', classPrefix: ns, onClick: function () {
getTableStore(null);
setModes('cards');
handleFakeAnimation();
}, size: "sm" },
react_1.default.createElement(icons_1.Icon, { icon: '#icon-toolqiapianxingshi', className: "icon", symbol: true }),
"\u5361\u7247"),
cross && react_1.default.createElement(Button_1.default, { disabled: modes == 'cross', classPrefix: ns, onClick: function () {
setModes('cross');
handleFakeAnimation();
}, size: "sm" },
react_1.default.createElement(icons_1.Icon, { icon: '#icon-tooltool_table', className: "icon", symbol: true }),
"\u4EA4\u53C9"));
} },
react_1.default.createElement(Button_1.default, { disabled: schema.disabled || (0, __1.evalExpression)(schema.disabledOn, ctx), classPrefix: ns,
// onClick={this.debounceChangeMode}
size: "sm" },
(schema === null || schema === void 0 ? void 0 : schema.icon) ?
react_1.default.createElement(icons_1.Icon, { icon: schema === null || schema === void 0 ? void 0 : schema.icon, className: "icon", symbol: true }) :
react_1.default.createElement(icons_1.Icon, { style: { width: '14px', height: '15px', fill: autoWidth ? '#005bff' : '#000', stroke: '#005bff' }, icon: "auto-width", className: "icon" }),
(schema === null || schema === void 0 ? void 0 : schema.label) && (schema === null || schema === void 0 ? void 0 : schema.label))))));
};
var renderAutoWidth = function (toolbar) {
var env = props.env;
return (react_1.default.createElement(Button_1.default, { tooltip: autoWidth ? '宽松列宽' : '紧凑列宽', size: "sm", iconOnly: true, butColor: autoWidth, tooltipContainer: (env === null || env === void 0 ? void 0 : env.getTopModalContainer) || undefined, onClick: function () {
var autoWidthPage = (0, storage_1.getLocalStorage)('autoWidthPage') || {};
autoWidthPage[name || ''] = !autoWidth;
(0, storage_1.setLocalStorage)('autoWidthPage', autoWidthPage);
setAutoWidth(!autoWidth);
var localEditWidthMap = (0, storage_1.getLocalStorage)(Table_1.EDITWIDTHKEY) || {};
localEditWidthMap === null || localEditWidthMap === void 0 ? true : delete localEditWidthMap[name || ''];
(0, storage_1.setLocalStorage)(Table_1.EDITWIDTHKEY, localEditWidthMap);
} },
(toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon) ?
react_1.default.createElement(icons_1.Icon, { icon: toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon, className: "icon", symbol: true }) :
react_1.default.createElement(icons_1.Icon, { style: { width: '14px', height: '15px', fill: autoWidth ? '#005bff' : '#000', stroke: '#005bff' }, icon: "auto-width", className: "icon" }),
(toolbar === null || toolbar === void 0 ? void 0 : toolbar.label) && (toolbar === null || toolbar === void 0 ? void 0 : toolbar.label)));
};
var renderPrint = function (schema, isFilePrint) {
var _a, _b;
var store = props.store, ns = props.classPrefix, env = props.env;
var selectedItems = (0, utils_1.getTableSelectedRowsData)(store, tableStore);
var ids = selectedItems
.map(function (item) {
return item.hasOwnProperty(primaryField) ? item[primaryField] : null;
})
.filter(function (item) { return item; })
.join(',');
var ctx = (0, helper_1.createObject)(store.mergedData, tslib_1.__assign(tslib_1.__assign({}, selectedItems[0]), { items: (0, utils_1.getTableRowsData)(store, tableStore), // 选中行数据
selectedItems: selectedItems, // 选中行数据
ids: ids, primaryField: primaryField }));
return (react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement(LionCopyItem_1.default, { showItems: [{
value: (_b = (_a = schema.name) !== null && _a !== void 0 ? _a : schema.labelId) !== null && _b !== void 0 ? _b : "",
label: __('Alert.copyName'),
icon: "fa fa-sticky-note-o"
}], env: env },
react_1.default.createElement(Button_1.default, { disabled: schema.disabled || (0, __1.evalExpression)(schema.disabledOn, ctx), classPrefix: ns, onClick: function () {
var LODOP = (0, LodopFuncs_1.getLodop)();
if (LODOP) {
setCrudState({
ModalProps: tslib_1.__assign(tslib_1.__assign({}, schema), { show: true, ctx: ctx }),
printType: isFilePrint
? 'file'
: schema.actionType === 'label-print'
? 'label'
: 'bill'
});
}
}, size: "sm" }, __(schema.label
? schema.label
: !isFilePrint
? 'CRUD.labelPrint'
: 'CRUD.filePrint')))));
};
var renderColumnsFilterBtn = function (toolbar) {
var env = props.env, loadDataOnce = props.loadDataOnce;
return (react_1.default.createElement(Button_1.default, { tooltip: '列过滤', size: "sm", iconOnly: true, butColor: showColumnsFilter, tooltipContainer: (env === null || env === void 0 ? void 0 : env.getTopModalContainer) || undefined, onClick: function () {
if (showColumnsFilter) {
setCrudState({ filterDrawerVisible: true });
}
else {
var value = localStorage.getItem(name !== null && name !== void 0 ? name : '');
if (value) {
var obj_1 = JSON.parse(value);
Object.keys(obj_1).forEach(function (key) { return tableStore === null || tableStore === void 0 ? void 0 : tableStore.filterColumns.set(key, obj_1[key]); });
}
if (showColumnsFilter) {
setCrudState({ filterDrawerVisible: true });
}
else {
var items = tableStore === null || tableStore === void 0 ? void 0 : tableStore.handleMutilSort(loadDataOnce);
if (loadDataOnce && Array.isArray(items))
setTotal(items.length);
setCrudState({ showColumnsFilter: !showColumnsFilter });
}
}
} },
(toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon) ?
react_1.default.createElement(icons_1.Icon, { icon: toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon, className: "icon", symbol: true }) :
react_1.default.createElement(icons_1.Icon, { icon: "packet-filtery", className: "icon" }),
(toolbar === null || toolbar === void 0 ? void 0 : toolbar.label) && (toolbar === null || toolbar === void 0 ? void 0 : toolbar.label)));
};
var renderPagination = function (toolbar) {
var store = props.store, render = props.render, cx = props.classnames, alwaysShowPagination = props.alwaysShowPagination;
var page = store.page, lastPage = store.lastPage;
if (store.mode !== 'simple' &&
store.lastPage < 2 &&
!alwaysShowPagination) {
return react_1.default.createElement(react_1.default.Fragment, null);
}
var extraProps = {};
if (typeof toolbar !== 'string') {
extraProps.showPageInput = toolbar.showPageInput;
extraProps.maxButtons = toolbar.maxButtons;
}
return (react_1.default.createElement("div", { className: cx('Crud-pager') }, render('pagination', {
type: 'pagination'
}, tslib_1.__assign(tslib_1.__assign({}, extraProps), { inSmallDialog: inSmallDialog(), activePage: page, lastPage: lastPage, hasNext: store.hasNext, mode: store.mode, onPageChange: handleChangePage }))));
};
var renderAiTool = function (action) {
var api = props.api, env = props.env;
var newData = (0, helper_1.createObject)(store.filterData, store.query, {}, true);
var _a = store.getRawCacheData().curApiForCache, curApiForCache = _a === void 0 ? '' : _a;
return (react_1.default.createElement(AiTool_1.default, { pageId: name !== null && name !== void 0 ? name : '', env: tslib_1.__assign(tslib_1.__assign({}, env), { container: crudRef === null || crudRef === void 0 ? void 0 : crudRef.current }), action: action, data: newData, paramData: curApiForCache || (api === null || api === void 0 ? void 0 : api.url), render: render }));
};
var renderStatistics = function () {
var _a, _b;
return (react_1.default.createElement("div", { className: cx('Crud-statistics') }, mode == 'cross' ?
__('CRUD.total', { total: mode == 'cross' ? (_a = tableStore === null || tableStore === void 0 ? void 0 : tableStore.rows) === null || _a === void 0 ? void 0 : _a.length : (_b = store.data) === null || _b === void 0 ? void 0 : _b.total }) :
__('CRUD.stat', { total: store.total })));
};
var renderSwitchPerPage = function (childProps) {
var _a;
var perPageAvailable = props.perPageAvailable;
var perPages = (perPageAvailable || [5, 10, 20, 50, 100]).map(function (item) { return ({
// Jay 修改分页器样式
label: item + (inSmallDialog() ? '' : " ".concat(__('CRUD.countPage'))),
value: item
}); });
return (react_1.default.createElement("div", { className: cx('Crud-pageSwitch'), ref: pageSwitchRef },
react_1.default.createElement(antd_1.Select, { options: perPages, placeholder: __('Select.placeholder'), defaultValue: ((_a = perPages[0]) === null || _a === void 0 ? void 0 : _a.value) || '', onChange: function (value) {
handleChangePage(1, value);
}, getPopupContainer: function () { return pageSwitchRef.current; } })));
};
var renderLoadMore = function (toolbar) {
var ns = props.classPrefix;
var page = store.page, lastPage = store.lastPage;
return page < lastPage ? (react_1.default.createElement("div", { className: cx('Crud-loadMore') },
react_1.default.createElement(Button_1.default, { classPrefix: ns, onClick: function () {
return search({ page: page + 1, loadDataMode: 'load-more' });
}, size: "sm" },
(toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon) &&
react_1.default.createElement(icons_1.Icon, { icon: toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon, className: "icon", symbol: true }),
(toolbar === null || toolbar === void 0 ? void 0 : toolbar.label) ? toolbar === null || toolbar === void 0 ? void 0 : toolbar.label : __('CRUD.loadMore')))) : (react_1.default.createElement(react_1.default.Fragment, null));
};
var renderFilterToggler = function () {
if (!store.filterTogggable) {
return react_1.default.createElement(react_1.default.Fragment, null);
}
return (react_1.default.createElement("button", { onClick: function () { return store.setFilterVisible(!store.filterVisible); }, className: cx('Button Button--sm Button--default', {
'is-active': store.filterVisible
}) },
react_1.default.createElement(icons_1.Icon, { icon: "filter", className: "icon m-r-xs" }),
__('CRUD.filter')));
};
var renderExportCSV = function (toolbar) {
var ns = props.classPrefix, loadDataOnce = props.loadDataOnce;
var api = toolbar.api;
return (react_1.default.createElement(Button_1.default, { classPrefix: ns, onClick: function () {
return store.exportAsCSV({
loadDataOnce: loadDataOnce,
api: api
});
}, size: "sm" }, toolbar.label || __('CRUD.exportCSV')));
};
var renderExport = function (toolbar) {
var _a, _b;
var ns = props.classPrefix, env = props.env;
var ctx = (0, helper_1.createObject)({}, {
items: (0, utils_1.getTableRowsData)(store, tableStore),
selectedItems: (0, utils_1.getTableSelectedRowsData)(store, tableStore),
unSelectedItems: store.unSelectedItems.concat()
});
return (react_1.default.createElement(LionCopyItem_1.default, { showItems: [{
value: (_b = (_a = toolbar.name) !== null && _a !== void 0 ? _a : toolbar.labelId) !== null && _b !== void 0 ? _b : "",
label: __('Alert.copyName'),
icon: "fa fa-sticky-note-o"
}], env: env },
react_1.default.createElement("div", { style: { position: 'relative' }, className: 'exportExcel' },
react_1.default.createElement(Button_1.default, { classPrefix: ns, onClick: function (e) { handleAction(e, toolbar, ctx); }, size: "sm" },
(toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon) && react_1.default.createElement(icons_1.Icon, { icon: toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon, className: "icon", symbol: true }),
toolbar.label || __('CRUD.exportExcel')),
toolbar.redDot === true && react_1.default.createElement("div", { style: { position: 'absolute', display: 'inline-block', right: 0, top: 0, background: 'red', width: 6, height: 6, borderRadius: 4 } }))));
};
var renderReload = function (toolbar, index) {
if (toolbar.isToolBar && (0, helper_1.isMobile)()) {
return (react_1.default.createElement("div", { className: 'toolbar-item', onClick: toolBarAction },
react_1.default.createElement("div", { className: 'toolbar-item-icon' },
react_1.default.createElement(icons_1.Icon, { icon: toolbar.icon })),
react_1.default.createElement("div", { className: 'toolbar-item-name' }, __('reload'))));
}
else {
var reloadButton = {
label: '',
icon: toolbar.icon,
tooltip: __('reload'),
tooltipPlacement: 'top',
type: 'button'
};
if (typeof toolbar === 'object') {
reloadButton = tslib_1.__assign(tslib_1.__assign({}, reloadButton), (0, lodash_1.omit)(toolbar, ['type', 'align']));
}
return render("toolbar/".concat(index), reloadButton, {
onAction: toolBarAction
});
}
};
var renderBulkActions = function (childProps, bulkActions) {
var itemActions = props.itemActions, store = props.store, render = props.render, cx = props.classnames, useMobileUI = props.useMobileUI, primaryField = props.primaryField, inModal = props.inModal;
var items = childProps.items;
if (!items.length ||
((!bulkActions || !bulkActions.length) &&
(!itemActions || !itemActions.length))) {
return null;
}
var selectedItems = (0, utils_1.getTableSelectedRowsData)(store, tableStore);
var bulkBtns = [];
var itemBtns = [];
var ctx = store.mergedData;
if (bulkActions &&
bulkActions.length &&
(!itemActions || !itemActions.length || selectedItems.length > 1)) {
bulkBtns = bulkActions
.filter(function (toolbar) {
return (0, helper_1.isVisible)(toolbar, inModal ? originFilterData : store.filterData);
})
.map(function (item) { return (tslib_1.__assign(tslib_1.__assign({}, item), (0, filter_schema_1.default)(item, ctx))); })
.filter(function (item) { return (item === null || item === void 0 ? void 0 : item.visible) !== false; });
}
var itemData = (0, helper_1.createObject)(store.data, selectedItems.length ? selectedItems[0] : {});
if (itemActions && selectedItems.length <= 1) {
itemBtns = itemActions
.map(function (item) { return (tslib_1.__assign(tslib_1.__assign({}, item), (0, filter_schema_1.default)(item, itemData))); })
.filter(function (item) { return (item === null || item === void 0 ? void 0 : item.visible) !== false; });
}
var ids = selectedItems
.map(function (item) {
return item.hasOwnProperty(primaryField) ? item[primaryField] : null;
})
.filter(function (item) { return item; })
.join(',');
// Aug
var renderBulk = bulkBtns.length
? bulkBtns.map(function (btn, index) { return bulkActionRender(btn, index); }) : [];
var renderItem = itemBtns.length
? itemBtns.map(function (btn, index) {
return render("bulk-action/".concat(index), tslib_1.__assign(tslib_1.__assign({}, (0, lodash_1.omit)(btn, ['visibleOn', 'hiddenOn', 'disabledOn'])), { type: types_1.specialButtonType.includes(btn.type) ? btn.type : 'button' }), {
key: "item-".concat(index),
data: itemData,
disabled: btn.disabled || selectedItems.length !== 1,
onAction: handleItemAction
});
})
: [];
var children = tslib_1.__spreadArray(tslib_1.__spreadArray([], renderBulk, true), renderItem, true);
if (useMobileUI && (0, helper_1.isMobile)() && children.length > 3) {
var more = children.splice(2);
children.splice(0, 0, renderMoreToolbar(more));
}
return (react_1.default.createElement("div", { className: cx('Crud-actions', 'Crud-bulkActions') }, children));
};
var renderToolAction = function (toolbar, index, childProps, toolbarRenderer) {
var _a, _b;
if (index === void 0) { index = 0; }
if (childProps === void 0) { childProps = {}; }
var cx = props.classnames, __ = props.translate, env = props.env;
return react_1.default.createElement(antd_1.Popover, { placement: "bottomLeft", overlayClassName: cx('Tool-action'), getPopupContainer: env.getModalContainer, onVisibleChange: function (visible) { return setToolActionSwitch(visible); }, trigger: (0, helper_1.isMobile)() ? 'click' : 'hover', visible: toolActionSwitch, overlay: true, content: react_1.default.createElement(react_1.default.Fragment, null,
react_1.default.createElement("div", { className: cx('Tool-action-body'), onClick: function (e) { return setToolActionSwitch(false); } }, toolbar.toolBarItems.map(function (toolbar, index) { return renderToolbar(toolbar, index, childProps, toolbarRenderer); }))) },
react_1.default.createElement(Button_1.default, null,
react_1.default.createElement(icons_1.Icon, { icon: "".concat((_a = toolbar === null || toolbar === void 0 ? void 0 : toolbar.icon) !== null && _a !== void 0 ? _a : "#icon-tooltool_process--"), className: "icon", symbol: true }), (_b = ((toolbar === null || toolbar === void 0 ? void 0 : toolbar.label) && (toolbar === null || toolbar === void 0 ? void 0 : toolbar.label))) !== null && _b !== void 0 ? _b : __('Table.tools')));
};
switch (type) {
case 'headerBulkActions':
return renderBulkActions(childProps, (0, helper_1.isMobile)() ? (0, utils_1.unitBulkActions)({
headerActions: headerActions,
headerToolbar: headerToolbar,
headerBulkActions: headerBulkActions
}) : headerBulkActions);
case 'footerBulkActions':
return renderBulkActions(childProps, footerBulkActions);
//以下的都是只有表格才有的
case 'tool-bar-action':
return renderToolAction(toolbar, index, childProps, toolbarRenderer);
case 'data-statics':
case 'data-cross':
case 'columns-filter':
case 'find-replace':
case 'data-chart':
// 统计模式卡片列表中移除-这个给表格模式预留的
if (modes == 'cards' || modes == 'list') {
return react_1.default.createElement(react_1.default.Fragment, null);
}
else if (type === 'columns-filter') {
return renderColumnsFilterBtn(toolbar);
}
break;
case "detail-model":
return react_1.default.createElement(react_1.default.Fragment, null);
case 'pagination':
return renderPagination(toolbar);
case 'ai-tool':
return renderAiTool(toolbar);
case 'statistics':
return renderStatistics();
case 'switch-per-page':
return renderSwitchPerPage(childProps);
case 'load-more':
return renderLoadMore(toolbar);
case 'filter-toggler':
return renderFilterToggler();
case 'auto-width':
return renderAutoWidth(toolbar);
case 'export-csv':
return renderExportCSV(toolbar);
case 'reload':
return renderReload(toolbar, index);
case 'label-print':
case 'bill-print':
case 'file-print':
return renderPrint(toolbar);
case 'columns-toggler':
if (modes == 'cards' || modes == 'list') {
return react_1.default.createElement(react_1.default.Fragment, null);
}
else
break;
case 'export':
return renderExport(toolbar);
case 'type-conversion':
if ((!card && !listItem && !cross) || (0, helper_1.isMobile)()) {
return react_1.default.createElement(react_1.default.Fragment, null);
}
return renderType(toolbar);
}
// 这个是用于渲染子组件的方法-意思是如果子组件有注册实现的话就用子组件的渲染方法
// 后期看看这个能不能优化到同一处理
var childToolBottunResult = toolbarRenderer === null || toolbarRenderer === void 0 ? void 0 : toolbarRenderer(toolbar, index);
if (childToolBottunResult) {
return childToolBottunResult || react_1.default.createElement(react_1.default.Fragment, null);
}
// 以下是通用方法的渲染
var $$editable = childProps.$$editable;
return render("toolbar/".concat(index), toolbar, {
// 包两层,主要是为了处理以下 case
// 里面放了个 form,form 提交过来的时候不希望把 items 这些发送过来。
// 因为会把数据呈现在地址栏上。
data: (0, helper_1.createObject)((0, helper_1.createObject)(inModal ? originFilterData : store.filterData, {
items: childProps.items,
selectedItems: childProps.selectedItems,
unSelectedItems: childProps.unSelectedItems
}), {}),
headerCanShow: (0, utils_1.headerCanShow)(header, filter, filtercont, tableStore),
page: store.page,
lastPage: store.lastPage,
perPage: store.perPage,
total: store.total,
onQuery: handleQuery,
onAction: handleAction,
onChangePage: handleChangePage,
$$editable: $$editable,
updateAutoFillHeight: tableInstance === null || tableInstance === void 0 ? void 0 : tableInstance.updateAutoFillHeight
});
};
var CrudBody = function (crudBodyProps) {
var _a, _b, _c, _d, _e, _f, _g;
var props = crudBodyProps.props, foldColumns = crudBodyProps.foldColumns, tableRotate = crudBodyProps.tableRotate, controlRef = crudBodyProps.controlRef,
// 函数方法
setCrudState = crudBodyProps.setCrudState, setLoading = crudBodyProps.setLoading, handleAction = crudBodyProps.handleAction, dataCheckRegist = crudBodyProps.dataCheckRegist, handleSaveOrder = crudBodyProps.handleSaveOrder, handleQuery = crudBodyProps.handleQuery, handleChildPopOverOpen = crudBodyProps.handleChildPopOverOpen, handleChildPopOverClose = crudBodyProps.handleChildPopOverClose, handleFilterReset = crudBodyProps.handleFilterReset, handleFilterSubmit = crudBodyProps.handleFilterSubmit, handleFilterInit = crudBodyProps.handleFilterInit, markSort = crudBodyProps.markSort, renderFilter = crudBodyProps.renderFilter, handleLoadMore = crudBodyProps.handleLoadMore, handleResetData = crudBodyProps.handleResetData, getTableStore = crudBodyProps.getTableStore, getTableInstance = crudBodyProps.getTableInstance, setTotal = crudBodyProps.setTotal, clearSelectedItems = crudBodyProps.clearSelectedItems, handleClickOffline = crudBodyProps.handleClickOffline, handleJump = crudBodyProps.handleJump, currentSelectedRow = crudBodyProps.currentSelectedRow, crudRef = crudBodyProps.crudRef, hasBulkActions = crudBodyProps.hasBulkActions, filtercont = crudBodyProps.filtercont,
// 其他属性
saveColApi = crudBodyProps.saveColApi, columnInfo = crudBodyProps.columnInfo, tabsdefer = crudBodyProps.tabsdefer, initFetch = crudBodyProps.initFetch, name = crudBodyProps.name, showColumnsFilter = crudBodyProps.showColumnsFilter, hasFetch = crudBodyProps.hasFetch, preSortAble = crudBodyProps.preSortAble, tableStore = crudBodyProps.tableStore, tableInstance = crudBodyProps.tableInstance, search = crudBodyProps.search, afterSearchFn = crudBodyProps.afterSearchFn, control = crudBodyProps.control, filterData = crudBodyProps.filterData, showTableEditWarmModal = crudBodyProps.showTableEditWarmModal, openFeedback = crudBodyProps.openFeedback, reloadTarget = crudBodyProps.reloadTarget, closeTarget = crudBodyProps.closeTarget, originFilterData = crudBodyProps.originFilterData, context = crudBodyProps.context, advanceFilterForm = crudBodyProps.advanceFilterForm;
var className = props.className, bodyClassName = props.bodyClassName, SearchFilter = props.filter, render = props.render, store = props.store, mode = props.mode, syncLocation = props.syncLocation, children = props.children, headerBulkActions = props.headerBulkActions, footerBulkActions = props.footerBulkActions, pickerMode = props.pickerMode, multiple = props.multiple, showIndex = props.showIndex, valueField = props.valueField, primaryField = props.primaryField, value = props.value, hideQuickSaveBtn = props.hideQuickSaveBtn, itemActions = props.itemActions, cx = props.classnames, keepItemSelectionOnPageChange = props.keepItemSelectionOnPageChange, maxKeepItemSelectionLength = props.maxKeepItemSelectionLength, onAction = props.onAction, popOverContainer = props.popOverContainer, __ = props.translate, onQuery = props.onQuery, autoGenerateFilter = props.autoGenerateFilter, onSelect = props.onSelect, autoFillHeight = props.autoFillHeight, useMobileUI = props.useMobileUI, // Aug
columns = props.columns, advancedFilter = props.advancedFilter, advancedQueryFields = props.advancedQueryFields, onImageEnlarge = props.onImageEnlarge, offlineSchema = props.offlineSchema, advancedFilterApi = props.advancedFilterApi, tableLayout = props.tableLayout, header = props.header, footer = props.footer, rest = tslib_1.__rest(props, ["className", "bodyClassName", "filter", "render", "store", "mode", "syncLocation", "children", "headerBulkActions", "footerBulkActions", "pickerMode", "multiple", "showIndex", "valueField", "primaryField", "value", "hideQuickSaveBtn", "itemActions", "classnames", "keepItemSelectionOnPageChange", "maxKeepItemSelectionLength", "onAction", "popOverContainer", "translate", "onQuery", "autoGenerateFilter", "onSelect", "autoFillHeight", "useMobileUI", "columns", "advancedFilter", "advancedQueryFields", "onImageEnlarge", "offlineSchema", "advancedFilterApi", "tableLayout", "header", "footer"]);
var _h = (0, react_1.useState)(mode || 'table'), modes = _h[0], setModes = _h[1];
// 自动过滤, 移动端默认为true 或者这个表格没有自动列宽这个属性的话 也默认使用true -- 即进来就自动适用自动列宽计算逻辑
var _j = (0, react_1.useState)((0, helper_1.isMobile)() ? true : (!(0, lodash_1.isNil)((_a = (0, storage_1.getLocalStorage)('autoWidthPage')) === null || _a === void 0 ? void 0 : _a[name || '']) ? (_b = (0, storage_1.getLocalStorage)('autoWidthPage')) === null || _b === void 0 ? void 0 : _b[name || ''] : true)), autoWidth = _j[0], setAutoWidth = _j[1];
var _k = (0, react_1.useState)(false), moreIsOpened = _k[0], setMoreIsOpened = _k[1]; // Aug 更多操作面板,]
var _l = (0, react_1.useState)(), toolChildMaxCount = _l[0], setToolChildMaxCount = _l[1];
var toolActionsRef = (0, react_1.useRef)(null);
(0, react_1.useEffect)(function () {
var mobileUI = (0, helper_1.isMobile)() && useMobileUI;
if (mobileUI)
calcToolActionsMaxCount();
}, []);
// 提前计算需要计算的属性
var computedMultiple = multiple === void 0
? (headerBulkActions && headerBulkActions.length > 0) ||
(footerBulkActions && footerBulkActions.length > 0)
? true
: false
: multiple;
var computedSelected = pickerMode || keepItemSelectionOnPageChange
? store.selectedItems
: undefined;
var computedLoadHasMore = (((_c = store.data.items) === null || _c === void 0 ? void 0 : _c.length) > 0 && store.data.total > 0 && store.data.total > store.data.items.length) ||
(!((_d = store.data.items) === null || _d === void 0 ? void 0 : _d.length) && store.loading) ||
!!((store.data.total || store.data.count) && !(store.page > store.lastPage ||
((_e = store.data.items) === null || _e === void 0 ? void 0 : _e.length) >=
((_f = store.data.total) !== null && _f !== void 0 ? _f : store.data.count)));
var computedPlaceholder = rest.placeholder ||
(!initFetch && !hasFetch && SearchFilter
? 'placeholder.trySearch'
: undefined);
var computedSelectable = !!(hasBulkActions() ||
pickerMode ||
multiple);
var computedTableLayout = (0, helper_1.isMobile)() ? (tableLayout || 'horizontal') : 'horizontal';
//移动端处理工具栏按钮中的可批量操作的按钮,加入到headerBulkActions中
var handleUnitBulkActions = function () {
var headerToolbar = props.headerToolbar, headerBulkActions = props.headerBulkActions, headerActions = props.headerActions;
return (0, utils_1.unitBulkActions)({ headerToolbar: headerToolbar, headerBulkActions: headerBulkActions, headerActions: headerActions });
};
var computedUnitBulkActions = handleUnitBulkActions();
var computedHeaderCanShow = (0, utils_1.headerCanShow)(header, SearchFilter, filtercont, tableStore);
var getAllData = function (showFields) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
var api, env, data, allData, params, optionsParam, paramsData, res;
var _a, _b, _c;
return tslib_1.__generator(this, function (_d) {
switch (_d.label) {
case 0:
api = props.api, env = props.env, data = props.data;
allData = {};
if (!api) return [3 /*break*/, 2];
params = {};
if (Object.keys(filtercont || {}).length) {
params = {
advancedFilter: (0, utils_1.dealAdvacedCondition)(filtercont === null || filtercont === void 0 ? void 0 : filtercont.advancedFilter),
advancedFilterSub: (0, utils_1.dealAdvacedCondition)(filtercont === null || filtercont === void 0 ? void 0 : filtercont.advancedFilterSub),
advancedHeader: filtercont === null || filtercont === void 0 ? void 0 : filtercont.advancedHeader,
optionsParam: (showFields === null || showFields === void 0 ? void 0 : showFields.length) > 0 ? tslib_1.__assign(tslib_1.__assign({}, filtercont === null || filtercont === void 0 ? void 0 : filtercont.optionsParam), { queryField: showFields }) : filtercont === null || filtercont === void 0 ? void 0 : filtercont.optionsParam,
filterParam: filtercont === null || filtercont === void 0 ? void 0 : filtercont.filterParam
};
if (filtercont === null || filtercont === void 0 ? void 0 : filtercont.filterOptionData) {
optionsParam = (filtercont === null || filtercont === void 0 ? void 0 : filtercont.filterOptionData).optionsParam;
params = tslib_1.__assign(tslib_1.__assign({}, params), optionsParam);
}
}
else {
if ((showFields === null || showFields === void 0 ? void 0 : showFields.length) > 0) {
params.optionsParam = { queryField: showFields };
}
}
paramsData = tslib_1.__assign(tslib_1.__assign({}, params), { index: 1, filterParam: (_a = store.query) === null || _a === void 0 ? void 0 : _a.filterParam, topN: ((_b = filtercont === null || filtercont === void 0 ? void 0 : filtercont.limitParam) === null || _b === void 0 ? void 0 : _b.limitStatus) ? (_c = filtercont === null || filtercont === void 0 ? void 0 : filtercont.limitParam) === null || _c === void 0 ? void 0 : _c.topN : undefined });
return [4 /*yield*/, env.fetcher(api, (0, helper_1.createObject)(data, paramsData))];
case 1:
res = _d.sent();
if (res.ok && res.data) {
allData = res.data;
}
else {
allData = null;
antd_1.message.error(res.msg);
}
return [2 /*return*/, allData];
case 2: return [2 /*return*/, allData];
}
});
}); };
// Aug
var moreHandleTouch = function (e) {
e.stopPropagation();
setMoreIsOpened(true);
};
// Aug更多操作
var renderMoreToolbar = function (children) {
var cx = props.classnames, __ = props.translate, getModalContainer = props.env.getModalContainer;
return (react_1.default.createElement(__1.ActionSheet, { key: Date.now() + '-actionSheet', isOpened: moreIsOpened, container: getModalContainer, round: true, onHide: function (e) {
e.stopPropagation();
setMoreIsOpened(false);
}, popupContent: react_1.default.createElement("div", { style: { width: '100%' } }, children.map(function (child, idx) {
return (react_1.default.createElement("div", { key: idx, "data-index": idx, id: "amis-action-sheet-btn-wrapper", className: "action-sheet-btn-wrapper", onClick: function (e) {
// e.stopPropagation();
setMoreIsOpened(false);
} }, child.dom || child));
})) },
react_1.default.createElement("span", { className: cx('Button', 'Button--link'), onClick: moreHandleTouch },
react_1.default.createElement("i", { className: cx('Button-icon', 'fa', 'fa-reorder') }),
react_1.default.createElement("span", null, __('More')))));
};
var renderToolbar = function (toolbar, index, childProps, toolbarRenderer,
// Jay
isFooter) {
var _a, _b;
if (index === void 0) { index = 0; }
if (childProps === void 0) { childProps = {}; }
if (!toolbar) {
return null;
}
var inModal = props.inModal, store = props.store, __ = props.translate, useMobileUI = props.useMobileUI, env = props.env, headerToolbar = props.headerToolbar, footerToolbar = props.footerToolbar;
// 多个工具方法展示
if (Array.isArray(toolbar) && toolbar.length !== 0) {
var children_1 = toolbar
.filter(function (toolbar) {
return (0, helper_1.isVisible)(toolbar, inModal ? originFilterData : store.filterData) &&
!((0, helper_1.isMobile)() && (toolbar.type == 'columns-toggler' || toolbar.isToolBar));
})
.map(function (toolbar, index) { return ({
dom: renderToolbar(toolbar, index, childProps, toolbarRenderer),
toolbar: toolbar
}); })
.filter(function (item) { return item.dom; });
// Jay
// 对分页器的几个元素进行排序
var sortFooterbar_1 = {
'statistics': 1,
'pagination': 2,
'switch-per-page': 3
};
children_1.sort(function (a, b) {
var _a, _b;
if (b.toolbar.align === 'right') {
if (a.toolbar.align === 'left' ||
sortFooterbar_1[(_a = a.toolbar) === null || _a === void 0 ? void 0 : _a.type] > sortFooterbar_1[(_b = b.toolbar) === null || _b === void 0 ? void 0 : _b.type]) {
return -1;
}
else if (sortFooterbar_1[a.toolbar.type] < sortFooterbar_1[b.toolbar.type]) {
return 1;
}
}
return 0;
});
var len = children_1.length;
if (len) {
// Aug 移动端超过三个显示更多
if (useMobileUI && (0, helper_1.isMobile)() && toolChildMaxCount && len > toolChildMaxCount) {
var moreToolbar = children_1.splice(toolChildMaxCount);
var moreToolbarDom = renderMoreToolbar(moreToolbar);
children_1.splice(0, 0, { dom: moreToolbarDom, toolbar: { type: 'more' } });
}
var button = children_1.filter(function (_a, index) {
var toolbar = _a.toolbar;
return toolbar.align == 'right' && !isFooter;
}).reverse();
var searchBtnIndex = button.findIndex(function (_a) {
var toolbar = _a.toolbar;
return toolbar.actionType === 'advanced-filter';
});
var leftBtns = children_1.filter(function (_a, index) {
var toolbar = _a.toolbar;
return (toolbar.align !== 'right' || isFooter) && toolbar.type !== 'paginator';
});
var paginator = children_1.find(function (_a) {
var toolbar = _a.toolbar;
return toolbar.type === 'paginator';
});
// 工具栏里面啥都没有的情况之前返回空
if (!(headerToolbar === null || headerToolbar === void 0 ? void 0 : headerToolbar.length) && !(footerToolbar === null || footerToolbar === void 0 ? void 0 : footerToolbar.filter(function (_) { return _.type !== 'footerBulkActions'; }).length))
return react_1.default.createElement("div", { style: { marginTop: 0, border: 0 } });
return (react_1.default.createElement("div", { className: cx('Crud-toolbar', { footer: isFooter }), key: index },
leftBtns.length > 0 && react_1.default.createElement("div", { ref: toolActionsRef, className: cx('Crud-toolbar-tool--actions') }, leftBtns.map(function (_a, index) {
var toolbar = _a.toolbar, child = _a.dom;
// const type = (toolbar as Schema).type || toolbar;
// let align = toolbar.align || (type === 'pagination' ? 'right' : 'left');
return (react_1.default.createElement("div", { key: index, className: cx('Crud-toolbar-item', toolbar.className) },
" ",
child,
" "));
})),
(paginator || (!isFooter && button.length > 0)) && react_1.default.createElement("div", { className: cx('Crud-toolbar-tool--head') },
paginator && ((_b = (_a = paginator.toolbar).renderPagenation) === null || _b === void 0 ? void 0 : _b.call(_a)),
!isFoot