|
|
|
@ -13,32 +13,47 @@ export default observer((props) => {
|
|
|
|
|
const maxKPI = Math.max(...(origin || []).map((ele) => (ele?.[targetField] || 0)));
|
|
|
|
|
const maxValue = Math.max(...(origin || []).map((ele) => ele[measureField]));
|
|
|
|
|
const _max = Math.max(maxKPI, maxValue);
|
|
|
|
|
const minValue = Math.min(...(origin || []).map((ele) => ele[measureField]));
|
|
|
|
|
const _min = Math.ceil(Math.min(0, minValue));
|
|
|
|
|
const sortData = origin.sort(sortBy(measureField)).slice(-itemLength);
|
|
|
|
|
// 顶格的值定在更远
|
|
|
|
|
const _parseData = sortData?.map((ele) => ({ ...ele,
|
|
|
|
|
[rangeField]: [0, Math.ceil(_max / 0.9)],
|
|
|
|
|
[rangeField]: [_min, Math.ceil(_max / 0.9)],
|
|
|
|
|
// [measureField]: [ele[measureField]],
|
|
|
|
|
[measureField]: ele[measureFieldArrKey] || [ele[measureField]],
|
|
|
|
|
[targetField]: (ele?.[targetField] || 0)
|
|
|
|
|
}));
|
|
|
|
|
return _parseData;
|
|
|
|
|
return { _parseData, _max, _min };
|
|
|
|
|
};
|
|
|
|
|
const dataMapped = dataSource.reduce((r, v) => ({...r, [v.groupsLabel]: v}), {});
|
|
|
|
|
const ifMergeTB = isEmpty(dataSource) ? false : !isEmpty(dataSource[0]?.[`${extProps.measureField}_arr`]);
|
|
|
|
|
|
|
|
|
|
const [parseData, setParseData] = useState([]);
|
|
|
|
|
const [maxV, setMaxV] = useState(0);
|
|
|
|
|
const [minV, setMinV] = useState(0);
|
|
|
|
|
useEffect(() => {
|
|
|
|
|
setParseData(dataParser(dataSource));
|
|
|
|
|
const _pdata = dataParser(dataSource);
|
|
|
|
|
setParseData(_pdata._parseData);
|
|
|
|
|
setMaxV(_pdata._max);
|
|
|
|
|
setMinV(_pdata._min);
|
|
|
|
|
return () => {};
|
|
|
|
|
}, [extProps.measureField, dataSource]);
|
|
|
|
|
|
|
|
|
|
const config = merge({
|
|
|
|
|
color: {
|
|
|
|
|
range: [ '#FFF3E1', '#FFF3E1'],
|
|
|
|
|
// range: [ '#FFF3E1', '#FFF3E1', '#FFe0b0', '#bfeec8'], // '#FFbcb8', '#FFe0b0',
|
|
|
|
|
range: [].concat((minV < 0 ? ['#ffe4e4'] : []), [ '#FFF3E1', '#FFF3E1']),
|
|
|
|
|
measure: ['#5B8FF9', '#61ddaa'],
|
|
|
|
|
target: '#FF9845',
|
|
|
|
|
},
|
|
|
|
|
bulletStyle: {
|
|
|
|
|
measure: (item, ...r) => {
|
|
|
|
|
if (item[extProps.measureField] < 0) {
|
|
|
|
|
return {
|
|
|
|
|
fill: '#F4664A',
|
|
|
|
|
};
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
label: {
|
|
|
|
|
target: false,
|
|
|
|
|
measure: {
|
|
|
|
|