UNPKG

fastlion-amis

Version:

一种MIS页面生成工具

353 lines (352 loc) 19.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var react_1 = tslib_1.__importStar(require("react")); var components_1 = require("../../../components"); var icons_1 = require("../../../components/icons"); var helper_1 = require("../../../utils/helper"); var DragModal_1 = tslib_1.__importDefault(require("../../../components/DragModal")); var antd_1 = require("antd"); var commonSelect_1 = require("../commonSelect"); require("../dataStatic.scss"); require("./index.scss"); var commonTableFunction_1 = require("../../../store/utils/commonTableFunction"); var tools_1 = require("../../../utils/shell/tools"); var lodash_1 = require("lodash"); var toolFunc_1 = require("./toolFunc"); var chartTools_1 = require("../DataCharts/chartTools"); var AbcAnalysis = function (props) { var action = props.action, columns = props.columns, loadDataOnce = props.loadDataOnce, getAllData = props.getAllData, data = props.data, handleDealData = props.handleDealData, staticRecords = props.staticRecords, crudTitle = props.crudTitle, name = props.name, primaryField = props.primaryField; var _a = (0, react_1.useState)(false), visible = _a[0], setVisible = _a[1]; var _b = (0, react_1.useState)(false), loading = _b[0], setLoading = _b[1]; // A类数值 var _c = (0, react_1.useState)(65), aType = _c[0], setAType = _c[1]; // B类数值 var _d = (0, react_1.useState)(85), bType = _d[0], setBType = _d[1]; // 分类列表 var _e = (0, react_1.useState)([]), sortData = _e[0], setSortData = _e[1]; // 统计列表 var _f = (0, react_1.useState)([]), statisticsFields = _f[0], setStatisticsFields = _f[1]; // 分类选中列表 var _g = (0, react_1.useState)(), sortSelectes = _g[0], setSortSelectes = _g[1]; // 统计选中列表 var _h = (0, react_1.useState)(), statisticsSelects = _h[0], setStatisticsSelects = _h[1]; // 设置选中项 var _j = (0, react_1.useState)('auto'), settingType = _j[0], setSettingType = _j[1]; // 数据范围选中项 var _k = (0, react_1.useState)('present'), dataArea = _k[0], setDataArea = _k[1]; // 是否显示每一类的列表 var _l = (0, react_1.useState)(false), displayEachColumn = _l[0], setDisplayEachColumn = _l[1]; //记录是否已经打开过 var hasInit = (0, react_1.useRef)(false); // 初始化 var mountHandle = function () { // let dataTypeArr = ['10', '11', '14', '15']; var statisticsFields = []; var sortData = []; columns.forEach(function (col) { var obj = { title: (0, commonTableFunction_1.getColumnShowLabel)(col), value: col.name || '' }; if (['number', 'statc-number', 'input-number'].includes(col.type)) { statisticsFields.push(obj); } sortData.push(obj); }); setSortData(sortData); setStatisticsFields(statisticsFields); }; (0, react_1.useEffect)(function () { mountHandle(); }, [columns]); (0, react_1.useEffect)(function () { //如果是第一次打开,就使用默认值,否则使用上一次的值 if (visible) { if (!hasInit.current) { var defaultValueStr = localStorage.getItem('analysis-' + name); if (!(0, lodash_1.isNil)(defaultValueStr)) { var defaultValues = JSON.parse(defaultValueStr); setSortSelectes(defaultValues.sortSelectes); setStatisticsSelects(defaultValues.statisticsSelects); setAType(defaultValues.aType); setBType(defaultValues.bType); setSettingType(defaultValues.settingType); setDisplayEachColumn(defaultValues.displayEachColumn); setDataArea(defaultValues.dataArea); } } 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": [ { "type": "auto-width", "label": "列宽", "icon": "#icon-tooltool_autowidth", "align": "right" }, { "redDot": false, "actionType": "export", "type": "action", "name": "default_export", "label": "导出", "icon": "#icon-tooltool_download", "tooltip": "默认导出", "align": "right", "close": true, "tooltipPlacement": "top" }, ], "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 check = function () { if (!dataArea) { return antd_1.message.info({ content: '请选择范围' }); } if (tools_1.tools.isEmpty(aType) && settingType === 'manual') { return antd_1.message.info({ content: '请填写A类' }); } if (tools_1.tools.isEmpty(bType) && settingType === 'manual') { return antd_1.message.info({ content: '请填写B类' }); } if (aType > bType && settingType === 'manual') { return antd_1.message.info({ content: 'A类不得大于B类' }); } if (tools_1.tools.isEmpty(sortSelectes)) { return antd_1.message.info({ content: '请选择分类' }); } if (tools_1.tools.isEmpty(statisticsSelects)) { return antd_1.message.info({ content: '请选择统计值' }); } if (sortSelectes === statisticsSelects) { return antd_1.message.info({ content: '分类不能和统计值相同' }); } return true; }; var handleAction = function () { setVisible(true); }; var handleOk = function () { return tslib_1.__awaiter(void 0, void 0, void 0, function () { var calcData, res, params, _a, tableData, tableColumns, list, chartSchema; var _b; return tslib_1.__generator(this, function (_c) { switch (_c.label) { case 0: if (check() !== true) return [2 /*return*/]; calcData = dataArea === 'all' ? (loadDataOnce ? data.itemRaws : []) : (dataArea === 'some' ? data.selectedItems : data.items); if (!(dataArea === 'all')) return [3 /*break*/, 2]; if (loadDataOnce && (!data.itemRaws || !data.itemRaws.length)) { return [2 /*return*/, antd_1.message.warn({ content: '当前数据为空' })]; } if (!!loadDataOnce) return [3 /*break*/, 2]; setLoading(true); return [4 /*yield*/, getAllData([sortSelectes, statisticsSelects].filter(function (item) { return !(0, lodash_1.isNil)(item); }))]; case 1: res = _c.sent(); setLoading(false); if (!res || !res.items || !res.items.length) { return [2 /*return*/, antd_1.message.warn({ content: '当前数据为空' })]; } calcData = res.items; _c.label = 2; case 2: params = { dataArea: dataArea, sortSelectes: sortSelectes, statisticsSelects: statisticsSelects, settingType: settingType, aType: aType, bType: bType, displayEachColumn: displayEachColumn }; _a = (0, toolFunc_1.getAbcTableData)(params, calcData, columns), tableData = _a.tableData, tableColumns = _a.tableColumns; setLoading(false); list = (0, toolFunc_1.getBasedCount)(calcData, sortSelectes, statisticsSelects); chartSchema = (0, chartTools_1.getChartSchema)({ type: 'line-bar', selectedXAxisData: sortSelectes, selectedYAxisData: [statisticsSelects, 'countPer'], data: list, columns: tslib_1.__spreadArray(tslib_1.__spreadArray([], columns, true), [{ label: ((_b = columns.find(function (col) { return col.name === statisticsSelects; })) === null || _b === void 0 ? void 0 : _b.label) + '累计占有', name: 'countPer', type: 'number', suffix: '%', precision: 3, isPercentage: true }], false), primaryField: primaryField !== null && primaryField !== void 0 ? primaryField : '', barValue: [statisticsSelects], chartTitle: crudTitle, tableName: name }, tableData); handleDealData('data-analysis', crudTitle ? crudTitle + '-ABC分析' : 'ABC分析', { tableSchema: createSchema(tableColumns, tableData), chartSchema: chartSchema }, tslib_1.__assign(tslib_1.__assign({}, params), { sortData: sortData, statisticsFields: statisticsFields })); setVisible(false); staticRecords(145); return [2 /*return*/]; } }); }); }; var setDefault = function () { var param = { sortSelectes: sortSelectes, statisticsSelects: statisticsSelects, aType: aType, bType: bType, settingType: settingType, displayEachColumn: displayEachColumn, dataArea: dataArea }; localStorage.setItem('analysis-' + name, JSON.stringify(param)); antd_1.message.success('设置成功!'); }; var onReset = function () { var defaultValueStr = localStorage.getItem('analysis-' + name); if (!(0, lodash_1.isNil)(defaultValueStr)) { var defaultValues = JSON.parse(defaultValueStr); setSortSelectes(defaultValues.sortSelectes); setStatisticsSelects(defaultValues.statisticsSelects); setAType(defaultValues.aType); setBType(defaultValues.bType); setSettingType(defaultValues.settingType); setDisplayEachColumn(defaultValues.displayEachColumn); setDataArea(defaultValues.dataArea); } else { setSortSelectes(undefined); setStatisticsSelects(undefined); setAType(65); setBType(85); setSettingType('auto'); setDisplayEachColumn(false); setDataArea('present'); } }; var handleClose = function () { setSortSelectes(undefined); setStatisticsSelects(undefined); setAType(65); setBType(85); setSettingType('auto'); setDisplayEachColumn(false); setDataArea('present'); }; 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 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\u7C7B", type: 'single', data: sortData, defaultValue: [sortSelectes], onChange: function (_a) { var value = _a[0]; setSortSelectes(value); } }), react_1.default.createElement(commonSelect_1.SelectWrapperGroup, { label: "\u7EDF\u8BA1\u503C", type: 'single', data: statisticsFields, defaultValue: [statisticsSelects], onChange: function (_a) { var value = _a[0]; setStatisticsSelects(value); } })), react_1.default.createElement(antd_1.Row, { className: 'tools-area abc-setting-item' }, react_1.default.createElement(antd_1.Col, { span: 24, className: 'tools-label' }, react_1.default.createElement("span", null, "\u8BBE\u7F6E")), react_1.default.createElement(antd_1.Row, null, react_1.default.createElement(antd_1.Col, { span: 24 }, react_1.default.createElement(antd_1.Radio.Group, { value: settingType, onChange: function (e) { return setSettingType(e.target.value); } }, react_1.default.createElement(antd_1.Radio, { value: 'auto', className: 'abc-setting-item-radio' }, "\u81EA\u52A8\u5BFB\u627E"), react_1.default.createElement(antd_1.Radio, { value: 'manual', className: 'abc-setting-item-radio' }, "\u624B\u5DE5\u8BBE\u7F6E"))), react_1.default.createElement(antd_1.Col, { span: 24 }, react_1.default.createElement("div", { className: 'abc-type-setting-container' }, react_1.default.createElement("div", { className: 'abc-type-setting' }, react_1.default.createElement("span", { className: 'manual-type' }, "A\u7C7B\uFF1A \u00A00% - "), react_1.default.createElement(antd_1.InputNumber, { min: 0, max: 80, width: 60, disabled: settingType === 'auto', formatter: function (value) { return "".concat(value, "%"); }, parser: function (value) { return value.replace('%', ''); }, onChange: function (value) { return setAType(value); }, value: aType })), react_1.default.createElement("div", { className: 'abc-type-setting' }, react_1.default.createElement("span", { className: 'manual-type' }, "B\u7C7B\uFF1A ", aType, "% - "), react_1.default.createElement(antd_1.InputNumber, { min: 0, max: 100, disabled: settingType === 'auto', formatter: function (value) { return "".concat(value, "%"); }, parser: function (value) { return value.replace('%', ''); }, onChange: function (value) { return setBType(value); }, value: bType })), react_1.default.createElement("div", { style: { lineHeight: '32px' }, className: 'manual-type' }, "C\u7C7B\uFF1A ", bType, "% - 100%"))))), react_1.default.createElement(commonSelect_1.DataArea, { value: dataArea, className: "static-data-area", onChange: function (e) { return setDataArea(e.target.value); } }), react_1.default.createElement(antd_1.Row, { className: 'mg-top15' }, react_1.default.createElement(antd_1.Checkbox, { checked: displayEachColumn, onChange: function (e) { return setDisplayEachColumn(e.target.checked); } }, "\u663E\u793A\u6BCF\u4E00\u7C7B\u7684\u5217\u8868"))); }; var renderFooter = function () { return react_1.default.createElement("div", { className: "statics-footer" }, react_1.default.createElement("div", null, react_1.default.createElement(antd_1.Button, { disabled: loading, className: "tools-set-default", onClick: setDefault }, "\u8BBE\u7F6E\u9ED8\u8BA4\u503C"), react_1.default.createElement(antd_1.Button, { disabled: loading, className: "tools-reset-default", onClick: onReset }, "\u91CD\u7F6E")), react_1.default.createElement("div", null, react_1.default.createElement(antd_1.Button, { disabled: loading, onClick: function () { return setVisible(false); } }, "\u53D6\u6D88"), react_1.default.createElement(antd_1.Button, { disabled: loading, type: "primary", onClick: handleOk }, "\u786E\u8BA4"))); }; 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: 'ABC\u5206\u6790', width: 540, destroyOnClose: true, centered: true, drag: true, footer: renderFooter(), className: 'statics-modal common-modal-component', onCancel: function () { return setVisible(false); }, afterClose: handleClose }, react_1.default.createElement(antd_1.Spin, { spinning: loading }, renderBody()))); }; exports.default = AbcAnalysis; //# sourceMappingURL=./renderers/Table/AbcAnalysis/index.js.map