|
|
|
@ -4,7 +4,7 @@ |
|
|
|
|
@tab-click="tabChange"> |
|
|
|
|
<el-tab-pane label="配置风控" |
|
|
|
|
name="tab1"> |
|
|
|
|
<div class="audit"> |
|
|
|
|
<!-- <div class="audit"> |
|
|
|
|
<div class="line"> |
|
|
|
|
<span class="field">审批意见:</span> |
|
|
|
|
<span class="status">待审批</span> |
|
|
|
@ -17,71 +17,321 @@ |
|
|
|
|
</div> |
|
|
|
|
<p class="mb-2 text-sm text-[#333] text-right">审查日期:2022-02-02</p> |
|
|
|
|
<p class="mb-2 text-sm text-[#333] text-right">审查员:公瑾</p> |
|
|
|
|
</div> |
|
|
|
|
<div class="forms step-form"> |
|
|
|
|
</div> --> |
|
|
|
|
|
|
|
|
|
<el-form ref="formRef" |
|
|
|
|
:model="form" |
|
|
|
|
:rules="rules" |
|
|
|
|
label-width="120px" |
|
|
|
|
label-suffix=":" |
|
|
|
|
class="form" |
|
|
|
|
status-icon> |
|
|
|
|
<div class="step"> |
|
|
|
|
<h6 class="step-name mb-7">办理账户</h6> |
|
|
|
|
<div class="line"> |
|
|
|
|
<label class="label">提供材料:</label> |
|
|
|
|
<div class="fields"> |
|
|
|
|
<el-checkbox-group v-model="modelValue.cl"> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="line"> |
|
|
|
|
<label class="label">发放账户:</label> |
|
|
|
|
<div class="fields"> |
|
|
|
|
<el-checkbox-group v-model="modelValue.cl"> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<el-form-item label="提供材料" |
|
|
|
|
prop="accountMaterials"> |
|
|
|
|
<el-checkbox-group v-model="form.accountMaterials"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[0]?.recordChildren[0]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="发放账户" |
|
|
|
|
prop="sendingAccount"> |
|
|
|
|
<el-radio v-model="form.sendingAccount" |
|
|
|
|
:label="46">借记卡或放款专户</el-radio> |
|
|
|
|
</el-form-item> |
|
|
|
|
</div> |
|
|
|
|
<div class="step"> |
|
|
|
|
<h6 class="step-name mb-7">贷款申请</h6> |
|
|
|
|
<div class="line"> |
|
|
|
|
<label class="label">申请方式:</label> |
|
|
|
|
<div class="fields"> |
|
|
|
|
<el-checkbox-group v-model="modelValue.cl"> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
<div class="line"> |
|
|
|
|
<label class="label">提供材料:</label> |
|
|
|
|
<div class="fields"> |
|
|
|
|
<p class="field-name">贷款人材料</p> |
|
|
|
|
<div> |
|
|
|
|
<el-checkbox-group v-model="modelValue.cl"> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
<el-form-item label="申请方式" |
|
|
|
|
prop="loanApplicationMethod"> |
|
|
|
|
<el-checkbox-group v-model="form.loanApplicationMethod"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[1]?.recordChildren[0]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="提供材料" |
|
|
|
|
prop="borrowerMaterial"> |
|
|
|
|
<div class="flex-1"> |
|
|
|
|
<p class="field-name">借款人材料</p> |
|
|
|
|
<div class="flex items-center mb-3"> |
|
|
|
|
<el-checkbox-group v-model="form.borrowerMaterial"> |
|
|
|
|
<el-checkbox :label="config[1]?.recordChildren[1]?.subject?.itemList[0].itemId">{{ config[1]?.recordChildren[1]?.subject?.itemList[0].options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
<el-select v-show="(detail.productType && form.borrowerMaterial?.includes(165)) || (!detail.productType && form.borrowerMaterial?.includes(49))" |
|
|
|
|
class="ml-5" |
|
|
|
|
v-model="form.borrowerMaterialSelect" |
|
|
|
|
placeholder="请选择"> |
|
|
|
|
<el-option v-for="item in config[1]?.recordChildren[1]?.subject?.itemList[0]?.children" |
|
|
|
|
:key="item.itemId" |
|
|
|
|
:label="item.options" |
|
|
|
|
:value="item.itemId" /> |
|
|
|
|
</el-select> |
|
|
|
|
</div> |
|
|
|
|
<p class="field-name mt-5">配偶材料</p> |
|
|
|
|
<el-checkbox-group v-model="form.borrowerMaterial"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[1]?.recordChildren[1]?.subject?.itemList.slice(1)" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
|
|
|
|
|
<!-- 企业 --> |
|
|
|
|
<template v-if="detail.productType"> |
|
|
|
|
<p class="field-name mt-5">企业材料</p> |
|
|
|
|
<div> |
|
|
|
|
<el-checkbox-group v-model="form.enterpriseMaterial"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[1]?.recordChildren[2]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
<p class="field-name mt-5">抵押物</p> |
|
|
|
|
<div> |
|
|
|
|
<el-checkbox-group v-model="form.collateral"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[1]?.recordChildren[3]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
<!-- 个人 --> |
|
|
|
|
<template v-else> |
|
|
|
|
<p class="field-name mt-5">配偶材料</p> |
|
|
|
|
<div> |
|
|
|
|
<el-checkbox-group v-model="form.mateMaterial"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[1]?.recordChildren[2]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
<p class="field-name mt-5">经营类材料</p> |
|
|
|
|
<div> |
|
|
|
|
<el-checkbox-group v-model="form.businessMaterials"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[1]?.recordChildren[3]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
</template> |
|
|
|
|
<p class="field-name mt-5">补充材料</p> |
|
|
|
|
<div> |
|
|
|
|
<el-checkbox-group v-model="modelValue.cl"> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
<el-checkbox-group v-model="form.supplementaryMaterials"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[1]?.recordChildren[4]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</div> |
|
|
|
|
<p class="field-name mt-5">经营类材料</p> |
|
|
|
|
<div> |
|
|
|
|
<el-checkbox-group v-model="modelValue.cl"> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
|
|
|
|
|
</div> |
|
|
|
|
</el-form-item> |
|
|
|
|
</div> |
|
|
|
|
<div class="step"> |
|
|
|
|
<h6 class="step-name mb-7">系统跑批准入风控策略</h6> |
|
|
|
|
<el-form-item label="跑批对象" |
|
|
|
|
prop="runBatchObject"> |
|
|
|
|
<el-checkbox-group v-model="form.runBatchObject"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[2]?.recordChildren[0]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="准入策略" |
|
|
|
|
prop="accessStrategy"> |
|
|
|
|
<el-checkbox-group v-model="form.accessStrategy"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[2]?.recordChildren[1]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="信用评分策略" |
|
|
|
|
label-width="130px" |
|
|
|
|
prop="personalCreditScoringStrategiesCheck"> |
|
|
|
|
<div class="flex-1"> |
|
|
|
|
<div class="flex items-center mb-3"> |
|
|
|
|
<el-checkbox v-model="form.personalCreditScoringStrategiesCheck" |
|
|
|
|
label="个人信用评分策略" /> |
|
|
|
|
<el-select v-show="form.personalCreditScoringStrategiesCheck" |
|
|
|
|
class="ml-5" |
|
|
|
|
v-model="form.personalCreditScoringStrategies" |
|
|
|
|
placeholder="请选择"> |
|
|
|
|
<el-option v-for="item in config[2]?.recordChildren[2]?.subject?.itemList[0]?.children" |
|
|
|
|
:key="item.itemId" |
|
|
|
|
:label="item.options" |
|
|
|
|
:value="item.itemId" /> |
|
|
|
|
</el-select> |
|
|
|
|
</div> |
|
|
|
|
<p class="field-name mt-5">补充材料</p> |
|
|
|
|
<div> |
|
|
|
|
<el-checkbox-group v-model="modelValue.cl"> |
|
|
|
|
<el-checkbox label="身份证" /> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
<div class="flex items-center"> |
|
|
|
|
<el-checkbox v-model="form.corporateCreditScoringStrategiesCheck" |
|
|
|
|
label="企业信用评分策略" /> |
|
|
|
|
<el-select v-show="form.corporateCreditScoringStrategiesCheck" |
|
|
|
|
class="ml-5" |
|
|
|
|
v-model="form.corporateCreditScoringStrategies" |
|
|
|
|
placeholder="请选择"> |
|
|
|
|
<el-option v-for="item in config[2]?.recordChildren[2]?.subject?.itemList[1]?.children" |
|
|
|
|
:key="item.itemId" |
|
|
|
|
:label="item.options" |
|
|
|
|
:value="item.itemId" /> |
|
|
|
|
</el-select> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="风险度策略" |
|
|
|
|
prop="riskDegreeStrategy"> |
|
|
|
|
<el-checkbox-group v-model="form.riskDegreeStrategy"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[2]?.recordChildren[3]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="利率定价模型" |
|
|
|
|
label-width="130px" |
|
|
|
|
prop="interestRatePricingModelCheck"> |
|
|
|
|
<div class="flex-1"> |
|
|
|
|
<div class="flex items-center mb-3"> |
|
|
|
|
<el-checkbox v-model="form.interestRatePricingModelCheck" |
|
|
|
|
label="个人额度模型" /> |
|
|
|
|
<el-select v-show="form.interestRatePricingModelCheck" |
|
|
|
|
class="ml-5" |
|
|
|
|
v-model="form.interestRatePricingModel" |
|
|
|
|
placeholder="请选择"> |
|
|
|
|
<el-option v-for="item in config[2]?.recordChildren[4]?.subject?.itemList[0]?.children" |
|
|
|
|
:key="item.itemId" |
|
|
|
|
:label="item.options" |
|
|
|
|
:value="item.itemId" /> |
|
|
|
|
</el-select> |
|
|
|
|
</div> |
|
|
|
|
<el-checkbox v-model="form.individualInterestRateModel" |
|
|
|
|
:label="103">个人利率模型</el-checkbox> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-form-item> |
|
|
|
|
</div> |
|
|
|
|
<div class="step"> |
|
|
|
|
<h6 class="step-name mb-7">尽职调查</h6> |
|
|
|
|
<el-form-item label="尽调方式" |
|
|
|
|
prop="dueDiligenceMode"> |
|
|
|
|
<el-radio-group v-model="form.dueDiligenceMode"> |
|
|
|
|
<el-radio v-for="(item, i) in config[3]?.recordChildren[0]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-radio> |
|
|
|
|
</el-radio-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="尽调内容" |
|
|
|
|
prop="dueDiligenceContent"> |
|
|
|
|
<el-checkbox-group v-model="form.dueDiligenceContent"> |
|
|
|
|
<el-checkbox v-for="(item, i) in config[1]?.recordChildren[0]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
</div> |
|
|
|
|
<div class="step"> |
|
|
|
|
<h6 class="step-name mb-7">贷款审查</h6> |
|
|
|
|
<el-form-item label="审查内容" |
|
|
|
|
prop="reviewContent"> |
|
|
|
|
<el-radio v-model="form.reviewContent" |
|
|
|
|
:label="114">所有基本材料</el-radio> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="审查签字" |
|
|
|
|
prop="reviewSignature"> |
|
|
|
|
<el-radio v-model="form.reviewSignature" |
|
|
|
|
:label="115">《用信调查申报表》</el-radio> |
|
|
|
|
</el-form-item> |
|
|
|
|
</div> |
|
|
|
|
<div class="step"> |
|
|
|
|
<h6 class="step-name mb-7">贷款审批</h6> |
|
|
|
|
<el-form-item label="审批内容" |
|
|
|
|
prop="reviewApproveContent"> |
|
|
|
|
<el-radio v-model="form.reviewApproveContent" |
|
|
|
|
:label="116">以上所有材料</el-radio> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="审批签字" |
|
|
|
|
prop="approvalSignature"> |
|
|
|
|
<el-radio v-model="form.approvalSignature" |
|
|
|
|
:label="117">《用信调查申报表》</el-radio> |
|
|
|
|
</el-form-item> |
|
|
|
|
</div> |
|
|
|
|
<div class="step"> |
|
|
|
|
<h6 class="step-name mb-7">签订合同</h6> |
|
|
|
|
<el-form-item label="提供的材料" |
|
|
|
|
prop="contractMaterials"> |
|
|
|
|
<el-radio v-model="form.contractMaterials" |
|
|
|
|
:label="117">抵押物所有权证明</el-radio> |
|
|
|
|
</el-form-item> |
|
|
|
|
<el-form-item label="合同模板" |
|
|
|
|
prop="loanContractCheck"> |
|
|
|
|
<div class="flex-1"> |
|
|
|
|
<div class="flex items-center mb-3"> |
|
|
|
|
<el-checkbox v-model="form.loanContractCheck" |
|
|
|
|
label="借贷合同" /> |
|
|
|
|
<el-select v-show="form.loanContractCheck" |
|
|
|
|
class="ml-5" |
|
|
|
|
v-model="form.loanContract" |
|
|
|
|
placeholder="请选择"> |
|
|
|
|
<el-option v-for="item in config[6]?.recordChildren[1]?.subject?.itemList[0]?.children" |
|
|
|
|
:key="item.itemId" |
|
|
|
|
:label="item.options" |
|
|
|
|
:value="item.itemId" /> |
|
|
|
|
</el-select> |
|
|
|
|
</div> |
|
|
|
|
<div class="flex items-center mb-3"> |
|
|
|
|
<el-checkbox v-model="form.mortgageContractCheck" |
|
|
|
|
label="抵押合同" /> |
|
|
|
|
<el-select v-show="form.mortgageContractCheck" |
|
|
|
|
class="ml-5" |
|
|
|
|
v-model="form.mortgageContract" |
|
|
|
|
placeholder="请选择"> |
|
|
|
|
<el-option v-for="item in config[6]?.recordChildren[1]?.subject?.itemList[1]?.children" |
|
|
|
|
:key="item.itemId" |
|
|
|
|
:label="item.options" |
|
|
|
|
:value="item.itemId" /> |
|
|
|
|
</el-select> |
|
|
|
|
</div> |
|
|
|
|
<div class="flex items-center mb-3"> |
|
|
|
|
<el-checkbox v-model="form.pledgeContractCheck" |
|
|
|
|
label="质押合同" /> |
|
|
|
|
<el-select v-show="form.pledgeContractCheck" |
|
|
|
|
class="ml-5" |
|
|
|
|
v-model="form.pledgeContract" |
|
|
|
|
placeholder="请选择"> |
|
|
|
|
<el-option v-for="item in config[6]?.recordChildren[1]?.subject?.itemList[2]?.children" |
|
|
|
|
:key="item.itemId" |
|
|
|
|
:label="item.options" |
|
|
|
|
:value="item.itemId" /> |
|
|
|
|
</el-select> |
|
|
|
|
</div> |
|
|
|
|
<div class="flex items-center"> |
|
|
|
|
<el-checkbox v-model="form.guaranteeContractCheck" |
|
|
|
|
label="担保合同" /> |
|
|
|
|
<el-select v-show="form.guaranteeContractCheck" |
|
|
|
|
class="ml-5" |
|
|
|
|
v-model="form.guaranteeContract" |
|
|
|
|
placeholder="请选择"> |
|
|
|
|
<el-option v-for="item in config[6]?.recordChildren[1]?.subject?.itemList[3]?.children" |
|
|
|
|
:key="item.itemId" |
|
|
|
|
:label="item.options" |
|
|
|
|
:value="item.itemId" /> |
|
|
|
|
</el-select> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-form-item> |
|
|
|
|
</div> |
|
|
|
|
<div class="step"> |
|
|
|
|
<h6 class="step-name mb-7">贷后管理</h6> |
|
|
|
|
<el-form-item label="选择策略" |
|
|
|
|
prop="selectionStrategy"> |
|
|
|
|
<el-checkbox-group v-model="form.selectionStrategy"> |
|
|
|
|
<el-checkbox v-for="(item, i) in detail.productType ? config[7]?.recordChildren[0]?.subject?.itemList : config[7]?.subject?.itemList" |
|
|
|
|
:key="i" |
|
|
|
|
:label="item.itemId">{{ item.options }}</el-checkbox> |
|
|
|
|
</el-checkbox-group> |
|
|
|
|
</el-form-item> |
|
|
|
|
</div> |
|
|
|
|
</el-form> |
|
|
|
|
<div class="forms step-form"> |
|
|
|
|
<div class="flex justify-end"> |
|
|
|
|
<div class="submit">完成,提交审批</div> |
|
|
|
|
<div class="submit" |
|
|
|
|
@click="submit(formRef)">完成,提交审批</div> |
|
|
|
|
</div> |
|
|
|
|
</div> |
|
|
|
|
</el-tab-pane> |
|
|
|
@ -102,31 +352,141 @@ |
|
|
|
|
</template> |
|
|
|
|
|
|
|
|
|
<script setup lang="ts"> |
|
|
|
|
import { ref, computed, watch, onMounted } from 'vue'; |
|
|
|
|
import { ref, reactive, computed, watch, onMounted } from 'vue'; |
|
|
|
|
import { ElMessage } from 'element-plus'; |
|
|
|
|
import type { TabsPaneContext } from 'element-plus'; |
|
|
|
|
import { findById } from '@/api/bank'; |
|
|
|
|
import type { TabsPaneContext, FormInstance, FormRules } from 'element-plus'; |
|
|
|
|
import { findById, riskSave } from '@/api/bank'; |
|
|
|
|
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment'; |
|
|
|
|
import { useRouter, useRoute } from 'vue-router'; |
|
|
|
|
import { handleId } from '@/utils/common'; |
|
|
|
|
|
|
|
|
|
defineProps({ modelValue: { type: Object, required: true } }); |
|
|
|
|
defineEmits({ 'update:form': null }); |
|
|
|
|
const emit = defineEmits(['getList']); |
|
|
|
|
interface RuleForm { |
|
|
|
|
accessStrategy: any; |
|
|
|
|
accountMaterials: any; |
|
|
|
|
approvalSignature?: any; |
|
|
|
|
bankProductsId: any; |
|
|
|
|
borrowerMaterial: any; |
|
|
|
|
borrowerMaterialSelect: any; |
|
|
|
|
businessMaterials: any; |
|
|
|
|
collateral: any; |
|
|
|
|
contractMaterials: any; |
|
|
|
|
corporateCreditScoringStrategiesCheck: boolean; |
|
|
|
|
corporateCreditScoringStrategies: any; |
|
|
|
|
corporateInterestRateModel: any; |
|
|
|
|
dueDiligenceContent: any; |
|
|
|
|
dueDiligenceMode: any; |
|
|
|
|
enterpriseMaterial: any; |
|
|
|
|
enterpriseQuotaModel: any; |
|
|
|
|
guaranteeContract: any; |
|
|
|
|
individualInterestRateModel: any; |
|
|
|
|
interestRatePricingModelCheck: boolean; |
|
|
|
|
interestRatePricingModel: any; |
|
|
|
|
loanApplicationMethod: any; |
|
|
|
|
loanContract: any; |
|
|
|
|
mateMaterial: any; |
|
|
|
|
materialsForLoanApproval: any; |
|
|
|
|
mortgageContract: any; |
|
|
|
|
personalCreditScoringStrategiesCheck: boolean; |
|
|
|
|
personalCreditScoringStrategies: any; |
|
|
|
|
pledgeContractCheck: boolean; |
|
|
|
|
pledgeContract: any; |
|
|
|
|
reviewApproveContent: any; |
|
|
|
|
reviewContent: any; |
|
|
|
|
reviewSignature: any; |
|
|
|
|
riskDegreeStrategy: any; |
|
|
|
|
runBatchObject: any; |
|
|
|
|
selectionStrategy: any; |
|
|
|
|
sendingAccount: any; |
|
|
|
|
supplementaryMaterials: any; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
const router = useRouter(); |
|
|
|
|
const route = useRoute(); |
|
|
|
|
const id = computed(() => +route.query.id); |
|
|
|
|
const curTab = ref<string>('tab1'); |
|
|
|
|
const data = ref<any>(); |
|
|
|
|
const config = ref<any[]>([]); |
|
|
|
|
const detail = ref<Record<string, any>>({}); |
|
|
|
|
const formRef = ref<FormInstance>(); |
|
|
|
|
const form = reactive<RuleForm>({ |
|
|
|
|
accessStrategy: [], |
|
|
|
|
accountMaterials: [], |
|
|
|
|
approvalSignature: [], |
|
|
|
|
bankProductsId: computed(() => +route.query.id), |
|
|
|
|
borrowerMaterial: [], |
|
|
|
|
borrowerMaterialSelect: '', |
|
|
|
|
businessMaterials: [], |
|
|
|
|
collateral: [], |
|
|
|
|
contractMaterials: [], |
|
|
|
|
corporateCreditScoringStrategiesCheck: false, |
|
|
|
|
corporateCreditScoringStrategies: '', |
|
|
|
|
corporateInterestRateModel: [], |
|
|
|
|
dueDiligenceContent: [], |
|
|
|
|
dueDiligenceMode: '', |
|
|
|
|
enterpriseMaterial: [], |
|
|
|
|
enterpriseQuotaModel: '', |
|
|
|
|
guaranteeContract: '', |
|
|
|
|
individualInterestRateModel: [], |
|
|
|
|
interestRatePricingModelCheck: false, |
|
|
|
|
interestRatePricingModel: '', |
|
|
|
|
loanApplicationMethod: [], |
|
|
|
|
loanContract: '', |
|
|
|
|
mateMaterial: [], |
|
|
|
|
materialsForLoanApproval: [], |
|
|
|
|
mortgageContract: '', |
|
|
|
|
personalCreditScoringStrategiesCheck: false, |
|
|
|
|
personalCreditScoringStrategies: '', |
|
|
|
|
pledgeContractCheck: false, |
|
|
|
|
pledgeContract: '', |
|
|
|
|
reviewApproveContent: [], |
|
|
|
|
reviewContent: '', |
|
|
|
|
reviewSignature: [], |
|
|
|
|
riskDegreeStrategy: [], |
|
|
|
|
runBatchObject: [], |
|
|
|
|
selectionStrategy: [], |
|
|
|
|
sendingAccount: '', |
|
|
|
|
supplementaryMaterials: [], |
|
|
|
|
}); |
|
|
|
|
const rules = reactive<FormRules<RuleForm>>({ |
|
|
|
|
accountMaterials: [{ required: true, message: '请选择提供材料', trigger: 'change' }], |
|
|
|
|
sendingAccount: [{ required: true, message: '请选择发放账户', trigger: 'change' }], |
|
|
|
|
loanApplicationMethod: [{ required: true, message: '请选择申请方式', trigger: 'change' }], |
|
|
|
|
borrowerMaterial: [{ required: true, message: '请选择借款人材料', trigger: 'change' }], |
|
|
|
|
mateMaterial: [{ required: true, message: '请选择配偶材料', trigger: 'change' }], |
|
|
|
|
businessMaterials: [{ required: true, message: '请选择经营类材料', trigger: 'change' }], |
|
|
|
|
supplementaryMaterials: [{ required: true, message: '请选择补充材料', trigger: 'change' }], |
|
|
|
|
runBatchObject: [{ required: true, message: '请选择跑批对象', trigger: 'change' }], |
|
|
|
|
accessStrategy: [{ required: true, message: '请选择准入策略', trigger: 'change' }], |
|
|
|
|
personalCreditScoringStrategiesCheck: [{ required: true, message: '请选择信用评分策略', trigger: 'change' }], |
|
|
|
|
riskDegreeStrategy: [{ required: true, message: '请选择风险度策略', trigger: 'change' }], |
|
|
|
|
interestRatePricingModelCheck: [{ required: true, message: '请选择利率定价模型', trigger: 'change' }], |
|
|
|
|
dueDiligenceMode: [{ required: true, message: '请选择尽调方式', trigger: 'change' }], |
|
|
|
|
dueDiligenceContent: [{ required: true, message: '请选择尽调内容', trigger: 'change' }], |
|
|
|
|
reviewContent: [{ required: true, message: '请选择审查内容', trigger: 'change' }], |
|
|
|
|
reviewSignature: [{ required: true, message: '请选择审查签字', trigger: 'change' }], |
|
|
|
|
reviewApproveContent: [{ required: true, message: '请选择审批内容', trigger: 'change' }], |
|
|
|
|
approvalSignature: [{ required: true, message: '请选择审批签字', trigger: 'change' }], |
|
|
|
|
contractMaterials: [{ required: true, message: '请选择提供的材料', trigger: 'change' }], |
|
|
|
|
loanContractCheck: [{ required: true, message: '请选择合同模板', trigger: 'change' }], |
|
|
|
|
selectionStrategy: [{ required: true, message: '请选择选择策略', trigger: 'change' }], |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
// tab切换回调 |
|
|
|
|
const tabChange = (tab: TabsPaneContext, event: Event) => { |
|
|
|
|
console.log(tab, event); |
|
|
|
|
}; |
|
|
|
|
// 配置项 |
|
|
|
|
const getConfig = async () => { |
|
|
|
|
const { process } = await getProcessInformationBasedOnRoles(detail.value.productType ? 71 : 70); // 个人70,企业71 |
|
|
|
|
config.value = process; |
|
|
|
|
}; |
|
|
|
|
// 详情 |
|
|
|
|
const getDetail = async () => { |
|
|
|
|
if (id.value) { |
|
|
|
|
try { |
|
|
|
|
const { data } = await findById(id.value); |
|
|
|
|
data.value = data; |
|
|
|
|
detail.value = data; |
|
|
|
|
getConfig(); |
|
|
|
|
} finally { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -141,10 +501,150 @@ watch( |
|
|
|
|
}, |
|
|
|
|
); |
|
|
|
|
onMounted(() => {}); |
|
|
|
|
// 提交 |
|
|
|
|
const submit = async (formEl: FormInstance | undefined) => { |
|
|
|
|
if (!formEl) return; |
|
|
|
|
await formEl.validate(async (valid, fields) => { |
|
|
|
|
if (valid) { |
|
|
|
|
try { |
|
|
|
|
const isEnterprise = detail.value.productType === 1; |
|
|
|
|
const param = JSON.parse(JSON.stringify(form)); |
|
|
|
|
param.accessStrategy = param.accessStrategy.join(); |
|
|
|
|
if ((isEnterprise && param.borrowerMaterial?.includes(165)) || (!isEnterprise && param.borrowerMaterial?.includes(49))) |
|
|
|
|
param.borrowerMaterial.splice(1, 0, param.borrowerMaterialSelect); |
|
|
|
|
param.borrowerMaterial = param.borrowerMaterial.join(); |
|
|
|
|
param.accountMaterials = param.accountMaterials.join(); |
|
|
|
|
if (param.approvalSignature.length) param.approvalSignature = param.approvalSignature[0]; |
|
|
|
|
// 企业 |
|
|
|
|
// if (isEnterprise) { |
|
|
|
|
param.collateral = param.collateral.join(); |
|
|
|
|
param.enterpriseMaterial = param.enterpriseMaterial.join(); |
|
|
|
|
param.corporateInterestRateModel = param.corporateInterestRateModel.join(); |
|
|
|
|
param.materialsForLoanApproval = param.materialsForLoanApproval.join(); |
|
|
|
|
// corporateInterestRateModel,materialsForLoanApproval |
|
|
|
|
// } else { |
|
|
|
|
// 个人 |
|
|
|
|
param.businessMaterials = param.businessMaterials.join(); |
|
|
|
|
param.mateMaterial = param.mateMaterial.join(); |
|
|
|
|
param.individualInterestRateModel = param.individualInterestRateModel.join(); |
|
|
|
|
// } |
|
|
|
|
if (!param.personalCreditScoringStrategiesCheck) param.personalCreditScoringStrategies = ''; |
|
|
|
|
if (!param.corporateCreditScoringStrategiesCheck) param.corporateCreditScoringStrategies = ''; |
|
|
|
|
if (!param.interestRatePricingModelCheck) param.interestRatePricingModel = ''; |
|
|
|
|
|
|
|
|
|
if (!param.loanContractCheck) param.loanContract = ''; |
|
|
|
|
if (!param.mortgageContractCheck) param.mortgageContract = ''; |
|
|
|
|
if (!param.pledgeContractCheck) param.pledgeContract = ''; |
|
|
|
|
if (!param.guaranteeContractCheck) param.guaranteeContract = ''; |
|
|
|
|
|
|
|
|
|
if (param.contractMaterials.length) param.contractMaterials = param.contractMaterials[0]; |
|
|
|
|
param.dueDiligenceContent = param.dueDiligenceContent.join(); |
|
|
|
|
param.loanApplicationMethod = param.loanApplicationMethod.join(); |
|
|
|
|
if (param.reviewApproveContent.length) param.reviewApproveContent = param.reviewApproveContent[0]; |
|
|
|
|
// if (param.reviewContent) param.reviewContent = 114; |
|
|
|
|
if (param.reviewSignature.length) param.reviewSignature = param.reviewSignature[0]; |
|
|
|
|
param.riskDegreeStrategy = param.riskDegreeStrategy.join(); |
|
|
|
|
param.runBatchObject = param.runBatchObject.join(); |
|
|
|
|
param.selectionStrategy = param.selectionStrategy.join(); |
|
|
|
|
param.supplementaryMaterials = param.supplementaryMaterials.join(); |
|
|
|
|
|
|
|
|
|
const { message } = await riskSave(param); |
|
|
|
|
addRecord(param, message); |
|
|
|
|
ElMessage.success('提交成功!'); |
|
|
|
|
emit('getList', 1); |
|
|
|
|
} finally { |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
console.log('error submit!', fields); |
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
// 新增判分记录 |
|
|
|
|
const addRecord = async (data: Record<string, any>, newId: number) => { |
|
|
|
|
const isEnterprise = detail.value.productType === 1; |
|
|
|
|
const preIds = `1,2,42,${data.productType ? 71 : 70},${newId}`; // 1,关卡id,角色(这个页面是风控经理配置风控),个人/企业(70/71) |
|
|
|
|
const lcRule = <Record<string, any>[]>[]; |
|
|
|
|
|
|
|
|
|
// 企业 |
|
|
|
|
if (isEnterprise) { |
|
|
|
|
lcRule.push( |
|
|
|
|
handleId(120, 44, data.accountMaterials, preIds + ',112,120', 1), |
|
|
|
|
handleId(121, 45, 162, preIds + ',112,121', 1), |
|
|
|
|
handleId(122, 46, data.loanApplicationMethod, preIds + ',113,122', 1), |
|
|
|
|
handleId(123, 47, data.borrowerMaterial, preIds + ',113,123', 1), |
|
|
|
|
handleId(124, 48, data.collateral, preIds + ',113,124', 1), |
|
|
|
|
handleId(125, 49, data.businessMaterials, preIds + ',113,125', 1), |
|
|
|
|
handleId(126, 50, data.supplementaryMaterials, preIds + ',113,126', 1), |
|
|
|
|
|
|
|
|
|
handleId(127, 51, data.runBatchObject, preIds + ',114,127', 1), |
|
|
|
|
handleId(128, 52, data.accessStrategy, preIds + ',114,128', 1), |
|
|
|
|
); |
|
|
|
|
data.personalCreditScoringStrategiesCheck && lcRule.push(handleId(129, 53, '240,' + data.personalCreditScoringStrategies, preIds + ',114,129', 1)); |
|
|
|
|
data.corporateCreditScoringStrategiesCheck && lcRule.push(handleId(129, 53, '241,' + data.corporateCreditScoringStrategies, preIds + ',114,129', 1)); |
|
|
|
|
|
|
|
|
|
lcRule.push(handleId(130, 54, data.riskDegreeStrategy, preIds + ',114,130', 1)); |
|
|
|
|
data.interestRatePricingModelCheck && lcRule.push(handleId(131, 55, '247,' + data.interestRatePricingModel, preIds + ',114,131', 1)); |
|
|
|
|
data.individualInterestRateModel && lcRule.push(handleId(131, 55, data.individualInterestRateModel, preIds + ',114,131', 1)); |
|
|
|
|
|
|
|
|
|
lcRule.push( |
|
|
|
|
handleId(132, 56, data.dueDiligenceMode, preIds + ',115,132', 1), |
|
|
|
|
handleId(133, 57, data.dueDiligenceContent, preIds + ',115,133', 1), |
|
|
|
|
handleId(134, 58, data.reviewContent, preIds + ',116,134', 1), |
|
|
|
|
handleId(135, 59, data.reviewSignature, preIds + ',116,135', 1), |
|
|
|
|
handleId(136, 60, data.reviewApproveContent, preIds + ',117,136', 1), |
|
|
|
|
handleId(137, 61, data.approvalSignature, preIds + ',117,137', 1), |
|
|
|
|
handleId(138, 62, data.contractMaterials, preIds + ',118,138', 1), |
|
|
|
|
); |
|
|
|
|
data.loanContract && lcRule.push(handleId(139, 63, data.loanContract, preIds + ',118,139', 1)); |
|
|
|
|
data.mortgageContract && lcRule.push(handleId(139, 63, data.mortgageContract, preIds + ',118,139', 1)); |
|
|
|
|
data.pledgeContract && lcRule.push(handleId(139, 63, data.pledgeContract, preIds + ',118,139', 1)); |
|
|
|
|
data.guaranteeContract && lcRule.push(handleId(139, 63, data.guaranteeContract, preIds + ',118,139', 1)); |
|
|
|
|
lcRule.push(handleId(140, 64, data.selectionStrategy, preIds + ',119,140', 1)); |
|
|
|
|
} else { |
|
|
|
|
lcRule.push( |
|
|
|
|
handleId(75, 20, data.accountMaterials, preIds + ',72,75', 1), |
|
|
|
|
handleId(76, 21, 46, preIds + ',72,76', 1), |
|
|
|
|
handleId(77, 22, data.loanApplicationMethod, preIds + ',73,77', 1), |
|
|
|
|
handleId(78, 23, data.borrowerMaterial, preIds + ',73,78', 1), |
|
|
|
|
handleId(79, 24, data.mateMaterial, preIds + ',73,79', 1), |
|
|
|
|
handleId(80, 25, data.businessMaterials, preIds + ',73,80', 1), |
|
|
|
|
handleId(81, 26, data.supplementaryMaterials, preIds + ',73,81', 1), |
|
|
|
|
handleId(82, 27, data.runBatchObject, preIds + ',74,82', 1), |
|
|
|
|
handleId(83, 28, data.accessStrategy, preIds + ',74,83', 1), |
|
|
|
|
); |
|
|
|
|
data.personalCreditScoringStrategiesCheck && lcRule.push(handleId(84, 29, '94,' + data.personalCreditScoringStrategies, preIds + ',74,84', 1)); |
|
|
|
|
data.corporateCreditScoringStrategiesCheck && lcRule.push(handleId(84, 29, '95,' + data.corporateCreditScoringStrategies, preIds + ',74,84', 1)); |
|
|
|
|
|
|
|
|
|
lcRule.push(handleId(85, 30, data.riskDegreeStrategy, preIds + ',74,85', 1)); |
|
|
|
|
data.interestRatePricingModelCheck && lcRule.push(handleId(86, 31, '102,' + data.interestRatePricingModel, preIds + ',74,86', 1)); |
|
|
|
|
data.individualInterestRateModel && lcRule.push(handleId(86, 31, data.individualInterestRateModel, preIds + ',74,86', 1)); |
|
|
|
|
|
|
|
|
|
lcRule.push( |
|
|
|
|
handleId(88, 32, data.dueDiligenceMode, preIds + ',87,88', 1), |
|
|
|
|
handleId(89, 33, data.dueDiligenceContent, preIds + ',87,89', 1), |
|
|
|
|
handleId(91, 34, data.reviewContent, preIds + ',90,91', 1), |
|
|
|
|
handleId(92, 35, data.reviewSignature, preIds + ',90,92', 1), |
|
|
|
|
handleId(94, 36, data.reviewApproveContent, preIds + ',93,94', 1), |
|
|
|
|
handleId(95, 37, data.approvalSignature, preIds + ',93,95', 1), |
|
|
|
|
handleId(97, 38, data.contractMaterials, preIds + ',96,97', 1), |
|
|
|
|
); |
|
|
|
|
data.loanContract && lcRule.push(handleId(98, 39, data.loanContract, preIds + ',96,98', 1)); |
|
|
|
|
data.mortgageContract && lcRule.push(handleId(98, 39, data.mortgageContract, preIds + ',96,98', 1)); |
|
|
|
|
data.pledgeContract && lcRule.push(handleId(98, 39, data.pledgeContract, preIds + ',96,98', 1)); |
|
|
|
|
data.guaranteeContract && lcRule.push(handleId(98, 39, data.guaranteeContract, preIds + ',96,98', 1)); |
|
|
|
|
lcRule.push(handleId(99, 40, data.selectionStrategy, preIds + ',99', 1)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
await addOperation({ |
|
|
|
|
parentId: preIds, |
|
|
|
|
lcJudgmentRuleReq: lcRule, |
|
|
|
|
projectId: 1, |
|
|
|
|
}); |
|
|
|
|
}; |
|
|
|
|
</script> |
|
|
|
|
|
|
|
|
|
<style lang="scss" scoped> |
|
|
|
|
@import url(../../styles/form.scss); |
|
|
|
|
// @import url(../../styles/form.scss); |
|
|
|
|
.audit { |
|
|
|
|
padding: 20px 16px; |
|
|
|
|
margin-bottom: 30px; |
|
|
|
@ -160,4 +660,81 @@ onMounted(() => {}); |
|
|
|
|
font-weight: 600; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
.form { |
|
|
|
|
@apply max-h-[calc(100vh-270px)] overflow-auto; |
|
|
|
|
.step { |
|
|
|
|
@apply relative pl-[42px]; |
|
|
|
|
&:before { |
|
|
|
|
@apply absolute top-0 left-0 w-[30px] h-[30px]; |
|
|
|
|
content: ''; |
|
|
|
|
background: url(../../assets/images/config1.png) no-repeat; |
|
|
|
|
} |
|
|
|
|
&:nth-child(2):before { |
|
|
|
|
background-image: url(../../assets/images/config2.png); |
|
|
|
|
} |
|
|
|
|
&:nth-child(3):before { |
|
|
|
|
background-image: url(../../assets/images/config3.png); |
|
|
|
|
} |
|
|
|
|
&:nth-child(4):before { |
|
|
|
|
background-image: url(../../assets/images/config4.png); |
|
|
|
|
} |
|
|
|
|
&:nth-child(5):before { |
|
|
|
|
background-image: url(../../assets/images/config5.png); |
|
|
|
|
} |
|
|
|
|
&:nth-child(6):before { |
|
|
|
|
background-image: url(../../assets/images/config6.png); |
|
|
|
|
} |
|
|
|
|
&:after { |
|
|
|
|
content: ''; |
|
|
|
|
@apply absolute top-[40px] left-[14px] w-[2px] h-[87%] bg-[#006bff]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
.step-name { |
|
|
|
|
@apply pl-[5px] text-sm font-semibold text-[#006bff]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
:deep(.el-form-item__label) { |
|
|
|
|
@apply font-semibold text-sm leading-[32px] text-black; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.field-name { |
|
|
|
|
@apply mb-3 text-sm font-semibold leading-[32px] text-[#333]; |
|
|
|
|
} |
|
|
|
|
.tips { |
|
|
|
|
@apply text-sm text-[#686868]; |
|
|
|
|
} |
|
|
|
|
.num-inputs { |
|
|
|
|
@apply flex items-center; |
|
|
|
|
.el-input { |
|
|
|
|
@apply w-[200px]; |
|
|
|
|
} |
|
|
|
|
.split { |
|
|
|
|
@apply mx-2.5 text-white; |
|
|
|
|
} |
|
|
|
|
.unit { |
|
|
|
|
@apply ml-2.5 text-sm text-[#333]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
.submit { |
|
|
|
|
@apply py-[15px] px-[22px] mt-5 text-sm leading-none text-white bg-[#006bff] rounded-xl cursor-pointer; |
|
|
|
|
&:hover { |
|
|
|
|
@apply opacity-90; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
.info { |
|
|
|
|
.step-name { |
|
|
|
|
@apply mb-3 text-sm font-semibold text-[#006bff]; |
|
|
|
|
} |
|
|
|
|
.line { |
|
|
|
|
@apply flex mb-2; |
|
|
|
|
} |
|
|
|
|
.label { |
|
|
|
|
@apply mr-1 text-sm font-semibold text-[#333] leading-[32px]; |
|
|
|
|
} |
|
|
|
|
.text { |
|
|
|
|
@apply text-sm text-[#333] leading-[32px]; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
</style> |
|
|
|
|