|
@@ -69,7 +69,7 @@
|
|
|
<p>应收明细</p>
|
|
<p>应收明细</p>
|
|
|
<el-button type="primary" @click="addTicket">添加应收</el-button>
|
|
<el-button type="primary" @click="addTicket">添加应收</el-button>
|
|
|
</div>
|
|
</div>
|
|
|
- <el-table :data="tableData" style="height: calc(100% - 380px)">
|
|
|
|
|
|
|
+ <el-table :data="tableData" style="height: calc(100% - 380px)" show-summary :summary-method="getSummaries">
|
|
|
<template #empty>
|
|
<template #empty>
|
|
|
<div v-if="noData">暂无应收,点击<el-button link type="primary" @click="batchShow = true">导入应收</el-button></div>
|
|
<div v-if="noData">暂无应收,点击<el-button link type="primary" @click="batchShow = true">导入应收</el-button></div>
|
|
|
<div v-else>没有符合的应收单据~</div>
|
|
<div v-else>没有符合的应收单据~</div>
|
|
@@ -406,6 +406,54 @@ const uploadJYFile = async (file) => {
|
|
|
})
|
|
})
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
+const getSummaries = (param) => {
|
|
|
|
|
+ const { columns, data } = param
|
|
|
|
|
+ const sums: (string | VNode)[] = []
|
|
|
|
|
+ // 指定需要计算的字段列表(可根据需求添加字段名)
|
|
|
|
|
+ const specifiedFields = ['jqPremium', 'jqSuperviseCostsProportion','syPremium','sySuperviseCostsProportion','receivableAmount'] // 替换为您需要的字段名
|
|
|
|
|
+
|
|
|
|
|
+ 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
|
|
|
|
|
+}
|
|
|
// 下载导入失败文件
|
|
// 下载导入失败文件
|
|
|
const downloadImportFailedData = (item) => {
|
|
const downloadImportFailedData = (item) => {
|
|
|
const link = document.createElement('a');
|
|
const link = document.createElement('a');
|