[update] -去掉银行账户只能输入数字的限制;财务管理-到账开票-审核 的时候增加 用户提交的 付款发票信息

This commit is contained in:
fengchenchen
2022-05-09 16:19:22 +08:00
parent e71c54c10b
commit 4372760bbc
3 changed files with 262 additions and 40 deletions
+6 -1
View File
@@ -111,6 +111,9 @@ const updateInternalEnterprise = (param) => postAction('/company/payCompanyManag
// 判断当前企业是否是内部企业 // 判断当前企业是否是内部企业
const judgeInternalEnterprise = (param) => getAction('/company/payCompanyManagement/getInternalEnterprise', param) const judgeInternalEnterprise = (param) => getAction('/company/payCompanyManagement/getInternalEnterprise', param)
// 更新会员系统 会员缴费、证书缴费的发票信息
const incomingUpdatePayment = (param) => postAction('/member/tbMemberProjectSubitem/incomingUpdatePayment', param)
export { export {
getWorkingGroupById, getWorkingGroupById,
getChargeNotice, getChargeNotice,
@@ -166,5 +169,7 @@ export {
queryMailDetailById, queryMailDetailById,
updateInternalEnterprise, updateInternalEnterprise,
judgeInternalEnterprise judgeInternalEnterprise,
incomingUpdatePayment
} }
@@ -172,7 +172,7 @@ export default {
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
bankAccount: { bankAccount: {
rules: [{ required: true, validator: this.checkBankAccount }], rules: [{ required: true, message: '请输入银行账户' }],
validateTrigger: 'blur' validateTrigger: 'blur'
}, },
dutyCode: { dutyCode: {
@@ -379,4 +379,4 @@ export default {
cursor: pointer; cursor: pointer;
} }
} }
</style> </style>
@@ -16,23 +16,34 @@
<a-form :form="form"> <a-form :form="form">
<h3 class="title">凭证信息</h3> <h3 class="title">凭证信息</h3>
<div> <div class="basic-info-div">
<div class="info-item"> <a-form-item label="缴费金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<label>缴费金额:</label>
<div>{{ proofInfo.amountReceived }}元</div> <div>{{ proofInfo.amountReceived }}元</div>
</div> </a-form-item>
<div class="info-item">
<label>缴费日期:</label> <a-form-item label="缴费日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<div>{{ proofInfo.paymentDate }}</div> <div>{{ proofInfo.paymentDate }}</div>
</div> </a-form-item>
<div class="info-item"> <a-form-item label="申请人" :labelCol="labelCol" :wrapperCol="wrapperCol">
<label>申请人:</label>
<div>{{ proofInfo.applicantName }}</div> <div>{{ proofInfo.applicantName }}</div>
</div> </a-form-item>
<!-- <div class="info-item">-->
<!-- <label>缴费金额:</label>-->
<!-- <div>{{ proofInfo.amountReceived }}元</div>-->
<!-- </div>-->
<!-- <div class="info-item">-->
<!-- <label>缴费日期:</label>-->
<!-- <div>{{ proofInfo.paymentDate }}</div>-->
<!-- </div>-->
<!-- <div class="info-item">-->
<!-- <label>申请人:</label>-->
<!-- <div>{{ proofInfo.applicantName }}</div>-->
<!-- </div>-->
<!-- 标协会员、证书的缴费凭证类型根据paymentMethod字段决定:1--图片;2--pdf;3--没有凭证 --> <!-- 标协会员、证书的缴费凭证类型根据paymentMethod字段决定:1--图片;2--pdf;3--没有凭证 -->
<!-- proofType处理过的缴费凭证类型:img--图片;pdf--pdf;none--无缴费凭证 --> <!-- proofType处理过的缴费凭证类型:img--图片;pdf--pdf;none--无缴费凭证 -->
<div class="info-item"> <!-- <div class="info-item">-->
<label>{{proofType==='pdf' ? '打包协议' : '缴费凭证'}}:</label> <a-form-item class="proof-form-item" :label="proofType==='pdf' ? '打包协议' : '缴费凭证'" :labelCol="labelCol" :wrapperCol="wrapperCol">
<!-- <label>{{proofType==='pdf' ? '打包协议' : '缴费凭证'}}:</label>-->
<div class="proof-img" v-if="proofType === 'img'"> <div class="proof-img" v-if="proofType === 'img'">
<template v-if="proofInfo.proof && proofInfo.proof !== ''"> <template v-if="proofInfo.proof && proofInfo.proof !== ''">
<div class="proof-img-item" v-for="(item, index) in proofInfo.proof.split(',')" :key="index"> <div class="proof-img-item" v-for="(item, index) in proofInfo.proof.split(',')" :key="index">
@@ -44,7 +55,8 @@
<preview-file :fileId="proofInfo.proof"></preview-file> <preview-file :fileId="proofInfo.proof"></preview-file>
</div> </div>
<span v-if="proofType==='none'">无</span> <span v-if="proofType==='none'">无</span>
</div> </a-form-item>
<!-- </div>-->
<a-form-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="备注" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-textarea <a-textarea
placeholder="请输入备注" placeholder="请输入备注"
@@ -54,7 +66,89 @@
@change="e => {e.target.value = (e.target.value + '').trim()}"/> @change="e => {e.target.value = (e.target.value + '').trim()}"/>
</a-form-item> </a-form-item>
</div> </div>
<!-- 当前的缴费凭证是否是标协会员、证书缴费 时展示 付款信息,用户财务人员核实 -->
<template v-if="model.projectType && (model.projectType.toString() === '5' || model.projectType.toString() === '6')">
<h3 class="title">付款信息</h3>
<div class="pay-info-div">
<a-row>
<a-col :span="12">
<a-form-item label="发票" :labelCol="labelPayCol" :wrapperCol="wrapperPayCol">
<j-dict-select-tag
@change="invoiceRequirementsChange"
type="list"
v-decorator="['invoiceRequirements',{ rules: validatorRules.invoiceRequirements.rules, initialValue:proofInfo.invoiceRequirements, validateTrigger: 'change'},]"
:trigger-change="true"
dictCode="invoice_type"
placeholder="请选择发票" />
</a-form-item>
</a-col>
</a-row>
<a-row v-if="currentSelectInvoiceType">
<a-col :span="12">
<a-form-item label="关联付款发票名称" :labelCol="labelPayCol" :wrapperCol="wrapperPayCol">
<a-input
v-decorator="['headerName',{ rules: validatorRules.headerName.rules, validateTrigger: 'blur',initialValue:proofInfo.headerName}]"
:trigger-change="true"
@change="event => event.target.value = event.target.value.trim()"
placeholder="请输入关联付款发票名称"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="社会统一代码/税号" :labelCol="labelPayCol" :wrapperCol="wrapperPayCol">
<a-input
@change="event => event.target.value = event.target.value.trim()"
v-decorator="['taxNumber',{ rules: validatorRules.taxNumber.rules, validateTrigger: 'blur', initialValue:proofInfo.taxNumber},]"
placeholder="请输入社会统一代码/税号"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
</a-row>
<template v-if="currentSelectInvoiceType === 2">
<a-row>
<a-col :span="12">
<a-form-item label="单位地址" :labelCol="labelPayCol" :wrapperCol="wrapperPayCol">
<a-input
@change="event => event.target.value = event.target.value.trim()"
v-decorator="['invoiceAddress',{ rules: validatorRules.invoiceAddress.rules, validateTrigger: 'blur', initialValue:proofInfo.invoiceAddress}]"
placeholder="请输入单位地址"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="电话号码" :labelCol="labelPayCol" :wrapperCol="wrapperPayCol">
<a-input
v-decorator="['invoicePhone',{ rules: validatorRules.invoicePhone.rules, validateTrigger: 'blur', initialValue:proofInfo.invoicePhone}]"
:trigger-change="true"
@change="(e) => {e.target.value = e.target.value.replace(/[^0-9|-]/g,'')}"
placeholder="请输入电话号码"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="开户银行" :labelCol="labelPayCol" :wrapperCol="wrapperPayCol">
<a-input
@change="event => event.target.value = event.target.value.trim()"
v-decorator="['depositBank',{ rules: validatorRules.depositBank.rules, validateTrigger: 'blur', initialValue:proofInfo.depositBank}]"
placeholder="请输入开户银行"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="银行账户" :labelCol="labelPayCol" :wrapperCol="wrapperPayCol">
<a-input
@change="(e) => {e.target.value = e.target.value.trim()}"
v-decorator="['bankAccount',{ rules: validatorRules.bankAccount.rules, validateTrigger: 'blur', initialValue:proofInfo.bankAccount}]"
placeholder="请输入银行账户"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
</a-row>
</template>
</div>
</template>
<h3 class="title">审核</h3> <h3 class="title">审核</h3>
<div> <div>
<a-form-item label="审核人" :labelCol="labelCol" :wrapperCol="wrapperCol"> <a-form-item label="审核人" :labelCol="labelCol" :wrapperCol="wrapperCol">
@@ -91,10 +185,26 @@ import pick from 'lodash.pick'
import { postAction } from '../../../../api/manage' import { postAction } from '../../../../api/manage'
import Vue from 'vue' import Vue from 'vue'
import { USER_INFO } from '../../../../store/mutation-types' import { USER_INFO } from '../../../../store/mutation-types'
import { getLastProofInfo, getStanderMemberLastProofInfo, getCertificateLastProofInfo } from '../../../../api/incomePaymentsApi' import { getLastProofInfo, getStanderMemberLastProofInfo, getCertificateLastProofInfo, incomingUpdatePayment } from '../../../../api/incomePaymentsApi'
import PreviewFile from '../../../../components/jero/PreviewFile.vue' import PreviewFile from '../../../../components/jero/PreviewFile.vue'
import PreviewImgModal from '@/components/PreviewImgModal' import PreviewImgModal from '@/components/PreviewImgModal'
const labelCol = {
xs: {span: 24},
sm: {span: 3}
}
const wrapperCol = {
xs: {span: 24},
sm: {span: 21}
}
const labelPayCol = {
sm: {span: 4}
}
const wrapperPayCol = {
sm: {span: 20}
}
export default { export default {
name: 'AuditProofModule', name: 'AuditProofModule',
components: { PreviewFile, PreviewImgModal }, components: { PreviewFile, PreviewImgModal },
@@ -106,13 +216,15 @@ export default {
confirmLoading: false, confirmLoading: false,
form: this.$form.createForm(this), form: this.$form.createForm(this),
model: {}, model: {},
labelCol: { labelCol,
wrapperCol,
labelPayCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 3 } sm: { span: 8 }
}, },
wrapperCol: { wrapperPayCol: {
xs: { span: 24 }, xs: { span: 24 },
sm: { span: 21 } sm: { span: 16 }
}, },
validatorRules: { validatorRules: {
reviewerName: { reviewerName: {
@@ -126,7 +238,35 @@ export default {
reviewInstructions: { reviewInstructions: {
rules: [{ required: true, message: '请输入说明' }], rules: [{ required: true, message: '请输入说明' }],
validateTrigger: 'blur' validateTrigger: 'blur'
} },
invoiceRequirements: {
rules: [{
required: true, message: '请选择发票'
}]
},
// 会员发票信息的回显
headerName: {
rules: [
{ required: true, message: '请输入付款单位发票抬头', validateTrigger: 'blur' },
{ min: 1, max: 50, message: '长度不超过50个字符' }
],
validateTrigger: 'blur'
},
taxNumber: {
rules: [
{ required: true, message: '请输入社会统一代码/税号', validateTrigger: 'blur' },
{
pattern: /^([0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}|[1-9]\d{14})$/,
message: '请输入15位、18位的社会统一代码/税号'
}
],
validateTrigger: 'blur'
},
invoiceAddress: { rules: [{ required: true, message: '请输入单位地址' }], validateTrigger: 'blur' },
invoicePhone: { rules: [{ required: true, validator: this.handleInvoicePhoneCheck }], validateTrigger: 'blur' },
depositBank: { rules: [{ required: true, message: '请输入开户银行' }], validateTrigger: 'blur' },
bankAccount: { rules: [{ required: true, message: '请输入银行账户' }], validateTrigger: 'blur' }
}, },
// 项目缴费凭证信息 // 项目缴费凭证信息
proofInfo: {}, proofInfo: {},
@@ -134,11 +274,25 @@ export default {
showInstructions: false, showInstructions: false,
auditUrl: '/paymentCheck/payPaymentCheck/check', auditUrl: '/paymentCheck/payPaymentCheck/check',
// 缴费凭证的类型,默认为img,标协会员、证书根据paymentMethod字段决定:1--图片;2--pdf;3--没有凭证 // 缴费凭证的类型,默认为img,标协会员、证书根据paymentMethod字段决定:1--图片;2--pdf;3--没有凭证
proofType: 'img' proofType: 'img',
// 标协会员、证书缴费 使用-发票选择
invoiceRequirementsFlag: false,
// 标协会员、证书缴费 使用-当前选择是否需要发票的值,用于dom的判断 0-无 1-普通发票 2-增值税发票
currentSelectInvoiceType: 0,
} }
}, },
methods: { methods: {
async open(record) { async open(record) {
if(record.projectType.toString() === '5' || record.projectType.toString() === '6') {
// 会员缴费、证书缴费 模态框调整宽度
this.width = 1000
this.labelCol = labelPayCol
this.wrapperCol = wrapperPayCol
} else {
this.labelCol = labelCol
this.wrapperCol = wrapperCol
this.width = 600
}
let flag = await this.getProofInfo(record) let flag = await this.getProofInfo(record)
if(!flag){ if(!flag){
this.$message.warn('项目已审核') this.$message.warn('项目已审核')
@@ -198,13 +352,22 @@ export default {
return new Promise(resolve => { return new Promise(resolve => {
httpMethod(param).then(res => { httpMethod(param).then(res => {
if (res.success && res.result !== '无数据') { if (res.success && res.result !== '无数据') {
this.proofInfo = res.result this.proofInfo = res.result || {}
// 标协会员、证书的缴费凭证文件、缴费金额、缴费日期、申请人字段和普通项目、工作组项目、资料网员的不一致 // 标协会员、证书的缴费凭证文件、缴费金额、缴费日期、申请人字段和普通项目、工作组项目、资料网员的不一致
if (record.projectType.toString() === '5' || record.projectType.toString() === '6') { if (record.projectType.toString() === '5' || record.projectType.toString() === '6') {
this.proofInfo.proof = res.result.paymentRecord this.proofInfo.proof = res.result.paymentRecord
this.proofInfo.amountReceived = res.result.amountReceivable this.proofInfo.amountReceived = res.result.amountReceivable
this.proofInfo.paymentDate = res.result.submissionTime this.proofInfo.paymentDate = res.result.submissionTime
this.proofInfo.applicantName = res.result.liaisonMan this.proofInfo.applicantName = res.result.liaisonMan
this.currentSelectInvoiceType = Number(res.result.invoiceRequirements)
if(this.currentSelectInvoiceType) {
this.invoiceRequirementsFlag = false
} else {
this.invoiceRequirementsFlag = true
}
this.$nextTick(() => {
this.form.setFieldsValue(pick(res.result, 'invoiceRequirements', 'headerName', 'taxNumber', 'invoiceAddress', 'invoicePhone', 'depositBank', 'bankAccount'))
})
} }
this.getProofType(record) this.getProofType(record)
resolve(true) resolve(true)
@@ -216,12 +379,26 @@ export default {
} }
}, },
updateMemberPaymentInfo(params) {
return new Promise(resolve => {
let isSuccess = false
incomingUpdatePayment(params).then(res => {
if(res.success) {
isSuccess = true
} else {
this.$message.warn(res.message)
}
}).finally(() => {
resolve(isSuccess)
})
})
},
handleOk() { handleOk() {
if (this.confirmLoading) { if (this.confirmLoading) {
return return
} }
this.confirmLoading = true this.confirmLoading = true
this.form.validateFields((err, values) => { this.form.validateFields(async (err, values) => {
if (!err) { if (!err) {
values.projectId = this.model.id values.projectId = this.model.id
values.projectType = this.model.projectType values.projectType = this.model.projectType
@@ -230,6 +407,17 @@ export default {
values.reviewInstructions = null values.reviewInstructions = null
} }
const formData = Object.assign(this.proofInfo, values) const formData = Object.assign(this.proofInfo, values)
console.log(formData)
// 标协会员缴费、证书缴费 需要先调用 编辑的接口,编辑成功后在调用审核的接口
if(this.proofInfo.projectType + '' === '5' || this.proofInfo.projectType + '' === '6') {
let updateResult = await this.updateMemberPaymentInfo(formData)
if(!updateResult) {
setTimeout(() => {
this.confirmLoading = false
}, 1000)
return
}
}
postAction(this.auditUrl, formData).then(res => { postAction(this.auditUrl, formData).then(res => {
if (res.success) { if (res.success) {
this.$message.success(res.message) this.$message.success(res.message)
@@ -278,7 +466,31 @@ export default {
this.$refs.previewImg.title = '缴费凭证' this.$refs.previewImg.title = '缴费凭证'
this.$refs.previewImg.imgId = imgId this.$refs.previewImg.imgId = imgId
this.$refs.previewImg.visible = true this.$refs.previewImg.visible = true
} },
/*
* 验证发票信息-电话号码 的正确性
* */
handleInvoicePhoneCheck(rule, value, callback) {
const reg = /^((13[0-9])|(14[579])|(15([0-3]|[5-9]))|(17[0135678])|(18[0-9])|(19[8|9])|(16[6]))\d{8}$|^([0-9]{3,4}-)[0-9]{7,8}$/
if (!value) {
callback(new Error('请输入电话号码'))
}
if (value && !reg.test(value)) {
callback(new Error('请输入正确格式的电话号码'))
} else {
callback()
}
},
/* 选择发票*/
invoiceRequirementsChange(value) {
this.currentSelectInvoiceType = Number(value)
// 0 代表发票选择无
if (this.currentSelectInvoiceType === 0) {
this.invoiceRequirementsFlag = false
} else {
this.invoiceRequirementsFlag = true
}
},
} }
} }
</script> </script>
@@ -324,20 +536,25 @@ h3.title::before {
div { div {
color: black; color: black;
} }
}
// 将缴费凭证的图片部分提出
.proof-img {
display: flex;
width:calc(100% - 4rem);
.proof-img { &-item {
display: flex; width: 50%;
width:calc(100% - 4rem); img {
max-width: 100%;
&-item { max-height: 150px;
width: 50%; cursor: pointer;
img {
max-width: 100%;
max-height: 150px;
cursor: pointer;
}
} }
} }
} }
</style> // 修改缴费基础信息的样式
.basic-info-div{
/deep/.ant-form-item:not(.proof-form-item){
margin-bottom: 0;
}
}
</style>