sql715 2 сар өмнө
parent
commit
3d34fc7846

+ 85 - 6
zkqy-ui/src/views/tablelist/commonTable/listInfo.vue

@@ -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 = []
             }

+ 4 - 4
zkqy-ui/src/views/tablelist/commonTable/listTreeInfo.vue

@@ -43,7 +43,7 @@
           <!-- show-checkbox 节点是否可以被选择 -->
           <el-tree :data="treeData" :props="defaultProps" 
           default-expand-all
-          @node-click="handleNodeClick" @node-dblclick="handleNodeDblClick" :expand-on-click-node="false">
+          @node-click="handleNodeClick" :expand-on-click-node="false">
             <span class="custom-tree-node" slot-scope="{ node, data }">
               <!-- <span style="margin-right: 10px;">{{ node.label }}</span> -->
               <span style="margin-right: 10px;">
@@ -689,9 +689,9 @@ export default {
         })
         .finally((fes) => {
           if (this.treeNode.id) {
-            console.log('[vtreeNode]', this.treeNode)
-            let columnValue = this.templateData?.treeTableCondition == 'name' ? this.treeNode.name : this.treeNode.label
-            let treeQueryMap = this.templateData?.treeTableJoinTableCondition
+            console.log('[vtreeNode]', this.templateData,this.treeNode)
+            let columnValue = this.templateData?.treeTableCondition == 'value' ? this.treeNode.value : this.treeNode.label
+            let treeQueryMap =  this.templateData?.treeTableCondition == 'value' ? this.templateData?.treeTablePrimaryKey : this.templateData?.treeTableJoinTableCondition
             this.queryParams.queryMap[treeQueryMap] = `'${columnValue}'`
             this.queryParams.queryMap.queryCriteriaValue = ''
             if (this.$refs.mychild) {