bee-table/src/lib/sum.js

90 lines
2.0 KiB
JavaScript
Raw Normal View History

import React from "react";
2018-12-19 15:45:25 +08:00
import {DicimalFormater} from "../utils";
export default function sum(Table) {
2017-09-28 14:29:18 +08:00
return class SumTable extends React.Component {
//无状态
constructor(props) {
super(props);
//array , tree
this.tableType = "array";
}
2018-04-24 10:40:10 +08:00
getNodeItem =(array,newArray)=>{
array.forEach((da,i)=>{
if(da.children){
this.getNodeItem(da.children,newArray);
}else{
newArray.push(da);
}
});
}
/**
* 获取当前的表格类型
*
*/
getTableType=()=>{
const {columns} = this.props;
let type = "array";
columns.find((da,i)=>{
if(da.children){
type = "tree";
return type;
}
})
return type;
}
2018-12-16 22:22:45 +08:00
addSumData=()=>{
let {data=[],columns=[]} = this.props;
let sumdata = {},newColumns = [],newData = [];
if (!Array.isArray(columns)) {console.log("columns type is error !");return;}
let type = this.getTableType();
2018-12-16 22:22:45 +08:00
if(type == 'tree'){
this.getNodeItem(columns,newColumns);
}else{
2018-12-16 22:22:45 +08:00
newColumns = columns;
}
2018-12-16 22:22:45 +08:00
//返回一个新的数据
newData = data.slice();
newColumns.forEach((column,index)=>{
sumdata[column.dataIndex] = "";
if(column.sumCol){
let count = 0;
data.forEach((da,i)=>{
2018-12-19 15:45:25 +08:00
let _num = parseFloat(da[column.key]);
2018-12-16 22:22:45 +08:00
//排查字段值为NAN情况
2018-12-19 15:45:25 +08:00
if(_num == _num){
2018-12-16 22:22:45 +08:00
count += _num;
}
})
2018-12-19 15:45:25 +08:00
sumdata[column.dataIndex] = DicimalFormater(count,2);
2018-12-16 22:22:45 +08:00
}
if(index == 0){
sumdata[column.dataIndex] = "合计 "+sumdata[column.dataIndex];
}
})
newData.push(sumdata);
return newData;
}
render() {
return (
<Table
{...this.props}
columns={this.props.columns}
2018-12-16 22:22:45 +08:00
showSum={true}
data={this.addSumData()}
/>
);
}
2017-09-28 14:29:18 +08:00
};
}