<template> <div class="app-container"> <el-card> <div slot="header" class="card-title">{{ $t('银行实收明细详情') }}</div> <el-form ref="addForm" :data="addForm" label-width="250px"> <el-form-item :label="$t('收款单号')">{{ form.receiptNo }}</el-form-item> <el-form-item :label="$t('剩余应收金额')"> <template v-if="surplusData.length==0"> 0</template> <div v-if="surplusData.length>0"> <div v-for="(amount, currency) in surplusData" :key="currency"> <span v-if="amount"> {{amount}}{{getCurrencyLabel(currency)}}</span> </div> </div> </el-form-item> <el-form-item :label="$t('收款账户')" prop="accountNo"> <span>{{ addForm.accountNo}}{{'('+addForm.accountName+')' }}</span> </el-form-item> <el-form-item :label="$t('实收日期')" prop="amountDate"> <span>{{ addForm.amountDate }}</span> </el-form-item> <div style="display: flex;"> <el-form-item :label="$t('实收')" prop="amount"> <span>{{ addForm.amount }}</span> </el-form-item> <el-form-item label-width="0px" prop="currencyId"> <span>({{getCurrencyLabel(addForm.currencyId)}})</span> </el-form-item> </div> <el-form-item v-if="showCurrencyId != addForm.currencyId" prop="rate" > <template slot="label"> <span :title="$t('实收币种与核销基准币种一样时,无需填写汇率,不一样需要填写汇率')">{{ $t('兑核销基准币种汇率') }}({{getCurrencyLabel(showCurrencyId)}})</span> </template> <span>{{ addForm.rate}}</span> </el-form-item> <el-form-item v-if="showCurrencyId != addForm.currencyId" > <template slot="label"> {{ $t('兑核销基准币种金额') }}({{getCurrencyLabel(showCurrencyId)}}) </template> <span>{{ addForm.writeOffAmount?parseFloat(addForm.writeOffAmount).toFixed(2):'' }}</span> </el-form-item> <el-form-item :label="$t('水单附件')" prop="attr"> <div> <div v-for="(v, i) in addForm.attr" :key="i"><el-link :href="v.url" type="primary" target="_blank">{{ v.name }}</el-link></div> </div> </el-form-item> <el-form-item :label="$t('水单号')" prop="billNo"> <span>{{ addForm.billNo }}</span> </el-form-item> </el-form> </el-card> <div slot="header" class="bpm-title">{{ $t('审核流程') }}</div> <work-flow xmlkey="merge_order" v-model="selectedUsers"></work-flow> <div slot="footer" style="margin: 20px 0"> <el-button type="primary" @click="submitForm(0)">{{$t('提交审核')}}</el-button> <el-button type="primary" @click="$store.dispatch('tagsView/delCurrentView')">{{ $t('关闭') }}</el-button> </div> </div> </template> <script> import { getReceivableItem ,getInvoicingItem,getReceiptAccountList,getReceiptInfoByIds,financeReceiptItemWriteOff} from "@/api/ecw/financial"; import { getCurrencyPage } from "@/api/ecw/currency"; import WorkFlow from '@/components/WorkFlow/' import NP from 'number-precision' export default { components: { WorkFlow }, data() { return { addForm:{}, id:0, detailed:[], currencyList: [], surplusData:[], receiptAccountList:[], selectedUsers:[], list:[], params: { page: 1, rows: 20, }, bankId:0, form:{} } }, async created() { if (this.$route.query.id) { this.id = this.$route.query.id; } if (this.$route.query.bankId) { this.bankId = this.$route.query.bankId; } await getInvoicingItem({ id: this.id }).then(res => { this.list = [...res.data] }) await getReceiptAccountList({ id: this.id }).then(res => { this.receiptAccountList = [...res.data] }) await getCurrencyPage(this.params).then(res => this.currencyList = res.data.list) await this.getList() await getReceiptInfoByIds({ id: this.id }).then(res => { this.form = res.data }) }, methods:{ getList() { getReceivableItem({ id: this.id }).then(res => { this.detailed = res.data.map(v => ({ ...v, amountDate: this.parseTime(v.amountDate, '{y}-{m}-{d}'), rate:parseFloat(v.rate).toFixed(2), attr: v.attr ? v.attr.split(',').map(t => ({ name: t.slice(t.lastIndexOf('/') + 1), url: t })) : [] })) console.log(this.detailed) this.addForm = this.detailed.find((itt) => itt.id == this.bankId); console.log(this.addForm) this.handleAddReceiptItem() }) }, 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 '' }, submitForm(){ this.$modal .confirm(this.$t('您确认要提交审核吗'+'?')) .then(() => { financeReceiptItemWriteOff({receiptId:this.id,receiptNo:this.form.receiptNo,receiptItemId:this.bankId}).then(res=>{ this.$message.success(this.$t("提交成功")); this.$store.dispatch('tagsView/delCurrentView') }); }) .catch(() => {}); }, handleAddReceiptItem() { this.surplusData = [] // 已收 let recepted = [] this.detailed.forEach(item => { if(!recepted[item.currencyId]){ recepted[item.currencyId] = item.amount }else recepted[item.currencyId] = NP.plus(recepted[item.currencyId], item.amount) }) console.log('rece',recepted) // 应收 let collom = [] // 从期望收费金额中提取应收币种和金额 this.currencyList.forEach((item,index)=>{ var nairaListByList = this.list.filter(v => v.currencyId === item.id) if(nairaListByList.length>0){ var discountNaira = nairaListByList.reduce((total, currentValue) => NP.plus(total, currentValue.discountTotal || 0), 0) } var dollarList = this.receiptAccountList.filter(v => v.collectionCurrencyId == item.id) if(dollarList.length>0){ var dollar = dollarList.reduce((total, currentValue) => NP.plus(total, currentValue.collectionAmount), 0).toFixed(2) if(dollar){ collom[item.id] = dollar }else{ collom.push(0) } } }) console.log('collom',collom) recepted.forEach((amount,currency)=>{ if(amount){ if(collom[currency]){ if((collom[currency]-amount)!=0) this.surplusData[currency] = +parseFloat((collom[currency]-amount).toPrecision(12)) }else{ this.surplusData[currency] = -amount } } }) collom.forEach((amount,currency)=>{ if(amount){ if(!this.surplusData[currency]){ if(recepted[currency]){ if((amount-recepted[currency])!=0) this.surplusData[currency] = +parseFloat((amount-recepted[currency]).toPrecision(12)) }else{ this.surplusData[currency] = amount } } } }) }, }, computed: { showCurrencyId() { let fieldList = []; let groupList=[]; this.list.map((element)=>{ if(fieldList.indexOf(element['currencyId'])===-1){ fieldList.push(element['currencyId']) } }) for(let i=0;i<fieldList.length;i++){ let arr = this.list.filter((element)=>{ return element['currencyId']===fieldList[i]; }) groupList.push({ currencyId:arr[0].currencyId, list:arr }) } if (groupList.length === 1) return groupList[0].currencyId else return 1 }, } } </script> <style> .card { margin-top: 20px; } .dialog-footer { text-align: left; } .card-title { font-size: 18px; font-weight: bold; } .bpm-title{ font-size: 20px; font-weight: bold; color:#666; margin:20px 0; } </style>