|
@@ -110,9 +110,16 @@
|
|
|
:value="jsonData" :tableData="tableTempList" />
|
|
|
</template>
|
|
|
<template>
|
|
|
- <el-table v-if="jsonData && formType == 'calculateForm'" :data="calculateTableData" style="width: 100%">
|
|
|
+ <el-table v-if="jsonData && formType == 'calculateForm'" :data="calculateTableData" style="width: 100%"
|
|
|
+ :show-summary="showSummary" :summary-method="getformula">
|
|
|
+ <!-- 固定序号列 -->
|
|
|
+ <el-table-column label="序号" width="80" header-align="center" align="center">
|
|
|
+ <template #default="{ $index }">
|
|
|
+ {{ $index + 1 }}
|
|
|
+ </template>
|
|
|
+ </el-table-column>
|
|
|
<el-table-column v-for="(item, index) in calculateTableColumn" :key="index" :prop="item.prop"
|
|
|
- :label="item.label" header-align="center" align="center">
|
|
|
+ :label="item.label" header-align="center" align="center">
|
|
|
</el-table-column>
|
|
|
</el-table>
|
|
|
</template>
|
|
@@ -219,6 +226,8 @@ export default {
|
|
|
{ prop: 'name', label: '姓名', width: '180' },
|
|
|
{ prop: 'address', label: '地址' }
|
|
|
],
|
|
|
+ formula: 'sum',
|
|
|
+ showSummary: false,
|
|
|
isLayout: false,
|
|
|
QueryfromLoading: false,
|
|
|
layoutData: "", //表单组布局数据
|
|
@@ -869,6 +878,73 @@ export default {
|
|
|
console.log(this.times);
|
|
|
return;
|
|
|
},
|
|
|
+ getformula({ columns, data }) {
|
|
|
+ // console.log('[当前合计行的columns或data]', columns, data)
|
|
|
+ // console.log('[当前calculateTableColumn]', this.calculateTableColumn)
|
|
|
+ // 循环columns,将columns.property== this.calculateTableColumn数组中的prop的对象找出,将匹配的this.calculateTableColumn.type的值赋给columns.columns.type
|
|
|
+ // 遍历传入的columns数组,并更新ColumnType
|
|
|
+ columns = columns.map(column => {
|
|
|
+ if (column && column.property) {
|
|
|
+ const matchingColumn = this.calculateTableColumn.find(
|
|
|
+ calcColumn => calcColumn.prop === column.property
|
|
|
+ );
|
|
|
+ if (matchingColumn) {
|
|
|
+ column.ColumnType = matchingColumn.type;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return column;
|
|
|
+ });
|
|
|
+
|
|
|
+ const sums = [];
|
|
|
+ const formula = this.formula; // 假设formula是在组件数据中的变量
|
|
|
+
|
|
|
+ columns.forEach((column, index) => {
|
|
|
+ // 跳过序号列
|
|
|
+ if (index === 0) {
|
|
|
+ // 第一列显示合计行的标题
|
|
|
+ sums[index] = formula === 'sum' ? '合计' :
|
|
|
+ formula === 'min' ? '最小值' :
|
|
|
+ formula === 'max' ? '最大值' :
|
|
|
+ formula === 'average' ? '平均值' : '合计';
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 检查ColumnType是否为numberTotal或result
|
|
|
+ if (!['numberTotal', 'result'].includes(columns[index].ColumnType)) {
|
|
|
+ sums[index] = ''; // 如果不是这两种类型,则不显示合计信息
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取当前列的数据
|
|
|
+ const values = data.map(item => Number(item[column.property]));
|
|
|
+
|
|
|
+ // 确保所有值都是数字
|
|
|
+ if (values.every(value => !isNaN(value))) {
|
|
|
+ switch (formula) {
|
|
|
+ case 'sum':
|
|
|
+ sums[index] = values.reduce((prev, curr) => prev + curr, 0);
|
|
|
+ break;
|
|
|
+ case 'min':
|
|
|
+ sums[index] = Math.min(...values);
|
|
|
+ break;
|
|
|
+ case 'max':
|
|
|
+ sums[index] = Math.max(...values);
|
|
|
+ break;
|
|
|
+ case 'average':
|
|
|
+ sums[index] = values.reduce((prev, curr) => prev + curr, 0) / values.length;
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ sums[index] = values.reduce((prev, curr) => prev + curr, 0);
|
|
|
+ }
|
|
|
+ // 格式化显示(保留两位小数)
|
|
|
+ sums[index] = Number(sums[index].toFixed(2));
|
|
|
+ } else {
|
|
|
+ sums[index] = '-'; // 如果列中有非数字,显示 -
|
|
|
+ }
|
|
|
+ });
|
|
|
+
|
|
|
+ return sums;
|
|
|
+ },
|
|
|
// 计算表格方法
|
|
|
async handleCalculate(row, btnData) {
|
|
|
console.log("btnData, row", btnData, row);
|
|
@@ -931,8 +1007,6 @@ export default {
|
|
|
return;
|
|
|
}
|
|
|
if (btnFormType == "calculateForm") {
|
|
|
- console.log('========calculateForm==========',res)
|
|
|
- console.log('========res.data.result.resultMap==========',res.data.result.resultMap)
|
|
|
let optionsData = res.data.template.dfFormSql;//暂时不知道是干什么的
|
|
|
let templateData = res.data.template.dfVueTemplate;
|
|
|
this.addRealFieldName(res.data.result.resultMap);//没返回?
|
|
@@ -946,10 +1020,15 @@ export default {
|
|
|
this.open = true;
|
|
|
this.title = "计算表单";
|
|
|
let calculateResultMap = res.data.result.calculateResultMap
|
|
|
- if(calculateResultMap && calculateResultMap.tableColumn && calculateResultMap.tableValue){
|
|
|
+ if (calculateResultMap && calculateResultMap.tableColumn && calculateResultMap.tableValue) {
|
|
|
this.calculateTableData = calculateResultMap.tableValue
|
|
|
this.calculateTableColumn = calculateResultMap.tableColumn
|
|
|
- }else{
|
|
|
+
|
|
|
+
|
|
|
+ this.formula = calculateResultMap.formula
|
|
|
+ this.showSummary = calculateResultMap.showSummary
|
|
|
+
|
|
|
+ } else {
|
|
|
this.calculateTableData = []
|
|
|
this.calculateTableColumn = []
|
|
|
}
|