UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

514 lines (513 loc) 27 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.staticList = void 0; var tslib_1 = require("tslib"); /** * 统计组件 */ var antd_1 = require("antd"); var lodash_1 = require("lodash"); var react_1 = tslib_1.__importStar(require("react")); var helper_1 = require("../../utils/helper"); var tools_1 = require("../../utils/shell/tools"); var commonSelect_1 = require("./commonSelect"); var components_1 = require("../../components"); var icons_1 = require("../../components/icons"); require("./dataStatic.scss"); var DragModal_1 = tslib_1.__importDefault(require("../../components/DragModal")); var commonTableFunction_1 = require("../../store/utils/commonTableFunction"); exports.staticList = [ { title: '合计值', value: 'sum', icon: '#icon-toolsum' }, { title: '平均值', value: 'avg', icon: '#icon-toolAvg' }, { title: '最大值', value: 'max', icon: '#icon-toolmax' }, { title: '最小值', value: 'min', icon: '#icon-toolmin' }, { title: '标准差', value: 'std_v', icon: '#icon-toolstandardDeviation' }, { title: '空值数', value: 'count_null', icon: '#icon-toolnull' }, { title: '百分比', value: 'per', icon: '#icon-toolpercent' }, { title: '组内百分比', value: 'g_per', icon: '#icon-toolgroupPercent1' }, ]; //统计字段类型,数字(11),货币,百分比(18), 进度条(16) var dataTypeArr = ['number', 'static-number', 'input-number', 'progress', 'static-progress']; //分组字段类型支持所有类型,除了15,17,20,21,22,34,35,38,39 var ungroupDataTypeArr = ['html', 'static-html', 'input-rich-text', 'lion-upload', 'link', 'input-table-field', 'input-table-dynamic']; var DataStatic = function (props) { var action = props.action, columns = props.columns, _a = props.data, items = _a.items, selectedItems = _a.selectedItems, itemRaws = _a.itemRaws, loadDataOnce = props.loadDataOnce, crudTitle = props.crudTitle, originHeaderToolbar = props.originHeaderToolbar, name = props.name, isStatic = props.isStatic, handleDealData = props.handleDealData, staticRecords = props.staticRecords; var _b = (0, react_1.useState)(false), visible = _b[0], setVisible = _b[1]; var _c = (0, react_1.useState)(false), loading = _c[0], setLoading = _c[1]; var _d = (0, react_1.useState)([]), groupFields = _d[0], setGroupFields = _d[1]; //分组字段列表 var _e = (0, react_1.useState)([]), groupSelect = _e[0], setGroupSelect = _e[1]; //分组字段选中数据 var _f = (0, react_1.useState)([]), staticFields = _f[0], setStaticFields = _f[1]; //统计字段列表 var _g = (0, react_1.useState)([]), staticSelect = _g[0], setStaticSelect = _g[1]; //统计字段选中数据 var _h = (0, react_1.useState)(['sum']), staticContent = _h[0], setStaticContent = _h[1]; //统计内容选中数据 var _j = (0, react_1.useState)('present'), dataArea = _j[0], setDataArea = _j[1]; //数据范围 var hasInit = (0, react_1.useRef)(false); //统计内容的置灰情况 var _k = (0, react_1.useState)({ "g_per": true, "per": true }), btnStatus = _k[0], setBtnStatus = _k[1]; var workRef = (0, react_1.useRef)(); (0, react_1.useEffect)(function () { workRef.current = new Worker('./public/worker/dataStatics.js'); return function () { var _a; (_a = workRef.current) === null || _a === void 0 ? void 0 : _a.terminate(); }; }, []); (0, react_1.useEffect)(function () { mountHandle(); }, [columns]); (0, react_1.useEffect)(function () { var _a; if (visible) { if (!hasInit.current) { var defaultValueStr = localStorage.getItem('static-' + name); if (!(0, lodash_1.isNil)(defaultValueStr)) { var defaultValues = JSON.parse(defaultValueStr); setGroupSelect(defaultValues.groupSelect); setStaticSelect(defaultValues.staticSelect); setStaticContent(defaultValues.staticContent); setDataArea(defaultValues.dataArea); handleContent(((_a = defaultValues.groupSelect) === null || _a === void 0 ? void 0 : _a.length) > 0); } } hasInit.current = true; } }, [visible]); var createSchema = function (tableColList, tableData) { return ({ type: "crud", data: { total: tableData.length, items: tableData }, aliasTitle: crudTitle ? crudTitle + '-统计' : '统计', loadDataOnce: true, "name": "".concat(name || (0, helper_1.uuid)(), "_total"), "affixHeader": true, "columns": tableColList, "filterTogglable": false, source: "${items}", "autoFillHeight": true, "multiple": true, "setBorder": true, "keepItemSelectionOnPageChange": false, "syncLocation": false, "headerToolbar": (0, helper_1.isMobile)() ? [] : tslib_1.__spreadArray([ { "redDot": false, "actionType": "export", "type": "action", "name": "default_export", "label": "导出", "icon": "#icon-tooltool_download", "tooltip": "默认导出", "align": "right", "close": true, "tooltipPlacement": "top" } ], (groupSelect.length ? originHeaderToolbar.filter(function (item) { return ['tool-bar-action', 'data-statics', 'data-cross', 'data-chart', 'data-analysis'].includes(item.type); }) : []), true), "checkOnItemClick": false, "showIndex": false, "header": [], "footer": [], footerToolbar: [ { "type": "pagination", "align": "right" }, { "type": "switch-per-page", "align": "right" }, { "type": "statistics", "align": "right" } ], isStatic: true, perPage: 100, perPageAvailable: [100, 200, 500, 1000] }); }; var handleDefaultValue = function () { var _a; var defaultValueStr = localStorage.getItem('static-' + name); if (!(0, lodash_1.isNil)(defaultValueStr)) { var defaultValues = JSON.parse(defaultValueStr); setGroupSelect(defaultValues.groupSelect); setStaticSelect(defaultValues.staticSelect); setStaticContent(defaultValues.staticContent); setDataArea(defaultValues.dataArea); handleContent(((_a = defaultValues.groupSelect) === null || _a === void 0 ? void 0 : _a.length) > 0); } else { var list_1 = []; columns.forEach(function (item) { if (item.pristine.isNumerical || (item === null || item === void 0 ? void 0 : item.isNumerical)) list_1.push(item.name); }); setStaticSelect(list_1); } }; //根据column 数据进行分组 和 统计列分类 var mountHandle = function () { var groupFileds = []; var statisticsFields = []; columns.forEach(function (col) { var type = col.type, label = col.label, name = col.name; var obj = Object.assign({}, col, { title: (0, commonTableFunction_1.getColumnShowLabel)(col), value: name }); if (dataTypeArr.includes(type)) { statisticsFields.push(obj); } if (!ungroupDataTypeArr.includes(type)) { groupFileds.push(obj); } }); setGroupFields(groupFileds); setStaticFields(statisticsFields); }; var handleClose = function () { setGroupSelect([]); setStaticSelect([]); setStaticContent(['sum']); setDataArea('present'); setBtnStatus({ "sum": false, "g_per": true, "per": true, "avg": false, "max": false, "min": false, "std_v": false, "count_null": false }); }; var handleAction = function () { setVisible(true); }; var renderButton = function () { var _a; return react_1.default.createElement(components_1.Button, { onClick: handleAction }, react_1.default.createElement(icons_1.Icon, { icon: (_a = action === null || action === void 0 ? void 0 : action.icon) !== null && _a !== void 0 ? _a : "#icon-tooltool_autowidth", className: "icon", symbol: true }), action === null || action === void 0 ? void 0 : action.label); }; var handleGroupSelectsChange = function (value) { setGroupSelect(value); setStaticContent(['sum']); handleContent((value === null || value === void 0 ? void 0 : value.length) > 0); setStaticFields(staticFields.map(function (item) { return (tslib_1.__assign(tslib_1.__assign({}, item), { disabled: value.includes(item.value) })); })); }; var handleStaticSelectsChange = function (value) { setStaticSelect(value); setGroupFields(groupFields.map(function (item) { return (tslib_1.__assign(tslib_1.__assign({}, item), { disabled: value.includes(item.value) })); })); }; // 统计内容字段变化联动置灰情况 var handleStaticTypeChange = function (value) { setStaticContent(value); handleContent((groupSelect === null || groupSelect === void 0 ? void 0 : groupSelect.length) > 0); }; // 置灰情况变化规则 var handleContent = function (hasGroupFields) { setBtnStatus({ "sum": false, "g_per": !hasGroupFields, "per": !hasGroupFields, "avg": false, "max": false, "min": false, "std_v": hasGroupFields, "count_null": hasGroupFields }); }; //统计校验 var check = function (param) { var selectedContent = param.selectedContent, selectedGroupingFiledData = param.selectedGroupingFiledData, selectedStatisticalFieldData = param.selectedStatisticalFieldData; if (tools_1.tools.isEmpty(selectedGroupingFiledData) && tools_1.tools.isEmpty(selectedStatisticalFieldData)) { return antd_1.message.warn({ content: '分组字段和统计字段至少选择一项' }); } if (tools_1.tools.isEmpty(param.dataArea)) { return antd_1.message.warn({ content: '请选择范围' }); } if (tools_1.tools.isEmpty(selectedContent)) { return antd_1.message.warn({ content: '内容不能为空' }); } if (selectedGroupingFiledData.length && selectedGroupingFiledData.find(function (item) { return selectedStatisticalFieldData.includes(item); })) { return antd_1.message.warn({ content: '分组字段不能和统计字段相同' }); } return true; }; //开启新线程计算数据 var buildWorkerData = function (_a) { var calcData = _a.calcData, groupSelect = _a.groupSelect, staticSelect = _a.staticSelect, staticContent = _a.staticContent, selectedContentItem = _a.selectedContentItem, columns = _a.columns; return new Promise(function (resolve, reject) { if (workRef.current) { workRef.current.postMessage({ calcData: calcData, groupSelect: groupSelect, staticSelect: staticSelect, staticContent: staticContent, selectedContentItem: selectedContentItem, columns: columns }); workRef.current.onmessage = function (e) { resolve(e.data); }; workRef.current.onmessageerror = function (e) { reject(e.data); }; } else { reject('webwork error'); } }); }; var handleOk = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var param, res, selectedContentItem, colList_1, selectedContentItem, colList_2, calcData; return tslib_1.__generator(this, function (_a) { switch (_a.label) { case 0: param = { selectedContent: staticContent, dataArea: dataArea, selectedGroupingFiledData: groupSelect, selectedStatisticalFieldData: staticSelect }; if (check(param) !== true) { return [2 /*return*/, false]; } if (!(dataArea === 'all' && !loadDataOnce)) return [3 /*break*/, 2]; setLoading(true); return [4 /*yield*/, props.getAllData(tslib_1.__spreadArray(tslib_1.__spreadArray([], groupSelect, true), staticSelect, true))]; case 1: res = _a.sent(); if (res == null) { setLoading(false); return [2 /*return*/]; } if (!res.total) { antd_1.message.info({ content: "统计结果为空" }); setLoading(false); return [2 /*return*/]; } selectedContentItem = exports.staticList.filter(function (item) { return staticContent.includes(item.value); }); colList_1 = getStaticPartColumns(param, columns, selectedContentItem); buildWorkerData({ calcData: res.items, groupSelect: groupSelect, staticSelect: staticSelect, staticContent: staticContent, columns: columns, selectedContentItem: selectedContentItem }).then(function (resData) { var newTableData = (0, lodash_1.orderBy)(resData, colList_1.map(function (item) { return item.name; })); setLoading(false); handleDealData('data-static', crudTitle ? crudTitle + '-统计' : '统计', createSchema(colList_1, newTableData), { groupFields: groupFields, groupSelect: groupSelect, staticFields: staticFields, staticSelect: staticSelect, staticContent: staticContent, dataArea: dataArea, btnStatus: btnStatus }); setVisible(false); }); return [3 /*break*/, 3]; case 2: if (dataArea === 'some' && !(selectedItems === null || selectedItems === void 0 ? void 0 : selectedItems.length)) { return [2 /*return*/, antd_1.message.warn({ content: '选中数据为空' })]; } if (dataArea === 'present' && !(items === null || items === void 0 ? void 0 : items.length)) { return [2 /*return*/, antd_1.message.warn({ content: '当前页数据为空' })]; } if (dataArea === 'all' && !(itemRaws === null || itemRaws === void 0 ? void 0 : itemRaws.length)) { return [2 /*return*/, antd_1.message.warn({ content: '当前数据为空' })]; } setLoading(true); selectedContentItem = exports.staticList.filter(function (item) { return staticContent.includes(item.value); }); colList_2 = getStaticPartColumns(param, columns, selectedContentItem); calcData = dataArea === 'some' ? selectedItems : dataArea === 'present' ? items : itemRaws; buildWorkerData({ calcData: calcData, groupSelect: groupSelect, staticSelect: staticSelect, staticContent: staticContent, columns: columns, selectedContentItem: selectedContentItem }).then(function (resData) { // let resData // if (groupSelect.length > 0) { // resData = computed(calcData, groupSelect, staticSelect, staticContent, // columns); // } else { // resData = computedStatic(calcData, selectedContentItem, staticSelect, columns) // } var newTableData = (0, lodash_1.orderBy)(resData, colList_2.map(function (item) { return item.name; })); setLoading(false); handleDealData('data-static', crudTitle ? crudTitle + '-统计' : '统计', createSchema(colList_2, newTableData), { groupFields: groupFields, groupSelect: groupSelect, staticFields: staticFields, staticSelect: staticSelect, staticContent: staticContent, dataArea: dataArea, btnStatus: btnStatus }); setVisible(false); }); staticRecords(142); _a.label = 3; case 3: return [2 /*return*/]; } }); }); }; //计算部分数据统计列 var getStaticPartColumns = function (param, originColList, selectedContentItem) { var selectedStatisticalFieldData = param.selectedStatisticalFieldData, selectedGroupingFiledData = param.selectedGroupingFiledData; var tableColsName = tslib_1.__spreadArray(tslib_1.__spreadArray([], selectedGroupingFiledData, true), selectedStatisticalFieldData, true); var colList = []; //没有选择分组字段 if (!selectedGroupingFiledData || selectedGroupingFiledData.length === 0) { selectedContentItem.forEach(function (content) { colList.push({ name: content.value, label: content.title, sortable: false, isNumerical: false }); }); var col = { name: 'statistics', label: '统计', sortable: true }; colList.unshift(col); } else { colList = originColList.filter(function (col) { return col.name && tableColsName.includes(col.name); }).map(function (item) { return ['number', 'input-number'].includes(item.type) ? tslib_1.__assign(tslib_1.__assign({}, item), item.pristine) : item; }); colList.filter(function (col) { return (selectedStatisticalFieldData.length ? selectedStatisticalFieldData : selectedGroupingFiledData) .includes(col.name); }).forEach(function (item) { selectedContentItem.forEach(function (info) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q, _r, _s, _t, _u, _v; var name = item.name + info.value; var calcField = (_a = item.calculatedField) !== null && _a !== void 0 ? _a : (_b = item.pristine) === null || _b === void 0 ? void 0 : _b.calculatedField; colList.push({ name: name, type: 'number', label: item.label + info.title, suffix: info.value === 'per' || info.value === 'g_per' ? '%' : ((_c = item.suffix) !== null && _c !== void 0 ? _c : (_d = item.pristine) === null || _d === void 0 ? void 0 : _d.suffix), prefix: info.value === 'per' || info.value === 'g_per' ? '' : ((_e = item.prefix) !== null && _e !== void 0 ? _e : (_f = item.pristine) === null || _f === void 0 ? void 0 : _f.prefix), kilobitSeparator: info.value === 'per' || info.value === 'g_per' ? false : ((_g = item.kilobitSeparator) !== null && _g !== void 0 ? _g : (_h = item.pristine) === null || _h === void 0 ? void 0 : _h.kilobitSeparator), precision: ['per', 'g_per', 'std_v', 'avg'].includes(info.value) ? 2 : ((_j = item.precision) !== null && _j !== void 0 ? _j : (_k = item.pristine) === null || _k === void 0 ? void 0 : _k.precision), isNumerical: true, align: (_l = item.align) !== null && _l !== void 0 ? _l : (_m = item.pristine) === null || _m === void 0 ? void 0 : _m.align, showUppercase: (_o = item.showUppercase) !== null && _o !== void 0 ? _o : (_p = item.pristine) === null || _p === void 0 ? void 0 : _p.showUppercase, sortable: true, isPercentage: (_q = item.isPercentage) !== null && _q !== void 0 ? _q : (_r = item.pristine) === null || _r === void 0 ? void 0 : _r.isPercentage, calculatedField: calcField ? (info.value === 'sum' ? calcField + 'sum' : calcField) : undefined, groupName: (_s = item.groupName) !== null && _s !== void 0 ? _s : (_t = item.pristine) === null || _t === void 0 ? void 0 : _t.groupName, groupLabels: (_u = item.groupLabels) !== null && _u !== void 0 ? _u : (_v = item.pristine) === null || _v === void 0 ? void 0 : _v.groupLabels }); }); }); //将统计字段剔除 colList = colList.filter(function (item) { return !selectedStatisticalFieldData.includes(item.name); }); } return colList; }; var setDefault = function () { var param = { staticContent: staticContent, dataArea: dataArea, groupSelect: groupSelect, staticSelect: staticSelect }; localStorage.setItem('static-' + name, JSON.stringify(param)); antd_1.message.success('设置成功!'); }; var onReset = function () { if (localStorage.getItem('static-' + name)) { handleDefaultValue(); } else { var list_2 = []; columns.forEach(function (item) { if (item.pristine.isNumerical || (item === null || item === void 0 ? void 0 : item.isNumerical)) list_2.push(item.name); }); setGroupSelect([]); setStaticSelect(list_2); setStaticContent(['sum']); setDataArea('present'); } }; var renderFooter = function () { return react_1.default.createElement("div", { className: "statics-footer" }, react_1.default.createElement("div", null, !isStatic && react_1.default.createElement(antd_1.Button, { loading: loading, className: "tools-set-default", onClick: setDefault }, "\u8BBE\u7F6E\u9ED8\u8BA4\u503C"), react_1.default.createElement(antd_1.Button, { loading: loading, className: "tools-reset-default", onClick: onReset }, "\u91CD\u7F6E")), react_1.default.createElement("div", null, react_1.default.createElement(antd_1.Button, { loading: loading, onClick: function () { return setVisible(false); } }, "\u53D6\u6D88"), react_1.default.createElement(antd_1.Button, { loading: loading, type: "primary", onClick: handleOk }, "\u786E\u8BA4"))); }; var renderBody = function () { return react_1.default.createElement("div", null, react_1.default.createElement("div", { className: "select-wrapper-group-container" }, react_1.default.createElement(commonSelect_1.SelectWrapperGroup, { label: "\u5206\u7EC4\u5B57\u6BB5", data: groupFields, onChange: handleGroupSelectsChange, defaultValue: groupSelect }), react_1.default.createElement(commonSelect_1.SelectWrapperGroup, { label: "\u7EDF\u8BA1\u5B57\u6BB5", data: staticFields, defaultValue: staticSelect, onChange: handleStaticSelectsChange })), react_1.default.createElement(commonSelect_1.SelectContent, { label: "\u7EDF\u8BA1\u5185\u5BB9", data: exports.staticList === null || exports.staticList === void 0 ? void 0 : exports.staticList.map(function (item) { return Object.assign({}, item, { disabled: btnStatus[item.value] || false }); }), defaultValue: staticContent, onChange: handleStaticTypeChange }), react_1.default.createElement(commonSelect_1.DataArea, { value: dataArea, className: "static-data-area", onChange: function (e) { setDataArea(e.target.value); } })); }; return (react_1.default.createElement(react_1.default.Fragment, null, renderButton(), !(0, helper_1.isMobile)() && visible && react_1.default.createElement(DragModal_1.default, { getContainer: props.container || document.body, zIndex: 1000, dialogVisible: visible, title: '统计', width: 540, destroyOnClose: true, centered: true, className: 'statics-modal common-modal-component', drag: true, afterClose: handleClose, footer: renderFooter(), onCancel: function () { return setVisible(false); } }, react_1.default.createElement(antd_1.Spin, { spinning: loading }, renderBody())))); }; exports.default = DataStatic; //# sourceMappingURL=./renderers/Table/DataStatic.js.map