UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

128 lines (126 loc) 3.95 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _lodash = require("lodash"); var _expression = _interopRequireWildcard(require("../expression")); var _select = _interopRequireDefault(require("../../select")); const Option = _select.default.Option; const dfs = function (dataSource, dataIndex, expression) { const traverse = arr => { let history = []; arr?.forEach(item => { if (item?.children) { traverse(item?.children); } (0, _expression.default)(item, [[dataIndex, expression]], history); }); if (history && history.length) { let sum = 0; history.forEach(h => { sum += h.sum; }); history.forEach(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[`${h.dataIndex}_sum`] = sum; }); } }; traverse(dataSource); }; const strategy = [{ value: '', label: '不计算' }, { value: 'percent', label: '百分比' }, { value: 'average', label: '平均值' }, { value: 'max', label: '最大值' }, { value: 'min', label: '最小值' }, { value: 'sum', label: '总计值' }]; const CalcExpression = props => { const { record, col, columns, children, onChangeRecord, onExpressionChange, ...rest } = props; // 鼠标移进移除不会重新渲染 const restParams = (0, _lodash.omit)(rest, ['onMouseEnter', 'onMouseLeave']); // 列参数 let isShowSelect = false; // 下拉框是否展示 let currentStrategy = []; // 使用的计算策略 if (col?.expression) { if (typeof col?.expression === 'boolean') { isShowSelect = true; currentStrategy = strategy; } else if (Array.isArray(col.expression)) { isShowSelect = true; currentStrategy = strategy.filter(item => col.expression.includes(item.value)); } } const onChange = value => { if (!col.dataIndex) { throw Error('no parameter dataIndex'); } if (value) { onChangeRecord(dfs, col.dataIndex, value, true); } else { onChangeRecord(_expression.reset, col.dataIndex, value, true); } onExpressionChange && onExpressionChange(col, value); }; (0, _react.useEffect)(() => { // 使用默认值初始化 if (col?.defaultExpression) { onChangeRecord(dfs, col.dataIndex, col?.defaultExpression, false); } }, [col?.defaultExpression]); if (record && record._group && isShowSelect && col?.dataIndex) { const select = Object.assign({ placeholder: '不计算', allowClear: false, size: "small", bordered: false }, col.expressionSelect ? col.expressionSelect : {}); return /*#__PURE__*/_react.default.createElement("td", restParams, /*#__PURE__*/_react.default.createElement("div", { style: { display: 'flex', alignItems: 'center' } }, /*#__PURE__*/_react.default.createElement("span", null, record[col.dataIndex]), /*#__PURE__*/_react.default.createElement(_select.default, (0, _extends2.default)({ className: "calc-select", value: record[`${col.dataIndex}_exp`], onChange: onChange }, select), currentStrategy.map(item => /*#__PURE__*/_react.default.createElement(Option, { className: "calc-option", value: item.value, key: item.value }, item.label))))); } return /*#__PURE__*/_react.default.createElement("td", restParams, children); }; var _default = CalcExpression; exports.default = _default;