抽离证书弹窗组件

This commit is contained in:
dongwei
2022-06-16 13:41:03 +08:00
parent a43decdc2c
commit 096a3c9d6f
13 changed files with 5924 additions and 69 deletions
@@ -0,0 +1,699 @@
<template>
<j-modal
:title="title"
:width="width"
:visible="visible"
:confirmLoading="confirmLoading"
:maskClosable="false"
switchFullscreen
@cancel="handleCancel"
cancelText="关闭">
<template>
<a-spin :spinning="confirmLoading">
<a-form :form="form">
<a-divider orientation="left">
申请信息
</a-divider>
<a-row>
<a-col :span="12">
<a-form-item label="证书类型" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-search-select-tag
disabled
dict="certificate_type"
v-model="model.certificateType"
placeholder="请选择证书类型"/>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label=" 证书代码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :maxLength="50" disabled v-model="model.code" placeholder="请输入证书代码"></a-input>
</a-form-item>
<span class="apply-code-notice">一次申请仅能输入一个证书代码</span>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="通讯地址" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
:maxLength="50"
disabled
v-model="model.address"
placeholder=""></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="邮编" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
:maxLength="50"
disabled
v-model="model.postcode"
placeholder=""></a-input>
</a-form-item>
</a-col>
</a-row>
<a-divider orientation="left">
缴费信息
</a-divider>
<a-row>
<a-col :span="12">
<a-form-item label="单位全称" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :maxLength="50" disabled v-model="model.companyName"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="联系人" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :maxLength="50" disabled v-model="model.liaisonMan" placeholder="请输入联系人"></a-input>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="手机" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input :maxLength="50" disabled v-model="model.mobile" placeholder="请输入手机号"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="缴费方式" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
type="list"
v-model="memberInfoPayment.paymentMethod"
v-decorator="['paymentMethod',validatorRules.paymentMethod]"
@change="changePaymentMethod"
:trigger-change="true"
dictCode="payment_method"
placeholder="请选择缴费方式"/>
</a-form-item>
</a-col>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="缴费金额" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input-number
:maxLength="50"
v-model="memberInfoPayment.paymentAmount"
v-decorator="['paymentAmount',validatorRules.paymentAmount]"
placeholder="请输入缴费金额"
style="width: 100%"/>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="缴费日期" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-date
date-format="YYYY-MM-DD HH:mm:ss"
placeholder="请选择缴费时间"
v-model="memberInfoPayment.submissionTime"
v-decorator="['submissionTime',validatorRules.submissionTime]"
:trigger-change="true"
style="width: 100%"/>
</a-form-item>
</a-col>
</a-row>
<div v-if="paymentMethodFlag">
<a-row>
<a-col :span="12" v-if="isWireTransfer == 2">
<a-form-item label="打包协议" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-upload
file-type="pdf"
file-type-error-message="请上传pdf文件"
:multiple="false"
:number="1"
bizPath="payment"
v-model="memberInfoPayment.paymentRecord"
v-decorator="['paymentRecord',validatorRules.paymentRecord1]"
:trigger-change="true"></j-upload>
<span style="color: #bfbfbf">请上传pdf文件</span>
</a-form-item>
</a-col>
</a-row>
</div>
<div v-if="paymentMethodFlag == false">
<a-row>
</a-row>
<a-row>
<a-col :span="12">
<a-form-item label="缴费凭证" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-image-upload
isLessThan5M
isMultiple
:number="2"
bizPath="payment"
v-decorator="['paymentRecord',validatorRules.paymentRecord]"
v-model="memberInfoPayment.paymentRecord"></j-image-upload>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="发票" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-dict-select-tag
type="list"
v-model="memberInfoPayment.invoiceRequirements"
v-decorator="['invoiceRequirements',validatorRules.invoiceRequirements]"
@change="invoiceRequirementsChange"
:trigger-change="true"
dictCode="invoice_requirements"
placeholder="请选择发票"/>
</a-form-item>
<span v-if="!invoiceRequirementsFlag" class="apply-code-notice">本选项不提供任何形式的发票凭证</span>
</a-col>
</a-row>
<template v-if="invoiceRequirementsFlag">
<a-row>
<a-col :span="12">
<a-form-item label="付款单位发票抬头" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
:maxLength="50"
v-decorator="['headerName',{ ...validatorRules.headerName,initialValue:currentMemberInfo.invoiceInfo}]"
placeholder="请输入付款单位发票抬头"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="社会统一代码/税号" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
:maxLength="50"
v-decorator="['taxNumber',{ ...validatorRules.taxNumber,initialValue: currentMemberInfo.taxNo}]"
placeholder="请输入社会统一代码/税号"></a-input>
</a-form-item>
</a-col>
</a-row>
<!-- 2021-09-23变更 增加 单位地址 电话号码 开户银行 银行账户 增值税发票的时候存在-->
<a-row v-if="currentSelectInvoiceType === 2">
<a-col :span="12">
<a-form-item label="单位地址" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
@change="event => event.target.value = event.target.value.trim()"
v-decorator="['invoiceAddress',{ ...validatorRules.invoiceAddress, initialValue:currentMemberInfo.invoiceAddress}]"
placeholder="请输入单位地址"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="电话号码" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
v-decorator="['invoicePhone',{ ...validatorRules.invoiceAddress, initialValue: currentMemberInfo.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 v-if="currentSelectInvoiceType === 2">
<a-col :span="12">
<a-form-item label="开户银行" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
@change="event => event.target.value = event.target.value.trim()"
v-decorator="['depositBank',{ ...validatorRules.depositBank, initialValue:currentMemberInfo.depositBank}]"
placeholder="请输入开户银行"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
<a-col :span="12">
<a-form-item label="银行账户" :labelCol="labelCol" :wrapperCol="wrapperCol">
<a-input
@change="(e) => {e.target.value = e.target.value.trim()}"
v-decorator="['bankAccount',{ ...validatorRules.bankAccount, initialValue:currentMemberInfo.bankAccount}]"
placeholder="请输入银行账户"
:maxLength="50"></a-input>
</a-form-item>
</a-col>
</a-row>
</template>
</div>
<!-- 缴费备注-->
<a-row>
<a-col :span="24" class="remark">
<a-form-item label="备注" :labelCol="labelColText" :wrapperCol="wrapperCol">
<a-textarea rows="5" v-decorator="['paymentMark' ]" placeholder="请输入备注" :maxLength="500"></a-textarea>
</a-form-item>
<span style="color: #bfbfbf">一个缴费单可在多个缴费处上传</span>
</a-col>
</a-row>
<a-row>
<!-- 企业证书换证原因-->
<a-col :span="12" v-if="selectType == '2' ">
<!-- :options="dictOptionsForCorporation"-->
<a-form-item label="换证原因" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-multi-select-tag
placeholder="请选择换证原因"
v-decorator="['reasonsRenewal']"
dict-code="certificate_type_ec"
>
</j-multi-select-tag>
</a-form-item>
</a-col>
<!-- 世界制造厂证书换证原因-->
<a-col :span="12" v-if="selectType == 1 ">
<!-- :options="dictOptionsForCorporation"-->
<a-form-item label="换证原因" :labelCol="labelCol" :wrapperCol="wrapperCol">
<j-multi-select-tag
placeholder="请选择换证原因"
v-decorator="['reasonsRenewal']"
dict-code="certificate_type_wmi"
>
</j-multi-select-tag>
</a-form-item>
</a-col>
</a-row>
<!-- 换证备注-->
<a-row>
<a-col :span="24">
<a-form-item label="备注" :labelCol="labelColText" :wrapperCol="wrapperCol">
<a-textarea
rows="5"
v-decorator="['replacementRemark']"
placeholder="请输入备注"
:maxLength="500"></a-textarea>
</a-form-item>
<a-col :span="2"></a-col>
</a-col>
</a-row>
</a-form>
</a-spin>
</template>
<template slot="footer">
<a-button @click="handleCancel">关闭</a-button>
<a-button @click="saveRenewChargeCertificate" type="primary">暂存</a-button>
<a-button @click="realSaveRenewChargeCertificate" type="primary">提交</a-button>
</template>
</j-modal>
</template>
<script>
import JMultiSelectTag from '@comp/standardsAssociation/JMultiSelectTag'
import JImageUpload from '@comp/standardsAssociation/JImageUpload'
import JUpload from '@comp/standardsAssociation/JUpload'
import JDate from '@comp/tools/JDate'
import JSearchSelectTag from '@comp/standardsAssociation/JSearchSelectTag'
import { getAction, httpAction } from '@api/memberManage'
import pick from 'lodash.pick'
export default {
// 证书续费编辑 窗口
name: 'RenewChargeEditModel',
components: {
JMultiSelectTag,
JImageUpload,
JUpload,
JDate,
JSearchSelectTag
},
data() {
return {
title: '续费',
loginUserId: this.$store.getters.userInfo.memberId,
visible: false,
confirmLoading: false,
pageType: 12,
form: this.$form.createForm(this),
labelCol: {
xs: { span: 24 },
sm: { span: 6 }
},
wrapperCol: {
xs: { span: 24 },
sm: { span: 16 }
},
labelColText: {
xs: { span: 24 },
sm: { span: 3 }
},
// 会员缴费信息
memberInfoPayment: {},
// 当前登录用户的会员信息
currentMemberInfo: {},
model: {},
// 记录续费证书选择
selectType: 1,
invoiceRequirementsFlag: false,
// 当前选择是否需要发票的值,用于dom的判断 0-无 1-普通发票 2-增值税发票
currentSelectInvoiceType: 0,
validatorRules: {
defaultRules: {
rules: [{ required: true, message: '请选择' },
{ min: 1, max: 50, message: '长度不超过50个字符', validateTrigger: 'blur' }
]
},
unBindId: {
rules: [{ required: true, message: '请选择要解绑的证书' }
]
},
companyName: {
rules: [
{ required: true, message: '请输入单位全称!' },
{ min: 1, max: 50, message: '单位全称长度不超过50个字符', validateTrigger: 'blur' }
]
},
mobile: {
rules: [
{ required: true, message: '请输入手机!' },
{ min: 1, max: 50, message: '手机号码不超过50个字符' },
{ pattern: /^1[345678]\d{9}$/, message: '请输入正确的手机号', validateTrigger: 'blur' }
]
},
code: {
rules: [
{ required: true, message: '请输入证书代码!' },
{ min: 1, max: 50, message: '长度不超过50个字符', validateTrigger: 'blur' }
]
},
certificateImg: {
rules: [
{ required: true, message: '请上传证书文件!' }
],
validateTrigger: 'change'
},
clientCode: {
rules: [
{ min: 0, max: 50, message: '长度不超过50个字符', validateTrigger: 'blur' }
]
},
effectDate: {
rules: [{
required: true, message: '请选择生效日期'
}]
},
certificateType: {
rules: [{
required: true, message: '请输入证书类型!'
}]
},
address: {
rules: [
{ required: true, message: '请输入通讯地址!' },
{ min: 1, max: 50, message: '长度不超过50个字符', validateTrigger: 'blur' }
]
},
postcode: {
rules: [
{
required: true, message: '请输入邮编!'
},
{ min: 1, max: 50, message: '长度不超过50个字符' }
// { pattern: /^[0-9]\d{5}$/, message: '请输入正确的邮编', validateTrigger: 'blur' }
]
},
paymentMethod: {
rules: [{
required: true, message: '请输入缴费方式!'
}]
},
paymentAmount: {
rules: [
{
required: true, message: '请输入缴费金额!'
},
{
pattern: /^[1-9](\d{1,10})?(\.\d{1,2})$|^0\.([1-9](\d{0,1})|\d[1-9])$|^[1-9]\d{0,10}$|^0$/,
message: '请输入合法的金额数字,最多2位小数,11位正数',
validateTrigger: 'blur'
}
],
validateTrigger: 'blur'
},
submissionTime: {
rules: [{
required: true, message: '请输入缴费日期!'
}]
},
paymentRecord: {
rules: [{
required: true, message: '请上传缴费凭证!'
}]
},
paymentRecord1: { rules: [{ required: true, message: '请上传打包协议' }] },
liaisonMan: {
rules: [
{ required: true, message: '请输入联系人!' },
{ min: 1, max: 50, message: '联系人不超过50个字符', validateTrigger: 'blur' }
]
},
invoiceRequirements: {
rules: [{
required: true, message: '请选择是否需要发票!'
}]
},
headerName: {
rules: [
{
required: true, message: '请输入付款单位发票抬头!'
},
{ min: 1, max: 50, message: '长度不超过50个字符', validateTrigger: 'blur' }
],
validateTrigger: 'blur'
},
taxNumber: {
rules: [
{ required: true, message: '请输入社会统一代码/税号!' },
{ min: 1, max: 50, message: '长度不超过50个字符', validateTrigger: 'blur' },
{
// pattern: /^[A-Z0-9]{15}$|^[A-Z0-9]{17}$|^[A-Z0-9]{18}$|^[A-Z0-9]{20}$/,
pattern: /^([0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}|[1-9]\d{14})$/,
// message: '15位、17位、18位、20位数字和大写英文字母',
message: '请输入15位、18位的社会统一代码/税号',
validateTrigger: 'blur'
}
],
validateTrigger: 'blur'
},
invoiceAddress: { rules: [{ required: true, message: '请输入单位地址' }], validateTrigger: 'blur' },
invoicePhone: {
rules: [
{ required: true, message: '请输入电话号码' },
{
pattern: /^((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}$/,
message: '请输入正确格式的电话号码',
validateTrigger: 'blur'
}
],
validateTrigger: 'blur'
},
depositBank: { rules: [{ required: true, message: '请输入开户银行' }], validateTrigger: 'blur' },
bankAccount: { rules: [{ required: true, message: '请输入银行账户' }], validateTrigger: 'blur' },
reasonsRenewal: {
rules: [{
required: true, message: '请至少选择一个换证原因!'
}]
},
sendMethod: { rules: [{ required: false, message: '请选择快递公司' }], validateTrigger: 'change' },
postNo: { rules: [{ required: false, message: '请输入邮寄单号' }], validateTrigger: 'blur' }
},
// 缴费方式标志
paymentMethodFlag: false, // 发票选择
// 免费证书对象
freeCertificate: {},
// 续费会员信pageType息
renewMemberInfo: {},
// 是否是电汇
isWireTransfer: '1'
}
},
methods: {
// 续费编辑方法
edit(record) {
// 获取证书类型
this.selectType = record.certificateType
// 数据准备
this.currentMemberInfo = {}
getAction('/memberInfo/memberInfo/getCurrentMemberInfo').then((res) => {
if (res.success) {
this.currentMemberInfo = res.result || {}
}
})
// 在核对证书的时候,需要设置生效日期的初始值
this.checkEffectDate = record.effectDate
this.form.resetFields()
this.model = Object.assign({}, record)
// this.freeCertificate = Object.assign({}, record)
// this.renewMemberInfo = Object.assign({}, record)
this.visible = true
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.model, 'paymentRecord', 'paymentMark', 'id', 'address', 'postcode', 'mobile', 'liaisonMan', 'companyName', 'certificateType', 'effectDate', 'reasonsRenewal', 'certificateStatus', 'code'))
})
// 查询证书最新的缴费信息
// 获取驳回的缴费信息
this.memberInfoPayment = {}
// 查询对应证书的缴费信息
const params = 'certificateId=' + record.id
getAction('/certificatePaymentInfo/getLastCertificatePayment?' + params).then((res) => {
if (res.success) {
this.memberInfoPayment = res.result
// 获取缴费方式
this.isWireTransfer = res.result.paymentMethod + ''
if (this.memberInfoPayment.paymentMethod === 1) {
this.paymentMethodFlag = false
} else {
this.paymentMethodFlag = true
}
this.$nextTick(() => {
this.form.setFieldsValue(pick(this.memberInfoPayment, 'submissionTime', 'paymentMark', 'replacementRemark', 'paymentAmount', 'certificateType', 'headerName', 'invoiceRequirements', 'paymentMethod', 'taxNumber', 'invoiceAddress', 'invoicePhone', 'depositBank', 'bankAccount', 'paymentRecord', 'id', 'address', 'postcode', 'mobile', 'liaisonMan', 'companyName', 'effectDate', 'reasonsRenewal', 'certificateStatus', 'code'))
})
} else {
console.log(res.message)
}
})
},
saveRenewChargeCertificate() {
this.editHandleRenewChargeCertificateOk()
},
// 添加 证书续费信息
editHandleRenewChargeCertificateOk: function() {
const that = this
// 触发表单验证
this.form.validateFields((err, values) => {
if (!err) {
that.confirmLoading = true
const httpurl = '/certificatePaymentInfo/addVinChargeInfo'
const method = 'post'
let formData = Object.assign(this.memberInfoPayment, values)
// 证书续费信息添加
formData.companyName = this.model.companyName
// 续费
formData.paymentType = 1
// 证书ID
formData.certificateId = this.model.id
// 缴费时长 默认为 5年
formData.paymentTime = 5
// 添加权限控制
formData.memberId = this.loginUserId
// 设置证书状态为 未提交
formData.certificateStatus = 0
formData = Object.assign(formData, pick(this.model, 'address', 'postcode', 'companyName'))
httpAction(httpurl, formData, method).then((res) => {
if (res.success) {
// 修改证书的状态,和证书的类型
const chargeUrl = '/vinCertificate/vinCertificate/renewChargeCertificate'
const chargeMethod = 'post'
const chargeFormData = Object.assign(this.model, values)
chargeFormData.certificateStatus = 0
httpAction(chargeUrl, chargeFormData, chargeMethod).then((res) => {
if (res.success) {
that.$message.success(res.message)
that.$emit('ok')
that.visible = false
}
})
} else {
that.$message.warning(res.message)
}
}).finally(() => {
that.confirmLoading = false
})
}
})
},
realSaveRenewChargeCertificate() {
this.realSaveHandleRenewChargeCertificateOk()
},
// 添加 证书续费信息
realSaveHandleRenewChargeCertificateOk: function() {
const that = this
// 触发表单验证
this.form.validateFields((err, values) => {
if (!err) {
that.confirmLoading = true
const httpurl = '/certificatePaymentInfo/addVinChargeInfo'
const method = 'post'
let formData = Object.assign(this.memberInfoPayment, values)
// 证书续费信息添加
formData.companyName = this.model.companyName
// 续费
formData.paymentType = 1
// 证书ID
formData.certificateId = this.model.id
// 缴费时长 默认为 5年
formData.paymentTime = 5
// 缴费状态为 未提交状态
formData.paymentStatus = 1
// 添加权限控制
formData.memberId = this.loginUserId
formData = Object.assign(formData, pick(this.model, 'address', 'postcode', 'companyName'))
httpAction(httpurl, formData, method).then((res) => {
if (res.success) {
// 修改证书的状态,和证书的类型
const chargeUrl = '/vinCertificate/vinCertificate/renewChargeCertificate'
const chargeMethod = 'post'
const chargeFormData = Object.assign(this.model, values)
// 设置证书的状态为已提交
chargeFormData.certificateStatus = 2
httpAction(chargeUrl, chargeFormData, chargeMethod).then((res) => {
if (res.success) {
that.$message.success(res.message)
that.$emit('ok')
that.visible = false
}
})
} else {
that.$message.warning(res.message)
}
}).finally(() => {
that.confirmLoading = false
})
}
})
},
/* 缴费方式*/
changePaymentMethod(value) {
// 1 是电汇 2 打包 3 是现金
this.isWireTransfer = value
this.form.resetFields(['paymentType', 'paymentAmount', 'paymentTime', 'submissionTime', 'paymentRecord'])
if (value !== '1') {
this.paymentMethodFlag = true
} else {
this.paymentMethodFlag = false
}
},
// 校验是否选择 要发票
invoiceRequirementsChange(value) {
this.currentSelectInvoiceType = Number(value)
if (this.currentSelectInvoiceType !== 0) {
this.invoiceRequirementsFlag = true
} else {
this.invoiceRequirementsFlag = false
}
},
handleCancel() {
this.visible = false
}
},
computed: {
width() {
if (this.pageType === 14) {
return 400
}
if (this.pageType !== 4) {
return 1350
} else {
return 650
}
}
}
}
</script>
<style scoped>
</style>