| | |
| | | > |
| | | <el-option |
| | | v-for="item in personsList" |
| | | :key="item.reportNo" |
| | | :label="item.reportName" |
| | | :value="item.reportName" |
| | | > |
| | |
| | | > |
| | | <el-option |
| | | v-for="dict in dict.type.sys_travelexpensebelong" |
| | | :key="dict.value" |
| | | :label="dict.label" |
| | | :value="dict.value" |
| | | ></el-option> |
| | |
| | | <el-form-item |
| | | label="捐献者" |
| | | prop="infoid" |
| | | v-show="form.costtype == 4" |
| | | v-show="form.costtype == 3 || form.costtype == 4" |
| | | > |
| | | <el-select |
| | | v-model="form.infoid" |
| | | @change="selectbaseinfo" |
| | | @clear="clearDonatorInfo" |
| | | clearable |
| | | filterable |
| | | placeholder="请选择捐献者" |
| | |
| | | allow-create |
| | | default-first-option |
| | | placeholder="请选择" |
| | | @focus1="getPersons(scope.row)" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in personsSel" |
| | | :key="`${item.reportNo}_${index}`" |
| | | :label="item.reportName" |
| | | v-for="item in personsSel" |
| | | :key="item.id" |
| | | :label="item.reportNameDesc" |
| | | :value="item.reportName" |
| | | > |
| | | </el-option> |
| | |
| | | @change="getAccountinfo2(scope.row, scope.row.persontype)" |
| | | > |
| | | <el-option |
| | | v-for="(item, index) in personsSel" |
| | | :key="`${item.reportNo}_${index}`" |
| | | :label="item.reportName" |
| | | :value="item.reportName" |
| | | v-for="item in personsSel" |
| | | :key="item.id" |
| | | :label="item.reportNameDesc" |
| | | :value="item.id" |
| | | > |
| | | </el-option> |
| | | </el-select> |
| | |
| | | <el-col :span="12"> |
| | | <el-form-item label="预审材料" prop="infoid"> |
| | | <el-radio-group v-model="form.checkstatus" align="left"> |
| | | <el-radio label="1">待申请材料</el-radio> |
| | | <el-radio label="2">审核通过等待邮寄纸质材料</el-radio> |
| | | <el-radio label="3">已收到报销材料</el-radio> |
| | | <el-radio label="1">待申请</el-radio> |
| | | <el-radio label="2">审核通过等待纸质材料</el-radio> |
| | | <el-radio label="3">已收到纸质材料</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | </el-col> |
| | |
| | | <!-- <el-image |
| | | style="width: 95%; height: 90%" |
| | | :src="pdfimg" |
| | | :preview-src-list="pdfimgsrcList" --> |
| | | > |
| | | :preview-src-list="pdfimgsrcList" |
| | | > --> |
| | | <el-image |
| | | ref="imagePreview" |
| | | style="width: 95%; height: 90%" |
| | |
| | | |
| | | <script> |
| | | import pdf from "vue-pdf"; |
| | | import Decimal from 'decimal.js'; |
| | | import Treeselect from "@riophae/vue-treeselect"; |
| | | import "@riophae/vue-treeselect/dist/vue-treeselect.css"; |
| | | import { listDonatebaseinfo } from "@/api/project/donatebaseinfo"; |
| | |
| | | baselisttages: [ |
| | | { |
| | | id: 1, |
| | | name: "待申请材料" |
| | | name: "待申请" |
| | | }, |
| | | { |
| | | id: 2, |
| | | name: "审核通过等待邮寄纸质材料" |
| | | name: "预审通过等待纸质材料" |
| | | }, |
| | | { |
| | | id: 3, |
| | | name: "已收到报销材料" |
| | | name: "已收到纸质材料" |
| | | } |
| | | ], |
| | | baselist: [], |
| | |
| | | if ( |
| | | (JSON.stringify(this.form) == sessionStorage.getItem("apiform") && |
| | | JSON.stringify(this.rbDetails) == |
| | | sessionStorage.getItem("apifunddetail")) || |
| | | sessionStorage.getItem("apifunddetail")) || |
| | | !sessionStorage.getItem("apifunddetail") |
| | | ) { |
| | | } else { |
| | |
| | | handleImageLoad() { |
| | | console.log("图片加载成功"); |
| | | }, |
| | | handleUploadError() {}, |
| | | handleUploadError() { }, |
| | | // 获取请求头 |
| | | Getnetworkheader() { |
| | | console.log(window.location.href); |
| | |
| | | name: file.name, |
| | | url: URL.createObjectURL(blob) |
| | | }); |
| | | // console.log(file.response.url); |
| | | // console.log(file); |
| | | |
| | | this.pdfimgsrcList.push(file.response.url); |
| | | this.fileListto.push({ |
| | | name: file.response.fileName, |
| | | url: file.response.url |
| | | }); |
| | | console.log(URL.createObjectURL(blob), "ur转换"); |
| | | }) |
| | | .catch(error => { |
| | | console.error("Error loading image", error); |
| | |
| | | } else if (row.persontype == "管理人员") { |
| | | this.personsSel = this.personsManager; |
| | | } |
| | | if (this.personsSel && this.personsSel.length) { |
| | | this.personsList.forEach(item => { |
| | | item.reportNameDesc = `${item.reportName}(${item.unitname})`; |
| | | }); |
| | | } |
| | | }, |
| | | |
| | | //获取设置人员账号信息 |
| | |
| | | } |
| | | |
| | | for (let m = 0; m < dataArr.length; m++) { |
| | | if (dataArr[m].reportName == row.personname) { |
| | | if (dataArr[m].id == row.personname) { |
| | | row.personname = dataArr[m].reportName; |
| | | row.bankname = dataArr[m].depositbank; |
| | | row.bankcardno = dataArr[m].bankcardno; |
| | | } |
| | |
| | | row.days = ( |
| | | Math.floor( |
| | | Math.abs(Date.parse(row.starttime) - Date.parse(row.endtime)) / |
| | | (1000 * 3600 * 24) |
| | | (1000 * 3600 * 24) |
| | | ) + 1 |
| | | ).toString(); |
| | | } else { |
| | |
| | | |
| | | this.fileListto = this.form.annexfiles |
| | | ? this.form.annexfiles |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | : []; |
| | | this.invoicefileListto = this.form.invoicefilesList |
| | | ? this.form.invoicefilesList |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | : []; |
| | | this.form.recordstatus = response.data.recordstatus + ""; |
| | | sessionStorage.removeItem("apiform"); |
| | |
| | | //票据 |
| | | this.fileListto = this.form.annexfiles |
| | | ? this.form.annexfiles |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | : []; |
| | | this.invoicefileListto = this.form.invoicefilesList |
| | | ? this.form.invoicefilesList |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | : []; |
| | | //审核状态 |
| | | this.form.recordstatus = response.data.recordstatus + ""; |
| | |
| | | //票据 |
| | | this.fileListto = this.form.annexfiles |
| | | ? this.form.annexfiles |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | : []; |
| | | this.invoicefileListto = this.form.invoicefilesList |
| | | ? this.form.invoicefilesList |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | .split(",") |
| | | .map(item => ({ url: item, name: item })) |
| | | : []; |
| | | |
| | | //审核状态 |
| | |
| | | }, |
| | | |
| | | /** 提交保存按钮 */ |
| | | submitForm: debounce(function(data) { |
| | | submitForm: debounce(function (data) { |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | //票据文件处理 |
| | | const addnumber = this.rbPayees.reduce( |
| | | (amount, item) => amount + Number(item.amount), |
| | | 0 |
| | | ); |
| | | // const addnumber = new Decimal(this.rbPayees.reduce((amount, item) => amount + Number(item.amount), 0 )); |
| | | // console.log(this.form.amountrequested,addnumber); |
| | | // //校验请款金额合计是否等于报销单金额 |
| | | // if (this.form.amountrequested != addnumber) { |
| | | // this.$message({ |
| | | // message: |
| | | // "报销请款表中合计金额不等于报销单的报销金额,请更正后再保存!!", |
| | | // type: "warning" |
| | | // }); |
| | | // return; |
| | | // } |
| | | |
| | | // 保留2位小数后进行比较 |
| | | const requestedAmount = Number(this.form.amountrequested); |
| | | const calculatedAmount = Number(addnumber); |
| | | // 1. 在 reduce 累加时,直接传入字符串给 Decimal,并使用 .plus() 方法进行累加 |
| | | // 初始值设为 new Decimal(0),确保全程高精度运算 |
| | | const addnumber = this.rbPayees.reduce((amount, item) => { |
| | | return amount.plus(new Decimal(item.amount.toString())); |
| | | }, new Decimal(0)); |
| | | |
| | | // 使用toFixed保留2位小数 |
| | | if (requestedAmount.toFixed(2) !== calculatedAmount.toFixed(2)) { |
| | | console.log(this.form.amountrequested, addnumber.toString()); |
| | | |
| | | // 2. 使用 Decimal 的 .eq() 方法进行严格相等比较 |
| | | // 这样既解决了精度问题,也解决了类型转换比较的问题 |
| | | if (!addnumber.eq(this.form.amountrequested)) { |
| | | this.$message({ |
| | | message: |
| | | "报销请款表中合计金额不等于报销单的报销金额,请更正后再保存!", |
| | | message: "报销请款表中合计金额不等于报销单的报销金额,请更正后再保存!!", |
| | | type: "warning" |
| | | }); |
| | | return; |
| | | } |
| | | |
| | | |
| | | const rbDetails = [...this.rbDetails]; |
| | | const rbPayees = [...this.rbPayees]; |
| | |
| | | if (!tempDetail.persontype) { |
| | | this.$modal.msgWarning( |
| | | "明细表中,第" + |
| | | (k + 1).toString() + |
| | | "行的人员类别未选择,请先选择人员类别后再提交保存!" |
| | | (k + 1).toString() + |
| | | "行的人员类别未选择,请先选择人员类别后再提交保存!" |
| | | ); |
| | | return; |
| | | } |
| | |
| | | if (!tempDetail.personname) { |
| | | this.$modal.msgWarning( |
| | | "明细表中,第" + |
| | | (k + 1).toString() + |
| | | "行的费用人员未选择,请选择费用人员后再提交保存!" |
| | | (k + 1).toString() + |
| | | "行的费用人员未选择,请选择费用人员后再提交保存!" |
| | | ); |
| | | return; |
| | | } |
| | |
| | | if (!tempDetail.starttime) { |
| | | this.$modal.msgWarning( |
| | | "明细表中,第" + |
| | | (k + 1).toString() + |
| | | "行的开始日期未选择,请选择开始日期后再提交保存!" |
| | | (k + 1).toString() + |
| | | "行的开始日期未选择,请选择开始日期后再提交保存!" |
| | | ); |
| | | return; |
| | | } |
| | |
| | | if (!tempDetail.endtime) { |
| | | this.$modal.msgWarning( |
| | | "明细表中,第" + |
| | | (k + 1).toString() + |
| | | "行的结束日期姓名为选择,请选择结束日期后再提交保存!" |
| | | (k + 1).toString() + |
| | | "行的结束日期姓名为选择,请选择结束日期后再提交保存!" |
| | | ); |
| | | return; |
| | | } |
| | |
| | | //保存明细 |
| | | for (let i = 0; i < rbDetails.length; i++) { |
| | | if (rbDetails[i].rbid != null) { |
| | | if (rbDetails[i].persontype == "家属") { |
| | | if (rbDetails[i].persontype == "家属"||rbDetails[i].persontype == "专家") { |
| | | if (this.form.infoid) { |
| | | updateReimbursementdetail(rbDetails[i]); |
| | | } else { |
| | | return this.$message.error( |
| | | `因家属分配要求,请选择捐献者信息` |
| | | "因财务核算的要求,家属或专家的报销,需要选择对应的捐献者!" |
| | | ); |
| | | } |
| | | } else { |
| | |
| | | addReimbursementdetail(rbDetails[i]); |
| | | } else { |
| | | return this.$message.error( |
| | | `因家属分配要求,请选择捐献者信息` |
| | | "因财务核算的要求,家属或专家的报销,需要选择对应的捐献者!" |
| | | ); |
| | | } |
| | | } else { |
| | |
| | | const ids = row.id || this.ids; |
| | | this.$modal |
| | | .confirm("是否确认删除该条记录?") |
| | | .then(function() { |
| | | .then(function () { |
| | | // 删除details内的数据 |
| | | return delReimbursement(ids); |
| | | }) |
| | |
| | | this.getList(); |
| | | this.$modal.msgSuccess("删除成功"); |
| | | }) |
| | | .catch(() => {}); |
| | | .catch(() => { }); |
| | | }, |
| | | |
| | | /** 导出按钮操作 */ |
| | |
| | | this.$download.name(response.msg); |
| | | this.exportLoading = false; |
| | | }) |
| | | .catch(() => {}); |
| | | .catch(() => { }); |
| | | }, |
| | | // 取消提醒 |
| | | unsave() { |
| | |
| | | (amount, item) => amount + Number(item.amount), |
| | | 0 |
| | | ); |
| | | console.log(addnumber, "addnumber"); |
| | | this.$refs["form"].validate(valid => { |
| | | if (valid) { |
| | | //票据文件处理 |
| | |
| | | if (this.form.amountrequested != addnumber) { |
| | | this.$message({ |
| | | message: |
| | | "报销请款表中合计金额不等于报销单的报销金额,请更正后再保存!", |
| | | "报销请款表中合计金额不等于报销单的报销金额,请更正后再保存!!!", |
| | | type: "warning" |
| | | }); |
| | | return; |
| | |
| | | |
| | | this.form.amountrequested = allSum.toFixed(2); |
| | | this.form.bigstrmoney = this.convertCurrency(this.form.amountrequested); |
| | | } catch {} |
| | | } catch { } |
| | | }, |
| | | |
| | | //金额数字转换成大写 |