|  |  |  | 
|---|
|  |  |  | max-height="800" | 
|---|
|  |  |  | border | 
|---|
|  |  |  | highlight-current-row | 
|---|
|  |  |  | :summary-method="getSummaries" | 
|---|
|  |  |  | show-summary | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <el-table-column | 
|---|
|  |  |  | prop="orderno" | 
|---|
|  |  |  | align="center" | 
|---|
|  |  |  | label="序号" | 
|---|
|  |  |  | width="88" | 
|---|
|  |  |  | fixed | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template slot-scope="scope"> | 
|---|
|  |  |  | <el-input v-model="scope.row.orderno" placeholder="序号" /> | 
|---|
|  |  |  | 
|---|
|  |  |  | align="center" | 
|---|
|  |  |  | label="服务类型" | 
|---|
|  |  |  | width="200" | 
|---|
|  |  |  | fixed | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template slot-scope="scope"> | 
|---|
|  |  |  | <el-select | 
|---|
|  |  |  | 
|---|
|  |  |  | :value="dict.id" | 
|---|
|  |  |  | ></el-option> | 
|---|
|  |  |  | </el-select> | 
|---|
|  |  |  | <!-- <el-cascader | 
|---|
|  |  |  | v-model="scope.row.applytype" | 
|---|
|  |  |  | :options="aaoptions" | 
|---|
|  |  |  | :show-all-levels="false" | 
|---|
|  |  |  | ></el-cascader> --> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column | 
|---|
|  |  |  | prop="jxrq" | 
|---|
|  |  |  | align="center" | 
|---|
|  |  |  | label="绩效日期" | 
|---|
|  |  |  | width="260" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template slot-scope="scope"> | 
|---|
|  |  |  | <el-date-picker | 
|---|
|  |  |  | v-model="scope.row.jxrq" | 
|---|
|  |  |  | type="date" | 
|---|
|  |  |  | placeholder="选择日期" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </el-date-picker> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column | 
|---|
|  |  |  | 
|---|
|  |  |  | <el-input | 
|---|
|  |  |  | v-model="scope.row.amount" | 
|---|
|  |  |  | placeholder="税前金额" | 
|---|
|  |  |  | @blur=" | 
|---|
|  |  |  | val => { | 
|---|
|  |  |  | calculateTax(scope.row, 'A'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | " | 
|---|
|  |  |  | @blur="chargeSum" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | <el-table-column | 
|---|
|  |  |  | prop="taxamount" | 
|---|
|  |  |  | align="center" | 
|---|
|  |  |  | label="扣税金额" | 
|---|
|  |  |  | width="120" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template slot-scope="scope"> | 
|---|
|  |  |  | <el-input | 
|---|
|  |  |  | @blur="chargeSum" | 
|---|
|  |  |  | v-model="scope.row.taxamount" | 
|---|
|  |  |  | placeholder="扣税金额" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | 
|---|
|  |  |  | <el-input | 
|---|
|  |  |  | v-model="scope.row.taxedamount" | 
|---|
|  |  |  | placeholder="税后金额" | 
|---|
|  |  |  | @blur=" | 
|---|
|  |  |  | val => { | 
|---|
|  |  |  | calculateTax(scope.row, 'B'); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | " | 
|---|
|  |  |  | @blur="queenchargeSum" | 
|---|
|  |  |  | /> | 
|---|
|  |  |  | </template> | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <el-table-column | 
|---|
|  |  |  | prop="beneficiaryname" | 
|---|
|  |  |  | align="center" | 
|---|
|  |  |  | 
|---|
|  |  |  | :visible.sync="pdfVisible" | 
|---|
|  |  |  | width="60%" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <div> | 
|---|
|  |  |  | <div style="margin-bottom: 10px;"> | 
|---|
|  |  |  | <el-table :data="tableDatatop" style="width: 100%"> | 
|---|
|  |  |  | <el-table-column | 
|---|
|  |  |  | prop="beneficiaryname" | 
|---|
|  |  |  | 
|---|
|  |  |  | </el-table-column> | 
|---|
|  |  |  | </el-table> | 
|---|
|  |  |  | </div> | 
|---|
|  |  |  |  | 
|---|
|  |  |  | <el-alert | 
|---|
|  |  |  | title="新上传文件需在提交保存后才可进行案例关联,否则视为放弃" | 
|---|
|  |  |  | type="error" | 
|---|
|  |  |  | show-icon | 
|---|
|  |  |  | close-text="知道了" | 
|---|
|  |  |  | > | 
|---|
|  |  |  | </el-alert> | 
|---|
|  |  |  | <el-tabs | 
|---|
|  |  |  | style="margin-top: 20px;" | 
|---|
|  |  |  | v-model="activeName" | 
|---|
|  |  |  | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <template slot-scope="scope"> | 
|---|
|  |  |  | <el-button | 
|---|
|  |  |  | type="primary" | 
|---|
|  |  |  | type="danger" | 
|---|
|  |  |  | size="mini" | 
|---|
|  |  |  | @click.native.prevent.stop="deletedowfile(scope.row)" | 
|---|
|  |  |  | >删除</el-button | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //行记录的费用类型数组 | 
|---|
|  |  |  | rowfeeItemTypes: [{ label: "管理成本", value: "9" }], | 
|---|
|  |  |  |  | 
|---|
|  |  |  | aaoptions: [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | value: "niandu", | 
|---|
|  |  |  | label: "年度" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | value: "jidu", | 
|---|
|  |  |  | label: "季度", | 
|---|
|  |  |  | children: [ | 
|---|
|  |  |  | { | 
|---|
|  |  |  | value: "2024-03-31", | 
|---|
|  |  |  | label: "第一季度" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | value: "2024-6-30", | 
|---|
|  |  |  | label: "第二季度" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | value: "2024-9-30", | 
|---|
|  |  |  | label: "第三季度" | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | value: "2024-12-31", | 
|---|
|  |  |  | label: "第四季度" | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | { | 
|---|
|  |  |  | value: "yuedu", | 
|---|
|  |  |  | label: "月度", | 
|---|
|  |  |  | children: [ | 
|---|
|  |  |  | { label: "一月", value: new Date(2024, 0 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "二月", value: new Date(2024, 1 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "三月", value: new Date(2024, 2 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "四月", value: new Date(2024, 3 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "五月", value: new Date(2024, 4 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "六月", value: new Date(2024, 5 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "七月", value: new Date(2024, 6 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "八月", value: new Date(2024, 7 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "九月", value: new Date(2024, 8 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "十月", value: new Date(2024, 9 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "十一月", value: new Date(2024, 10 + 1, 0).getDate() }, | 
|---|
|  |  |  | { label: "十二月", value: new Date(2024, 11 + 1, 0).getDate() } | 
|---|
|  |  |  | ] | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ], | 
|---|
|  |  |  | //费用说明 | 
|---|
|  |  |  | feeBlocks: [], | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | invoicefileListto: [], | 
|---|
|  |  |  | invoicepdfimg: "", | 
|---|
|  |  |  | invoicepdfimgsrcList: [], | 
|---|
|  |  |  | invoDatatop: [], | 
|---|
|  |  |  | activeName: 1, //文件类型 | 
|---|
|  |  |  | //上传附件路径 | 
|---|
|  |  |  | uploadFileUrl: process.env.VUE_APP_BASE_API + "/common/upload", | 
|---|
|  |  |  | 
|---|
|  |  |  | flowconclusion: this.checkObj.flowlevelone, | 
|---|
|  |  |  | flowcontent: this.checkObj.flowconclusion | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | this.$modal.loading("正在提交审核,请稍候!"); | 
|---|
|  |  |  | checkfund(checkFundObj).then(res => { | 
|---|
|  |  |  | //关闭窗口 | 
|---|
|  |  |  | this.reset(); | 
|---|
|  |  |  | this.$modal.closeLoading(); | 
|---|
|  |  |  | this.$modal.msgSuccess("审核完成!"); | 
|---|
|  |  |  | this.$store.dispatch("tagsView/delView", this.$route); | 
|---|
|  |  |  | this.$router.go(-1); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //计算金额 | 
|---|
|  |  |  | calculateTax(row, type) { | 
|---|
|  |  |  | //税前扣税算税后 | 
|---|
|  |  |  | chargeSum(row, type) { | 
|---|
|  |  |  | let targetValue = 0; | 
|---|
|  |  |  | for (let i = 0; i < this.rbDetails.length; i++) { | 
|---|
|  |  |  | if (!this.rbDetails[i].amount) { | 
|---|
|  |  |  | this.rbDetails[i].amount = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!this.rbDetails[i].taxamount) { | 
|---|
|  |  |  | this.rbDetails[i].taxamount = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.rbDetails[i].taxedamount = | 
|---|
|  |  |  | parseFloat(this.rbDetails[i].amount) - | 
|---|
|  |  |  | parseFloat(this.rbDetails[i].taxamount); | 
|---|
|  |  |  | targetValue += parseFloat(this.rbDetails[i].amount); // 假设每个对象中的特定值存储在'specificValue'属性下 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | console.log(targetValue, "合计"); | 
|---|
|  |  |  | this.form.pretaxcost = targetValue; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | //税后扣税算税前 | 
|---|
|  |  |  | queenchargeSum(row, type) { | 
|---|
|  |  |  | for (let i = 0; i < this.rbDetails.length; i++) { | 
|---|
|  |  |  | if (!this.rbDetails[i].amount) { | 
|---|
|  |  |  | this.rbDetails[i].amount = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (!this.rbDetails[i].taxamount) { | 
|---|
|  |  |  | this.rbDetails[i].taxamount = 0; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.rbDetails[i].amount = | 
|---|
|  |  |  | parseFloat(this.rbDetails[i].taxamount) + | 
|---|
|  |  |  | parseFloat(this.rbDetails[i].taxedamount); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | unsave() { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.tableDatatop = []; | 
|---|
|  |  |  | this.fileListto = []; | 
|---|
|  |  |  | this.invoicefileListto = []; | 
|---|
|  |  |  | this.pdfimg = ""; | 
|---|
|  |  |  | this.invoicepdfimg = []; | 
|---|
|  |  |  | this.pdfimgsrcList = []; | 
|---|
|  |  |  | this.invoDatatop = []; | 
|---|
|  |  |  | this.invoicepdfimgsrcList = []; | 
|---|
|  |  |  | this.invoDatatop.push(row); | 
|---|
|  |  |  | this.tableDatatop.push(row); | 
|---|
|  |  |  | this.atpresent = index; | 
|---|
|  |  |  | this.pdfVisible = true; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (this.rbDetails[index].annexfilesList) { | 
|---|
|  |  |  | this.rbDetails[index].annexfilesList.forEach((value, indexson) => { | 
|---|
|  |  |  | const pdfimg = this.Networkheader + "/prod-api" + value.url; | 
|---|
|  |  |  | fetch(pdfimg, config) | 
|---|
|  |  |  | .then(response => response.blob()) | 
|---|
|  |  |  | .then(blob => { | 
|---|
|  |  |  | // 将获取的数据流转换为URL | 
|---|
|  |  |  | this.fileListto.push({ | 
|---|
|  |  |  | name: value.name, | 
|---|
|  |  |  | url: URL.createObjectURL(blob) | 
|---|
|  |  |  | const fetchPromises = this.rbDetails[index].annexfilesList.map( | 
|---|
|  |  |  | (value, indexson) => { | 
|---|
|  |  |  | const pdfimg = this.Networkheader + "/prod-api" + value.url; | 
|---|
|  |  |  | return fetch(pdfimg, config) | 
|---|
|  |  |  | .then(response => response.blob()) | 
|---|
|  |  |  | .then(blob => { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | name: value.name, | 
|---|
|  |  |  | url: URL.createObjectURL(blob) | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(error => { | 
|---|
|  |  |  | console.error("Error loading image", error); | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | if (this.fileListto.length == 1) { | 
|---|
|  |  |  | this.pdfimg = URL.createObjectURL(blob); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.pdfimgsrcList.push(URL.createObjectURL(blob)); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(error => { | 
|---|
|  |  |  | console.error("Error loading image", error); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Promise.all(fetchPromises).then(fileListto => { | 
|---|
|  |  |  | this.fileListto = fileListto.filter(item => item !== null); | 
|---|
|  |  |  | this.pdfimg = this.fileListto[0].url; | 
|---|
|  |  |  | console.log(this.pdfimg, "pdfimg"); | 
|---|
|  |  |  | this.pdfimgsrcList = this.fileListto.map(item => item.url); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.previewpdf = true; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.fileListto = []; | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | //发票 | 
|---|
|  |  |  | if (this.rbDetails[index].invoicefilesList) { | 
|---|
|  |  |  | this.rbDetails[index].invoicefilesList.forEach((value, indexson) => { | 
|---|
|  |  |  | const pdfimg = this.Networkheader + "/prod-api" + value.url; | 
|---|
|  |  |  | fetch(pdfimg, config) | 
|---|
|  |  |  | .then(response => response.blob()) | 
|---|
|  |  |  | .then(blob => { | 
|---|
|  |  |  | // 将获取的数据流转换为URL | 
|---|
|  |  |  | this.invoicefileListto.push({ | 
|---|
|  |  |  | name: value.name, | 
|---|
|  |  |  | url: URL.createObjectURL(blob) | 
|---|
|  |  |  | const fetchPromises = this.rbDetails[index].invoicefilesList.map( | 
|---|
|  |  |  | (value, indexson) => { | 
|---|
|  |  |  | const pdfimg = this.Networkheader + "/prod-api" + value.url; | 
|---|
|  |  |  | return fetch(pdfimg, config) | 
|---|
|  |  |  | .then(response => response.blob()) | 
|---|
|  |  |  | .then(blob => { | 
|---|
|  |  |  | return { | 
|---|
|  |  |  | name: value.name, | 
|---|
|  |  |  | url: URL.createObjectURL(blob) | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(error => { | 
|---|
|  |  |  | console.error("Error loading image", error); | 
|---|
|  |  |  | return null; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | if (this.invoicefileListto.length == 1) { | 
|---|
|  |  |  | this.invoicepdfimg = URL.createObjectURL(blob); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | this.invoicepdfimgsrcList.push(URL.createObjectURL(blob)); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | .catch(error => { | 
|---|
|  |  |  | console.error("Error loading image", error); | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | ); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | Promise.all(fetchPromises).then(invoicefileListto => { | 
|---|
|  |  |  | this.invoicefileListto = invoicefileListto.filter( | 
|---|
|  |  |  | item => item !== null | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | this.invoicepdfimg = this.invoicefileListto[0].url; | 
|---|
|  |  |  | console.log(this.invoicepdfimg, "invoicepdfimg"); | 
|---|
|  |  |  | this.invoicepdfimgsrcList = this.invoicefileListto.map( | 
|---|
|  |  |  | item => item.url | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | this.previewpdf = true; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.invoicefileListto = []; | 
|---|
|  |  |  | 
|---|
|  |  |  | this.pdftitle = ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if (this.activeName == 1) { | 
|---|
|  |  |  | if (this.activeName == "common") { | 
|---|
|  |  |  | this.pdftitle = "共" + this.pdfimgsrcList.length + "项"; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.pdftitle = "共" + this.invoicepdfimgsrcList.length + "项"; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | console.log(this.fileListto, "this.fileListto"); | 
|---|
|  |  |  | console.log(this.rbDetails[index].annexfilesList, "annexfilesList"); | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 点击已上传文件 | 
|---|
|  |  |  | 
|---|
|  |  |  | const index = this.getIndexInArray(this.fileListto, row); | 
|---|
|  |  |  | const item = this.fileListto.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中 | 
|---|
|  |  |  | this.fileListto.splice(index - 1, 0, item); // 将item插入到索引位置的前一位 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const indexann = this.rbDetails[ | 
|---|
|  |  |  | this.atpresent | 
|---|
|  |  |  | ].annexfilesList.findIndex(item => item.name == row.name); | 
|---|
|  |  |  | const itemann = this.rbDetails[this.atpresent].annexfilesList.splice( | 
|---|
|  |  |  | indexann, | 
|---|
|  |  |  | 1 | 
|---|
|  |  |  | )[0]; // 移除指定索引处的元素,并保存到item变量中 | 
|---|
|  |  |  | this.rbDetails[this.atpresent].annexfilesList.splice( | 
|---|
|  |  |  | indexann - 1, | 
|---|
|  |  |  | 0, | 
|---|
|  |  |  | itemann | 
|---|
|  |  |  | ); // 将itemann插入到索引位置的前一位 | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | const index = this.getIndexInArray(this.invoicefileListto, row); | 
|---|
|  |  |  | const item = this.invoicefileListto.splice(index, 1)[0]; // 移除指定索引处的元素,并保存到item变量中 | 
|---|
|  |  |  | this.invoicefileListto.splice(index - 1, 0, item); // 将item插入到索引位置的前一位 | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const indexinvo = this.rbDetails[ | 
|---|
|  |  |  | this.atpresent | 
|---|
|  |  |  | ].invoicefilesList.findIndex(item => item.name == row.name); | 
|---|
|  |  |  | const iteminvo = this.rbDetails[this.atpresent].invoicefilesList.splice( | 
|---|
|  |  |  | indexinvo, | 
|---|
|  |  |  | 1 | 
|---|
|  |  |  | )[0]; // 移除指定索引处的元素,并保存到item变量中 | 
|---|
|  |  |  | this.rbDetails[this.atpresent].invoicefilesList.splice( | 
|---|
|  |  |  | indexinvo - 1, | 
|---|
|  |  |  | 0, | 
|---|
|  |  |  | iteminvo | 
|---|
|  |  |  | ); // 将iteminvo插入到索引位置的前一位 | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | Downloadfile(row) { | 
|---|
|  |  |  | console.log(row); | 
|---|
|  |  |  | window.location.href = this.Networkheader + "/prod-api" + row.url; | 
|---|
|  |  |  | }, | 
|---|
|  |  |  | //表格合计 | 
|---|
|  |  |  | getSummaries(param) { | 
|---|
|  |  |  | const { columns, data } = param; | 
|---|
|  |  |  | const sums = []; | 
|---|
|  |  |  | var columnnames = [ | 
|---|
|  |  |  | "applytype", | 
|---|
|  |  |  | "itemid", | 
|---|
|  |  |  | "jxrq", | 
|---|
|  |  |  | "beneficiaryname", | 
|---|
|  |  |  | "idcardno", | 
|---|
|  |  |  | "depositbank", | 
|---|
|  |  |  | "bankcardno", | 
|---|
|  |  |  | "remark", | 
|---|
|  |  |  | ]; | 
|---|
|  |  |  | columns.forEach((column, index) => { | 
|---|
|  |  |  | if (index === 0) { | 
|---|
|  |  |  | sums[index] = "合计"; | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | //去除部分字段计算 | 
|---|
|  |  |  | if (columnnames.indexOf(column.property) > -1) { | 
|---|
|  |  |  | return; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const values = data.map(item => Number(item[column.property])); | 
|---|
|  |  |  | if (!values.every(value => isNaN(value))) { | 
|---|
|  |  |  | sums[index] = values.reduce((prev, curr) => { | 
|---|
|  |  |  | const value = Number(curr); | 
|---|
|  |  |  | if (!isNaN(value)) { | 
|---|
|  |  |  | return prev + curr; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | return prev; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, 0); | 
|---|
|  |  |  | sums[index] = sums[index].toFixed(2); // 保留2位小数,解决小数合计列; | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | sums[index] = ""; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | return sums; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }, | 
|---|
|  |  |  |  | 
|---|