<template>
|
<div class="product">
|
<div v-for="(item,index) in receivablesArr" :key="index">
|
<div class="_block">
|
<p class="title">
|
<span></span>
|
基本信息
|
</p>
|
<el-form :model="receivablesForm[index]" :rules="rules" ref="receivablesForm" label-width="165px" size="small" inline>
|
<el-form-item label="债权人" v-if="item.customername.visible" prop="customername">
|
<el-input
|
v-model="receivablesForm[index].customername"
|
:disabled="!item.customername.writeAble"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="债务人" v-if="item.obligorname.visible" prop="obligorname">
|
<el-input v-model="receivablesForm[index].obligorname" class="input-with-select" disabled>
|
<el-button slot="append" icon="el-icon-search" v-if="item.obligorname.writeAble" @click="isEnterprise = true"></el-button>
|
</el-input>
|
</el-form-item>
|
<el-form-item label="单据总金额" v-if="item.billsum.visible" prop="billsum">
|
<el-input
|
v-model="receivablesForm[index].billsum"
|
:disabled="!item.billsum.writeAble"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="预计支付日期" v-if="item.expectedpaydate.visible" prop="expectedpaydate">
|
<el-date-picker
|
v-model="receivablesForm[index].expectedpaydate"
|
type="date"
|
format="yyyy/MM/dd"
|
value-format="yyyy/MM/dd"
|
size="small"
|
placeholder="选择日期"
|
:disabled="!item.expectedpaydate.writeAble"
|
@change="countZwzfr(receivablesForm[index])"
|
></el-date-picker>
|
</el-form-item>
|
<el-form-item label="支付方式" v-if="item.paymethod.visible" prop="paymethod">
|
<el-select
|
v-model="receivablesForm[index].paymethod"
|
:disabled="!item.paymethod.writeAble"
|
clearable
|
placeholder="请选择"
|
>
|
<el-option
|
v-for="item in paymethod"
|
:key="item.itemno"
|
:label="item.itemname"
|
:value="item.itemno"
|
></el-option>
|
</el-select>
|
</el-form-item>
|
<el-form-item
|
label="支付票据期限(月数)"
|
v-if="item.payterm.visible"
|
prop="payterm"
|
:rules="receivablesForm[index].paymethod != '01'?[{required: true,message:'请输入支付票据期限(月数)'}]:[{ required: false }]"
|
>
|
<el-input
|
v-model="receivablesForm[index].payterm"
|
:disabled="!item.payterm.writeAble"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="期限调整天数" v-if="item.adjustmentdays.visible" prop="adjustmentdays">
|
<el-input
|
v-model="receivablesForm[index].adjustmentdays"
|
:disabled="!item.adjustmentdays.writeAble"
|
@change="countZwzfr(receivablesForm[index])"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="最晚支付日" v-if="item.zwzfr.visible" prop="zwzfr">
|
<el-input
|
v-model="receivablesForm[index].zwzfr"
|
:disabled="!item.zwzfr.writeAble"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="债务人总额度" v-if="item.zwrzed.visible" prop="zwrzed">
|
<el-input
|
v-model="receivablesForm[index].zwrzed"
|
:disabled="!item.zwrzed.writeAble"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="债务人剩余额度" v-if="item.zwrsyed.visible" prop="zwrsyed">
|
<el-input
|
v-model="receivablesForm[index].zwrsyed"
|
:disabled="!item.zwrsyed.writeAble"
|
></el-input>
|
</el-form-item>
|
<el-form-item label="是否可覆盖此笔业务" v-if="item.sffgcbyw.visible" prop="sffgcbyw">
|
<el-input
|
v-model="item.sffgcbyw.valueDesc"
|
:disabled="!item.sffgcbyw.writeAble"
|
></el-input>
|
</el-form-item>
|
</el-form>
|
</div>
|
<div class="_block">
|
<p class="title">
|
<span></span>
|
单据信息
|
</p>
|
<Bill
|
:billsRules="billsRules"
|
:writeAble="item.obligorname.writeAble"
|
:creditorBills='item.creditorBills'
|
:applySerialNo='applyInfo.serialNo'
|
@sendBills='sendBills'
|
></Bill>
|
</div>
|
</div>
|
<div class="fixedBtn">
|
<el-button size="medium" plain @click="saveDraft(receivablesForm)" v-if="applyInfo.phaseNo=='0040'">保存草稿</el-button>
|
<el-button size="medium" plain @click="save(receivablesForm)" v-if="applyInfo.phaseNo>'0040'&&writeAble">保存</el-button>
|
<el-button size="medium" plain @click="prevStep" v-if="applyInfo.phaseNo=='0040'">上一步</el-button>
|
<el-button size="medium" plain @click="prevStep" v-else>上一页</el-button>
|
<el-button size="medium" type="primary" @click="submit(receivablesForm)" v-if="applyInfo.phaseNo=='0040'">下一步</el-button>
|
<el-button size="medium" type="primary" @click="nextPage()" v-else>下一页</el-button>
|
</div>
|
<Enterprise
|
v-if="isEnterprise"
|
:enterpriseVisible='isEnterprise'
|
@closeEnterprise='isEnterprise = false'
|
@sendEnterpriseData='sendEnterpriseData'
|
></Enterprise>
|
</div>
|
</template>
|
<script>
|
import {
|
getDictionaryList,
|
qryCreditorInfo,
|
saveCreditorInfo,
|
submitCreditorInfo,
|
qryObligorQuota,
|
qryEmptyCreditorBillInfo
|
} from '@api/product'
|
import Enterprise from './components/Enterprise'
|
import Bill from './components/Bill'
|
import common from "@/utils/common";
|
export default {
|
data () {
|
return {
|
applyInfo:this.$store.state.product.applyInfo,
|
applyMenu: this.$store.state.product.applyMenu,
|
initialArr:[],
|
receivablesArr:[],
|
receivablesForm:[],
|
paymethod:[],
|
billtype:[],
|
billsRules:{},
|
rules:{},
|
isEnterprise:false,
|
writeAble:false,
|
}
|
},
|
async created () {
|
this.$parent._data.loading = true;
|
const res = await qryEmptyCreditorBillInfo({'applySerialNo':this.applyInfo.serialNo})
|
this.billsRules = res.result
|
const result = await this.qryCreditorInfo()
|
this.getCreditorInfo(result)
|
this.writeAble = this.receivablesArr[0].obligorname.writeAble
|
this.$parent._data.loading = false;
|
this.paymethod = await this.qryDictionaryList("PaysWay");
|
this.billtype = await this.qryDictionaryList("EntBillType");
|
},
|
components: {
|
Enterprise,
|
Bill
|
},
|
methods: {
|
// 查询应收账款/票据信息
|
qryCreditorInfo(){
|
return new Promise(resolve=>{
|
qryCreditorInfo({applySerialNo:this.applyInfo.serialNo}).then(res=>{
|
resolve(res.result)
|
})
|
})
|
},
|
// 对返回的数据进行二次处理
|
getCreditorInfo(result){
|
this.initialArr = []
|
this.receivablesForm = []
|
this.receivablesArr = [result]
|
this.receivablesArr.forEach((val,index) => {
|
const obj = {}
|
for (const key in val) {
|
this.rules[key] = [];
|
if(key == 'billsum' || key == 'zwrzed' || key == 'zwrsyed'){
|
val[key].value = this.formatMoney(val[key].value)
|
}
|
switch (key) {
|
case 'payterm':
|
this.rules[key].push(common.validate("number"));
|
break;
|
case 'adjustmentdays':
|
this.rules[key].push(common.validate("number"));
|
break;
|
default:
|
break;
|
}
|
// 必填校验
|
if (val[key].required) {
|
this.rules[key].push({
|
required: true,
|
message: `请输入${val[key].filedDescription}`,
|
trigger: "change"
|
});
|
}
|
if(key != 'creditorBills'){
|
obj[key] = val[key].value;
|
}
|
}
|
this.receivablesForm.push(obj);
|
this.initialArr.push(JSON.parse(JSON.stringify(obj)))
|
});
|
},
|
// 计算最晚支付日
|
countZwzfr(form){
|
if(!form.expectedpaydate||!form.adjustmentdays)return
|
form.zwzfr = this.dateChange(form.adjustmentdays,form.expectedpaydate)
|
},
|
dateChange(num, date) {
|
date += " 00:00:00";//设置为当天凌晨12点
|
date = Date.parse(new Date(date))/1000;//转换为时间戳
|
date += (86400) * num;//修改后的时间戳
|
var newDate = new Date(parseInt(date) * 1000);//转换为时间
|
const getDate = newDate.getDate() < 10 ? '0' + newDate.getDate() : newDate.getDate()
|
const getMonth = (newDate.getMonth() + 1) < 10 ? '0' + (newDate.getMonth() + 1) : (newDate.getMonth() + 1)
|
return newDate.getFullYear() + '/' + getMonth + '/' + getDate;
|
},
|
// 接受子组件回传
|
sendEnterpriseData(data){
|
this.receivablesForm[0].obligorid = data.reditcode
|
this.receivablesForm[0].obligorname = data.enterprisename
|
// 获取债务人额度信息
|
qryObligorQuota({
|
obligorid: data.reditcode,
|
obligorname: data.enterprisename,
|
applyserialno:this.applyInfo.serialNo
|
}).then(res=>{
|
this.receivablesForm[0].sffgcbyw = res.result.sffgcbyw
|
this.receivablesForm[0].zwrsyed = this.formatMoney(res.result.zwrsyed)
|
this.receivablesForm[0].zwrzed = this.formatMoney(res.result.zwrzed)
|
})
|
},
|
sendBills(data){
|
this.receivablesForm[0].serialno = data.serialno.value
|
this.receivablesForm[0].billsum = this.formatMoney(data.billsum.value)
|
this.$set(this.receivablesArr[0],'sffgcbyw',data.sffgcbyw)
|
},
|
// 字典接口
|
qryDictionaryList(code) {
|
return new Promise(resolve => {
|
getDictionaryList({
|
codeNo: code
|
}).then(res => {
|
resolve(res.result);
|
});
|
});
|
},
|
// 金额格式化
|
formatMoney(value) {
|
if (value) {
|
value =
|
parseFloat((value + "").replace(/[^\d\.-]/g, "")).toFixed(2) + "";
|
if (value == "NaN") return;
|
let l = value
|
.split(".")[0]
|
.split("")
|
.reverse();
|
let r = value.split(".")[1];
|
let t = "";
|
for (let i = 0; i < l.length; i++) {
|
t += l[i] + ((i + 1) % 3 === 0 && i + 1 !== l.length ? "," : "");
|
}
|
return (
|
t
|
.split("")
|
.reverse()
|
.join("") +
|
"." +
|
r
|
);
|
}
|
},
|
// 保存草稿
|
async saveDraft(array){
|
this.$parent._data.loading = true;
|
const res = await saveCreditorInfo(array[0])
|
if(res.code == '00'){
|
this.$message.success('保存成功')
|
// 保存草稿需要调用父组件的查询左侧tab的方法
|
this.$parent.getApplyTabTree();
|
const result = await this.qryCreditorInfo()
|
this.getCreditorInfo(result)
|
}
|
this.$parent._data.loading = false;
|
},
|
// 保存
|
async save(array){
|
if(!common.validateForm(this.$refs.receivablesForm).flag)return;
|
this.$parent._data.loading = true;
|
array[0].objectno = this.applyInfo.serialNo
|
const res = await saveCreditorInfo(array[0])
|
if(res.code == '00'){
|
this.$message.success('保存成功')
|
const result = await this.qryCreditorInfo()
|
this.getCreditorInfo(result)
|
}
|
this.$parent._data.loading = false;
|
},
|
// 上一步或者上一页
|
prevStep(){
|
this.applyMenu.forEach((val, index) => {
|
if (val.tabname == "应收账款信息") {
|
common.tabInfo(
|
this.applyMenu[index - 1].tabname,
|
this.applyInfo.flowno,
|
this
|
);
|
}
|
});
|
},
|
// 提交
|
async submit(array){
|
if(!common.validateForm(this.$refs.receivablesForm).flag)return;
|
this.$parent._data.loading = true;
|
array[0].objectno = this.applyInfo.serialNo
|
const res = await submitCreditorInfo(array[0])
|
if(res.code == '00'){
|
const result = await this.qryCreditorInfo()
|
this.getCreditorInfo(result)
|
this.$parent._data.loading = false;
|
this.nextPage()
|
}
|
},
|
// 下一页
|
nextPage() {
|
// 调用父组件的查询左侧tab的方法
|
this.$parent.updateApplyTabTree('应收账款信息');
|
}
|
},
|
beforeRouteLeave(to, from, next) {
|
!this.receivablesForm.length||common.compareFormData(this.initialArr,this.receivablesForm,next)?next():''
|
}
|
}
|
</script>
|