UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

292 lines (291 loc) 23 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var OverflowWrapper_1 = tslib_1.__importDefault(require("../../../../components/OverflowWrapper")); var omit_1 = tslib_1.__importDefault(require("lodash/omit")); var helper_1 = require("../../../../utils/helper"); var antd_1 = require("antd"); var DataCross_1 = tslib_1.__importDefault(require("../../../Table/DataCross")); var DataStatic_1 = tslib_1.__importDefault(require("../../../Table/DataStatic")); var FindAndReplace_1 = tslib_1.__importDefault(require("../../../Table/FindAndReplace")); var DataCharts_1 = tslib_1.__importDefault(require("../../../Table/DataCharts")); var SqlOptimize_1 = tslib_1.__importDefault(require("../../../Table/SqlOptimize")); var ColumnToggler_1 = tslib_1.__importDefault(require("../../../Table/ColumnToggler")); var icons_1 = require("../../../../components/icons"); var LionContextMenu_1 = require("../../../Lion/components/LionContextMenu"); var components_1 = require("../../../../components"); var Button_1 = require("../../../../components/Button"); // 不做处理的按钮类型 var specialButtonType = ['rfid-action']; var canFindReplaceTypes = ['plain', 'input-text', 'number', 'input-number', 'static-number', 'html', 'static-html', 'input-rich-text', 'date', 'input-date', 'datetime', 'input-datetime', 'time', 'input-time', 'input-date-range', 'input-time-range', 'input-datetime-range', 'input-month', 'input-quarter', 'input-year', 'textarea']; var Toolbar = function (_a) { var props = _a.props, state = _a.state, data = _a.data, actionData = _a.actionData, inSmallDialog = _a.inSmallDialog, tableStore = _a.tableStore, indexColShow = _a.indexColShow, columnSettingTemps = _a.columnSettingTemps, showColumnsFilter = _a.showColumnsFilter, getAllData = _a.getAllData, onAction = _a.onAction, onDealData = _a.onDealData, onPageChange = _a.onPageChange, onBulkReplace = _a.onBulkReplace, updateActiveCell = _a.updateActiveCell, onCheckAll = _a.onCheckAll, onColumnToggle = _a.onColumnToggle, onFlush = _a.onFlush, setIndexColShow = _a.setIndexColShow, setColumnSettingTemps = _a.setColumnSettingTemps; var headerToolbar = props.headerToolbar, footerToolbar = props.footerToolbar, headerActions = props.headerActions, headerBulkActions = props.headerBulkActions, multiple = props.multiple, columns = props.columns, api = props.api, alwaysShowPagination = props.alwaysShowPagination, perPageAvailable = props.perPageAvailable, loadDataOnce = props.loadDataOnce, primaryField = props.primaryField, name = props.name, aliasTitle = props.aliasTitle, tabTitle = props.tabTitle, mode = props.mode, render = props.render, env = props.env, store = props.store, cx = props.classnames, __ = props.translate, ns = props.classPrefix; var checkedFieldTranslate = state.checkedFieldTranslate, selectedIndex = state.selectedIndex; var actions = (0, react_1.useMemo)(function () { return headerActions === null || headerActions === void 0 ? void 0 : headerActions.concat(headerBulkActions !== null && headerBulkActions !== void 0 ? headerBulkActions : []); }, [headerActions, headerBulkActions]); var hasPaginator = (0, react_1.useMemo)(function () { return footerToolbar.some(function (schema) { return schema.type === 'pagination'; }); }, [footerToolbar]); var perPages = (0, react_1.useMemo)(function () { return (perPageAvailable !== null && perPageAvailable !== void 0 ? perPageAvailable : [5, 10, 20, 50, 100]).map(function (item) { return ({ label: item + (inSmallDialog ? '' : " ".concat(__('CRUD.countPage'))), value: item }); }); }, [perPageAvailable, inSmallDialog]); // 字段翻译按钮 var extraLeftBtns = (0, react_1.useMemo)(function () { return headerToolbar.filter(function (item) { return item.align !== 'right'; }); }, [headerToolbar]); var leftToolButtons = (0, react_1.useMemo)(function () { return footerToolbar.filter(function (item) { return item.align == 'right' && item.type !== 'footerBulkActions'; }).sort(function (a, b) { var order = ['switch-per-page', 'pagination', 'statistics']; return order.indexOf(a.type) - order.indexOf(b.type); }); }, [footerToolbar]); var rightToolButtons = (0, react_1.useMemo)(function () { return headerToolbar.filter(function (toolbar) { return toolbar.align == 'right'; }).reverse(); }, [headerToolbar]); var searchBtnIndex = (0, react_1.useMemo)(function () { return rightToolButtons.findIndex(function (toolbar) { return toolbar.actionType === 'advanced-filter'; }); }, [rightToolButtons]); //统计数据记录, 141-交叉制表,142-统计,143-图表 var staticRecords = (0, react_1.useCallback)(function (port) { env.fetcher({ url: "/api/v1/opt/".concat(name, "_").concat(port == 141 ? 'cross' : port == 142 ? 'total' : 'chart', "/record/").concat(port), method: 'get' }); }, [name]); var renderPagination = function () { var page = store.page, lastPage = store.lastPage; if (store.mode !== 'simple' && store.lastPage < 2 && !alwaysShowPagination) { return null; } return (react_1.default.createElement("div", { className: cx('Crud-pager') }, render('pagination', { type: 'pagination' }, { activePage: page, lastPage: lastPage, hasNext: store.hasNext, mode: store.mode, onPageChange: onPageChange }))); }; 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 () { var _a; return (react_1.default.createElement("div", { className: cx('Crud-pageSwitch') }, 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) { onPageChange(1, value); } }))); }; var renderDataCross = function (action) { return (react_1.default.createElement(DataCross_1.default, { tableName: name || (0, helper_1.uuid)(), action: action, columns: tableStore.filteredColumns, data: data, modalContainer: ((env === null || env === void 0 ? void 0 : env.getTopModalContainer) || document.body), getAllData: getAllData, staticRecords: staticRecords, onOK: function (cross, crossColumns, datas, countColumns, extraProps) { var _a, _b; var linkTitle = "".concat((_b = (_a = props.aliasTitle) === null || _a === void 0 ? void 0 : _a.trim) === null || _b === void 0 ? void 0 : _b.call(_a), "-\u4EA4\u53C9\u5236\u8868"); var schema = { aliasTitle: linkTitle, type: "crud", mode: 'cross', name: "".concat(name || (0, helper_1.uuid)(), "_cross"), cross: cross, crossColumns: crossColumns, isCross: true, combineNum: cross.positionType == 1 ? cross.rowFields.length : undefined, "affixHeader": true, "columns": columns, "defaultData": datas, 'affixRow': countColumns, "perPage": 10000, "autoFillHeight": true, "multiple": true, "setBorder": true, "keepItemSelectionOnPageChange": false, "syncLocation": false, "headerToolbar": [{ "redDot": false, "actionType": "export", "type": "action", "name": "default_export", "label": "导出", "icon": "#icon-tooltool_download", "tooltip": "默认导出", "align": "right", "close": true, "tooltipPlacement": "top" }, { "type": "data-statics", "label": "统计", "icon": "#icon-tooltotal", "align": "right" }, { "type": "data-cross", "label": "交叉制表", "icon": "#icon-toolcross", "align": "right" }], "footerToolbar": [{ "type": "statistics", "align": "right" }], "checkOnItemClick": false, "header": [], "footer": [] }; onDealData('data-cross', linkTitle, schema, extraProps); } })); }; var renderDataStatic = function (action) { var colList = tableStore.columnsData.filter(function (col) { return !col.pristine.hidden && col.type !== 'operation'; }) .map(function (item) { return item.toJSON ? item.toJSON() : item; }); return react_1.default.createElement(DataStatic_1.default, { originHeaderToolbar: headerToolbar, crudTitle: props.aliasTitle || props.tabTitle || '', container: env === null || env === void 0 ? void 0 : env.getTopModalContainer, staticRecords: staticRecords, getAllData: getAllData, data: data, loadDataOnce: props.loadDataOnce, columns: colList, action: action, name: name, isStatic: props.isStatic, handleDealData: onDealData }); }; var renderDataCharts = function (action) { var colList = tableStore.columnsData.filter(function (col) { return !col.pristine.hidden && col.type !== 'operation'; }) .map(function (item) { return item.toJSON ? item.toJSON() : item; }); return react_1.default.createElement(DataCharts_1.default, { crudTitle: aliasTitle || tabTitle || '', container: env.getTopModalContainer, data: data, columns: colList, action: action, name: name, handleDealData: onDealData, primaryField: primaryField, loadDataOnce: loadDataOnce, getAllData: getAllData, staticRecords: staticRecords }); }; var renderFindReplace = function (action) { var colList = tableStore.columnsData.filter(function (col) { return !col.pristine.hidden && col.type !== 'operation'; }) .map(function (item) { return item.toJSON ? item.toJSON() : item; }).filter(function (item) { return !item.type || canFindReplaceTypes.includes(item.type); }); var canReplace = colList.some(function (item) { var _a; return !!((_a = item.pristine) === null || _a === void 0 ? void 0 : _a.quickEdit); }); // const itemRaws = store.data?.itemsRaw return react_1.default.createElement(FindAndReplace_1.default, { selectedList: data.selectedItems.map(function (item) { return item.index; }), data: data.items, columns: colList, action: action, onBulkReplace: onBulkReplace, canReplace: canReplace, currentCheckIndex: props.currentSelectedRow, updateActiveCell: updateActiveCell, container: env === null || env === void 0 ? void 0 : env.getTopModalContainer, translate: __, crudRef: props.crudRef }); }; var renderFieldTranslate = function (action) { return (react_1.default.createElement("div", { className: 'show-field-translate-container' }, react_1.default.createElement(antd_1.Checkbox, { checked: checkedFieldTranslate, onChange: function (e) { } }, action.label || '显示字段翻译'))); }; var renderSqlOptimize = function (action) { var _a; return (react_1.default.createElement(SqlOptimize_1.default, { env: env, selectedList: data.selectedItems, action: action, columns: (_a = columns === null || columns === void 0 ? void 0 : columns.map(function (item) { return item.name; })) !== null && _a !== void 0 ? _a : [], sqlStr: data === null || data === void 0 ? void 0 : data.sql, store: tableStore })); }; var renderColumnsToggler = function (config) { var _a; return (react_1.default.createElement(ColumnToggler_1.default, tslib_1.__assign({}, props, ((0, helper_1.isObject)(config) ? config : {}), { tooltip: (config === null || config === void 0 ? void 0 : config.tooltip) || __('Table.columnsVisibility'), tooltipContainer: env === null || env === void 0 ? void 0 : env.getTopModalContainer, modalContainer: env === null || env === void 0 ? void 0 : env.getModalContainer, align: (_a = config === null || config === void 0 ? void 0 : config.align) !== null && _a !== void 0 ? _a : 'left', isActived: tableStore.hasColumnHidden(), classnames: cx, classPrefix: ns, key: "columns-toggable", size: (config === null || config === void 0 ? void 0 : config.size) || 'sm', label: (config === null || config === void 0 ? void 0 : config.label) || react_1.default.createElement(icons_1.Icon, { icon: "columns", className: "icon m-r-none" }), draggable: config === null || config === void 0 ? void 0 : config.draggable, columns: tableStore.columnsData, onColumnToggle: onColumnToggle, columnSettingTemps: columnSettingTemps, updateColumnSettingList: setColumnSettingTemps, indexColShow: indexColShow, setIndexCol: setIndexColShow, flushDebounced: onFlush }))); }; var renderReload = function (toolbar) { 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, omit_1.default)(toolbar, ['type', 'align'])); } return render("toolbar", reloadButton, { onAction: onAction }); }; var renderColumnsFilterBtn = function (toolbar) { return (react_1.default.createElement(Button_1.Button, { tooltip: '列过滤', size: "sm", iconOnly: true, classnames: cx, butColor: showColumnsFilter, tooltipContainer: (env === null || env === void 0 ? void 0 : env.getTopModalContainer) || undefined, onClick: function () { } }, (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 renderChild = function (schema) { var type = schema.type, actionType = schema.actionType; if (type === 'action') { switch (actionType) { case 'label-print': case 'bill-print': case 'file-print': case 'report-print': case 'advanced-filter': return render("action-print", schema, { onAction: onAction }); case 'export': return render("action-export", schema, { onAction: onAction }); } } else { switch (type) { case 'pagination': return renderPagination(); case 'statistics': return renderStatistics(); case 'switch-per-page': return renderSwitchPerPage(); case 'reload': return renderReload(schema); case 'columns-filter': return renderColumnsFilterBtn(schema); case 'data-cross': return renderDataCross(schema); case 'data-statics': return renderDataStatic(schema); case 'data-chart': return renderDataCharts(schema); case 'find-replace': return renderFindReplace(schema); case 'field-translate': return renderFieldTranslate(schema); case 'sql-optimize': return renderSqlOptimize(schema); case 'columns-toggler': return renderColumnsToggler(schema); } } return type; }; var renderPagenation = function () { var _a, _b; var column = tableStore.filteredColumns[0]; var leftFixedColumns = tableStore.leftFixedColumns; var lastLeftFixedIndex = (_a = leftFixedColumns[leftFixedColumns.length - 1]) === null || _a === void 0 ? void 0 : _a.index; return (multiple || leftToolButtons.length) ? (react_1.default.createElement("div", { className: cx('Table-affix') }, react_1.default.createElement("span", { className: cx('Table-affixs'), style: { marginRight: 0, alignItems: 'center' } }, react_1.default.createElement("span", { className: cx('Table-affix-Arr') }, react_1.default.createElement(LionContextMenu_1.ContextMenu, { menuItems: [{ id: 0, title: '全选' }, { id: 1, title: '反选' }, { id: 2, title: '不选' }], onItemClick: function (index) { return multiple && onCheckAll(index); }, key: Date() }, react_1.default.createElement("th", { "column-name": '__checkme', style: { cursor: 'pointer', textAlign: 'center', width: 25 }, className: cx(column.pristine.className, 'header-cell', { 'fixed-left-last': column.index === lastLeftFixedIndex, }) + ' last-th', onClick: function () { multiple && onCheckAll(3); } }, tableStore.rows.length ? react_1.default.createElement(components_1.Checkbox, { classPrefix: ns, partial: !tableStore.allChecked, checked: tableStore.someChecked, disabled: tableStore.disabledHeadCheckbox }) : react_1.default.createElement("div", null, '\u00A0')))), react_1.default.createElement("div", { className: cx('Table-affix-text') }, ((_b = tableStore.filterColumns) === null || _b === void 0 ? void 0 : _b.size) > 0 && react_1.default.createElement("span", null, "\u5DF2\u7B5B\u9009", tableStore.rows.length, "\u6761\u6570\u636E"), (data.selectedItems.length == 0 ? "" : "\u5DF2\u9009\uFF1A".concat(data.selectedItems.length, "\u884C") + " , "), multiple ? (selectedIndex != undefined && "\u7B2C".concat(selectedIndex + 1, "\u884C")) : null)), react_1.default.createElement("div", { className: cx('Crud-toolbar', { footer: true }) }, react_1.default.createElement("div", { className: cx('Crud-toolbar-tool--actions') }, leftToolButtons.map(function (toolbar) { return react_1.default.createElement("div", { key: toolbar.type, className: cx('Crud-toolbar-item') }, renderChild(toolbar)); }))))) : null; }; return (react_1.default.createElement("div", { className: cx('Table-toolbar Table-headToolbar'), key: "header-toolbar" }, (Array.isArray(actions) && actions.length) && (react_1.default.createElement("div", { className: cx('Table-actions') }, headerActions === null || headerActions === void 0 ? void 0 : headerActions.map(function (action, index) { return render("action/".concat(index), tslib_1.__assign({ type: 'button', isTableAction: true }, action), { onAction: onAction, key: index, isTableAction: true, data: actionData }); }), headerBulkActions === null || headerBulkActions === void 0 ? void 0 : headerBulkActions.map(function (action, index) { return render("bulk-action/".concat(index), tslib_1.__assign(tslib_1.__assign({}, (0, omit_1.default)(action, ['visibleOn', 'hiddenOn', 'disabledOn'])), { type: specialButtonType.includes(action.type) ? action.type : 'button', ignoreConfirm: true, hidden: false }), { key: "bulk-".concat(index), data: actionData, disabled: action.disabled || (action.requireSelected !== false ? !(data.selectedItems.length > 0) : false), onAction: function (e, schema) { return onAction(e, schema, true); } }); }))), react_1.default.createElement("div", { className: cx('Crud-toolbar') }, extraLeftBtns.length > 0 && (react_1.default.createElement("div", { className: cx('Crud-toolbar-tool--actions') }, extraLeftBtns.map(function (toolbar, index) { return react_1.default.createElement("div", { key: index, className: cx('Crud-toolbar-item', toolbar.className) }, renderChild(toolbar)); }))), (hasPaginator || headerToolbar.length > 0) && (react_1.default.createElement("div", { className: cx('Crud-toolbar-tool--head') }, hasPaginator && renderPagenation(), headerToolbar.length && (react_1.default.createElement("div", { className: cx('Crud-toolbar-tool') }, react_1.default.createElement("div", { className: cx('Crud-toolbar-tool-content') }, react_1.default.createElement(OverflowWrapper_1.default, { env: env, classPrefix: cx, itemClassName: 'toolbar-btn-item', showFixRight: searchBtnIndex > -1, fixRightRenderIndex: searchBtnIndex, items: rightToolButtons.map(function (toolbar, index) { return ({ key: index, children: (react_1.default.createElement("div", { key: index, className: cx('Crud-toolbar-item', 'toolbar-btn-item', toolbar.className) }, renderChild(toolbar))) }); }) }))))))))); }; exports.default = Toolbar; //# sourceMappingURL=./renderers/CRUD/components/Toolbar/index.js.map