风控经理配置风控联调

V0.1
yujialong 1 year ago
parent 5b4eb3ec15
commit 3034fabaa7
  1. 1
      src/api/bank.ts
  2. 10
      src/styles/index.scss
  3. 3
      src/views/product/Add.vue
  4. 1
      src/views/product/CardList.vue
  5. 669
      src/views/product/Config.vue

@ -12,3 +12,4 @@ export const personalRiskControlConfigurationField = async (): Promise<any> =>
export const productElement = async (id: number): Promise<any> => (await axios.post(`/product/product/bank/products/productElement?id=${id}`)).data; export const productElement = async (id: number): Promise<any> => (await axios.post(`/product/product/bank/products/productElement?id=${id}`)).data;
export const findById = async (id: number): Promise<any> => (await axios.post(`/product/product/bank/products/findById?id=${id}`)).data; export const findById = async (id: number): Promise<any> => (await axios.post(`/product/product/bank/products/findById?id=${id}`)).data;
export const save = async (data: Record<string, any>): Promise<any> => (await axios.post(`/product/product/bank/products/save`, data)).data; export const save = async (data: Record<string, any>): Promise<any> => (await axios.post(`/product/product/bank/products/save`, data)).data;
export const riskSave = async (data: Record<string, any>): Promise<any> => (await axios.post(`/product/managerOfRiskControl/bankRiskControlAllocation/save`, data)).data;

@ -29,3 +29,13 @@ body {
.msgbox-error { .msgbox-error {
width: 100%; width: 100%;
} }
::-webkit-scrollbar {
width: 8px;
height: 8px;
}
::-webkit-scrollbar-thumb {
width: 5px;
border-radius: 6px;
background: #d7d7d7;
}

@ -254,7 +254,7 @@ interface RuleForm {
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const curTab = ref<string>('tab1'); const curTab = ref<string>('tab1');
const config = ref<any>([]); const config = ref<any[]>([]);
const formRef = ref<FormInstance>(); const formRef = ref<FormInstance>();
const form = reactive<RuleForm>({ const form = reactive<RuleForm>({
productDefinition: '', productDefinition: '',
@ -389,7 +389,6 @@ onMounted(() => {
</script> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import url(../../styles/form.scss);
.form { .form {
:deep(.el-form-item__label) { :deep(.el-form-item__label) {
@apply font-semibold text-sm text-black; @apply font-semibold text-sm text-black;

@ -41,6 +41,7 @@
<!-- <component :is="Config" <!-- <component :is="Config"
v-model="form"></component> --> v-model="form"></component> -->
<config v-if="action === 'config'" <config v-if="action === 'config'"
@getList="getList"
v-model="form"></config> v-model="form"></config>
<detail v-if="action === 'detail'" <detail v-if="action === 'detail'"
v-model="form"></detail> v-model="form"></detail>

@ -4,7 +4,7 @@
@tab-click="tabChange"> @tab-click="tabChange">
<el-tab-pane label="配置风控" <el-tab-pane label="配置风控"
name="tab1"> name="tab1">
<div class="audit"> <!-- <div class="audit">
<div class="line"> <div class="line">
<span class="field">审批意见</span> <span class="field">审批意见</span>
<span class="status">待审批</span> <span class="status">待审批</span>
@ -17,71 +17,321 @@
</div> </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">审查日期2022-02-02</p>
<p class="mb-2 text-sm text-[#333] text-right">审查员公瑾</p> <p class="mb-2 text-sm text-[#333] text-right">审查员公瑾</p>
</div> </div> -->
<div class="forms step-form">
<el-form ref="formRef"
:model="form"
:rules="rules"
label-width="120px"
label-suffix=":"
class="form"
status-icon>
<div class="step"> <div class="step">
<h6 class="step-name mb-7">办理账户</h6> <h6 class="step-name mb-7">办理账户</h6>
<div class="line"> <el-form-item label="提供材料"
<label class="label">提供材料</label> prop="accountMaterials">
<div class="fields"> <el-checkbox-group v-model="form.accountMaterials">
<el-checkbox-group v-model="modelValue.cl"> <el-checkbox v-for="(item, i) in config[0]?.recordChildren[0]?.subject?.itemList"
<el-checkbox label="身份证" /> :key="i"
<el-checkbox label="身份证" /> :label="item.itemId">{{ item.options }}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</div> </el-form-item>
</div> <el-form-item label="发放账户"
<div class="line"> prop="sendingAccount">
<label class="label">发放账户</label> <el-radio v-model="form.sendingAccount"
<div class="fields"> :label="46">借记卡或放款专户</el-radio>
<el-checkbox-group v-model="modelValue.cl"> </el-form-item>
<el-checkbox label="身份证" />
</el-checkbox-group>
</div>
</div>
</div> </div>
<div class="step"> <div class="step">
<h6 class="step-name mb-7">贷款申请</h6> <h6 class="step-name mb-7">贷款申请</h6>
<div class="line"> <el-form-item label="申请方式"
<label class="label">申请方式</label> prop="loanApplicationMethod">
<div class="fields"> <el-checkbox-group v-model="form.loanApplicationMethod">
<el-checkbox-group v-model="modelValue.cl"> <el-checkbox v-for="(item, i) in config[1]?.recordChildren[0]?.subject?.itemList"
<el-checkbox label="身份证" /> :key="i"
<el-checkbox label="身份证" /> :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-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> </div>
<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> </div>
<div class="line"> <p class="field-name mt-5">抵押物</p>
<label class="label">提供材料</label>
<div class="fields">
<p class="field-name">贷款人材料</p>
<div> <div>
<el-checkbox-group v-model="modelValue.cl"> <el-checkbox-group v-model="form.collateral">
<el-checkbox label="身份证" /> <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> </el-checkbox-group>
</div> </div>
</template>
<!-- 个人 -->
<template v-else>
<p class="field-name mt-5">配偶材料</p> <p class="field-name mt-5">配偶材料</p>
<div> <div>
<el-checkbox-group v-model="modelValue.cl"> <el-checkbox-group v-model="form.mateMaterial">
<el-checkbox label="身份证" /> <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> </el-checkbox-group>
</div> </div>
<p class="field-name mt-5">经营类材料</p> <p class="field-name mt-5">经营类材料</p>
<div> <div>
<el-checkbox-group v-model="modelValue.cl"> <el-checkbox-group v-model="form.businessMaterials">
<el-checkbox label="身份证" /> <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> </el-checkbox-group>
</div> </div>
</template>
<p class="field-name mt-5">补充材料</p> <p class="field-name mt-5">补充材料</p>
<div> <div>
<el-checkbox-group v-model="modelValue.cl"> <el-checkbox-group v-model="form.supplementaryMaterials">
<el-checkbox label="身份证" /> <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> </el-checkbox-group>
</div> </div>
</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> </div>
<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>
</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>
</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="flex justify-end">
<div class="submit">完成提交审批</div> <div class="submit"
@click="submit(formRef)">完成提交审批</div>
</div> </div>
</div> </div>
</el-tab-pane> </el-tab-pane>
@ -102,31 +352,141 @@
</template> </template>
<script setup lang="ts"> <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 { ElMessage } from 'element-plus';
import type { TabsPaneContext } from 'element-plus'; import type { TabsPaneContext, FormInstance, FormRules } from 'element-plus';
import { findById } from '@/api/bank'; import { findById, riskSave } from '@/api/bank';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import { handleId } from '@/utils/common';
defineProps({ modelValue: { type: Object, required: true } }); const emit = defineEmits(['getList']);
defineEmits({ 'update:form': null }); 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 router = useRouter();
const route = useRoute(); const route = useRoute();
const id = computed(() => +route.query.id); const id = computed(() => +route.query.id);
const curTab = ref<string>('tab1'); 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 // tab
const tabChange = (tab: TabsPaneContext, event: Event) => { const tabChange = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event); console.log(tab, event);
}; };
//
const getConfig = async () => {
const { process } = await getProcessInformationBasedOnRoles(detail.value.productType ? 71 : 70); // 7071
config.value = process;
};
// //
const getDetail = async () => { const getDetail = async () => {
if (id.value) { if (id.value) {
try { try {
const { data } = await findById(id.value); const { data } = await findById(id.value);
data.value = data; detail.value = data;
getConfig();
} finally { } finally {
} }
} }
@ -141,10 +501,150 @@ watch(
}, },
); );
onMounted(() => {}); 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}`; // 1id/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> </script>
<style lang="scss" scoped> <style lang="scss" scoped>
@import url(../../styles/form.scss); // @import url(../../styles/form.scss);
.audit { .audit {
padding: 20px 16px; padding: 20px 16px;
margin-bottom: 30px; margin-bottom: 30px;
@ -160,4 +660,81 @@ onMounted(() => {});
font-weight: 600; 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> </style>

Loading…
Cancel
Save