89 lines
2.7 KiB
JavaScript
89 lines
2.7 KiB
JavaScript
export default {
|
|
props:{
|
|
scrollbarSize:{
|
|
type:Number,
|
|
default:0
|
|
},
|
|
fixedLeftColumns:{
|
|
type:Array,
|
|
default:()=>[]
|
|
},
|
|
data:{
|
|
type:Array,
|
|
default:()=>[]
|
|
},
|
|
transColumns:{
|
|
type:Array,
|
|
default:()=>[]
|
|
},
|
|
border:{
|
|
type:Boolean,
|
|
default:false
|
|
},
|
|
showSummary:{
|
|
type:Boolean,
|
|
default:false
|
|
},
|
|
summaryMethod:{
|
|
type:Function
|
|
},
|
|
sumText:{
|
|
type:String,
|
|
default:'合计'
|
|
},
|
|
headerFooterTableLeft:{
|
|
type:Number,
|
|
default:0
|
|
},
|
|
handleFooterTableScrollLeft:Function,
|
|
},
|
|
data(){
|
|
return{
|
|
sums:[]
|
|
}
|
|
},
|
|
watch:{
|
|
'data':{
|
|
deep:true,
|
|
immediate:true,
|
|
handler(newValue,oldValue){
|
|
let sums = [];
|
|
if (this.summaryMethod) {
|
|
sums = this.summaryMethod({ columns: this.transColumns, data: this.data });
|
|
} else {
|
|
this.transColumns.forEach((column, index) => {
|
|
if (index === 0) {
|
|
sums[index] = this.sumText;
|
|
return;
|
|
}
|
|
const values = this.data.map(item => Number(item[column.name]));
|
|
const precisions = [];
|
|
let notNumber = true;
|
|
values.forEach(value => {
|
|
if (!isNaN(value)) {
|
|
notNumber = false;
|
|
let decimal = ('' + value).split('.')[1];
|
|
precisions.push(decimal ? decimal.length : 0);
|
|
}
|
|
});
|
|
const precision = Math.max.apply(null, precisions);
|
|
if (!notNumber) {
|
|
sums[index] = values.reduce((prev, curr) => {
|
|
const value = Number(curr);
|
|
if (!isNaN(value)) {
|
|
return parseFloat((prev + curr).toFixed(Math.min(precision, 20)));
|
|
} else {
|
|
return prev;
|
|
}
|
|
}, 0);
|
|
} else {
|
|
sums[index] = '';
|
|
}
|
|
});
|
|
}
|
|
this.sums = sums
|
|
},
|
|
}
|
|
}
|
|
}
|