Просмотр исходного кода

私有平台记录表格加总计

@dongkboy 3 месяцев назад
Родитель
Сommit
d5ca50ac6e

+ 48 - 1
src/views/platform/platformRecord.vue

@@ -61,7 +61,7 @@
         </el-col>
       </el-row>
     </el-form>
-    <el-table class="tableRecord" style="height: calc(100% - 192px)" :data="tableData">
+    <el-table class="tableRecord" style="height: calc(100% - 192px)" :data="tableData" show-summary :summary-method="getSummaries">
       <el-table-column prop="settlementId" label="结算记录编号" width="200"></el-table-column>
       <el-table-column prop="companyName" label="保险公司" width="200"></el-table-column>
       <el-table-column prop="invoiceType" label="应收项" width="200"></el-table-column>
@@ -216,7 +216,54 @@ const view = (scope) => {
   CredentialList.value = scope.fileUrl.split(',')
   viewCredential.value = true
 }
+const getSummaries = (param) => {
+  const { columns, data } = param
+  const sums: (string | VNode)[] = []
+  // 指定需要计算的字段列表(可根据需求添加字段名)
+  const specifiedFields = ['taxPoint', 'actualReceivedAmount'] // 替换为您需要的字段名
 
+  columns.forEach((column, index) => {
+    if (index === 0) {
+      sums[index] = h('div', { style: { textDecoration: 'underline' } }, [
+        '',
+      ])
+      return
+    }
+    // 计算数字类型字段和指定字段
+    const values = data.map((item) => {
+      const val = item[column.property]
+      // 排除空值
+      if (val === '' || val === null || val === undefined) {
+        return NaN
+      }
+      // 如果是数字类型,直接参与计算
+      if (typeof val === 'number') {
+        return val
+      }
+      // 如果字段在指定列表中,尝试转换为数字
+      if (specifiedFields.includes(column.property)) {
+        const num = Number(val)
+        return Number.isNaN(num) ? NaN : num
+      }
+      // 其他情况不参与计算
+      return NaN
+    })
+    if (!values.every((value) => Number.isNaN(value))) {
+      const total = values.reduce((prev, curr) => {
+        if (!Number.isNaN(curr)) {
+          return prev + curr
+        } else {
+          return prev
+        }
+      }, 0)
+      // 保留五位小数
+      sums[index] = ` ${total.toFixed(5)}`
+    } else {
+      sums[index] = '-'
+    }
+  })
+  return sums
+}
 onMounted(() => {
   initList();
   initOption();

+ 49 - 1
src/views/receivable/documentary/documentaryRecord.vue

@@ -52,7 +52,7 @@
         </el-col>
       </el-row>
     </el-form>
-    <el-table :data="tableData" style="height: calc(100% - 192px)">
+    <el-table :data="tableData" style="height: calc(100% - 192px)" show-summary :summary-method="getSummaries">
       <el-table-column prop="recordId" label="开票记录编号" width="200"></el-table-column>
       <el-table-column prop="companyId" label="保险公司" width="150">
         <template #default="scope">
@@ -305,6 +305,54 @@ const initOption = () => {
     })
   })
 }
+const getSummaries = (param) => {
+  const { columns, data } = param
+  const sums: (string | VNode)[] = []
+  // 指定需要计算的字段列表(可根据需求添加字段名)
+  const specifiedFields = ['taxPoint', 'actualReceivedAmount'] // 替换为您需要的字段名
+
+  columns.forEach((column, index) => {
+    if (index === 0) {
+      sums[index] = h('div', { style: { textDecoration: 'underline' } }, [
+        '',
+      ])
+      return
+    }
+    // 计算数字类型字段和指定字段
+    const values = data.map((item) => {
+      const val = item[column.property]
+      // 排除空值
+      if (val === '' || val === null || val === undefined) {
+        return NaN
+      }
+      // 如果是数字类型,直接参与计算
+      if (typeof val === 'number') {
+        return val
+      }
+      // 如果字段在指定列表中,尝试转换为数字
+      if (specifiedFields.includes(column.property)) {
+        const num = Number(val)
+        return Number.isNaN(num) ? NaN : num
+      }
+      // 其他情况不参与计算
+      return NaN
+    })
+    if (!values.every((value) => Number.isNaN(value))) {
+      const total = values.reduce((prev, curr) => {
+        if (!Number.isNaN(curr)) {
+          return prev + curr
+        } else {
+          return prev
+        }
+      }, 0)
+      // 保留五位小数
+      sums[index] = ` ${total.toFixed(5)}`
+    } else {
+      sums[index] = '-'
+    }
+  })
+  return sums
+}
 onMounted(() => {
   initList();
   initOption();

+ 50 - 2
src/views/receivable/handingFee/invoiceRecord.vue

@@ -62,7 +62,7 @@
         </el-col>
       </el-row>
     </el-form>
-    <el-table :data="tableData" height="calc(100% - 192px)">
+    <el-table :data="tableData" height="calc(100% - 192px)" show-summary :summary-method="getSummaries">
       <el-table-column prop="id" label="开票记录编号" width="200"></el-table-column>
       <el-table-column prop="companyALlName" label="保险公司" width="150">
       </el-table-column>
@@ -415,6 +415,54 @@ const companyChange = (e) => {
     company(name)
   }
 }
+const getSummaries = (param) => {
+  const { columns, data } = param
+  const sums: (string | VNode)[] = []
+  // 指定需要计算的字段列表(可根据需求添加字段名)
+  const specifiedFields = ['taxPoint', 'actualReceivedAmount'] // 替换为您需要的字段名
+
+  columns.forEach((column, index) => {
+    if (index === 0) {
+      sums[index] = h('div', { style: { textDecoration: 'underline' } }, [
+        '',
+      ])
+      return
+    }
+    // 计算数字类型字段和指定字段
+    const values = data.map((item) => {
+      const val = item[column.property]
+      // 排除空值
+      if (val === '' || val === null || val === undefined) {
+        return NaN
+      }
+      // 如果是数字类型,直接参与计算
+      if (typeof val === 'number') {
+        return val
+      }
+      // 如果字段在指定列表中,尝试转换为数字
+      if (specifiedFields.includes(column.property)) {
+        const num = Number(val)
+        return Number.isNaN(num) ? NaN : num
+      }
+      // 其他情况不参与计算
+      return NaN
+    })
+    if (!values.every((value) => Number.isNaN(value))) {
+      const total = values.reduce((prev, curr) => {
+        if (!Number.isNaN(curr)) {
+          return prev + curr
+        } else {
+          return prev
+        }
+      }, 0)
+      // 保留五位小数
+      sums[index] = ` ${total.toFixed(5)}`
+    } else {
+      sums[index] = '-'
+    }
+  })
+  return sums
+}
 onMounted(() => {
   initList();
   initOption();
@@ -491,4 +539,4 @@ onMounted(() => {
   width: 100%;
   height: 100%;
 }
-</style>
+</style>