<template> <div class="app-container examine-wrap"> <el-card> <div slot="header" class="card-title">{{ $t('审核请款单') }}</div> <el-descriptions :column="3" class="card" border> <el-descriptions-item :label="$t('供应商')"> {{ detail.supplierName }} </el-descriptions-item> <el-descriptions-item :label="$t('部门')"> {{ findDepartmentName(detail.departmentId) }} </el-descriptions-item> <el-descriptions-item :label="$t('业务员')"> {{ detail.salesmanName }} </el-descriptions-item> <el-descriptions-item :label="$t('申请日期')"> {{ detail.applicationAt }} </el-descriptions-item> <el-descriptions-item :label="$t('供应商银行账号')" style="width: 50%"> {{ detail.supplierBankAccountName+'('+detail.supplierBankAccount+')' }} </el-descriptions-item> </el-descriptions> <el-descriptions :column="3" class="card" border> <el-descriptions-item :label="$t('最后付款日期')"> {{ detail.latestPayAt }} </el-descriptions-item> <el-descriptions-item :label="$t('结算方式')"> <!-- {{ detail.settlementType }} --> <dict-tag :type="DICT_TYPE.CUSTOMER_BALANCE" :value="detail.settlementType"></dict-tag> </el-descriptions-item> </el-descriptions> </el-card> <el-card class="card"> <div slot="header" class="card-title">{{ $t('费用信息') }}</div> <el-table v-loading="loadings" :data="list" border :show-summary="!!list.length" :summary-method="getSummaries"> <el-table-column :label="$t('自编号')" align="center" prop="payableNo" /> <el-table-column :label="$t('费用类型')" align="center" prop="feeType"> <template slot-scope="scope"> <dict-tag :type="DICT_TYPE.FEE_TYPE" :value="scope.row.feeType" ></dict-tag> </template> </el-table-column> <el-table-column :label="$t('发票号码')" align="center" prop="invoiceNumber"> <!-- <template slot-scope="scope"> <el-input v-model="scope.row.invoiceNumber"></el-input> </template> --> </el-table-column> <el-table-column :label="$t('应付金额')" align="center" prop="totalAmount" /> <el-table-column :label="$t('币种')" align="center" prop="currencyId"> <template slot-scope="scope"> {{getCurrencyLabel(scope.row.currencyId)}} <!-- <dict-tag :type="DICT_TYPE.BOX_SHIPPING_PRICE_UNIT" :value="scope.row.currencyId" /> --> </template> </el-table-column> <el-table-column :label="$t('汇率')" align="center" prop="exchangeRate"> <!-- <template slot-scope="scope"> <el-input v-model="scope.row.exchangeRate"></el-input> </template> --> </el-table-column> <el-table-column :label="$t('税率')+'%'" align="center" prop="taxRate" > <!-- <template slot-scope="scope"> <el-input v-model="scope.row.taxRate"></el-input> </template> --> </el-table-column> <el-table-column :label="$t('价税合计')+'(RMB)'" align="center" prop="total" /> </el-table> <el-descriptions :column="1" class="card" border> <el-descriptions-item :label="$t('账单号')"> {{ detail.accountNumber }} </el-descriptions-item> <el-descriptions-item :label="$t('发票')"> {{ detail.invoiceStatus == 0 ? $t('未开票') : $t('已开票') }} </el-descriptions-item> <el-descriptions-item :label="$t('审核备注')"> <el-input type="textarea" :rows="2" v-model="notes"> </el-input> </el-descriptions-item> </el-descriptions> </el-card> <div slot="footer" style="margin: 20px 0"> <el-button type="primary" @click="examine('y')">{{ $t('审核通过') }}</el-button> <el-button type="danger" @click="examine('n')">{{ $t('审核驳回') }}</el-button> </div> </div> </template> <script> import { getBankAccountPage } from "@/api/ecw/bankAccount"; import { listSimpleDepts } from "@/api/system/dept"; import { getCurrencyPage } from "@/api/ecw/currency"; import { getPaymentInfoByIds, getPaymentItem, paymentVerify } from "@/api/ecw/financial" export default { name: "CreatPayment", components: { // CustomerSelector }, data() { return { id: 0, loadings: false, detail: {}, list: [], bankData: [], params: { page: 1, rows: 20, }, currencyList:[], deptData: [], deptArr: [], notes: '' }; }, created() { getCurrencyPage(this.params).then(res => this.currencyList = res.data.list) let that = this; if (that.$route.query.id && that.$route.query.id !== '0') { this.id = this.$route.query.id; getPaymentInfoByIds({ id: this.id }).then(res => { this.detail = { ...res.data, latestPayAt: this.parseTime(res.data.latestPayAt, '{y}-{m}-{d}'), applicationAt: this.parseTime(res.data.applicationAt, '{y}-{m}-{d}'), supplierBankAccount: Number(res.data.supplierBankAccount), invoiceStatus: String(res.data.invoiceStatus), } }) getPaymentItem({ id: this.id }).then(res => { this.list = [...res.data] }) } getBankAccountPage(that.params).then((res) => (that.bankData = res.data.list)); listSimpleDepts().then((res) => { res.data.forEach((item) => { if (item.parentId == 0) { that.deptArr.push(item); } else { that.deptData.push(item); } }); that.deptData.forEach((value) => { var dept = that.deptArr.filter((itt) => itt.id == value.parentId); if (dept.length > 0) { value.name = dept[0].name + " | " + value.name; } }); }); }, methods: { getCurrencyLabel(id){ var label = this.currencyList.filter(item=>item.id == id) if(label.length>0) return this.$i18n.locale=='zh_CN'?label[0].titleZh:label[0].titleEn return '' }, getSummaries(param) { const { columns, data } = param; const sums = new Array(columns.length).map(v => ''); const index = sums.length - 1 sums[index - 1] = this.$t('价税合计大写') const t = data.map(v => v.total).reduce((prev, curr) => { return prev + curr; }, 0) sums[index] = this.convertCurrency(t) return sums; }, examine(status) { const params = { notes: this.notes, paymentId: this.detail.id, verifyStatus: status } paymentVerify(params).then(res => { this.$modal.msgSuccess(this.$t('操作成功')); this.$router.back(); }) }, convertCurrency(money) { //汉字的数字 var cnNums = new Array('零', this.$t('壹'), this.$t('贰'), this.$t('叁'), this.$t('肆'), this.$t('伍'), this.$t('陆'), this.$t('柒'), this.$t('捌'), '玖'); //基本单位 var cnIntRadice = new Array('', this.$t('拾'), this.$t('佰'), '仟'); //对应整数部分扩展单位 var cnIntUnits = new Array('', this.$t('万'), this.$t('亿'), '兆'); //对应小数部分单位 var cnDecUnits = new Array('角', this.$t('分'), this.$t('毫'), '厘'); //整数金额时后面跟的字符 var cnInteger = this.$t('整'); //整型完以后的单位 var cnIntLast = this.$t('元'); //最大处理的数字 var maxNum = 999999999999999.9999; //金额整数部分 var integerNum; //金额小数部分 var decimalNum; //输出的中文金额字符串 var chineseStr = ''; //分离金额后用的数组,预定义 var parts; // 传入的参数为空情况 if(money === '') { return ''; } money = parseFloat(money) if(money >= maxNum){ return '' } // 传入的参数为0情况 if (money === 0) { chineseStr = cnNums[0] + cnIntLast + cnInteger; return chineseStr } // 转为字符串 money = money.toString(); // indexOf 检测某字符在字符串中首次出现的位置 返回索引值(从0 开始) -1 代表无 if (money.indexOf('.') == -1) { integerNum = money; decimalNum = '' }else{ parts = money.split('.'); integerNum = parts[0]; decimalNum = parts[1].substr(0,4); } //转换整数部分 if(parseInt(integerNum,10) > 0){ let zeroCount = 0; let IntLen = integerNum.length for(let i = 0; i < IntLen; i++){ let n = integerNum.substr(i,1); let p = IntLen - i - 1; let q = p / 4; let m = p % 4; if( n == '0'){ zeroCount ++ ; }else{ if(zeroCount > 0){ chineseStr += cnNums[0] } zeroCount = 0; chineseStr += cnNums[parseInt(n)] + cnIntRadice[m]; } if(m == 0 && zeroCount < 4){ chineseStr += cnIntUnits[q]; } } // 最后+ 元 chineseStr += cnIntLast; } // 转换小数部分 if(decimalNum != ''){ let decLen = decimalNum.length; for(let i = 0; i <decLen; i++){ let n = decimalNum.substr(i,1); if(n != '0'){ chineseStr += cnNums[Number(n)] + cnDecUnits[i] } } } if(chineseStr == ''){ chineseStr += cnNums[0] + cnIntLast + cnInteger; }else if(decimalNum == ''){ chineseStr += cnInteger; } return chineseStr }, findDepartmentName(val) { return this.deptData.find(v => v.id == val) ? this.deptData.find(v => v.id == val).name : '' }, findBank(val) { const t = this.bankData.find(v => v.id == val) return t ? t.baAccountName + '(' + t.baAccountNum + ')' : '' } }, }; </script> <style lang="scss" scoped> .examine-wrap { ::v-deep .is-bordered-label { width: 200px; } } .card { margin-top: 20px; } .dialog-footer { padding: 40px; } .card-title { font-size: 18px; font-weight: bold; } </style>