统一个人测算入参与重启脚本进程识别

This commit is contained in:
wkc
2026-04-10 15:04:56 +08:00
parent f001047d0c
commit fa0b446699
46 changed files with 903 additions and 87 deletions

Binary file not shown.

View File

@@ -10,7 +10,9 @@
"build:stage": "vue-cli-service build --mode staging",
"preview": "node build/index.js --preview",
"test:password-transfer": "node tests/password-transfer-api.test.js",
"test:retail-display-fields": "node tests/retail-display-fields.test.js"
"test:retail-display-fields": "node tests/retail-display-fields.test.js",
"test:personal-create-input-params": "node tests/personal-create-input-params.test.js",
"test:id-number-validation-removal": "node tests/id-number-validation-removal.test.js"
},
"keywords": [
"vue",

View File

@@ -124,22 +124,6 @@ export default {
}
},
data() {
// 统一社会信用代码验证
const validateIdNum = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入证件号码'))
} else if (this.form.idType === '统一社会信用代码') {
const reg = /^[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}$/
if (!reg.test(value)) {
callback(new Error('请输入正确的统一社会信用代码'))
} else {
callback()
}
} else {
callback()
}
}
// 金额验证
const validateApplyAmt = (rule, value, callback) => {
if (!value) {
@@ -175,7 +159,7 @@ export default {
return {
submitting: false,
form: {
orgCode: '',
orgCode: '892000',
runType: '1',
custIsn: undefined,
custName: undefined,
@@ -204,7 +188,7 @@ export default {
{required: true, message: "请选择证件类型", trigger: "change"}
],
idNum: [
{required: true, validator: validateIdNum, trigger: "blur"}
{required: true, message: "证件号码不能为空", trigger: "blur"}
],
guarType: [
{required: true, message: "请选择担保方式", trigger: "change"}
@@ -242,7 +226,7 @@ export default {
/** 表单重置 */
reset() {
this.form = {
orgCode: '',
orgCode: '892000',
runType: '1',
custIsn: undefined,
custName: undefined,

View File

@@ -150,8 +150,8 @@ export default {
methods: {
/** 格式化布尔值为中文 */
formatBoolean(value) {
if (value === 'true' || value === true) return '是'
if (value === 'false' || value === false) return '否'
if (value === 'true' || value === true || value === '1' || value === 1) return '是'
if (value === 'false' || value === false || value === '0' || value === 0) return '否'
return value || '-'
},
/** 获取基准利率 */

View File

@@ -242,8 +242,8 @@ export default {
methods: {
/** 格式化布尔值为中文 */
formatBoolean(value) {
if (value === 'true' || value === true) return '是'
if (value === 'false' || value === false) return '否'
if (value === 'true' || value === true || value === '1' || value === 1) return '是'
if (value === 'false' || value === false || value === '0' || value === 0) return '否'
return value || '-'
},
/** 格式化贷款用途 */

View File

@@ -51,6 +51,23 @@
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="贷款用途" prop="loanPurpose">
<el-select v-model="form.loanPurpose" placeholder="请选择贷款用途" style="width: 100%">
<el-option label="消费" value="consumer"/>
<el-option label="经营" value="business"/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item label="借款期限(年)" prop="loanTerm">
<el-select v-model="form.loanTerm" placeholder="请选择借款期限" style="width: 100%">
<el-option v-for="item in loanTermOptions" :key="item" :label="item" :value="item"/>
</el-select>
</el-form-item>
</el-col>
</el-row>
<el-row>
<el-col :span="12">
<el-form-item label="是否有经营佐证" prop="bizProof">
@@ -70,9 +87,9 @@
<el-col :span="12">
<el-form-item label="抵质押类型" prop="collType">
<el-select v-model="form.collType" placeholder="请选择抵质押类型" style="width: 100%">
<el-option label="一线" value="一线"/>
<el-option label="一类" value="一类"/>
<el-option label="二类" value="二类"/>
<el-option label="三类" value="三类"/>
</el-select>
</el-form-item>
</el-col>
@@ -102,22 +119,6 @@ export default {
}
},
data() {
// 身份证验证
const validateIdNum = (rule, value, callback) => {
if (!value) {
callback(new Error('请输入证件号码'))
} else if (this.form.idType === '身份证') {
const reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/
if (!reg.test(value)) {
callback(new Error('请输入正确的身份证号码'))
} else {
callback()
}
} else {
callback()
}
}
// 金额验证
const validateApplyAmt = (rule, value, callback) => {
if (!value) {
@@ -135,9 +136,12 @@ export default {
}
return {
loanTermOptions: [
'1', '2', '3', '4', '5', '6'
],
submitting: false,
form: {
orgCode: '',
orgCode: '892000',
runType: '1',
custIsn: undefined,
custName: undefined,
@@ -145,6 +149,8 @@ export default {
idNum: undefined,
guarType: undefined,
applyAmt: undefined,
loanPurpose: undefined,
loanTerm: undefined,
bizProof: false,
loanLoop: false,
collType: undefined,
@@ -163,7 +169,7 @@ export default {
{required: true, message: "请选择证件类型", trigger: "change"}
],
idNum: [
{required: true, validator: validateIdNum, trigger: "blur"}
{required: true, message: "证件号码不能为空", trigger: "blur"}
],
guarType: [
{required: true, message: "请选择担保方式", trigger: "change"}
@@ -171,8 +177,11 @@ export default {
applyAmt: [
{required: true, validator: validateApplyAmt, trigger: "blur"}
],
collType: [
{required: true, message: "请选择抵质押类型", trigger: "change"}
loanPurpose: [
{required: true, message: "请选择贷款用途", trigger: "change"}
],
loanTerm: [
{required: true, message: "请选择借款期限", trigger: "change"}
]
}
}
@@ -198,7 +207,7 @@ export default {
/** 表单重置 */
reset() {
this.form = {
orgCode: '',
orgCode: '892000',
runType: '1',
custIsn: undefined,
custName: undefined,
@@ -206,6 +215,8 @@ export default {
idNum: undefined,
guarType: undefined,
applyAmt: undefined,
loanPurpose: undefined,
loanTerm: undefined,
bizProof: false,
loanLoop: false,
collType: undefined,
@@ -231,9 +242,9 @@ export default {
// 转换开关值为字符串
const data = {
...this.form,
bizProof: this.form.bizProof ? 'true' : 'false',
loanLoop: this.form.loanLoop ? 'true' : 'false',
collThirdParty: this.form.collThirdParty ? 'true' : 'false'
bizProof: this.form.bizProof ? '1' : '0',
loanLoop: this.form.loanLoop ? '1' : '0',
collThirdParty: this.form.collThirdParty ? '1' : '0'
}
createPersonalWorkflow(data).then(response => {

View File

@@ -72,6 +72,7 @@
<el-descriptions :column="2" border>
<el-descriptions-item label="担保方式">{{ detailData.guarType }}</el-descriptions-item>
<el-descriptions-item label="申请金额">{{ detailData.applyAmt }} </el-descriptions-item>
<el-descriptions-item label="贷款用途">{{ formatLoanPurpose(detailData.loanPurpose) }}</el-descriptions-item>
<el-descriptions-item label="借款期限">{{ detailData.loanTerm || '-' }}</el-descriptions-item>
<el-descriptions-item label="是否有经营佐证">{{
formatBoolean(detailData.bizProof)
@@ -149,8 +150,14 @@ export default {
methods: {
/** 格式化布尔值为中文 */
formatBoolean(value) {
if (value === 'true' || value === true) return '是'
if (value === 'false' || value === false) return '否'
if (value === 'true' || value === true || value === '1' || value === 1) return '是'
if (value === 'false' || value === false || value === '0' || value === 0) return '否'
return value || '-'
},
/** 格式化贷款用途 */
formatLoanPurpose(value) {
if (value === 'consumer') return '消费'
if (value === 'business') return '经营'
return value || '-'
},
/** 获取基准利率 */

View File

@@ -0,0 +1,34 @@
const fs = require('fs')
const path = require('path')
const assert = require('assert')
function read(relativePath) {
return fs.readFileSync(path.join(__dirname, '..', relativePath), 'utf8')
}
const personalCreateDialog = read('src/views/loanPricing/workflow/components/PersonalCreateDialog.vue')
const corporateCreateDialog = read('src/views/loanPricing/workflow/components/CorporateCreateDialog.vue')
assert(
!personalCreateDialog.includes('const validateIdNum ='),
'个人新增弹窗仍包含证件号码格式校验函数'
)
assert(
!corporateCreateDialog.includes('const validateIdNum ='),
'企业新增弹窗仍包含证件号码格式校验函数'
)
assert(
personalCreateDialog.includes("idNum: [") &&
personalCreateDialog.includes('{required: true, message: "证件号码不能为空", trigger: "blur"}'),
'个人新增弹窗证件号码规则应仅保留必填'
)
assert(
corporateCreateDialog.includes("idNum: [") &&
corporateCreateDialog.includes('{required: true, message: "证件号码不能为空", trigger: "blur"}'),
'企业新增弹窗证件号码规则应仅保留必填'
)
console.log('id number validation removal assertions passed')

View File

@@ -0,0 +1,65 @@
const fs = require('fs')
const path = require('path')
const assert = require('assert')
function read(relativePath) {
return fs.readFileSync(path.join(__dirname, '..', relativePath), 'utf8')
}
const personalCreateDialog = read('src/views/loanPricing/workflow/components/PersonalCreateDialog.vue')
const personalDetail = read('src/views/loanPricing/workflow/components/PersonalWorkflowDetail.vue')
assert(
personalCreateDialog.includes('label="贷款用途"') && personalCreateDialog.includes('prop="loanPurpose"'),
'个人新增弹窗缺少贷款用途字段'
)
assert(
personalCreateDialog.includes('label="借款期限(年)"') && personalCreateDialog.includes('prop="loanTerm"'),
'个人新增弹窗缺少借款期限字段'
)
assert(
personalCreateDialog.includes("value=\"consumer\"") && personalCreateDialog.includes("value=\"business\""),
'个人新增弹窗缺少贷款用途选项'
)
assert(
personalCreateDialog.includes('loanTermOptions') &&
personalCreateDialog.includes("'1'") &&
personalCreateDialog.includes("'6'") &&
!personalCreateDialog.includes("'7'"),
'个人新增弹窗借款期限选项应限制为 1-6 年'
)
assert(
personalCreateDialog.includes('label="一类"') &&
personalCreateDialog.includes('label="二类"') &&
personalCreateDialog.includes('label="三类"') &&
!personalCreateDialog.includes('label="一线"'),
'个人新增弹窗抵质押类型选项未按 Excel 对齐'
)
assert(
!personalCreateDialog.includes('{required: true, message: "请选择抵质押类型", trigger: "change"}'),
'个人新增弹窗仍将抵质押类型设为必填'
)
assert(
personalCreateDialog.includes("bizProof: this.form.bizProof ? '1' : '0'") &&
personalCreateDialog.includes("loanLoop: this.form.loanLoop ? '1' : '0'") &&
personalCreateDialog.includes("collThirdParty: this.form.collThirdParty ? '1' : '0'"),
'个人新增弹窗开关字段未按 1/0 提交'
)
assert(
personalDetail.includes('label="贷款用途"') && personalDetail.includes('detailData.loanPurpose'),
'个人详情页缺少贷款用途展示'
)
assert(
personalDetail.includes("value === '1'") && personalDetail.includes("value === '0'"),
'个人详情页布尔格式化未兼容 1/0'
)
console.log('personal create input params assertions passed')