UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

123 lines (122 loc) 4.22 kB
import _extends from "@babel/runtime/helpers/esm/extends"; import _objectWithoutProperties from "@babel/runtime/helpers/esm/objectWithoutProperties"; var _excluded = ["record", "col", "columns", "children", "onChangeRecord", "onExpressionChange"]; import React, { useEffect } from 'react'; import { omit } from 'lodash'; import calc, { reset } from "../expression"; import Select from "../../select"; var Option = Select.Option; var dfs = function dfs(dataSource, dataIndex, expression) { var traverse = function traverse(arr) { var history = []; arr === null || arr === void 0 ? void 0 : arr.forEach(function (item) { if (item !== null && item !== void 0 && item.children) { traverse(item === null || item === void 0 ? void 0 : item.children); } calc(item, [[dataIndex, expression]], history); }); if (history && history.length) { var sum = 0; history.forEach(function (h) { sum += h.sum; }); history.forEach(function (h) { if (sum < 0.000001) { sum = 0; h.item[h.dataIndex] = '0%'; } else { h.item[h.dataIndex] = (h.sum / sum * 100).toFixed(2) + '%'; } h.item["".concat(h.dataIndex, "_sum")] = sum; }); } }; traverse(dataSource); }; var strategy = [{ value: '', label: '不计算' }, { value: 'percent', label: '百分比' }, { value: 'average', label: '平均值' }, { value: 'max', label: '最大值' }, { value: 'min', label: '最小值' }, { value: 'sum', label: '总计值' }]; var CalcExpression = function CalcExpression(props) { var record = props.record, col = props.col, columns = props.columns, children = props.children, onChangeRecord = props.onChangeRecord, onExpressionChange = props.onExpressionChange, rest = _objectWithoutProperties(props, _excluded); // 鼠标移进移除不会重新渲染 var restParams = omit(rest, ['onMouseEnter', 'onMouseLeave']); // 列参数 var isShowSelect = false; // 下拉框是否展示 var currentStrategy = []; // 使用的计算策略 if (col !== null && col !== void 0 && col.expression) { if (typeof (col === null || col === void 0 ? void 0 : col.expression) === 'boolean') { isShowSelect = true; currentStrategy = strategy; } else if (Array.isArray(col.expression)) { isShowSelect = true; currentStrategy = strategy.filter(function (item) { return col.expression.includes(item.value); }); } } var onChange = function onChange(value) { if (!col.dataIndex) { throw Error('no parameter dataIndex'); } if (value) { onChangeRecord(dfs, col.dataIndex, value, true); } else { onChangeRecord(reset, col.dataIndex, value, true); } onExpressionChange && onExpressionChange(col, value); }; useEffect(function () { // 使用默认值初始化 if (col !== null && col !== void 0 && col.defaultExpression) { onChangeRecord(dfs, col.dataIndex, col === null || col === void 0 ? void 0 : col.defaultExpression, false); } }, [col === null || col === void 0 ? void 0 : col.defaultExpression]); if (record && record._group && isShowSelect && col !== null && col !== void 0 && col.dataIndex) { var select = Object.assign({ placeholder: '不计算', allowClear: false, size: "small", bordered: false }, col.expressionSelect ? col.expressionSelect : {}); return /*#__PURE__*/React.createElement("td", restParams, /*#__PURE__*/React.createElement("div", { style: { display: 'flex', alignItems: 'center' } }, /*#__PURE__*/React.createElement("span", null, record[col.dataIndex]), /*#__PURE__*/React.createElement(Select, _extends({ className: "calc-select", value: record["".concat(col.dataIndex, "_exp")], onChange: onChange }, select), currentStrategy.map(function (item) { return /*#__PURE__*/React.createElement(Option, { className: "calc-option", value: item.value, key: item.value }, item.label); })))); } return /*#__PURE__*/React.createElement("td", restParams, children); }; export default CalcExpression;