yujialong 1 year ago
parent 5c2a578f67
commit 05999c1e89
  1. 4
      .env
  2. BIN
      src/assets/images/11.png
  3. 4
      src/layout/components/AppHeader.vue
  4. 2
      src/layout/components/AppSidebar/index.vue
  5. 8
      src/utils/request.ts
  6. 2
      src/views/Home.vue
  7. 4
      src/views/Role.vue
  8. 1
      src/views/product/afterLoan/1029.vue
  9. 1
      src/views/product/afterLoan/1030.vue
  10. 2
      src/views/product/afterLoan/1031.vue
  11. 1
      src/views/product/afterLoan/1032.vue
  12. 1
      src/views/product/afterLoan/1033.vue
  13. 10
      src/views/product/bank/Approve.vue
  14. 3
      src/views/product/bank/CardList.vue
  15. 44
      src/views/product/bank/Config.vue
  16. 15
      src/views/product/fund/Add.vue
  17. 53
      src/views/product/insurance/Add.vue
  18. 1
      src/views/product/interestRate/772.vue
  19. 1
      src/views/product/interestRate/935.vue
  20. 1
      src/views/product/interestRate/936.vue
  21. 10
      src/views/product/strategy/150.vue
  22. 1
      src/views/product/strategy/151.vue
  23. 1
      src/views/product/strategy/152.vue
  24. 1
      src/views/product/strategy/153.vue
  25. 1
      src/views/product/strategy/154.vue
  26. 1
      src/views/product/strategy/155.vue
  27. 1
      src/views/product/strategy/156.vue
  28. 4
      src/views/product/strategy/Credit.vue

@ -2,7 +2,7 @@ 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_I18N_LOCALE=zh-cn
VITE_I18N_FALLBACK_LOCALE=zh-cn

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 KiB

@ -6,7 +6,7 @@
content="退出实训"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/2.png"
src="@/assets/images/11.png"
alt=""
@click="logout" />
</el-tooltip>
@ -15,7 +15,7 @@
content="返回关卡"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/3.png"
src="@/assets/images/2.png"
alt=""
@click="toLevel" />
</el-tooltip>

@ -65,11 +65,13 @@ const roleName = computed(() => {
});
//
const getDate = async () => {
if (levelId && projectId) {
const res = await getOperationTime(levelId, projectId);
if (res.operationTime) {
date.value = res.operationTime;
diaDate.value = res.operationTime;
}
}
};
//
const submitDate = async () => {

@ -19,7 +19,13 @@ service.interceptors.request.use(
);
service.interceptors.response.use(
(response) => response,
(res) => {
const { message, status } = res.data;
if (status === 200) {
return res;
}
ElMessage.error(message);
},
(e) => {
const {
response: {

@ -6,7 +6,7 @@
content="退出实训"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/level/1.png"
src="@/assets/images/level/3.png"
alt=""
@click="logout" />
</el-tooltip>

@ -45,7 +45,7 @@
content="退出实训"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/level/1.png"
src="@/assets/images/level/3.png"
alt=""
@click="logout" />
</el-tooltip>
@ -53,7 +53,7 @@
content="返回关卡"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/level/2.png"
src="@/assets/images/level/1.png"
alt=""
@click="toLevel" />
</el-tooltip>

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="recordName"
label="产品类别"

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="选用"

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="recordName"
label="指标"
@ -13,7 +14,6 @@
min-width="200"
align="center">
<template #default="{ row, $index }">
{{ $index }}
<div class="flex items-center">
<template v-if="$index === 1">
存贷比 =

@ -2,6 +2,7 @@
<!-- 贷后预警 -->
<el-table class="c-table"
:data="form"
:cell-style="{background:'#fff'}"
border>
<el-table-column label="选用"
width="80"

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="recordName"
label="逾期时长"

@ -15,7 +15,7 @@
prop="status">
<el-select v-model="form.status"
placeholder="请选择">
<el-option v-for="(item, i) in config[0]?.subject?.itemList.slice(2)"
<el-option v-for="(item, i) in config[0]?.recordChildren[0]?.subject?.itemList.slice(2)"
:key="i"
:label="item.options"
:value="item.itemId" />
@ -111,12 +111,12 @@ const sign = async () => {
};
//
const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${levelId},43`; // 1id
const approved = !!infoRef.value.info.approvalTime; // id
const preIds = `1,${levelId},43,${approved ? 1219 : 1218}`; // 1id
const lcRule = [
handleId(approved ? 1215 : 145, 69, data.status, preIds + ',' + (approved ? 1215 : 145), 1),
handleId(approved ? 1216 : 146, 70, data.opinionDescription, preIds + ',' + (approved ? 1216 : 146), 3),
handleId(approved ? 1217 : 758, 233, signed.value ? 514 : 515, preIds + ',' + (approved ? 1217 : 758), 1),
handleId(approved ? 1215 : 145, 69, data.status, `${preIds},${approved ? '1215' : '145'}`, 1),
handleId(approved ? 1216 : 146, 70, data.opinionDescription, `${preIds},${approved ? '1216' : '146'}`, 3),
handleId(approved ? 1217 : 758, 233, signed.value ? 514 : 515, `${preIds},${approved ? '1217' : '758'}`, 1),
];
await addOperation({
checkpointId: levelId,

@ -23,7 +23,8 @@
:key="i"
:class="{ active: item.id === id }"
@click="switchProduct('/product/bank/detail', item.id)">
<el-popconfirm title="您确定删除吗?"
<el-popconfirm v-if="role == 41"
title="您确定删除吗?"
@confirm="handleDelete(item.id)">
<template #reference>
<img src="@/assets/images/trash.png"

@ -142,10 +142,8 @@
placeholder="请选择">
<el-option v-for="item in credits.filter(e => !e.scoringObject)"
:key="item"
:label="item.scoreCardName"
:value="item.id" />
<el-option label="无"
:value="761" />
:value="item.scoreCardName" />
<el-option value="无" />
</el-select>
</div>
<div class="flex items-center">
@ -157,10 +155,8 @@
placeholder="请选择">
<el-option v-for="item in credits.filter(e => e.scoringObject)"
:key="item"
:label="item.scoreCardName"
:value="item.id" />
<el-option label="无"
:value="761" />
:value="item.scoreCardName" />
<el-option value="无" />
</el-select>
</div>
</div>
@ -407,7 +403,7 @@ const form = reactive<RuleForm>({
collateral: [],
contractMaterials: '',
corporateCreditScoringStrategiesCheck: false,
corporateCreditScoringStrategies: '',
corporateCreditScoringStrategies: '',
corporateInterestRateModel: [],
dueDiligenceContent: [],
dueDiligenceMode: '',
@ -423,7 +419,7 @@ const form = reactive<RuleForm>({
materialsForLoanApproval: [],
mortgageContract: '',
personalCreditScoringStrategiesCheck: false,
personalCreditScoringStrategies: '',
personalCreditScoringStrategies: '',
pledgeContractCheck: false,
pledgeContract: '',
reviewApproveContent: '',
@ -496,8 +492,8 @@ const submit = async (formEl: FormInstance | undefined) => {
param.businessMaterials = param.businessMaterials.join();
param.mateMaterial = param.mateMaterial.join();
param.individualInterestRateModel = param.individualInterestRateModel.join();
if (!param.personalCreditScoringStrategiesCheck) param.personalCreditScoringStrategies = 761;
if (!param.corporateCreditScoringStrategiesCheck) param.corporateCreditScoringStrategies = 761;
if (!param.personalCreditScoringStrategiesCheck) param.personalCreditScoringStrategies = '无';
if (!param.corporateCreditScoringStrategiesCheck) param.corporateCreditScoringStrategies = '无';
if (!param.interestRatePricingModelCheck) param.interestRatePricingModel = '';
if (!param.loanContractCheck) param.loanContract = '';
@ -556,8 +552,8 @@ const addRecord = async (data: Record<string, any>) => {
//
lcRule.push(handleId(1044, 302, data.personalCreditScoringStrategiesCheck ? 759 : 760, preIds + ',114,129,1046,1044', 1));
lcRule.push(handleId(1044, 302, data.corporateCreditScoringStrategiesCheck ? 759 : 760, preIds + ',114,129,1047,1044', 1));
data.personalCreditScoringStrategies === 761 && lcRule.push(handleId(1045, 303, data.personalCreditScoringStrategies, preIds + ',114,129,1046,1045', 1));
data.corporateCreditScoringStrategies === 761 && lcRule.push(handleId(129, 53, '241,' + data.corporateCreditScoringStrategies, preIds + ',114,129', 1));
lcRule.push(handleId(1045, 303, data.personalCreditScoringStrategies, preIds + ',114,129,1046,1045', 3));
lcRule.push(handleId(1045, 303, data.corporateCreditScoringStrategies, preIds + ',114,129,1047,1045', 3));
data.riskDegreeStrategy && lcRule.push(handleId(130, 54, data.riskDegreeStrategy, preIds + ',114,130', 1));
data.interestRatePricingModelCheck && lcRule.push(handleId(305, 55, data.interestRatePricingModel, preIds + ',114,131,305', 1));
@ -571,10 +567,10 @@ const addRecord = async (data: Record<string, any>) => {
data.approvalSignature && lcRule.push(handleId(137, 61, data.approvalSignature, preIds + ',117,137', 1));
data.contractMaterials && lcRule.push(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));
data.loanContract && lcRule.push(handleId(306, 63, data.loanContract, preIds + ',118,139,306', 1));
data.mortgageContract && lcRule.push(handleId(307, 142, data.mortgageContract, preIds + ',118,139,307', 1));
data.pledgeContract && lcRule.push(handleId(308, 143, data.pledgeContract, preIds + ',118,139,308', 1));
data.guaranteeContract && lcRule.push(handleId(309, 144, data.guaranteeContract, preIds + ',118,139,309', 1));
data.selectionStrategy && lcRule.push(handleId(140, 64, data.selectionStrategy, preIds + ',119,140', 1));
} else {
data.accountMaterials && lcRule.push(handleId(75, 20, data.accountMaterials, preIds + ',72,75', 1));
@ -595,8 +591,8 @@ const addRecord = async (data: Record<string, any>) => {
//
lcRule.push(handleId(1044, 302, data.personalCreditScoringStrategiesCheck ? 759 : 760, preIds + ',74,84,1046,1044', 1));
lcRule.push(handleId(1044, 302, data.corporateCreditScoringStrategiesCheck ? 759 : 760, preIds + ',74,84,1047,1044', 1));
data.personalCreditScoringStrategies === 761 && lcRule.push(handleId(1045, 303, data.personalCreditScoringStrategies, preIds + ',74,84,1046,1045', 1));
data.corporateCreditScoringStrategies === 761 && lcRule.push(handleId(1047, 303, data.corporateCreditScoringStrategies, preIds + ',74,84,1047,1045', 1));
lcRule.push(handleId(1045, 303, data.personalCreditScoringStrategies, preIds + ',74,84,1046,1045', 3));
lcRule.push(handleId(1045, 303, data.corporateCreditScoringStrategies, preIds + ',74,84,1047,1045', 3));
data.riskDegreeStrategy && lcRule.push(handleId(85, 30, data.riskDegreeStrategy, preIds + ',74,85', 1));
data.interestRatePricingModelCheck && lcRule.push(handleId(303, 141, data.interestRatePricingModel, preIds + ',74,86,303', 1));
@ -610,10 +606,10 @@ const addRecord = async (data: Record<string, any>) => {
data.approvalSignature && lcRule.push(handleId(95, 37, data.approvalSignature, preIds + ',93,95', 1));
data.contractMaterials && lcRule.push(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));
data.loanContract && lcRule.push(handleId(310, 39, data.loanContract, preIds + ',96,98,310', 1));
data.mortgageContract && lcRule.push(handleId(311, 145, data.mortgageContract, preIds + ',96,98,311', 1));
data.pledgeContract && lcRule.push(handleId(312, 146, data.pledgeContract, preIds + ',96,98,312', 1));
data.guaranteeContract && lcRule.push(handleId(313, 147, data.guaranteeContract, preIds + ',96,98,313', 1));
data.selectionStrategy && lcRule.push(handleId(99, 40, data.selectionStrategy, preIds + ',99', 1));
}

@ -521,13 +521,14 @@ const submit = async () => {
if (!param.shareholdingAllocationsList.length || !param.shareholdingAllocationsList.filter((e) => e.stockCode).length) return ElMessage.error('请配置持股');
// 100
let sum = 0;
param.shareholdingAllocationsList.forEach((e) => {
if (e.stockCode && e.proportion) {
sum += +e.proportion;
}
});
if (sum !== 100) return ElMessage.error('持股权重总和需等于100,请重新配置');
// let sum = 0;
// param.shareholdingAllocationsList.forEach((e) => {
// if (e.stockCode && e.proportion) {
// sum += +e.proportion;
// }
// });
// if (sum !== 100) return ElMessage.error('100');
if (!param.buyingDuration || !param.sellingTime) return ElMessage.error('请输入份额时长');
if (!param.operationManagementRate) return ElMessage.error('请输入管理费');
if (!param.operatingEscrowRate) return ElMessage.error('请输入托管费');

@ -46,7 +46,8 @@
:key="i"
class="flex items-center mb-2">
<div class="w-[130px] mr-32">
<el-checkbox v-model="item.check"
<el-checkbox :key="item.id"
v-model="item.check"
:label="item.name" />
</div>
<div v-if="item.check">
@ -172,31 +173,6 @@ watch(
immediate: true,
},
);
//
const submit = async () => {
try {
const param = JSON.parse(JSON.stringify(form));
if (!param.insuranceName) return ElMessage.error('请输入保险名称');
param.insuranceDeadline = param.insuranceDeadline + param.insuranceDeadlineUnit;
config.value[form.insuranceType === 310 ? 0 : 1]?.recordChildren[2]?.recordChildren.map((e) => {
e.check &&
e.sumInsured &&
param.insuranceCoverageConfigList.push({
insuredLiabilityId: e.id,
sumInsured: +e.sumInsured,
});
});
if (param.premiumAmount && !isNaN(param.premiumAmount)) param.premiumAmount = Number(param.premiumAmount).toFixed(2);
param.applicationMaterial = param.applicationMaterial.join();
param.exemptionFromLiability = param.exemptionFromLiability.join();
await addInsuranceProducts(param);
addRecord(param);
ElMessage.success('提交成功!');
emit('getList', 1);
} finally {
}
};
//
const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},275,${data.insuranceType === 310 ? 276 : 277}`; // 1id
@ -232,6 +208,31 @@ const addRecord = async (data: Record<string, any>) => {
projectId,
});
};
//
const submit = async () => {
try {
const param = JSON.parse(JSON.stringify(form));
if (!param.insuranceName) return ElMessage.error('请输入保险名称');
param.insuranceDeadline = param.insuranceDeadline + param.insuranceDeadlineUnit;
config.value[form.insuranceType === 310 ? 0 : 1]?.recordChildren[2]?.recordChildren.map((e) => {
e.check &&
e.sumInsured &&
param.insuranceCoverageConfigList.push({
insuredLiabilityId: e.id,
sumInsured: +e.sumInsured,
});
});
if (param.premiumAmount && !isNaN(param.premiumAmount)) param.premiumAmount = Number(param.premiumAmount).toFixed(2);
param.applicationMaterial = param.applicationMaterial.join();
param.exemptionFromLiability = param.exemptionFromLiability.join();
await addInsuranceProducts(param);
addRecord(param);
ElMessage.success('提交成功!');
emit('getList', 1);
} finally {
}
};
onMounted(() => {
getConfig();
});

@ -39,6 +39,7 @@
<el-table class="c-table"
:data="form.individualCreditModels"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="indexName"
label="指标名称"

@ -7,6 +7,7 @@
<el-table class="c-table"
:data="form.individualInterestRateModels"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="indexName"
label="指标名称"

@ -7,6 +7,7 @@
<el-table class="c-table"
:data="form.corporateInterestRateModelIndicators"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="indexName"
label="指标名称"

@ -1,10 +1,11 @@
<template>
<!-- 政务 -->
<div class="w-[calc(100vw-533px)] overflow-auto">
<el-table class="c-table"
:data="form"
:max-height="height"
:cell-style="{background:'#fff'}"
:span-method="span"
style="width: 100%"
border>
<el-table-column prop="name"
fixed
@ -13,6 +14,7 @@
align="center">
</el-table-column>
<el-table-column label="规则"
fixed
width="350"
align="center">
<template #default="{ row }">
@ -87,14 +89,14 @@
</template>
</el-table-column>
<el-table-column label="父母/子女命中拒入"
width="140"
width="150"
align="center">
<template #default="{ row }">
<el-checkbox v-model="row.parentsHitRejected"></el-checkbox>
</template>
</el-table-column>
<el-table-column label="其他家庭成员命中拒入"
width="160"
width="170"
align="center">
<template #default="{ row }">
<el-checkbox v-model="row.otherFamilyMembersHitRejected"></el-checkbox>
@ -116,7 +118,7 @@
</template>
</el-table-column>
</el-table>
</div>
<div class="flex justify-end">
<div class="submit"
@click="submit">确认完成配置</div>

@ -2,6 +2,7 @@
<!-- 征信 -->
<el-table class="c-table"
:data="form"
:cell-style="{background:'#fff'}"
:max-height="height"
border>
<el-table-column prop="name"

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:max-height="height"
:cell-style="{background:'#fff'}"
:span-method="span"
border>
<el-table-column prop="name"

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:max-height="height"
:cell-style="{background:'#fff'}"
:span-method="span"
border>
<el-table-column prop="name"

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:max-height="height"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="指标"

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:max-height="height"
:cell-style="{background:'#fff'}"
:span-method="span"
border>
<el-table-column prop="name"

@ -3,6 +3,7 @@
<el-table class="c-table"
:data="form"
:max-height="height"
:cell-style="{background:'#fff'}"
:span-method="span"
border>
<el-table-column label="序号"

@ -2,7 +2,7 @@
<!-- 信用评分策略 -->
<div id="wrap">
<div class="flex items-center">
<span class="mr-2 text-sm font-semibold text-[#333] whitespace-nowrap">卡名称</span>
<span class="mr-2 text-sm font-semibold text-[#333] whitespace-nowrap">卡名称</span>
<el-input class="w-[220px]"
maxlength="20"
v-model="form.scoreCardName"></el-input>
@ -22,6 +22,7 @@
:key="1"
:data="list1"
:span-method="span1"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="选用"
@ -117,6 +118,7 @@
:key="2"
:data="list"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="选用"

Loading…
Cancel
Save