银行要素回显等

V0.1
yujialong 8 months ago
parent a898ec4a9b
commit 50a5452471
  1. 4
      .env
  2. 1
      src/api/bank.ts
  3. 8
      src/layout/components/AppHeader.vue
  4. 1
      src/store/useProduct.ts
  5. 9
      src/utils/common.ts
  6. 168
      src/views/product/bank/Add.vue
  7. 7
      src/views/product/bank/Approve.vue
  8. 288
      src/views/product/bank/Config.vue
  9. 9
      src/views/product/bank/Detail.vue
  10. 60
      src/views/product/bank/Info.vue
  11. 20
      src/views/product/fund/Add.vue
  12. 2
      src/views/product/strategy/CardList.vue
  13. 3
      src/views/product/strategy/Credit.vue

@ -2,8 +2,8 @@ VITE_APP_TITLE=金融产品设计及数字化营销沙盘
VITE_PORT=9520
# VITE_PROXY=http://192.168.31.125:8080
VITE_PUBLIC_PATH=./
# VITE_BASE_API=http://192.168.31.217:9000
VITE_BASE_API=http://121.37.12.51
VITE_BASE_API=http://192.168.31.217:9000
# VITE_BASE_API=http://121.37.12.51
# VITE_BASE_API=https://www.occupationlab.com
VITE_I18N_LOCALE=zh-cn
VITE_I18N_FALLBACK_LOCALE=zh-cn

@ -11,6 +11,7 @@ export const personalRiskControlConfigurationField = async (): Promise<any> =>
(await axios.post('/product/riskControlConfigurationField/personalRiskControlConfigurationField')).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 elementDetail = async (id: number): Promise<any> => (await axios.post(`/product/product/bank/products/elementDetail?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 riskSave = async (data: Record<string, any>): Promise<any> => (await axios.post(`/product/managerOfRiskControl/bankRiskControlAllocation/save`, data)).data;
export const riskUpdate = async (data: Record<string, any>): Promise<any> => (await axios.post(`/product/managerOfRiskControl/bankRiskControlAllocation/update`, data)).data;

@ -11,14 +11,6 @@
alt=""
@click="logout" />
</el-tooltip>
<el-tooltip effect="light"
content="返回关卡"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/2.png"
alt=""
@click="toLevel" />
</el-tooltip>
<el-tooltip effect="light"
content="返回选择角色"
placement="bottom">

@ -1,5 +1,4 @@
import { reactive, readonly } from 'vue';
import Cookies from 'js-cookie';
export interface Product {
status?: Record<string, any>;

@ -1,5 +1,6 @@
import Cookies from 'js-cookie';
import { getCurrentTime } from '@/api/system';
import { getTheCurrentUserName } from '@/api/config';
const UJCMS_LOCALE = 'ujcms-locale';
const UJCMS_SITE_ID = 'ujcms-site-id';
@ -254,6 +255,14 @@ export const getNow = (): Promise<any> => {
});
};
/**
*
*/
export const getUsername = async (): string => {
const res = await getTheCurrentUserName();
return res.userName;
};
export const whethers = [
{
id: 795,

@ -80,14 +80,14 @@
<div class="radio-wrap">
<span class="label">1年龄</span>
<span class="whether">是否启用</span>
<el-radio-group v-model="form.age">
<el-radio-group v-model="form.ageSelectedState">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<div v-if="form.age === 795"
<div v-if="form.ageSelectedState === 795"
class="num-inputs ml-7">
<el-input placeholder="最小年龄"
v-model.number="form.minimumAge"></el-input>
@ -100,14 +100,14 @@
<div class="radio-wrap">
<span class="label">2学历要求</span>
<span class="whether">是否启用</span>
<el-radio-group v-model="form.edu">
<el-radio-group v-model="form.degreeSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-checkbox-group v-if="form.edu === 795"
<el-checkbox-group v-if="form.degreeSelectedStatus === 795"
class="mt-2 ml-5"
v-model="form.educationalRequirements">
<el-checkbox v-for="(item, i) in config.find((e) => e.name === '个人产品-贷款对象')?.recordChildren[1]?.recordChildren[1]?.subject?.itemList"
@ -120,14 +120,14 @@
<div class="radio-wrap">
<span class="label">3工作年限</span>
<span class="whether">是否启用</span>
<el-radio-group v-model="form.curWL">
<el-radio-group v-model="form.workingLifeSelectedState">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-checkbox-group v-if="form.curWL === 795"
<el-checkbox-group v-if="form.workingLifeSelectedState === 795"
class="mt-2 ml-5"
v-model="form.currentWorkingLife">
<el-checkbox v-for="(item, i) in config.find((e) => e.name === '个人产品-贷款对象')?.recordChildren[2]?.recordChildren[1]?.subject?.itemList"
@ -188,9 +188,9 @@
:rules="[
{
asyncValidator: async (rule, value, callback) => {
if (form.bankGuarantee3 === 795 && !value.find(e => e > 22 && e < 33)) {
if (form.mortgageSelectedStatus === 795 && !value.find(e => e > 22 && e < 33)) {
callback('请选择抵押物')
} else if (form.bankGuarantee4 === 795 && !value.find(e => e > 32 && e < 38)) {
} else if (form.hypothecatedSelectedStatus === 795 && !value.find(e => e > 32 && e < 38)) {
callback('请选择质押贷')
} else {
callback()
@ -202,7 +202,7 @@
<p class="field-name">选择本产品的担保种类</p>
<div class="radio-wrap">
<span class="label">信用贷</span>
<el-radio-group v-model="form.bankGuarantee1">
<el-radio-group v-model="form.creditSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
@ -211,7 +211,7 @@
<div class="radio-wrap my-1">
<span class="label">保证贷</span>
<el-radio-group v-model="form.bankGuarantee2">
<el-radio-group v-model="form.guaranteeLoanSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
@ -220,13 +220,13 @@
<div class="radio-wrap">
<span class="label">抵押贷</span>
<el-radio-group v-model="form.bankGuarantee3">
<el-radio-group v-model="form.mortgageSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-checkbox-group v-if="form.bankGuarantee3 === 795"
<el-checkbox-group v-if="form.mortgageSelectedStatus === 795"
v-model="form.bankGuaranteeTypeIds">
<el-checkbox v-for="(child, j) in config.find((e) => e.name === '担保方式')?.recordChildren[2]?.recordChildren[0]?.subject?.itemList"
:key="j"
@ -235,13 +235,13 @@
<div class="radio-wrap mt-1">
<span class="label">质押贷</span>
<el-radio-group v-model="form.bankGuarantee4">
<el-radio-group v-model="form.hypothecatedSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-checkbox-group v-if="form.bankGuarantee4 === 795"
<el-checkbox-group v-if="form.hypothecatedSelectedStatus === 795"
v-model="form.bankGuaranteeTypeIds">
<el-checkbox v-for="(child, j) in config.find((e) => e.name === '担保方式')?.recordChildren[3]?.recordChildren[0]?.subject?.itemList"
:key="j"
@ -327,7 +327,7 @@
<el-tab-pane v-if="id"
label="产品风控"
name="tab2">
<info />
<info v-model:tab="curTab" />
</el-tab-pane>
</el-tabs>
</div>
@ -337,11 +337,10 @@
import { ref, reactive, computed, watch, onMounted, defineEmits } from 'vue';
import { ElMessage } from 'element-plus';
import type { TabsPaneContext, FormInstance, FormRules } from 'element-plus';
import { findById, save, update } from '@/api/bank';
import { findById, save, update, elementDetail } from '@/api/bank';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { getTheCurrentUserName } from '@/api/config';
import { useRouter, useRoute } from 'vue-router';
import { handleId, isIllegalNum, getIds, whethers } from '@/utils/common';
import { handleId, isIllegalNum, getIds, whethers, getUsername } from '@/utils/common';
import { getStatus } from '@/store/useProduct';
import Info from './Info.vue';
import Cookies from 'js-cookie';
@ -352,30 +351,30 @@ interface RuleForm {
productName: string;
productCurrency: number;
bankGuaranteeTypeIds: number[];
currentWorkingLife?: any;
edu: number | string;
educationalRequirements?: any;
loanCeiling: any;
currentWorkingLife?: number[];
degreeSelectedStatus?: number;
educationalRequirements?: number[];
loanCeiling?: string;
loanPurpose?: number;
maximumAge: any;
maximumAnnualInterestRate: any;
maximumTermOfLoan: any;
age: number | string;
curWL: number | string;
minimumAge: any;
minimumAprOnLoan: any;
minimumLoan: any;
minimumTermOfLoan: any;
modeRepayment?: any;
maximumAge?: number;
maximumAnnualInterestRate?: string;
maximumTermOfLoan?: string;
ageSelectedState?: number;
workingLifeSelectedState?: number;
minimumAge?: number;
minimumAprOnLoan?: string;
minimumLoan?: string;
minimumTermOfLoan?: string;
modeRepayment?: number[];
otherPurposesOfLoan: string;
productObject: any;
productObject?: number;
productType: number;
providentFundAndSocialSecurity: number | string;
whetherToSupportEarlyRepayment?: any;
bankGuarantee1?: number;
bankGuarantee2?: number;
bankGuarantee3?: number;
bankGuarantee4?: number;
whetherToSupportEarlyRepayment: boolean;
creditSelectedStatus?: number;
guaranteeLoanSelectedStatus?: number;
mortgageSelectedStatus?: number;
hypothecatedSelectedStatus?: number;
}
const router = useRouter();
@ -387,22 +386,22 @@ const info = ref<Record<string, any>>(null);
const formRef = ref<FormInstance>();
const userName = ref<string>();
const form = reactive<RuleForm>({
let form = reactive<RuleForm>({
...getIds(),
productDefinition: '',
productName: '',
productCurrency: 1,
bankGuaranteeTypeIds: [],
currentWorkingLife: [],
edu: '',
degreeSelectedStatus: '',
educationalRequirements: [],
loanCeiling: '',
loanPurpose: '',
maximumAge: '',
maximumAnnualInterestRate: '',
maximumTermOfLoan: '',
age: '',
curWL: '',
ageSelectedState: '',
workingLifeSelectedState: '',
minimumAge: '',
minimumAprOnLoan: '',
minimumLoan: '',
@ -413,10 +412,10 @@ const form = reactive<RuleForm>({
productType: computed(() => +route.query.type),
providentFundAndSocialSecurity: '',
whetherToSupportEarlyRepayment: false,
bankGuarantee1: '',
bankGuarantee2: '',
bankGuarantee3: '',
bankGuarantee4: '',
creditSelectedStatus: '',
guaranteeLoanSelectedStatus: '',
mortgageSelectedStatus: '',
hypothecatedSelectedStatus: '',
});
const rules = reactive<FormRules<RuleForm>>({
productDefinition: [{ required: true, message: '请输入产品定义', trigger: 'blur' }],
@ -436,25 +435,39 @@ const getConfig = async () => {
};
//
const getDetail = async () => {
userName.value = await getUsername();
info.value = null;
if (id.value) {
try {
// name
const { data } = await findById(id.value);
info.value = data;
// id
const res = await elementDetail(id.value);
if (res) {
const e = res.data.bankProducts;
e.currentWorkingLife = e.currentWorkingLife.split(',').map((n) => +n);
e.educationalRequirements = e.educationalRequirements.split(',').map((n) => +n);
e.modeRepayment = e.modeRepayment.split(',').map((n) => +n);
e.whetherToSupportEarlyRepayment = !!e.whetherToSupportEarlyRepayment;
e.bankGuaranteeTypeIds = [];
if (e.bankGuaranteeAllocationList) {
e.bankGuaranteeAllocationList.map((n) => {
n.guaranteeTypeId && e.bankGuaranteeTypeIds.push(n.guaranteeTypeId);
});
}
form = Object.assign(form, e);
}
} finally {
}
}
};
//
const getName = async () => {
const res = await getTheCurrentUserName();
userName.value = res.userName;
};
watch(
() => route.query,
() => {
getDetail();
getName();
},
{
immediate: true,
@ -472,7 +485,7 @@ const submit = async (formEl: FormInstance | undefined) => {
if (param.productType) {
if (!param.productObject) return ElMessage.error('请选择企业类型');
}
if ((!param.productType && param.age === 795) || param.productType) {
if ((!param.productType && param.ageSelectedState === 795) || param.productType) {
if (!param.minimumAge) return ElMessage.error('请输入最小年龄');
if (!param.maximumAge) return ElMessage.error('请输入最大年龄');
if (isIllegalNum(param.minimumAge) || isIllegalNum(param.maximumAge)) return ElMessage.error('请输入合理的年龄');
@ -481,8 +494,8 @@ const submit = async (formEl: FormInstance | undefined) => {
//
if (!param.productType) {
if (param.edu === 795 && !param.educationalRequirements.length) return ElMessage.error('请选择学历要求');
if (param.curWL === 795 && !param.currentWorkingLife.length) return ElMessage.error('请选择工作年限');
if (param.degreeSelectedStatus === 795 && !param.educationalRequirements.length) return ElMessage.error('请选择学历要求');
if (param.workingLifeSelectedState === 795 && !param.currentWorkingLife.length) return ElMessage.error('请选择工作年限');
}
if (isIllegalNum(param.minimumLoan) || isIllegalNum(param.loanCeiling) || +param.minimumLoan > +param.loanCeiling) return ElMessage.error('请输入合理的贷款额度');
if (isIllegalNum(param.minimumAprOnLoan) || isIllegalNum(param.maximumAnnualInterestRate) || +param.minimumAprOnLoan > +param.maximumAnnualInterestRate)
@ -492,43 +505,30 @@ const submit = async (formEl: FormInstance | undefined) => {
param.currentWorkingLife = param.currentWorkingLife.join();
param.educationalRequirements = param.educationalRequirements.join();
param.modeRepayment = param.modeRepayment.join();
// param.providentFundAndSocialSecurity = param.providentFundAndSocialSecurity === 795 ? 1 : '';
param.whetherToSupportEarlyRepayment = param.whetherToSupportEarlyRepayment ? 58 : '';
//
const graIds = [];
//
param.bankGuarantee1 === 795 &&
param.creditSelectedStatus === 795 &&
graIds.push({
bankGuaranteeTypeId: '',
pid: 108,
});
//
param.bankGuarantee2 === 795 &&
param.guaranteeLoanSelectedStatus === 795 &&
graIds.push({
bankGuaranteeTypeId: '',
pid: 109,
});
//
param.bankGuarantee3 === 795 &&
graIds.push({
bankGuaranteeTypeId: 110,
pid: '',
});
//
param.bankGuarantee4 === 795 &&
graIds.push({
bankGuaranteeTypeId: 111,
pid: '',
});
param.bankGuaranteeTypeIds.forEach((e: number) => {
//
if (param.bankGuarantee3 === 795 && e > 22 && e < 33) {
if (param.mortgageSelectedStatus === 795 && e > 22 && e < 33) {
graIds.push({
bankGuaranteeTypeId: e,
pid: 110,
});
} else if (param.bankGuarantee4 === 795 && e > 32 && e < 38) {
} else if (param.hypothecatedSelectedStatus === 795 && e > 32 && e < 38) {
//
graIds.push({
bankGuaranteeTypeId: e,
@ -578,14 +578,14 @@ const addRecord = async (data: Record<string, any>) => {
);
} else {
//
data.age && lcRule.push(handleId(1235, 324, data.age, preIds + ',51,1234,1235', 1));
data.age === 795 && lcRule.push(handleId(1236, 41, data.minimumAge + '~' + data.maximumAge, preIds + ',51,1234,1236', 5));
data.ageSelectedState && lcRule.push(handleId(1235, 324, data.ageSelectedState, preIds + ',51,1234,1235', 1));
data.ageSelectedState === 795 && lcRule.push(handleId(1236, 41, data.minimumAge + '~' + data.maximumAge, preIds + ',51,1234,1236', 5));
data.edu && lcRule.push(handleId(1238, 324, data.edu, preIds + ',51,1237,1238', 1));
data.edu === 795 && lcRule.push(handleId(1239, 42, data.educationalRequirements, preIds + ',51,1237,1239', 1));
data.degreeSelectedStatus && lcRule.push(handleId(1238, 324, data.degreeSelectedStatus, preIds + ',51,1237,1238', 1));
data.degreeSelectedStatus === 795 && lcRule.push(handleId(1239, 42, data.educationalRequirements, preIds + ',51,1237,1239', 1));
data.curWL && lcRule.push(handleId(1241, 324, data.curWL, preIds + ',51,1240,1241', 1));
data.curWL === 795 && lcRule.push(handleId(1242, 43, data.currentWorkingLife, preIds + ',51,1240,1242', 1));
data.workingLifeSelectedState && lcRule.push(handleId(1241, 324, data.workingLifeSelectedState, preIds + ',51,1240,1241', 1));
data.workingLifeSelectedState === 795 && lcRule.push(handleId(1242, 43, data.currentWorkingLife, preIds + ',51,1240,1242', 1));
data.providentFundAndSocialSecurity && lcRule.push(handleId(1244, 324, data.providentFundAndSocialSecurity, preIds + ',51,1243,1244', 1)); //
lcRule.push(handleId(1316, 328, data.loanPurpose, preIds + ',52,1316', 1));
@ -593,12 +593,12 @@ const addRecord = async (data: Record<string, any>) => {
}
//
data.bankGuarantee1 && lcRule.push(handleId(108, 324, data.bankGuarantee1, preIds + ',53,108', 1));
data.bankGuarantee2 && lcRule.push(handleId(109, 324, data.bankGuarantee2, preIds + ',53,109', 1));
data.bankGuarantee3 && lcRule.push(handleId(1277, 324, data.bankGuarantee3, preIds + ',53,110,1277', 1));
data.bankGuarantee4 && lcRule.push(handleId(1277, 324, data.bankGuarantee4, preIds + ',53,111,1277', 1));
data.bankGuarantee3 === 795 && lcRule.push(handleId(1275, 13, data.bankGuaranteeTypeIds.filter((e: number) => e > 22 && e < 33).join(), preIds + ',53,110,1275', 1));
data.bankGuarantee4 === 795 && lcRule.push(handleId(1276, 14, data.bankGuaranteeTypeIds.filter((e: number) => e > 32 && e < 38).join(), preIds + ',53,111,1276', 1));
data.creditSelectedStatus && lcRule.push(handleId(108, 324, data.creditSelectedStatus, preIds + ',53,108', 1));
data.guaranteeLoanSelectedStatus && lcRule.push(handleId(109, 324, data.guaranteeLoanSelectedStatus, preIds + ',53,109', 1));
data.mortgageSelectedStatus && lcRule.push(handleId(1277, 324, data.mortgageSelectedStatus, preIds + ',53,110,1277', 1));
data.hypothecatedSelectedStatus && lcRule.push(handleId(1277, 324, data.hypothecatedSelectedStatus, preIds + ',53,111,1277', 1));
data.mortgageSelectedStatus === 795 && lcRule.push(handleId(1275, 13, data.bankGuaranteeTypeIds.filter((e: number) => e > 22 && e < 33).join(), preIds + ',53,110,1275', 1));
data.hypothecatedSelectedStatus === 795 && lcRule.push(handleId(1276, 14, data.bankGuaranteeTypeIds.filter((e: number) => e > 32 && e < 38).join(), preIds + ',53,111,1276', 1));
lcRule.push(
handleId(54, 15, data.minimumLoan + '~' + data.loanCeiling, preIds + ',54', 5),

@ -58,9 +58,9 @@ import { ElMessage } from 'element-plus';
import type { TabsPaneContext, FormInstance, FormRules } from 'element-plus';
import { useRouter, useRoute } from 'vue-router';
import Info from './Info.vue';
import { handleId, getIds, getNow } from '@/utils/common';
import { handleId, getIds, getNow, getUsername } from '@/utils/common';
import { examineAndApprove } from '@/api/bank';
import { getTheCurrentUserName, getOperationTime } from '@/api/config';
import { getOperationTime } from '@/api/config';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import dayjs from 'dayjs';
import Cookies from 'js-cookie';
@ -107,8 +107,7 @@ const getDate = async () => {
};
//
const sign = async () => {
const res = await getTheCurrentUserName();
signed.value = res.userName;
signed.value = await getUsername();
};
//
const addRecord = async (data: Record<string, any>) => {

@ -4,6 +4,20 @@
@tab-click="tabChange">
<el-tab-pane label="配置风控"
name="tab1">
<div v-if="info.approvalTime"
class="audit">
<div class="line">
<span class="field">审批意见</span>
<span class="status">审批打回</span>
</div>
<div class="line">
<span class="field">意见描述</span>
{{ info.opinionDescription }}
</div>
<p class="mb-2 text-sm text-[#333] text-right">审查日期{{ info.approvalTime }}</p>
<p class="mb-2 text-sm text-[#333] text-right">审查员{{ userName }}</p>
</div>
<el-form ref="formRef"
:model="form"
label-width="120px"
@ -46,10 +60,6 @@
</div>
<template v-if="form.sendingAccountCheck === 801 && config.length">
<p class="tips">选择需要发放的账户至少选一样</p>
<!-- <el-radio v-for="(item, i) in config[0]?.recordChildren[1]?.recordChildren[0]?.subject?.itemList"
:key="i"
v-model="form.sendingAccount"
:label="item.itemId">{{ item.options }}</el-radio> -->
<el-checkbox-group v-model="form.sendingAccount">
<el-checkbox v-for="(item, i) in config[0]?.recordChildren[1]?.recordChildren[0]?.subject?.itemList"
@ -103,14 +113,14 @@
<p class="field-name mt-5">企业材料</p>
<div>
<div class="radio-wrap flex-col items-start mb-2">
<el-radio-group v-model="form.enterpriseMaterialCheck">
<el-radio-group v-model="form.enterpriseMaterialSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<template v-if="form.enterpriseMaterialCheck === 797">
<template v-if="form.enterpriseMaterialSelectedStatus === 797">
<p class="tips">选择需要提供的企业材料至少选一样</p>
<el-checkbox-group v-if="config.length"
v-model="form.enterpriseMaterial">
@ -123,13 +133,13 @@
<p class="field-name mt-5">抵押物</p>
<div>
<div class="radio-wrap flex-col items-start mb-2">
<el-radio-group v-model="form.collateralCheck">
<el-radio-group v-model="form.mortgagedPropertySelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<template v-if="form.collateralCheck === 797">
<template v-if="form.mortgagedPropertySelectedStatus === 797">
<p class="tips">选择需要提供的抵押物材料至少选一样</p>
<el-checkbox-group v-if="config.length"
v-model="form.collateral">
@ -188,14 +198,14 @@
<p class="field-name mt-5">补充材料</p>
<div>
<div class="radio-wrap flex-col items-start mb-1">
<el-radio-group v-model="form.supplementaryMaterialsCheck">
<el-radio-group v-model="form.supplementMaterialSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<template v-if="form.supplementaryMaterialsCheck === 797">
<template v-if="form.supplementMaterialSelectedStatus === 797">
<p class="tips">选择需要提供的补充材料至少选一样</p>
<el-checkbox-group v-if="config.length"
v-model="form.supplementaryMaterials"
@ -216,13 +226,13 @@
<div>
<div class="radio-wrap flex-col items-start mb-2">
<el-radio-group v-if="config.length"
v-model="form.runBatchObjectCheck">
v-model="form.runBatchObjectSelectedStatus">
<el-radio v-for="(item, i) in config[2]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList"
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</el-radio-group>
</div>
<template v-if="form.runBatchObjectCheck === 803">
<template v-if="form.runBatchObjectSelectedStatus === 803">
<p class="tips">选择需要跑批的对象至少选一样</p>
<el-checkbox-group v-if="config.length"
v-model="form.runBatchObject">
@ -238,13 +248,13 @@
<div>
<div class="radio-wrap flex-col items-start mb-2">
<el-radio-group v-if="config.length"
v-model="form.accessStrategyCheck">
v-model="form.accessPolicySelectedStatus">
<el-radio v-for="(item, i) in config[2]?.recordChildren[1]?.recordChildren[1]?.subject?.itemList"
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</el-radio-group>
</div>
<template v-if="form.accessStrategyCheck === 803">
<template v-if="form.accessPolicySelectedStatus === 803">
<p class="tips">选择需要跑批的准入策略至少选一样</p>
<el-checkbox-group v-if="config.length"
v-model="form.accessStrategy">
@ -257,19 +267,19 @@
</el-form-item>
<el-form-item label="信用评分策略"
label-width="130px"
prop="personalCreditScoringStrategiesCheck">
prop="personalCreditScoringStrategySelectedStatus">
<div class="flex-1">
<div class="flex items-center mb-3">
<div class="radio-wrap">
<span class="label">个人信用评分策略</span>
<el-radio-group v-model="form.personalCreditScoringStrategiesCheck">
<el-radio-group v-model="form.personalCreditScoringStrategySelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-select v-if="form.personalCreditScoringStrategiesCheck === 797"
<el-select v-if="form.personalCreditScoringStrategySelectedStatus === 797"
class="ml-5"
v-model="form.personalCreditScoringStrategies"
placeholder="请选择">
@ -281,14 +291,14 @@
<div class="flex items-center">
<div class="radio-wrap">
<span class="label">企业信用评分策略</span>
<el-radio-group v-model="form.corporateCreditScoringStrategiesCheck">
<el-radio-group v-model="form.enterpriseCreditScoringStrategySelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-select v-if="form.corporateCreditScoringStrategiesCheck === 797"
<el-select v-if="form.enterpriseCreditScoringStrategySelectedStatus === 797"
class="ml-5"
v-model="form.corporateCreditScoringStrategies"
placeholder="请选择">
@ -304,13 +314,13 @@
<div class="flex items-center h-[34px]">
<el-radio-group v-if="config.length"
class="mr-10"
v-model="form.riskDegreeStrategyCheck">
v-model="form.riskDegreePolicySelectedStatus">
<el-radio v-for="(item, i) in config[2]?.recordChildren[3]?.recordChildren[1]?.subject?.itemList"
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</el-radio-group>
<el-checkbox-group v-if="form.riskDegreeStrategyCheck === 803 && config.length"
<el-checkbox-group v-if="form.riskDegreePolicySelectedStatus === 803 && config.length"
style="font-size: 14px"
v-model="form.riskDegreeStrategy">
<el-checkbox v-for="(item, i) in config[2]?.recordChildren[3]?.subject?.itemList"
@ -322,19 +332,19 @@
</el-form-item>
<el-form-item label="利率定价模型"
label-width="130px"
prop="interestRatePricingModelCheck">
prop="individualCreditModelSelectedStatus">
<div class="flex-1">
<div class="flex items-center mb-3">
<div class="radio-wrap">
<span class="label">{{ (info.productType ? '企业' : '个人') + '额度模型' }}</span>
<el-radio-group v-if="config.length"
v-model="form.interestRatePricingModelCheck">
v-model="form.individualCreditModelSelectedStatus">
<el-radio v-for="(item, i) in config[2]?.recordChildren[3]?.recordChildren[1]?.subject?.itemList"
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</el-radio-group>
</div>
<el-select v-if="form.interestRatePricingModelCheck === 803 && config.length"
<el-select v-if="form.individualCreditModelSelectedStatus === 803 && config.length"
class="ml-5"
v-model="form.interestRatePricingModel"
placeholder="请选择">
@ -436,13 +446,13 @@
prop="contractMaterials">
<div class="flex items-center">
<div class="radio-wrap mr-5">
<el-radio-group v-model="form.contractMaterialsCheck">
<el-radio-group v-model="form.contractSupplyMaterialsSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-radio v-if="form.contractMaterialsCheck === 797"
<el-radio v-if="form.contractSupplyMaterialsSelectedStatus === 797"
v-model="form.contractMaterials"
:label="info.productType ? 265 : 118">抵押物所有权证明</el-radio>
</div>
@ -452,14 +462,14 @@
<div class="flex items-center mb-3">
<div class="radio-wrap">
<span class="label">借贷合同</span>
<el-radio-group v-model="form.loanContractCheck">
<el-radio-group v-model="form.loanContractSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-select v-if="form.loanContractCheck === 797 && config.length"
<el-select v-if="form.loanContractSelectedStatus === 797 && config.length"
class="ml-5"
v-model="form.loanContract"
placeholder="请选择">
@ -472,14 +482,14 @@
<div class="flex items-center mb-3">
<div class="radio-wrap">
<span class="label">抵押合同</span>
<el-radio-group v-model="form.mortgageContractCheck">
<el-radio-group v-model="form.mortgageContractSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-select v-if="form.mortgageContractCheck === 797 && config.length"
<el-select v-if="form.mortgageContractSelectedStatus === 797 && config.length"
class="ml-5"
v-model="form.mortgageContract"
placeholder="请选择">
@ -492,13 +502,13 @@
<div class="flex items-center mb-3">
<div class="radio-wrap">
<span class="label">质押合同</span>
<el-radio-group v-model="form.pledgeContractCheck">
<el-radio-group v-model="form.pledgeContractSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-select v-if="form.pledgeContractCheck === 797 && config.length"
<el-select v-if="form.pledgeContractSelectedStatus === 797 && config.length"
class="ml-5"
v-model="form.pledgeContract"
placeholder="请选择">
@ -511,13 +521,13 @@
<div class="flex items-center">
<div class="radio-wrap">
<span class="label">担保合同</span>
<el-radio-group v-model="form.guaranteeContractCheck">
<el-radio-group v-model="form.guaranteeContractSelectedStatus">
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group>
</div>
<el-select v-if="form.guaranteeContractCheck === 797 && config.length"
<el-select v-if="form.guaranteeContractSelectedStatus === 797 && config.length"
class="ml-5"
v-model="form.guaranteeContract"
placeholder="请选择">
@ -537,13 +547,13 @@
<div>
<div class="radio-wrap flex-col items-start mb-1">
<el-radio-group v-if="config.length"
v-model="form.selectionStrategyCheck">
v-model="form.postLoanManagementSelectPolicySelectStatus">
<el-radio v-for="(item, i) in config[2]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList"
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</el-radio-group>
</div>
<template v-if="form.selectionStrategyCheck === 803">
<template v-if="form.postLoanManagementSelectPolicySelectStatus === 803">
<p class="tips">选择策略至少选一样</p>
<el-checkbox-group v-if="(info.productType && config.length && config[7]?.recordChildren) || (!info.productType && config.length && config[7]?.recordChildren)"
v-model="form.selectionStrategy">
@ -579,13 +589,14 @@ import { findById, riskSave, riskUpdate } from '@/api/bank';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { listCredit } from '@/api/model';
import { useRouter, useRoute } from 'vue-router';
import { handleId, getIds } from '@/utils/common';
import { handleId, getIds, getUsername } from '@/utils/common';
import Info from './Info.vue';
import Cookies from 'js-cookie';
import { getStatus } from '@/store/useProduct';
const emit = defineEmits(['getList']);
interface RuleForm {
accessStrategyCheck?: number;
accessPolicySelectedStatus?: number;
accessStrategy: any;
accountMaterialsCheck?: number;
accountMaterials: any;
@ -595,55 +606,52 @@ interface RuleForm {
borrowerMaterial: any;
businessMaterialsCheck?: number;
businessMaterials: any;
collateralCheck?: number;
mortgagedPropertySelectedStatus?: number;
collateral: any;
contractMaterialsCheck?: number;
contractSupplyMaterialsSelectedStatus?: number;
contractMaterials: any;
corporateCreditScoringStrategiesCheck?: number;
enterpriseCreditScoringStrategySelectedStatus?: number;
corporateCreditScoringStrategies: any;
corporateInterestRateModel: any;
dueDiligenceContent: any;
dueDiligenceMode: number[];
enterpriseMaterialCheck?: number;
enterpriseMaterialSelectedStatus?: number;
enterpriseMaterial: any;
enterpriseQuotaModel: any;
guaranteeContractCheck?: number;
guaranteeContractSelectedStatus?: number;
guaranteeContract: any;
individualInterestRateModel?: number;
interestRatePricingModelCheck?: number;
individualCreditModelSelectedStatus?: number;
interestRatePricingModel: any;
loanApplicationMethod: any;
loanContractCheck?: number;
loanContractSelectedStatus?: number;
loanContract: any;
mateMaterialCheck?: number;
mateMaterial: any;
materialsForLoanApproval: any;
mortgageContractCheck?: number;
mortgageContractSelectedStatus?: number;
mortgageContract: any;
personalCreditScoringStrategiesCheck?: number;
personalCreditScoringStrategySelectedStatus?: number;
personalCreditScoringStrategies: any;
pledgeContractCheck?: number;
pledgeContractSelectedStatus?: number;
pledgeContract: any;
reviewApproveContent: number[];
reviewContent: number[];
reviewSignature: any;
riskDegreeStrategyCheck?: number;
riskDegreePolicySelectedStatus?: number;
riskDegreeStrategy: any;
runBatchObjectCheck?: number;
runBatchObjectSelectedStatus?: number;
runBatchObject: any;
selectionStrategyCheck?: number;
postLoanManagementSelectPolicySelectStatus?: number;
selectionStrategy: any;
sendingAccountCheck?: number;
sendingAccount: number[];
supplementaryMaterialsCheck?: number;
supplementMaterialSelectedStatus?: number;
supplementaryMaterials: any;
}
const router = useRouter();
const route = useRoute();
const id = computed(() => +route.query.id);
const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level');
const curTab = ref<string>('tab1');
const config = ref<any[]>([]);
const credits = ref<Record<string, any>[]>([]);
@ -659,9 +667,10 @@ const whethers = ref<Record<string, any>>([
},
]);
const formRef = ref<FormInstance>();
const userName = ref<string>();
const form = reactive<RuleForm>({
...getIds(),
accessStrategyCheck: '',
accessPolicySelectedStatus: '',
accessStrategy: [],
accountMaterialsCheck: '',
accountMaterials: [],
@ -671,47 +680,47 @@ const form = reactive<RuleForm>({
borrowerMaterial: [],
businessMaterialsCheck: '',
businessMaterials: [],
collateralCheck: '',
mortgagedPropertySelectedStatus: '',
collateral: [],
contractMaterialsCheck: '',
contractSupplyMaterialsSelectedStatus: '',
contractMaterials: '',
corporateCreditScoringStrategiesCheck: '',
enterpriseCreditScoringStrategySelectedStatus: '',
corporateCreditScoringStrategies: '',
corporateInterestRateModel: [],
dueDiligenceContent: [],
dueDiligenceMode: [],
enterpriseMaterialCheck: '',
enterpriseMaterialSelectedStatus: '',
enterpriseMaterial: [],
enterpriseQuotaModel: '',
guaranteeContractCheck: '',
guaranteeContractSelectedStatus: '',
guaranteeContract: '',
individualInterestRateModel: '',
interestRatePricingModelCheck: '',
individualCreditModelSelectedStatus: '',
interestRatePricingModel: '',
loanApplicationMethod: [],
loanContractCheck: '',
loanContractSelectedStatus: '',
loanContract: '',
mateMaterialCheck: '',
mateMaterial: [],
materialsForLoanApproval: [],
mortgageContractCheck: '',
mortgageContractSelectedStatus: '',
mortgageContract: '',
personalCreditScoringStrategiesCheck: '',
personalCreditScoringStrategySelectedStatus: '',
personalCreditScoringStrategies: '',
pledgeContractCheck: '',
pledgeContractSelectedStatus: '',
pledgeContract: '',
reviewApproveContent: [],
reviewContent: [],
reviewSignature: '',
riskDegreeStrategyCheck: '',
riskDegreePolicySelectedStatus: '',
riskDegreeStrategy: [],
runBatchObjectCheck: '',
runBatchObjectSelectedStatus: '',
runBatchObject: [],
selectionStrategyCheck: '',
postLoanManagementSelectPolicySelectStatus: '',
selectionStrategy: [],
sendingAccountCheck: '',
sendingAccount: [],
supplementaryMaterialsCheck: '',
supplementMaterialSelectedStatus: '',
supplementaryMaterials: [],
});
@ -725,15 +734,41 @@ const getConfig = async () => {
config.value = process;
const { data } = await listCredit({
checkpointId: levelId,
projectId,
...getIds(),
pageNum: 1,
pageSize: 1000,
});
credits.value = data;
credits.value = [
{
scoringObject: 0,
scoreCardName: '个人信用评分策略',
},
{
scoringObject: 0,
scoreCardName: '个人评分-评级贷',
},
{
scoringObject: 0,
scoreCardName: '个人标准评分卡',
},
{
scoringObject: 1,
scoreCardName: '企业标准评分卡',
},
{
scoringObject: 1,
scoreCardName: '大型企业评分卡',
},
{
scoringObject: 1,
scoreCardName: '小型企业评分卡',
},
...data,
];
};
//
const getDetail = async () => {
userName.value = await getUsername();
if (id.value) {
try {
const { data } = await findById(id.value);
@ -772,56 +807,56 @@ const submit = async (formEl: FormInstance | undefined) => {
if (isEnterprise) {
//
if (param.enterpriseMaterialCheck === 797 && !param.enterpriseMaterial.length) return ElMessage.error('请选择需要提供的企业材料');
if (param.collateralCheck === 797 && !param.collateral.length) return ElMessage.error('请选择需要提供的抵押物材料');
if (param.enterpriseMaterialSelectedStatus === 797 && !param.enterpriseMaterial.length) return ElMessage.error('请选择需要提供的企业材料');
if (param.mortgagedPropertySelectedStatus === 797 && !param.collateral.length) return ElMessage.error('请选择需要提供的抵押物材料');
} else {
//
if (param.mateMaterialCheck === 797 && !param.mateMaterial.length) return ElMessage.error('请选择需要提供的配偶材料');
if (param.businessMaterialsCheck === 797 && !param.businessMaterials.length) return ElMessage.error('请选择需要提供的经营类材料');
}
if (param.supplementaryMaterialsCheck === 797 && !param.supplementaryMaterials.length) return ElMessage.error('请选择需要提供的补充材料');
if (param.runBatchObjectCheck === 803 && !param.runBatchObject.length) return ElMessage.error('请选择需要跑批的对象');
if (param.accessStrategyCheck === 803 && !param.accessStrategy.length) return ElMessage.error('请选择需要跑批的准入策略');
if (param.supplementMaterialSelectedStatus === 797 && !param.supplementaryMaterials.length) return ElMessage.error('请选择需要提供的补充材料');
if (param.runBatchObjectSelectedStatus === 803 && !param.runBatchObject.length) return ElMessage.error('请选择需要跑批的对象');
if (param.accessPolicySelectedStatus === 803 && !param.accessStrategy.length) return ElMessage.error('请选择需要跑批的准入策略');
if (!param.dueDiligenceMode.length) return ElMessage.error('请选择尽调方式');
if (!param.dueDiligenceContent.length) return ElMessage.error('请选择尽调内容');
if (!param.reviewContent.length) return ElMessage.error('请选择审查材料');
if (!param.reviewSignature) return ElMessage.error('请选择签字表单');
if (!param.reviewApproveContent.length) return ElMessage.error('请选择审批材料');
if (!param.approvalSignature) return ElMessage.error('请选择签字表单');
if (param.selectionStrategyCheck === 803 && !param.selectionStrategy.length) return ElMessage.error('请选择策略');
if (param.postLoanManagementSelectPolicySelectStatus === 803 && !param.selectionStrategy.length) return ElMessage.error('请选择策略');
param.accessStrategy = param.accessStrategyCheck === 803 ? param.accessStrategy.join() : '';
param.accessStrategy = param.accessPolicySelectedStatus === 803 ? param.accessStrategy.join() : '';
param.borrowerMaterial = param.borrowerMaterial.join();
param.accountMaterials = param.accountMaterialsCheck === 797 ? param.accountMaterials.join() : '';
param.sendingAccount = param.sendingAccountCheck === 801 ? param.sendingAccount.join() : '';
//
param.collateral = param.collateralCheck === 797 ? param.collateral.join() : '';
param.enterpriseMaterial = param.enterpriseMaterialCheck === 797 ? param.enterpriseMaterial.join() : '';
param.collateral = param.mortgagedPropertySelectedStatus === 797 ? param.collateral.join() : '';
param.enterpriseMaterial = param.enterpriseMaterialSelectedStatus === 797 ? param.enterpriseMaterial.join() : '';
param.corporateInterestRateModel = param.corporateInterestRateModel.join();
param.materialsForLoanApproval = param.materialsForLoanApproval.join();
//
param.businessMaterials = param.businessMaterialsCheck === 797 ? param.businessMaterials.join() : '';
param.mateMaterial = param.mateMaterialCheck === 797 ? param.mateMaterial.join() : '';
if (param.personalCreditScoringStrategiesCheck !== 797) param.personalCreditScoringStrategies = '';
if (param.corporateCreditScoringStrategiesCheck !== 797) param.corporateCreditScoringStrategies = '';
if (param.interestRatePricingModelCheck !== 803) param.interestRatePricingModel = '';
if (param.personalCreditScoringStrategySelectedStatus !== 797) param.personalCreditScoringStrategies = '';
if (param.enterpriseCreditScoringStrategySelectedStatus !== 797) param.corporateCreditScoringStrategies = '';
if (param.individualCreditModelSelectedStatus !== 803) param.interestRatePricingModel = '';
if (param.loanContractCheck !== 797) param.loanContract = '';
if (param.mortgageContractCheck !== 797) param.mortgageContract = '';
if (param.pledgeContractCheck !== 797) param.pledgeContract = '';
if (param.guaranteeContractCheck !== 797) param.guaranteeContract = '';
if (param.loanContractSelectedStatus !== 797) param.loanContract = '';
if (param.mortgageContractSelectedStatus !== 797) param.mortgageContract = '';
if (param.pledgeContractSelectedStatus !== 797) param.pledgeContract = '';
if (param.guaranteeContractSelectedStatus !== 797) param.guaranteeContract = '';
param.dueDiligenceMode = param.dueDiligenceMode.join();
param.dueDiligenceContent = param.dueDiligenceContent.join();
param.reviewContent = param.reviewContent.join();
param.reviewApproveContent = param.reviewApproveContent.join();
param.loanApplicationMethod = param.loanApplicationMethod.join();
param.riskDegreeStrategy = param.riskDegreeStrategyCheck === 803 ? param.riskDegreeStrategy.join() : '';
param.runBatchObject = param.runBatchObjectCheck === 803 ? param.runBatchObject.join() : '';
param.selectionStrategy = param.selectionStrategyCheck === 803 ? param.selectionStrategy.join() : '';
param.supplementaryMaterials = param.supplementaryMaterialsCheck === 797 ? param.supplementaryMaterials.join() : '';
if (param.contractMaterialsCheck !== 797) param.contractMaterials = '';
param.riskDegreeStrategy = param.riskDegreePolicySelectedStatus === 803 ? param.riskDegreeStrategy.join() : '';
param.runBatchObject = param.runBatchObjectSelectedStatus === 803 ? param.runBatchObject.join() : '';
param.selectionStrategy = param.postLoanManagementSelectPolicySelectStatus === 803 ? param.selectionStrategy.join() : '';
param.supplementaryMaterials = param.supplementMaterialSelectedStatus === 797 ? param.supplementaryMaterials.join() : '';
if (param.contractSupplyMaterialsSelectedStatus !== 797) param.contractMaterials = '';
if (info.value.riskControlDetails) {
param.id = info.value.riskControlDetails.id;
await riskUpdate(param);
@ -854,7 +889,7 @@ const addRecord = async (data: Record<string, any>) => {
data.sendingAccount && lcRule.push(handleId(1255, 45, data.sendingAccount, preIds + ',112,121,1255', 1));
data.loanApplicationMethod && lcRule.push(handleId(122, 46, data.loanApplicationMethod, preIds + ',113,122', 1));
data.enterpriseMaterialCheck && lcRule.push(handleId(1294, 325, data.enterpriseMaterialCheck, preIds + ',113,124,1294', 1));
data.enterpriseMaterialSelectedStatus && lcRule.push(handleId(1294, 325, data.enterpriseMaterialSelectedStatus, preIds + ',113,124,1294', 1));
data.enterpriseMaterial && lcRule.push(handleId(1258, 48, data.enterpriseMaterial, preIds + ',113,124,1258', 1));
form.borrowerMaterialCheck && lcRule.push(handleId(1294, 325, form.borrowerMaterialCheck, preIds + ',113,123,1294', 1));
@ -864,27 +899,27 @@ const addRecord = async (data: Record<string, any>) => {
});
borrowerMaterial.length && lcRule.push(handleId(316, 47, borrowerMaterial.join(), preIds + ',113,123,316', 1));
data.collateralCheck && lcRule.push(handleId(1294, 325, data.collateralCheck, preIds + ',113,125,1294', 1));
data.mortgagedPropertySelectedStatus && lcRule.push(handleId(1294, 325, data.mortgagedPropertySelectedStatus, preIds + ',113,125,1294', 1));
data.collateral && lcRule.push(handleId(1259, 49, data.collateral, preIds + ',113,125,1259', 1));
data.supplementaryMaterialsCheck && lcRule.push(handleId(1294, 325, data.supplementaryMaterialsCheck, preIds + ',113,126,1294', 1));
data.supplementMaterialSelectedStatus && lcRule.push(handleId(1294, 325, data.supplementMaterialSelectedStatus, preIds + ',113,126,1294', 1));
data.supplementaryMaterials && lcRule.push(handleId(1260, 50, data.supplementaryMaterials, preIds + ',113,126,1260', 1));
data.runBatchObjectCheck && lcRule.push(handleId(1302, 327, data.runBatchObjectCheck, preIds + ',114,127,1302', 1));
data.runBatchObjectSelectedStatus && lcRule.push(handleId(1302, 327, data.runBatchObjectSelectedStatus, preIds + ',114,127,1302', 1));
data.runBatchObject && lcRule.push(handleId(1261, 51, data.runBatchObject, preIds + ',114,127,1261', 1));
data.accessStrategyCheck && lcRule.push(handleId(1302, 327, data.accessStrategyCheck, preIds + ',114,128,1302', 1));
data.accessPolicySelectedStatus && lcRule.push(handleId(1302, 327, data.accessPolicySelectedStatus, preIds + ',114,128,1302', 1));
data.accessStrategy && lcRule.push(handleId(1262, 52, data.accessStrategy, preIds + ',114,128,1262', 1));
data.personalCreditScoringStrategiesCheck && lcRule.push(handleId(1306, 325, data.personalCreditScoringStrategiesCheck, preIds + ',114,129,1046,1306', 1));
data.personalCreditScoringStrategySelectedStatus && lcRule.push(handleId(1306, 325, data.personalCreditScoringStrategySelectedStatus, preIds + ',114,129,1046,1306', 1));
data.personalCreditScoringStrategies && lcRule.push(handleId(1307, 329, data.personalCreditScoringStrategies, preIds + ',114,129,1046,1307', 3));
data.corporateCreditScoringStrategiesCheck && lcRule.push(handleId(1306, 325, data.corporateCreditScoringStrategiesCheck, preIds + ',114,129,1047,1306', 1));
data.enterpriseCreditScoringStrategySelectedStatus && lcRule.push(handleId(1306, 325, data.enterpriseCreditScoringStrategySelectedStatus, preIds + ',114,129,1047,1306', 1));
data.corporateCreditScoringStrategies && lcRule.push(handleId(1307, 329, data.corporateCreditScoringStrategies, preIds + ',114,129,1047,1307', 3));
data.riskDegreeStrategyCheck && lcRule.push(handleId(1302, 327, data.riskDegreeStrategyCheck, preIds + ',114,130,1302', 1));
data.riskDegreePolicySelectedStatus && lcRule.push(handleId(1302, 327, data.riskDegreePolicySelectedStatus, preIds + ',114,130,1302', 1));
data.riskDegreeStrategy && lcRule.push(handleId(1301, 54, data.riskDegreeStrategy, preIds + ',114,130,1301', 1));
data.interestRatePricingModelCheck && lcRule.push(handleId(1302, 327, data.interestRatePricingModelCheck, preIds + ',114,131,305,1302', 1));
data.individualCreditModelSelectedStatus && lcRule.push(handleId(1302, 327, data.individualCreditModelSelectedStatus, preIds + ',114,131,305,1302', 1));
data.interestRatePricingModel && lcRule.push(handleId(1314, 55, data.interestRatePricingModel, preIds + ',114,131,305,1314', 1));
data.individualInterestRateModel && lcRule.push(handleId(304, 327, data.individualInterestRateModel, preIds + ',114,131,304', 1));
@ -895,22 +930,22 @@ const addRecord = async (data: Record<string, any>) => {
data.reviewApproveContent && lcRule.push(handleId(136, 60, data.reviewApproveContent, preIds + ',117,136', 1));
data.approvalSignature && lcRule.push(handleId(137, 61, data.approvalSignature, preIds + ',117,137', 1));
data.contractMaterialsCheck && lcRule.push(handleId(1264, 325, data.contractMaterialsCheck, preIds + ',118,138,1264', 1));
data.contractSupplyMaterialsSelectedStatus && lcRule.push(handleId(1264, 325, data.contractSupplyMaterialsSelectedStatus, preIds + ',118,138,1264', 1));
data.contractMaterials && lcRule.push(handleId(1263, 62, data.contractMaterials, preIds + ',118,138,1263', 1));
data.loanContractCheck && lcRule.push(handleId(1273, 325, data.loanContractCheck, preIds + ',118,139,306,1273', 1));
data.loanContractSelectedStatus && lcRule.push(handleId(1273, 325, data.loanContractSelectedStatus, preIds + ',118,139,306,1273', 1));
data.loanContract && lcRule.push(handleId(1269, 63, data.loanContract, preIds + ',118,139,306,1269', 1));
data.mortgageContractCheck && lcRule.push(handleId(1273, 325, data.mortgageContractCheck, preIds + ',118,139,307,1273', 1));
data.mortgageContractSelectedStatus && lcRule.push(handleId(1273, 325, data.mortgageContractSelectedStatus, preIds + ',118,139,307,1273', 1));
data.mortgageContract && lcRule.push(handleId(1270, 142, data.mortgageContract, preIds + ',118,139,307,1270', 1));
data.pledgeContractCheck && lcRule.push(handleId(1273, 325, data.pledgeContractCheck, preIds + ',118,139,308,1273', 1));
data.pledgeContractSelectedStatus && lcRule.push(handleId(1273, 325, data.pledgeContractSelectedStatus, preIds + ',118,139,308,1273', 1));
data.pledgeContract && lcRule.push(handleId(1271, 143, data.pledgeContract, preIds + ',118,139,308,1271', 1));
data.guaranteeContractCheck && lcRule.push(handleId(1273, 325, data.guaranteeContractCheck, preIds + ',118,139,309,1273', 1));
data.guaranteeContractSelectedStatus && lcRule.push(handleId(1273, 325, data.guaranteeContractSelectedStatus, preIds + ',118,139,309,1273', 1));
data.guaranteeContract && lcRule.push(handleId(1272, 144, data.guaranteeContract, preIds + ',118,139,309,1272', 1));
data.selectionStrategyCheck && lcRule.push(handleId(1302, 327, data.selectionStrategyCheck, preIds + ',119,140,1302', 1));
data.postLoanManagementSelectPolicySelectStatus && lcRule.push(handleId(1302, 327, data.postLoanManagementSelectPolicySelectStatus, preIds + ',119,140,1302', 1));
data.selectionStrategy && lcRule.push(handleId(1315, 64, data.selectionStrategy, preIds + ',119,140,1315', 1));
} else {
data.accountMaterialsCheck && lcRule.push(handleId(1294, 325, data.accountMaterialsCheck, preIds + ',72,75,1294', 1));
@ -933,24 +968,24 @@ const addRecord = async (data: Record<string, any>) => {
data.businessMaterialsCheck && lcRule.push(handleId(1294, 325, data.businessMaterialsCheck, preIds + ',73,80,1294', 1));
data.businessMaterials && lcRule.push(handleId(1292, 25, data.businessMaterials, preIds + ',73,80,1292', 1));
data.supplementaryMaterialsCheck && lcRule.push(handleId(1294, 325, data.supplementaryMaterialsCheck, preIds + ',73,81,1294', 1));
data.supplementMaterialSelectedStatus && lcRule.push(handleId(1294, 325, data.supplementMaterialSelectedStatus, preIds + ',73,81,1294', 1));
data.supplementaryMaterials && lcRule.push(handleId(1293, 26, data.supplementaryMaterials, preIds + ',73,81,1293', 1));
data.runBatchObjectCheck && lcRule.push(handleId(1302, 327, data.runBatchObjectCheck, preIds + ',74,82,1302', 1));
data.runBatchObjectSelectedStatus && lcRule.push(handleId(1302, 327, data.runBatchObjectSelectedStatus, preIds + ',74,82,1302', 1));
data.runBatchObject && lcRule.push(handleId(1297, 27, data.runBatchObject, preIds + ',74,82,1297', 1));
data.accessStrategyCheck && lcRule.push(handleId(1302, 327, data.accessStrategyCheck, preIds + ',74,83,1302', 1));
data.accessPolicySelectedStatus && lcRule.push(handleId(1302, 327, data.accessPolicySelectedStatus, preIds + ',74,83,1302', 1));
data.accessStrategy && lcRule.push(handleId(1298, 28, data.accessStrategy, preIds + ',74,83,1298', 1));
data.personalCreditScoringStrategiesCheck && lcRule.push(handleId(1306, 325, data.personalCreditScoringStrategiesCheck, preIds + ',74,84,1304,1306', 1));
data.personalCreditScoringStrategySelectedStatus && lcRule.push(handleId(1306, 325, data.personalCreditScoringStrategySelectedStatus, preIds + ',74,84,1304,1306', 1));
data.personalCreditScoringStrategies && lcRule.push(handleId(1307, 329, data.personalCreditScoringStrategies, preIds + ',74,84,1304,1307', 3));
data.corporateCreditScoringStrategiesCheck && lcRule.push(handleId(1306, 325, data.corporateCreditScoringStrategiesCheck, preIds + ',74,84,1305,1306', 1));
data.enterpriseCreditScoringStrategySelectedStatus && lcRule.push(handleId(1306, 325, data.enterpriseCreditScoringStrategySelectedStatus, preIds + ',74,84,1305,1306', 1));
data.corporateCreditScoringStrategies && lcRule.push(handleId(1307, 329, data.corporateCreditScoringStrategies, preIds + ',74,84,1305,1307', 3));
data.riskDegreeStrategyCheck && lcRule.push(handleId(1302, 327, data.riskDegreeStrategyCheck, preIds + ',74,85,1302', 1));
data.riskDegreePolicySelectedStatus && lcRule.push(handleId(1302, 327, data.riskDegreePolicySelectedStatus, preIds + ',74,85,1302', 1));
data.riskDegreeStrategy && lcRule.push(handleId(1300, 30, data.riskDegreeStrategy, preIds + ',74,85,1300', 1));
data.interestRatePricingModelCheck && lcRule.push(handleId(1302, 327, data.interestRatePricingModelCheck, preIds + ',74,86,1309,1302', 1));
data.individualCreditModelSelectedStatus && lcRule.push(handleId(1302, 327, data.individualCreditModelSelectedStatus, preIds + ',74,86,1309,1302', 1));
data.interestRatePricingModel && lcRule.push(handleId(1311, 141, data.interestRatePricingModel, preIds + ',74,86,1309,1311', 1));
data.individualInterestRateModel && lcRule.push(handleId(1308, 327, data.individualInterestRateModel, preIds + ',74,86,1308', 1));
@ -961,22 +996,22 @@ const addRecord = async (data: Record<string, any>) => {
data.reviewApproveContent && lcRule.push(handleId(94, 36, data.reviewApproveContent, preIds + ',93,94', 1));
data.approvalSignature && lcRule.push(handleId(95, 37, data.approvalSignature, preIds + ',93,95', 1));
data.contractMaterialsCheck && lcRule.push(handleId(1248, 325, data.contractMaterialsCheck, preIds + ',96,97,1248', 1));
data.contractSupplyMaterialsSelectedStatus && lcRule.push(handleId(1248, 325, data.contractSupplyMaterialsSelectedStatus, preIds + ',96,97,1248', 1));
data.contractMaterials && lcRule.push(handleId(1247, 38, data.contractMaterials, preIds + ',96,97,1247', 1));
data.loanContractCheck && lcRule.push(handleId(1253, 325, data.loanContractCheck, preIds + ',96,98,310,1253', 1));
data.loanContractSelectedStatus && lcRule.push(handleId(1253, 325, data.loanContractSelectedStatus, preIds + ',96,98,310,1253', 1));
data.loanContract && lcRule.push(handleId(1249, 39, data.loanContract, preIds + ',96,98,310,1249', 1));
data.mortgageContractCheck && lcRule.push(handleId(1253, 325, data.mortgageContractCheck, preIds + ',96,98,311,1253', 1));
data.mortgageContractSelectedStatus && lcRule.push(handleId(1253, 325, data.mortgageContractSelectedStatus, preIds + ',96,98,311,1253', 1));
data.mortgageContract && lcRule.push(handleId(1250, 145, data.mortgageContract, preIds + ',96,98,311,1250', 1));
data.pledgeContractCheck && lcRule.push(handleId(1253, 325, data.pledgeContractCheck, preIds + ',96,98,312,1253', 1));
data.pledgeContractSelectedStatus && lcRule.push(handleId(1253, 325, data.pledgeContractSelectedStatus, preIds + ',96,98,312,1253', 1));
data.pledgeContract && lcRule.push(handleId(1251, 146, data.pledgeContract, preIds + ',96,98,312,1251', 1));
data.guaranteeContractCheck && lcRule.push(handleId(1253, 325, data.guaranteeContractCheck, preIds + ',96,98,313,1253', 1));
data.guaranteeContractSelectedStatus && lcRule.push(handleId(1253, 325, data.guaranteeContractSelectedStatus, preIds + ',96,98,313,1253', 1));
data.guaranteeContract && lcRule.push(handleId(1252, 147, data.guaranteeContract, preIds + ',96,98,313,1252', 1));
data.selectionStrategyCheck && lcRule.push(handleId(283, 327, data.selectionStrategyCheck, preIds + ',99,283', 1));
data.postLoanManagementSelectPolicySelectStatus && lcRule.push(handleId(283, 327, data.postLoanManagementSelectPolicySelectStatus, preIds + ',99,283', 1));
data.selectionStrategy && lcRule.push(handleId(281, 40, data.selectionStrategy, preIds + ',99,281', 1));
}
@ -990,4 +1025,13 @@ const addRecord = async (data: Record<string, any>) => {
<style lang="scss" scoped>
@import url(../../../styles/form.scss);
.audit {
@apply py-5 px-4 mb-[30px] bg-[#f9fafc] rounded-[10px];
.line {
@apply mb-[18px] text-sm leading-[1.6];
}
.field {
@apply text-sm font-semibold;
}
}
</style>

@ -1,9 +1,9 @@
<template>
<div>
<el-tabs v-model="curTab">
<el-tab-pane label="产品要素"
<el-tab-pane :label="status"
name="tab1">
<info />
<info @updateStatus="updateStatus" />
</el-tab-pane>
</el-tabs>
</div>
@ -14,6 +14,11 @@ import { ref } from 'vue';
import Info from './Info.vue';
const curTab = ref<string>('tab1');
const status = ref<string>('产品要素');
const updateStatus = (val: string) => {
status.value = val;
};
</script>
<style lang="scss" scoped>

@ -1,5 +1,5 @@
<template>
<div v-if="info.approvalTime"
<div v-if="showAudit"
class="audit">
<div class="line">
<span class="field">审批意见</span>
@ -10,12 +10,13 @@
{{ info.opinionDescription }}
</div>
<p class="mb-2 text-sm text-[#333] text-right">审查日期{{ info.approvalTime }}</p>
<p class="mb-2 text-sm text-[#333] text-right">审查员{{ userName }}</p>
<p class="mb-2 text-sm text-[#333] text-right">审查员{{ info.approvalTime && userName }}</p>
</div>
<div class="info my-2">
<h6 class="step-name">产品定义</h6>
<template v-if="route.params.action !== 'add'">
<h6 class="step-name">{{ route.params.action !== 'config' ? '一、' : '' }}产品定义</h6>
<p class="text">{{ info.productDefinition }}</p>
<h6 class="step-name mt-5">产品要素</h6>
<h6 class="step-name mt-5">{{ route.params.action !== 'config' ? '二、' : '' }}产品要素</h6>
<p class="text">产品名称{{ info.productName }}</p>
<p class="text">贷款币种人民币</p>
<p v-if="info.loanPurpose"
@ -34,22 +35,29 @@
: info.otherPurposesOfLoan
}}
</p>
<p class="text">担保方式{{ info.guarantyStyle }}</p>
<div class="flex my-2">
<p class="text whitespace-nowrap">担保方式</p>
<p v-html="info.guarantyStyle"
class="text"></p>
</div>
<p class="text">贷款期限{{ info.minimumTermOfLoan }} - {{ info.maximumTermOfLoan }}</p>
<p class="text">贷款限额{{ info.minimumLoan }}万元 - {{ info.loanCeiling }}万元</p>
<p class="text">贷款利率{{ info.minimumAprOnLoan }}% - {{ info.maximumAnnualInterestRate }}%</p>
<p class="text">还款方式{{ info.modeRepayment }}</p>
<div class="text">
贷款对象
<p v-if="info.minimumAge">年龄{{ info.minimumAge }} - {{ info.maximumAge }}周岁</p>
<p v-if="info.educationalRequirements">取得{{ info.educationalRequirements }}以上学历</p>
<p v-if="info.currentWorkingLife">{{ info.currentWorkingLife }}</p>
<p v-if="info.providentFundAndSocialSecurity">连续缴纳本市社保或者公积金6个月</p>
<p>持有中国银行I类账户且已关联至手机银行且在我行及其他金融同业无不良信用记录</p>
<div v-if="info.prospectiveBorrowerText"
class="flex my-2">
<p class="text whitespace-nowrap">贷款对象</p>
<div class="text"
v-html="info.prospectiveBorrowerText"></div>
</div>
<template v-if="riskInfo">
<h6 class="step-name mt-5">材料要求</h6>
<p class="text">办理账户-提供材料{{ riskInfo?.accountMaterials }}</p>
</template>
<template v-if="riskInfo && route.params.action !== 'config'">
<h6 class="step-name mt-5">{{ route.params.action !== 'add' ? '三、' : '' }}材料要求</h6>
<p v-if="riskInfo?.accountMaterials"
class="text">办理账户-提供材料{{ riskInfo?.accountMaterials }}</p>
<p v-if="riskInfo?.sendingAccount"
class="text">办理账户-发放账户借记卡或放款专户</p>
<p v-if="riskInfo?.loanApplicationMethod"
@ -80,7 +88,7 @@
class="text">系统跑批准入风控策略-风险度策略{{ riskInfo?.riskDegreeStrategy }}</p>
<p v-if="riskInfo?.interestRatePricingModel"
class="text">系统跑批准入风控策略-利率定价模型-个人额度模型{{ riskInfo?.interestRatePricingModel }}</p>
<p v-if="riskInfo?.individualInterestRateModel"
<p v-if="riskInfo?.individualInterestRateModel === '需要跑批'"
class="text">系统跑批准入风控策略-利率定价模型-个人利率模型</p>
<p v-if="riskInfo?.dueDiligenceMode"
class="text">尽职调查-尽调方式{{ riskInfo?.dueDiligenceMode }}</p>
@ -107,16 +115,19 @@
<p v-if="riskInfo?.selectionStrategy"
class="text">贷后管理-选择策略{{ riskInfo?.selectionStrategy }}</p>
<h6 class="step-name mt-5">业务流程</h6>
<h6 class="step-name mt-5">{{ route.params.action !== 'add' ? '四、' : '' }}业务流程</h6>
<p class="text">1贷款人APP向智信银行公司业务部门提交借款申请同时提交贷款用途证明文件以及有关资料</p>
<p class="text">2智信银行对贷款人的贷款申请进行审查同时根据实际情况要求借款人提供补充资料</p>
<p class="text">3智信银行内部审批通过后与贷款人签订借款合同</p>
<p class="text">4贷款人落实有关提款前提条件根据贷款合同提款</p>
<template v-if="route.params.action !== 'add'">
<h6 class="step-name mt-5">注意要点</h6>
<p class="text">
贷款人在使用款额度时必须明确说明贷款用途贷款人必须在获得循环贷款额度后方可在额度与用途范围内申请贷款受理机构仅限在原经办行同时逐笔上报中心核批单笔贷款金额不得超过贷款人单笔消费或投资总金额的80%
</p>
</template>
</template>
</div>
</template>
@ -127,6 +138,10 @@ import { getTheCurrentUserName } from '@/api/config';
import { useRouter, useRoute } from 'vue-router';
import { getStatus } from '@/store/useProduct';
// const props = defineProps({
// tab: String,
// });
const emit = defineEmits(['updateStatus']);
const router = useRouter();
const route = useRoute();
const id = computed(() => +route.query.id);
@ -134,12 +149,23 @@ const info = ref<Record<string, any>>({});
const riskInfo = ref<Record<string, any>>(null);
const userName = ref<string>();
//
const showAudit = computed(() => {
return (
riskInfo.value &&
(route.params.action === 'detail' ||
(route.params.action !== 'approve' && info.value.status !== '295' && info.value.status !== '299') ||
(route.params.action === 'approve' && info.value.status !== '296'))
);
});
//
const getDetail = async () => {
if (id.value) {
try {
const { data } = await findById(id.value);
info.value = data;
emit('updateStatus', data.riskControlDetails ? '审批结果' : '产品要素');
if (info.value.riskControlDetails) riskInfo.value = data.riskControlDetails;
} finally {
}

@ -476,7 +476,7 @@ const addRecord = async (data: Record<string, any>) => {
const stockId = 1167;
data.shareholdingAllocationsList.forEach((e, i) => {
rule.push(handleId(1177, 312, e.stockName, `${preIds},1166,${stockId + i},1177`, 3));
rule.push(handleId(1178, 313, e.proportion + '%', `${preIds},1166,${stockId + i},1178`, 3));
rule.push(handleId(1178, 313, e.proportion, `${preIds},1166,${stockId + i},1178`, 3));
});
rule.push(
handleId(1181, 314, data.buyingDuration, preIds + ',1179,1180,1181', 3),
@ -488,21 +488,21 @@ const addRecord = async (data: Record<string, any>) => {
//
const buyId = 1187;
data.buySellRatioList0.forEach((e, i) => {
e.amountOrDuration && rule.push(handleId(1192, 316, e.amountOrDuration, `${preIds},1179,1186,${buyId + i},1192`, 3));
e.rate && rule.push(handleId(1193, 318, e.rate + e.rateUnit, `${preIds},1179,1186,${buyId + i},1193`, 3));
e.amountOrDuration && rule.push(handleId(1192, 330, e.amountOrDuration, `${preIds},1179,1186,${buyId + i},1192`, 5));
e.rate && rule.push(handleId(1193, 318, e.rate + e.rateUnit, `${preIds},1179,1186,${buyId + i},1193`, 5));
});
//
const sellId = 1200;
data.buySellRatioList1.forEach((e, i) => {
e.amountOrDuration && rule.push(handleId(1205, 314, e.amountOrDuration, `${preIds},1179,1199,${sellId + i},1205`, 3));
e.rate && rule.push(handleId(1206, 318, e.rate + e.rateUnit, `${preIds},1179,1199,${sellId + i},1206`, 3));
e.amountOrDuration && rule.push(handleId(1205, 330, e.amountOrDuration, `${preIds},1179,1199,${sellId + i},1205`, 5));
e.rate && rule.push(handleId(1206, 318, e.rate + e.rateUnit, `${preIds},1179,1199,${sellId + i},1206`, 5));
});
rule.push(
handleId(1196, 319, data.operationManagementRate + '%', preIds + ',1179,1195,1196', 3),
handleId(1197, 320, data.operatingEscrowRate + '%', preIds + ',1179,1195,1197', 3),
handleId(1198, 321, data.operatingSalesServiceRates + '%', preIds + ',1179,1195,1198', 3),
handleId(1196, 319, data.operationManagementRate, preIds + ',1179,1195,1196', 3),
handleId(1197, 320, data.operatingEscrowRate, preIds + ',1179,1195,1197', 3),
handleId(1198, 321, data.operatingSalesServiceRates, preIds + ',1179,1195,1198', 3),
);
await addOperation({
@ -545,11 +545,11 @@ const submit = async () => {
//
param.buySellRatioList0.forEach((e, i) => {
e.amountOrDuration = (i ? param.buySellRatioList0[i - 1].input2 : e.input1) + `${i !== param.buySellRatioList0.length - 1 ? '-' + e.input2 : ''}`;
e.amountOrDuration = (i ? param.buySellRatioList0[i - 1].input2 : e.input1) + `${i !== param.buySellRatioList0.length - 1 ? '~' + e.input2 : ''}`;
});
param.buySellRatioList1.forEach((e, i) => {
e.amountOrDuration = i ? param.buySellRatioList1[i - 1].input2 + param.buySellRatioList1[i - 1].soldUnit2 : e.input1;
if (i !== param.buySellRatioList1.length - 1) e.amountOrDuration += `-${e.input2}${e.soldUnit2}`;
if (i !== param.buySellRatioList1.length - 1) e.amountOrDuration += `~${e.input2}${e.soldUnit2}`;
});
param.buySellRatioList = [...param.buySellRatioList0, ...param.buySellRatioList1];

@ -113,12 +113,10 @@
<script setup lang="ts">
import { computed, watch, onMounted, ref } from 'vue';
import type { TabsPaneContext } from 'element-plus';
import { getProcessInformationBasedOnRoles } from '@/api/judgment';
import { delCredit, listCredit } from '@/api/model';
import { useRouter, useRoute } from 'vue-router';
import { ElMessage } from 'element-plus';
import Cookies from 'js-cookie';
import { getIds } from '@/utils/common';
import Com1 from './150.vue';
import Com2 from './151.vue';

@ -629,7 +629,8 @@ const getDetail = async (load?: number) => {
form.scoringObject = info.scoringObject;
}
getConfig();
} finally {
} catch(e) {
if (loading) loading.close();
}
} else {
getConfig();

Loading…
Cancel
Save