fastlion-amis
Version:
一种MIS页面生成工具
353 lines (352 loc) • 19.2 kB
JavaScript
"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