linkmore-design
Version:
๐ ๐lm็ปไปถๅบใ๐
88 lines (87 loc) โข 2.72 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
function getSum(item, dataIndex) {
var sum = 0;
item.children.forEach(function (subItem) {
var value;
if (/\%/.test("".concat(subItem[dataIndex]))) {
value = Number(subItem["".concat(dataIndex, "_sum")]);
} else {
value = Number(subItem[dataIndex]);
}
if (Number.isNaN(value)) {
return;
}
sum += value;
});
return sum;
}
// ๅ็ปๆฑๅ่ฎก็ฎ
export default function calc(item, needCalcKeys, history) {
var _item$children;
if (item !== null && item !== void 0 && (_item$children = item.children) !== null && _item$children !== void 0 && _item$children.length) {
needCalcKeys.forEach(function (dkey) {
if (!item.children || !item.children.length) {
return;
}
var _dkey = _slicedToArray(dkey, 2),
dataIndex = _dkey[0],
expression = _dkey[1];
item["".concat(dataIndex, "_exp")] = expression;
if (expression === 'sum') {
var sum = getSum(item, dataIndex);
item[dataIndex] = Number(sum).toFixed(2);
} else if (expression === 'average') {
var _sum = getSum(item, dataIndex);
item[dataIndex] = (_sum / item.children.length).toFixed(2);
} else if (expression === 'max') {
var max = -Number.MAX_VALUE;
item.children.forEach(function (subItem) {
var value = Number(subItem[dataIndex]);
if (Number.isNaN(value)) {
return;
}
if (value > max) {
max = value;
}
});
if (max === -Number.MAX_VALUE) {
max = 0;
}
item[dataIndex] = max;
} else if (expression === 'min') {
var min = Number.MAX_VALUE;
item.children.forEach(function (subItem) {
var value = Number(subItem[dataIndex]);
if (Number.isNaN(value)) {
return;
}
if (value < min) {
min = value;
}
});
if (min === Number.MAX_VALUE) {
min = 0;
}
item[dataIndex] = min;
} else if (expression === 'percent') {
var _sum2 = getSum(item, dataIndex);
history.push({
item: item,
dataIndex: dataIndex,
sum: _sum2
});
}
});
}
}
export var reset = function reset(arr, dataIndex) {
arr === null || arr === void 0 ? void 0 : arr.forEach(function (item) {
if (item !== null && item !== void 0 && item.children) {
reset(item === null || item === void 0 ? void 0 : item.children, dataIndex);
}
if (item.children) {
delete item[dataIndex];
delete item["".concat(dataIndex, "_exp")];
}
});
};