yujialong 9 months ago
parent 00f09e0488
commit e011a0cc6d
  1. 4
      .env
  2. 2
      src/components/Panel/index.vue
  3. 2
      src/utils/request.ts
  4. 28
      src/views/product/afterLoan/1031.vue
  5. 2
      src/views/product/bank/Approve.vue
  6. 3
      src/views/product/bank/CardList.vue
  7. 46
      src/views/product/bank/Config.vue
  8. 2
      src/views/product/bank/Info.vue
  9. 8
      src/views/product/interestRate/935.vue
  10. 8
      src/views/product/strategy/150.vue
  11. 14
      src/views/product/strategy/151.vue
  12. 12
      src/views/product/strategy/153.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://192.168.31.51:9000
# VITE_BASE_API=http://121.37.12.51
# VITE_BASE_API=https://www.occupationlab.com
VITE_BASE_API=https://www.occupationlab.com
VITE_I18N_LOCALE=zh-cn
VITE_I18N_FALLBACK_LOCALE=zh-cn

@ -598,6 +598,7 @@ const submit = async () => {
grade.value = score < 10 ? '0' + score : score;
reportId.value = retMap.reportId;
Cookies.set('sand-reportId', retMap.reportId);
Cookies.set('sand-score', grade.value);
localStorage.setItem('sand-taskList', JSON.stringify(taskList.value));
delCache();
submiting.value = false;
@ -641,6 +642,7 @@ const getProDetail = async () => {
curReq.value = pointsList.map((e) => e.judgmentId); // judgmentIditem
points.value = pointsList;
taskList.value = isSubmit.value ? JSON.parse(localStorage.getItem('sand-taskList')) : pointsList; //
grade.value = isSubmit.value ? Cookies.get('sand-score') : '00';
judgmentId.value = pointsList[0].judgmentId; //
pd.value = project;
curSystemId.value = project.systemId;

@ -50,7 +50,7 @@ service.interceptors.response.use(
title: status,
message: h('div', null, [h('p', { class: 'text-lg' }, t('error.forbidden')), h('p', { class: 'mt-2' }, message)]),
});
} else {
} else if (message) {
ElMessage.error(message);
}
return Promise.reject(error);

@ -78,7 +78,7 @@
</el-select>
内逾期次数
</template>
<template v-if="$index === 13">
<template v-if="$index === 12">
<el-select v-if="row.recordChildren"
class="w-[140px] mx-2"
@ -91,8 +91,8 @@
</el-select>
开始算还款当天不计算利息
</template>
<template v-if="$index === 17">当前尚未偿还的贷款总额</template>
<template v-if="$index === 20">
<template v-if="$index === 15">当前尚未偿还的贷款总额</template>
<template v-if="$index === 18">
平均额度使用率 =
<div class="inline-flex flex-col justify-center mx-2">
<el-select v-if="row.recordChildren"
@ -117,7 +117,7 @@
</div>
x 100%
</template>
<template v-if="$index === 24">
<template v-if="$index === 22">
最大用信率 =
<div class="inline-flex flex-col justify-center mx-2">
<el-select v-if="row.recordChildren"
@ -142,10 +142,10 @@
</div>
x 100%
</template>
<template v-if="$index === 28">到目前为止使用额度的次数</template>
<template v-if="$index === 32">到目前为止客户可以使用的最大额度</template>
<template v-if="$index === 37">客户贷记卡已经逾期的总月数</template>
<template v-if="$index === 39">客户在行所有贷款已经逾期的总月数</template>
<template v-if="$index === 26">到目前为止使用额度的次数</template>
<template v-if="$index === 30">到目前为止客户可以使用的最大额度</template>
<template v-if="$index === 35">客户贷记卡已经逾期的总月数</template>
<template v-if="$index === 37">客户在行所有贷款已经逾期的总月数</template>
</div>
</template>
</el-table-column>
@ -249,10 +249,10 @@ interface SpanMethodProps {
rowIndex: number;
columnIndex: number;
}
const rowMerge1 = [1, 32];
const rowMerge2 = [6, 17];
const rowMerge3 = [9, 13, 20, 24, 28];
const rowMerge4 = [37, 39];
const rowMerge1 = [1, 30];
const rowMerge2 = [6, 9, 12, 15];
const rowMerge3 = [9, 18, 22, 26];
const rowMerge4 = [35, 37];
//
const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
if (!rowIndex) {
@ -310,14 +310,14 @@ const addRecord = async (data: Record<string, any>) => {
data.forEach((e, i) => {
e.score && rule.push(handleId(e.ruleId, e.subject.subjectId, e.score, `${preIds},${e.stRecordId},${e.middleId},${e.ruleId}`, 1));
if (i === 1 || i === 6 || i === 20 || i === 24) {
if (i === 1 || i === 6 || i === 18 || i === 22) {
e.formulaOne && rule.push(handleId(1061, 285, e.formulaOne, `${preIds},${e.stRecordId},1061`, 1));
e.formulaTwo && rule.push(handleId(1062, 285, e.formulaTwo, `${preIds},${e.stRecordId},1062`, 1));
}
});
data[9].formulaOne && rule.push(handleId(1075, 288, data[9].formulaOne, `${preIds},1074,1075`, 3));
data[9].formulaTwo && rule.push(handleId(1076, 289, data[9].formulaTwo, `${preIds},1074,1076`, 1));
data[13].formulaOne && rule.push(handleId(1083, 291, data[13].formulaOne, `${preIds},1082,1083`, 1));
data[12].formulaOne && rule.push(handleId(1083, 291, data[12].formulaOne, `${preIds},1082,1083`, 1));
await addOperation({
...getIds(),

@ -59,7 +59,7 @@ 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 { findById, examineAndApprove } from '@/api/bank';
import { examineAndApprove } from '@/api/bank';
import { getTheCurrentUserName, getOperationTime } from '@/api/config';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import dayjs from 'dayjs';

@ -70,7 +70,7 @@ import { getIds } from '@/utils/common';
const router = useRouter();
const route = useRoute();
const action = ref<string>();
const action = ref<any>('');
// const modules: any = import.meta.glob('./*.vue');
// let currentSubApp = defineAsyncComponent(modules[`./${route.params.action}.vue`]);
@ -121,7 +121,6 @@ const switchProduct = (row: any, refresh?: number) => {
const curAction = action.value;
const path = `/product/bank/${toAction}`;
router.push(`${path}?type=${route.query.type || ''}&i=${route.query.i}&role=${route.query.role}&id=${row.id}&name=${route.query.name ?? ''}`);
console.log('🚀 ~ switchProduct ~ toAction:', toAction, curAction, (toAction === curAction) === 'config');
if (toAction === 'config' && curAction === 'config') configKey.value += 1;
};
//

@ -294,17 +294,17 @@
</el-form-item>
<el-form-item label="风险度策略"
prop="riskDegreeStrategy">
<div class="flex items-center h-[47px]">
<div class="radio-wrap">
<el-radio-group v-if="config.length"
v-model="form.riskDegreeStrategyCheck">
<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>
<div class="flex items-center h-[34px]">
<el-radio-group v-if="config.length"
class="mr-10"
v-model="form.riskDegreeStrategyCheck">
<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"
style="font-size: 14px"
v-model="form.riskDegreeStrategy">
<el-checkbox v-for="(item, i) in config[2]?.recordChildren[3]?.subject?.itemList"
:key="i"
@ -389,9 +389,6 @@
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</el-radio-group>
<!-- <el-radio v-model="form.reviewContent"
:label="info.productType ? 261 : 114">{{ info.productType ? '所有基本信息' : '所有基本材料' }}</el-radio> -->
</div>
</el-form-item>
<el-form-item label="审查签字"
@ -415,9 +412,6 @@
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</el-radio-group>
<!-- <el-radio v-model="form.reviewApproveContent"
:label="info.productType ? 263 : 116">以上所有材料</el-radio> -->
</div>
</el-form-item>
<el-form-item label="审批签字"
@ -780,8 +774,8 @@ const submit = async (formEl: FormInstance | undefined) => {
}
if (param.supplementaryMaterialsCheck === 797 && !param.supplementaryMaterials.length) return ElMessage.error('请选择需要提供的补充材料');
if (param.runBatchObjectCheck === 797 && !param.runBatchObject.length) return ElMessage.error('请选择需要跑批的对象');
if (param.accessStrategyCheck === 797 && !param.accessStrategy.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.dueDiligenceMode) return ElMessage.error('请选择尽调方式');
if (!param.dueDiligenceContent.length) return ElMessage.error('请选择尽调内容');
if (!param.reviewContent) return ElMessage.error('请选择审查材料');
@ -790,7 +784,7 @@ const submit = async (formEl: FormInstance | undefined) => {
if (!param.approvalSignature) return ElMessage.error('请选择签字表单');
if (param.selectionStrategyCheck === 803 && !param.selectionStrategy.length) return ElMessage.error('请选择策略');
param.accessStrategy = param.accessStrategyCheck === 797 ? param.accessStrategy.join() : '';
param.accessStrategy = param.accessStrategyCheck === 803 ? param.accessStrategy.join() : '';
param.borrowerMaterial = param.borrowerMaterial.join();
param.accountMaterials = param.accountMaterialsCheck === 797 ? param.accountMaterials.join() : '';
if (param.sendingAccountCheck === 802) param.sendingAccount = '';
@ -814,10 +808,10 @@ const submit = async (formEl: FormInstance | undefined) => {
param.dueDiligenceContent = param.dueDiligenceContent.join();
param.loanApplicationMethod = param.loanApplicationMethod.join();
param.riskDegreeStrategy = param.riskDegreeStrategyCheck === 803 ? param.riskDegreeStrategy.join() : '';
param.runBatchObject = param.runBatchObjectCheck === 797 ? param.runBatchObject.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() : '';
debugger;
if (param.contractMaterialsCheck !== 797) param.contractMaterials = '';
if (info.value.riskControlDetails) {
param.id = info.value.riskControlDetails.id;
@ -874,7 +868,7 @@ const addRecord = async (data: Record<string, any>) => {
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.personalCreditScoringStrategies && lcRule.push(handleId(1307, 329, data.personalCreditScoringStrategiesCheck, preIds + ',114,129,1046,1307', 3));
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.corporateCreditScoringStrategies && lcRule.push(handleId(1307, 329, data.corporateCreditScoringStrategies, preIds + ',114,129,1047,1307', 3));
@ -911,7 +905,7 @@ const addRecord = async (data: Record<string, any>) => {
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));
data.accountMaterials && lcRule.push(handleId(1296, 20, data.accountMaterials, preIds + ',72,75,1295', 1));
data.accountMaterials && lcRule.push(handleId(1295, 20, data.accountMaterials, preIds + ',72,75,1295', 1));
data.sendingAccountCheck && lcRule.push(handleId(1312, 326, data.sendingAccountCheck, preIds + ',72,76,1312', 1));
data.sendingAccount && lcRule.push(handleId(1296, 21, data.sendingAccount, preIds + ',72,76,1296', 1));
@ -933,21 +927,23 @@ const addRecord = async (data: Record<string, any>) => {
data.supplementaryMaterialsCheck && lcRule.push(handleId(1294, 325, data.supplementaryMaterialsCheck, 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, 325, data.runBatchObjectCheck, preIds + ',74,82,1302', 1));
data.runBatchObjectCheck && lcRule.push(handleId(1302, 327, data.runBatchObjectCheck, 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, 325, data.accessStrategyCheck, preIds + ',74,83,1302', 1));
data.accessStrategyCheck && lcRule.push(handleId(1302, 327, data.accessStrategyCheck, 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.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.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.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.interestRatePricingModel && lcRule.push(handleId(1311, 141, data.interestRatePricingModel, preIds + ',74,86,1309,1311', 1));
data.individualInterestRateModel && lcRule.push(handleId(1310, 327, data.individualInterestRateModel, preIds + ',74,86,1308,1310', 1));
data.individualInterestRateModel && lcRule.push(handleId(1308, 327, data.individualInterestRateModel, preIds + ',74,86,1308', 1));
data.dueDiligenceMode && lcRule.push(handleId(88, 32, data.dueDiligenceMode, preIds + ',87,88', 1));
data.dueDiligenceContent && lcRule.push(handleId(89, 33, data.dueDiligenceContent, preIds + ',87,89', 1));

@ -12,7 +12,7 @@
<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>
<div class="info mt-2">
<div class="info my-2">
<h6 class="step-name">产品定义</h6>
<p class="text">{{ info.productDefinition }}</p>
<h6 class="step-name mt-5">产品要素</h6>

@ -20,13 +20,13 @@
<el-table-column label="描述"
min-width="150">
<template #default="{ row, $index }">
<span>{{ $index === 12 ? '=起始浮动比例+增减分值 且 不超过最高浮动比例' : row?.description }}</span>
<span>{{ $index === 11 ? '=起始浮动比例+增减分值 且 不超过最高浮动比例' : row?.description }}</span>
</template>
</el-table-column>
<el-table-column label="分值"
min-width="150">
<template #default="{ row, $index }">
<span v-if="$index === 12">以上分值合计</span>
<span v-if="$index === 11">以上分值合计</span>
<el-select v-else-if="$index !== 13 && row.subject && row.subject.itemList"
class="w-full"
v-model="row.score">
@ -220,8 +220,8 @@ const addRecord = async (data: Record<string, any>) => {
e.score && rule.push(handleId(e.ruleId, e.subject.subjectId, e?.subject?.itemList?.find((n) => n.options === e.score)?.itemId, `${listIds},${e.stRecordId},${e.ruleId}`, 1));
}
});
form.value.individualInterestRateModels[13].score && rule.push(handleId(1229, 306, form.value.individualInterestRateModels[13].score, listIds + ',1229', 3));
form.value.individualInterestRateModels[14].score && rule.push(handleId(1230, 307, form.value.individualInterestRateModels[14].score, listIds + ',1230', 3));
form.value.individualInterestRateModels[12].score && rule.push(handleId(1229, 306, form.value.individualInterestRateModels[13].score, listIds + ',1229', 3));
form.value.individualInterestRateModels[13].score && rule.push(handleId(1230, 307, form.value.individualInterestRateModels[14].score, listIds + ',1230', 3));
data.finalFloatingRatioEqual && rule.push(handleId(1024, 279, getItemId(data.finalFloatingRatioEqual), preIds + ',1023,1024', 1));
data.finalFloatingRatioLess && rule.push(handleId(1025, 279, getItemId(data.finalFloatingRatioLess), preIds + ',1023,1025', 1));

@ -116,6 +116,14 @@
@change="e => checkRow(e, row)"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="本人及亲属企业命中准入"
min-width="120"
align="center">
<template #default="{ row }">
<el-checkbox v-model="row.hitAccess"
@change="checkNone(row)"></el-checkbox>
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end">

@ -125,15 +125,23 @@ import { ElMessage } from 'element-plus';
import { accessStrategyCreditBlacklistFind, accessStrategyCreditBlacklistSave } from '@/api/model';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { useRouter, useRoute } from 'vue-router';
import { handleId, getIds, whethers } from '@/utils/common';
import { handleId, getIds } from '@/utils/common';
import Cookies from 'js-cookie';
const router = useRouter();
const route = useRoute();
const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level');
const form = ref<Record<string, any>[]>([]);
const info = ref<Record<string, any>[]>([]);
const whethers: Record<string, any>[] = [
{
id: 795,
name: '是',
},
{
id: 796,
name: '否',
},
];
const symbols: Array<Record<string, any>> = [
{
name: '>=',

@ -142,7 +142,7 @@ import { accessStrategyInlineBlacklistFind, accessStrategyInlineBlacklistSave }
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import type { TableColumnCtx } from 'element-plus';
import { useRoute } from 'vue-router';
import { handleId, getNum, getChinese, getIds, whethers } from '@/utils/common';
import { handleId, getNum, getChinese, getIds } from '@/utils/common';
import Cookies from 'js-cookie';
const route = useRoute();
@ -152,6 +152,16 @@ const form = ref<Record<string, any>[]>([]);
const info = ref<Record<string, any>[]>([]);
const nums: Array<number> = [1, 3, 5, 10, 20, 30, 40];
const units: Array<string> = ['年', '个月', '天'];
const whethers: Record<string, any>[] = [
{
id: 795,
name: '是',
},
{
id: 796,
name: '否',
},
];
//
const getConfig = async () => {
const { process } = await getProcessInformationBasedOnRoles(153);

Loading…
Cancel
Save