eslint配置修改并修复

master
yujialong 7 months ago
parent a16f29184b
commit a5cc5d3874
  1. 3
      .eslintrc.js
  2. 4
      package.json
  3. 2
      src/components/AliOss/upload.ts
  4. 7
      src/components/Back.vue
  5. 177
      src/components/Panel/index.vue
  6. 9
      src/components/Search.vue
  7. 9
      src/components/StrategyConfirm.vue
  8. 5
      src/components/Tinymce/index.vue
  9. 21
      src/layout/components/AppHeader.vue
  10. 3
      src/layout/components/AppMain.vue
  11. 110
      src/layout/components/AppSidebar/Menu.vue
  12. 31
      src/layout/components/AppSidebar/index.vue
  13. 3
      src/layout/components/Logo.vue
  14. 12
      src/layout/index.vue
  15. 4
      src/views/403.vue
  16. 11
      src/views/404.vue
  17. 58
      src/views/Home.vue
  18. 90
      src/views/Role.vue
  19. 39
      src/views/bankProduct/index.vue
  20. 135
      src/views/config/level/Index.vue
  21. 110
      src/views/config/param/Buyer.vue
  22. 18
      src/views/config/param/Financial.vue
  23. 15
      src/views/config/param/Index.vue
  24. 27
      src/views/finance/Account.vue
  25. 71
      src/views/finance/Bank.vue
  26. 88
      src/views/finance/BankDetail.vue
  27. 80
      src/views/finance/Fund.vue
  28. 64
      src/views/finance/Insurance.vue
  29. 52
      src/views/finance/Order.vue
  30. 76
      src/views/finance/Publish.vue
  31. 130
      src/views/product/afterLoan/1029/Detail.vue
  32. 77
      src/views/product/afterLoan/1029/Index.vue
  33. 98
      src/views/product/afterLoan/1030/Detail.vue
  34. 77
      src/views/product/afterLoan/1030/Index.vue
  35. 210
      src/views/product/afterLoan/1031/Detail.vue
  36. 77
      src/views/product/afterLoan/1031/Index.vue
  37. 70
      src/views/product/afterLoan/1032/Detail.vue
  38. 78
      src/views/product/afterLoan/1032/Index.vue
  39. 84
      src/views/product/afterLoan/1033/Detail.vue
  40. 78
      src/views/product/afterLoan/1033/Index.vue
  41. 11
      src/views/product/afterLoan/CardList.vue
  42. 291
      src/views/product/bank/Add.vue
  43. 45
      src/views/product/bank/Approve.vue
  44. 52
      src/views/product/bank/CardList.vue
  45. 634
      src/views/product/bank/Config.vue
  46. 3
      src/views/product/bank/Detail.vue
  47. 154
      src/views/product/bank/Info.vue
  48. 130
      src/views/product/bank/List.vue
  49. 244
      src/views/product/fund/Add.vue
  50. 36
      src/views/product/fund/CardList.vue
  51. 3
      src/views/product/fund/Detail.vue
  52. 15
      src/views/product/fund/Info.vue
  53. 77
      src/views/product/fund/List.vue
  54. 105
      src/views/product/insurance/Add.vue
  55. 42
      src/views/product/insurance/CardList.vue
  56. 3
      src/views/product/insurance/Detail.vue
  57. 28
      src/views/product/insurance/Info.vue
  58. 88
      src/views/product/insurance/List.vue
  59. 107
      src/views/product/interestRate/772/Detail.vue
  60. 75
      src/views/product/interestRate/772/Index.vue
  61. 69
      src/views/product/interestRate/773.vue
  62. 103
      src/views/product/interestRate/935/Detail.vue
  63. 76
      src/views/product/interestRate/935/Index.vue
  64. 121
      src/views/product/interestRate/936/Detail.vue
  65. 76
      src/views/product/interestRate/936/Index.vue
  66. 15
      src/views/product/interestRate/CardList.vue
  67. 139
      src/views/product/strategy/150/Detail.vue
  68. 75
      src/views/product/strategy/150/Index.vue
  69. 158
      src/views/product/strategy/151/Detail.vue
  70. 75
      src/views/product/strategy/151/Index.vue
  71. 235
      src/views/product/strategy/152/Detail.vue
  72. 75
      src/views/product/strategy/152/Index.vue
  73. 150
      src/views/product/strategy/153/Detail.vue
  74. 75
      src/views/product/strategy/153/Index.vue
  75. 245
      src/views/product/strategy/154/Detail.vue
  76. 75
      src/views/product/strategy/154/Index.vue
  77. 196
      src/views/product/strategy/155/Detail.vue
  78. 75
      src/views/product/strategy/155/Index.vue
  79. 82
      src/views/product/strategy/156/Detail.vue
  80. 75
      src/views/product/strategy/156/Index.vue
  81. 93
      src/views/product/strategy/512/Detail.vue
  82. 75
      src/views/product/strategy/512/Index.vue
  83. 162
      src/views/product/strategy/513/Detail.vue
  84. 75
      src/views/product/strategy/513/Index.vue
  85. 15
      src/views/product/strategy/CardList.vue
  86. 37
      src/views/product/strategy/Risk1.vue
  87. 20
      src/views/product/strategy/Risk2.vue
  88. 19
      src/views/product/strategy/Risk3.vue
  89. 150
      src/views/report/Index.vue

@ -17,6 +17,9 @@ module.exports = {
// '@typescript-eslint/camelcase': 'off', // '@typescript-eslint/camelcase': 'off',
'import/extensions': 'off', 'import/extensions': 'off',
'no-nested-ternary': 'off',
'no-use-before-define': 'off',
'no-unused-expressions': 'off',
}, },
settings: { settings: {
'import/resolver': { 'import/resolver': {

@ -6,8 +6,8 @@
"dev": "vite", "dev": "vite",
"test": "vite build --mode test", "test": "vite build --mode test",
"build": "vite build", "build": "vite build",
"preview": "vite preview", "lint": "eslint --ext .vue,.ts src/",
"plop": "plop" "lint:fix": "eslint --ext .vue,.ts src/ --fix"
}, },
"dependencies": { "dependencies": {
"@element-plus/icons-vue": "^0.2.7", "@element-plus/icons-vue": "^0.2.7",

@ -17,7 +17,7 @@ export default {
return new Promise(async (resolve, reject) => { return new Promise(async (resolve, reject) => {
try { try {
// 上传到阿里云oss // 上传到阿里云oss
const res = await client.multipartUpload(Date.now() + '.' + getFileExt(file.name), file); const res = await client.multipartUpload(`${Date.now()}.${getFileExt(file.name)}`, file);
resolve({ resolve({
format: getFileExt(file.name), format: getFileExt(file.name),
name: file.name, name: file.name,

@ -1,10 +1,7 @@
<template> <template>
<div class="flex items-center p-3 mb-5 bg-white rounded-[10px]"> <div class="flex items-center p-3 mb-5 bg-white rounded-[10px]">
<div class="inline-flex items-center cursor-pointer" <div class="inline-flex items-center cursor-pointer" @click="back">
@click="back"> <img src="@/assets/images/back.png" alt="" class="" />
<img src="@/assets/images/back.png"
alt=""
class="" />
<span class="ml-[6px] text-sm text-[#3C65FF]">返回</span> <span class="ml-[6px] text-sm text-[#3C65FF]">返回</span>
</div> </div>
<span class="mx-5 text-sm text-[#999]">|</span> <span class="mx-5 text-sm text-[#999]">|</span>

@ -1,82 +1,50 @@
<template> <template>
<div v-if="!hidePanel" <div v-if="!hidePanel" :class="['panel', { active: visible }]" id="panel" ref="container" :style="style">
:class="['panel', { active: visible }]" <el-container class="scrollbar" id="container" v-show="visible">
id="panel"
ref="container"
:style="style">
<el-container class="scrollbar"
id="container"
v-show="visible">
<el-header id="header"> <el-header id="header">
<div class="panel-header" <div class="panel-header" id="panelHeader">
id="panelHeader">
<div class="project"> <div class="project">
<div class="inline-flex items-center"> <div class="inline-flex items-center">
<p>实训项目</p> <p>实训项目</p>
<el-tooltip effect="dark" <el-tooltip effect="dark" content="点击右侧“下三角”按钮可切换实验项目" placement="bottom">
content="点击右侧“下三角”按钮可切换实验项目" <i class="info el-icon-warning" style="margin-left: 10px"></i>
placement="bottom">
<i class="info el-icon-warning"
style="margin-left: 10px"></i>
</el-tooltip> </el-tooltip>
</div> </div>
<el-select v-model="param.projectId" <el-select v-model="param.projectId" placeholder="请选择" class="select" :disabled="per != 0" @change="getCache(1)">
placeholder="请选择" <el-option v-for="(item, i) in projectList" :key="item.projectId" :label="i + 1 + '. ' + item.projectName" :value="item.projectId"></el-option>
class="select"
:disabled="per != 0"
@change="getCache(1)">
<el-option v-for="(item, i) in projectList"
:key="item.projectId"
:label="i + 1 + '. ' + item.projectName"
:value="item.projectId"></el-option>
</el-select> </el-select>
</div> </div>
<div class="item"> <div class="item">
<div class="count"> <div class="count">
实训{{ text }}时间 <span>{{ day }}</span> <span>{{ hour }}</span>小时 <span>{{ minutes }}</span> <span>{{ seconds }}</span> 实训{{ text }}时间 <span>{{ day }}</span
> <span>{{ hour }}</span
>小时 <span>{{ minutes }}</span
> <span>{{ seconds }}</span
>
</div> </div>
</div> </div>
<div v-if="per !== 2" <div v-if="per !== 2" class="item">
class="item">
总得分 总得分
<span class="total-score">{{ grade }}</span> <span class="total-score">{{ grade }}</span>
</div> </div>
<div> <div>
<el-button class="h-[40px]" <el-button class="h-[40px]" @click="toReport" v-if="isSubmit">查看实验报告</el-button>
@click="toReport" <el-button class="reload h-[40px]" @click="reloadConfirm" v-show="per == 0">重新开始</el-button>
v-if="isSubmit">查看实验报告</el-button> <el-button type="primary" class="submit btn h-[40px]" :loading="submiting" @click="confirmSubmit" :disabled="isSubmit || !projectList.length">提交</el-button>
<el-button class="reload h-[40px]"
@click="reloadConfirm"
v-show="per == 0">重新开始</el-button>
<el-button type="primary"
class="submit btn h-[40px]"
:loading="submiting"
@click="confirmSubmit"
:disabled="isSubmit || !projectList.length">提交</el-button>
</div> </div>
</div> </div>
</el-header> </el-header>
<el-container id="infoContainer"> <el-container id="infoContainer">
<el-aside id="aside" <el-aside id="aside" width="30%">
width="30%">
<div class="aside-header"> <div class="aside-header">
<div class="p-title"> <div class="p-title">
<i class="el-icon-s-order"></i> <i class="el-icon-s-order"></i>
<p>实验目标</p> <p>实验目标</p>
</div> </div>
<div class="goal"> <div class="goal">
<div v-if="pd.experimentTargetType == 0 || !pd.experimentTargetType" <div v-if="pd.experimentTargetType == 0 || !pd.experimentTargetType" class="ql-editor" v-html="pd.experimentTarget"></div>
class="ql-editor"
v-html="pd.experimentTarget"></div>
<mavon-editor v-else <mavon-editor v-else class="md" v-model="pd.experimentTarget" :ishljs="true" :subfield="false" :editable="false" :toolbarsFlag="false" :boxShadowStyle="none" />
class="md"
v-model="pd.experimentTarget"
:ishljs="true"
:subfield="false"
:editable="false"
:toolbarsFlag="false"
:boxShadowStyle="none" />
</div> </div>
</div> </div>
<div class="aside-footer"> <div class="aside-footer">
@ -87,35 +55,20 @@
<div> <div>
<el-row> <el-row>
<el-col :span="24"> <el-col :span="24">
<el-card shadow="never" <el-card shadow="never" :border="false">
:border="false"> <el-table class="task-table" :data="taskList" :stripe="true">
<el-table class="task-table"
:data="taskList"
:stripe="true">
<el-table-column type="index"></el-table-column> <el-table-column type="index"></el-table-column>
<el-table-column prop="name" <el-table-column prop="name" label="判分点" align="center"></el-table-column>
label="判分点" <el-table-column prop="score" label="分值" width="60" align="center"></el-table-column>
align="center"></el-table-column>
<el-table-column prop="score"
label="分值"
width="60"
align="center"></el-table-column>
<template v-if="!param.competitionId"> <template v-if="!param.competitionId">
<el-table-column label="结果" <el-table-column label="结果" width="60" align="center">
width="60"
align="center">
<template v-slot="scope"> <template v-slot="scope">
<template v-if="isSubmit"> <template v-if="isSubmit">
<div v-if="!param.competitionId" <div v-if="!param.competitionId" class="flex justify-center items-center">
class="flex justify-center items-center"> <el-icon v-if="scope.row.finishedResult" color="#15d500" :size="16">
<el-icon v-if="scope.row.finishedResult"
color="#15d500"
:size="16">
<Check /> <Check />
</el-icon> </el-icon>
<el-icon v-else <el-icon v-else color="#f00" :size="16">
color="#f00"
:size="16">
<Close /> <Close />
</el-icon> </el-icon>
</div> </div>
@ -123,10 +76,7 @@
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="score" <el-table-column prop="score" label="得分" width="60" align="center">
label="得分"
width="60"
align="center">
<template v-slot="scope"> <template v-slot="scope">
<template v-if="isSubmit">{{ param.competitionId ? '-' : scope.row.examScore }}</template> <template v-if="isSubmit">{{ param.competitionId ? '-' : scope.row.examScore }}</template>
</template> </template>
@ -140,65 +90,38 @@
</div> </div>
</el-aside> </el-aside>
<el-main id="main"> <el-main id="main">
<el-tabs class="info-tab" <el-tabs class="info-tab" v-model="pannelTab" type="card">
v-model="pannelTab" <el-tab-pane label="项目背景" name="first">
type="card"> <div v-if="pd.experimentDescriptionType == 0 || !pd.experimentDescriptionType" class="ql-editor" v-html="pd.experimentDescription"></div>
<el-tab-pane label="项目背景"
name="first">
<div v-if="pd.experimentDescriptionType == 0 || !pd.experimentDescriptionType"
class="ql-editor"
v-html="pd.experimentDescription"></div>
<mavon-editor v-else <mavon-editor v-else class="md" v-model="pd.experimentDescription" :ishljs="true" :subfield="false" :editable="false" :toolbarsFlag="false" :boxShadowStyle="none" />
class="md"
v-model="pd.experimentDescription"
:ishljs="true"
:subfield="false"
:editable="false"
:toolbarsFlag="false"
:boxShadowStyle="none" />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="实验要求" <el-tab-pane label="实验要求" name="second">
name="second">
<el-collapse v-model="curReq"> <el-collapse v-model="curReq">
<el-collapse-item v-for="item in points" <el-collapse-item v-for="item in points" :name="item.judgmentId" :key="item.judgmentId">
:name="item.judgmentId"
:key="item.judgmentId">
<template v-slot:title> <template v-slot:title>
<i class="el-icon-s-ticket"></i> <i class="el-icon-s-ticket"></i>
<div class="break-all des" <div class="break-all des" v-html="item.name"></div>
v-html="item.name"></div>
</template> </template>
<div v-if="item.experimentalRequirementsType == 0 || !item.experimentalRequirementsType" <div v-if="item.experimentalRequirementsType == 0 || !item.experimentalRequirementsType" class="ql-editor" v-html="item.experimentalRequirements"></div>
class="ql-editor"
v-html="item.experimentalRequirements"></div>
<mavon-editor v-else <mavon-editor
v-else
class="md" class="md"
v-model="item.experimentalRequirements" v-model="item.experimentalRequirements"
:ishljs="true" :ishljs="true"
:subfield="false" :subfield="false"
:editable="false" :editable="false"
:toolbarsFlag="false" :toolbarsFlag="false"
:boxShadowStyle="none" /> :boxShadowStyle="none"
/>
</el-collapse-item> </el-collapse-item>
</el-collapse> </el-collapse>
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="实验提示" <el-tab-pane label="实验提示" name="third" v-if="hintOpen">
name="third" <div v-if="pd.experimentHintType == 0 || !pd.experimentHintType" class="ql-editor" v-html="pd.experimentHint"></div>
v-if="hintOpen">
<div v-if="pd.experimentHintType == 0 || !pd.experimentHintType"
class="ql-editor"
v-html="pd.experimentHint"></div>
<mavon-editor v-else <mavon-editor v-else class="md" v-model="pd.experimentHint" :ishljs="true" :subfield="false" :editable="false" :toolbarsFlag="false" :boxShadowStyle="none" />
class="md"
v-model="pd.experimentHint"
:ishljs="true"
:subfield="false"
:editable="false"
:toolbarsFlag="false"
:boxShadowStyle="none" />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>
</el-main> </el-main>
@ -206,19 +129,13 @@
</el-container> </el-container>
<div :class="['toggle absolute top-[200px] text-center', visible ? 'top-[35%] left-[100%]' : '']"> <div :class="['toggle absolute top-[200px] text-center', visible ? 'top-[35%] left-[100%]' : '']">
<el-icon class="cursor-pointer" <el-icon class="cursor-pointer" color="#f1772b" :size="24">
color="#f1772b"
:size="24">
<Rank id="toggle" /> <Rank id="toggle" />
</el-icon> </el-icon>
<div class="toggle-panel w-[40px] h-[175px] bg-[length:100%_100%] bg-no-repeat cursor-pointer" <div class="toggle-panel w-[40px] h-[175px] bg-[length:100%_100%] bg-no-repeat cursor-pointer" :class="{ active: visible }" ref="handle" @click="visible = !visible"></div>
:class="{ active: visible }"
ref="handle"
@click="visible = !visible"></div>
</div> </div>
</div> </div>
<div v-if="isSubmit && !isReport" <div v-if="isSubmit && !isReport" class="z-[199] fixed top-[64px] right-0 bottom-0 left-0 bg-[rgba(0,0,0,.3)]"></div>
class="z-[199] fixed top-[64px] right-0 bottom-0 left-0 bg-[rgba(0,0,0,.3)]"></div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { ref, reactive, onMounted, inject, computed, watch, onUnmounted } from 'vue'; import { ref, reactive, onMounted, inject, computed, watch, onUnmounted } from 'vue';
@ -637,7 +554,7 @@ let submit = async () => {
} catch (e) {} } catch (e) {}
}); });
const score = retMap.totalScore; const score = retMap.totalScore;
grade.value = score < 10 && !(score % 1) ? '0' + score : score; grade.value = score < 10 && !(score % 1) ? `0${score}` : score;
reportId.value = retMap.reportId; reportId.value = retMap.reportId;
Cookies.set('sand-reportId', retMap.reportId); Cookies.set('sand-reportId', retMap.reportId);
Cookies.set('sand-score', grade.value); Cookies.set('sand-score', grade.value);

@ -1,12 +1,7 @@
<template> <template>
<div class="search"> <div class="search">
<input type="text" <input type="text" placeholder="搜索" maxlength="20" v-model="val" />
placeholder="搜索" <img src="@/assets/images/search.png" alt="" class="icon" />
maxlength="20"
v-model="val" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
</div> </div>
</template> </template>

@ -1,16 +1,13 @@
<template> <template>
<!-- 保存策略时的confirm询问 --> <!-- 保存策略时的confirm询问 -->
<el-dialog v-model="visible" <el-dialog v-model="visible" width="500px">
width="500px">
<p>修改后的策略同步已关联这条策略的贷款产品会导致关联产品下架并重新配置风控</p> <p>修改后的策略同步已关联这条策略的贷款产品会导致关联产品下架并重新配置风控</p>
<p class="my-3 text-[#006BFF]">确定修改这条策略吗</p> <p class="my-3 text-[#006BFF]">确定修改这条策略吗</p>
<el-checkbox v-model="syncCheck" <el-checkbox v-model="syncCheck" label="策略修改同步之前关联的产品" />
label="策略修改同步之前关联的产品" />
<template #footer> <template #footer>
<div class="dialog-footer"> <div class="dialog-footer">
<el-button @click="visible = false">取消</el-button> <el-button @click="visible = false">取消</el-button>
<el-button type="primary" <el-button type="primary" @click="submit">确定</el-button>
@click="submit">确定</el-button>
</div> </div>
</template> </template>
</el-dialog> </el-dialog>

@ -1,7 +1,6 @@
<template> <template>
<div> <div>
<textarea :id="elementId" <textarea :id="elementId" ref="element"></textarea>
ref="element"></textarea>
</div> </div>
</template> </template>
@ -55,8 +54,8 @@ import 'tinymce/plugins/visualblocks';
import 'tinymce/plugins/visualchars'; import 'tinymce/plugins/visualchars';
// import 'tinymce/plugins/wordcount'; // import 'tinymce/plugins/wordcount';
import { isTextarea, uuid, initEditor } from './utils';
import Oss from '@/components/AliOss/upload.ts'; import Oss from '@/components/AliOss/upload.ts';
import { isTextarea, uuid, initEditor } from './utils';
export default defineComponent({ export default defineComponent({
name: 'Tinymce', name: 'Tinymce',

@ -1,23 +1,12 @@
<template> <template>
<div class="width-[100%] flex justify-between items-center w-full py-6 lg:py-4 px-5 overflow-hidden bg-transparent"> <div class="width-[100%] flex justify-between items-center w-full py-6 lg:py-4 px-5 overflow-hidden bg-transparent">
<logo /> <logo />
<div v-if="!hidePanel" <div v-if="!hidePanel" class="inline-flex items-center">
class="inline-flex items-center"> <el-tooltip effect="light" content="退出实训" placement="bottom">
<el-tooltip effect="light" <img class="mr-3 cursor-pointer" src="@/assets/images/11.png" alt="" @click="logout" />
content="退出实训"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/11.png"
alt=""
@click="logout" />
</el-tooltip> </el-tooltip>
<el-tooltip effect="light" <el-tooltip effect="light" content="返回选择角色" placement="bottom">
content="返回选择角色" <img class="cursor-pointer" src="@/assets/images/4.png" alt="" @click="toRole" />
placement="bottom">
<img class="cursor-pointer"
src="@/assets/images/4.png"
alt=""
@click="toRole" />
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>

@ -1,8 +1,7 @@
<template> <template>
<section class="px-3"> <section class="px-3">
<router-view v-slot="{ Component }"> <router-view v-slot="{ Component }">
<transition name="fade-transform" <transition name="fade-transform" mode="out-in">
mode="out-in">
<component :is="Component" /> <component :is="Component" />
</transition> </transition>
</router-view> </router-view>

@ -3,26 +3,16 @@
<!-- 产品经理 --> <!-- 产品经理 -->
<template v-if="role == 41"> <template v-if="role == 41">
<el-badge :value="productState.stat1"> <el-badge :value="productState.stat1">
<li :class="{ active: active == 1 }" <li :class="{ active: active == 1 }" @click="toPage('/product/bank?type=0&i=1&role=41')">
@click="toPage('/product/bank?type=0&i=1&role=41')"> <img class="icon" src="@/assets/images/icon5.png" alt="" />
<img class="icon" <img class="icon-1" src="@/assets/images/icon5-1.png" alt="" />
src="@/assets/images/icon5.png"
alt="" />
<img class="icon-1"
src="@/assets/images/icon5-1.png"
alt="" />
<p class="text">个人产品</p> <p class="text">个人产品</p>
</li> </li>
</el-badge> </el-badge>
<el-badge :value="productState.stat2"> <el-badge :value="productState.stat2">
<li :class="{ active: active == 2 }" <li :class="{ active: active == 2 }" @click="toPage('/product/bank?type=1&i=2&role=41')">
@click="toPage('/product/bank?type=1&i=2&role=41')"> <img class="icon" src="@/assets/images/icon6.png" alt="" />
<img class="icon" <img class="icon-1" src="@/assets/images/icon6-1.png" alt="" />
src="@/assets/images/icon6.png"
alt="" />
<img class="icon-1"
src="@/assets/images/icon6-1.png"
alt="" />
<p class="text">企业产品</p> <p class="text">企业产品</p>
</li> </li>
</el-badge> </el-badge>
@ -30,96 +20,56 @@
<!-- 风控经理 --> <!-- 风控经理 -->
<template v-else-if="role == 42"> <template v-else-if="role == 42">
<el-badge :value="productState.stat1"> <el-badge :value="productState.stat1">
<li :class="{ active: active == 1 }" <li :class="{ active: active == 1 }" @click="toPage('/product/bank?type=&i=1&role=42')">
@click="toPage('/product/bank?type=&i=1&role=42')"> <img class="icon" src="@/assets/images/icon1.png" alt="" />
<img class="icon" <img class="icon-1" src="@/assets/images/icon1-1.png" alt="" />
src="@/assets/images/icon1.png"
alt="" />
<img class="icon-1"
src="@/assets/images/icon1-1.png"
alt="" />
<p class="text">产品风控配置</p> <p class="text">产品风控配置</p>
</li> </li>
</el-badge> </el-badge>
<li :class="{ active: active == 2 }" <li :class="{ active: active == 2 }" @click="toPage('/product/strategy?i=2&role=42&id=150')">
@click="toPage('/product/strategy?i=2&role=42&id=150')"> <img class="icon" src="@/assets/images/icon2.png" alt="" />
<img class="icon" <img class="icon-1" src="@/assets/images/icon2-1.png" alt="" />
src="@/assets/images/icon2.png"
alt="" />
<img class="icon-1"
src="@/assets/images/icon2-1.png"
alt="" />
<p class="text">贷前准入模型</p> <p class="text">贷前准入模型</p>
</li> </li>
<li :class="{ active: active == 3 }" <li :class="{ active: active == 3 }" @click="toPage('/product/interestRate?&i=3&role=42&id=772')">
@click="toPage('/product/interestRate?&i=3&role=42&id=772')"> <img class="icon" src="@/assets/images/icon3.png" alt="" />
<img class="icon" <img class="icon-1" src="@/assets/images/icon3-1.png" alt="" />
src="@/assets/images/icon3.png"
alt="" />
<img class="icon-1"
src="@/assets/images/icon3-1.png"
alt="" />
<p class="text">利率定价模型</p> <p class="text">利率定价模型</p>
</li> </li>
<li :class="{ active: active == 4 }" <li :class="{ active: active == 4 }" @click="toPage('/product/afterLoan?&i=4&role=42&id=1029')">
@click="toPage('/product/afterLoan?&i=4&role=42&id=1029')"> <img class="icon" src="@/assets/images/icon4.png" alt="" />
<img class="icon" <img class="icon-1" src="@/assets/images/icon4-1.png" alt="" />
src="@/assets/images/icon4.png"
alt="" />
<img class="icon-1"
src="@/assets/images/icon4-1.png"
alt="" />
<p class="text">贷后管理模型</p> <p class="text">贷后管理模型</p>
</li> </li>
</template> </template>
<!-- 专家委员会 --> <!-- 专家委员会 -->
<el-badge v-else-if="role == 43" <el-badge v-else-if="role == 43" :value="productState.stat1">
:value="productState.stat1">
<li class="active"> <li class="active">
<img class="icon-1" <img class="icon-1" src="@/assets/images/icon7-1.png" alt="" />
src="@/assets/images/icon7-1.png"
alt="" />
<p class="text">审批产品</p> <p class="text">审批产品</p>
</li> </li>
</el-badge> </el-badge>
<!-- 保险 --> <!-- 保险 -->
<li v-else-if="route.path.includes('insurance')" <li v-else-if="route.path.includes('insurance')" class="active">
class="active"> <img class="icon-1" src="@/assets/images/icon4-1.png" alt="" />
<img class="icon-1"
src="@/assets/images/icon4-1.png"
alt="" />
<p class="text">保险产品</p> <p class="text">保险产品</p>
</li> </li>
<!-- 基金 --> <!-- 基金 -->
<li v-else-if="route.path.includes('fund')" <li v-else-if="route.path.includes('fund')" class="active">
class="active"> <img class="icon-1" src="@/assets/images/icon3-1.png" alt="" />
<img class="icon-1"
src="@/assets/images/icon3-1.png"
alt="" />
<p class="text">基金产品</p> <p class="text">基金产品</p>
</li> </li>
<!-- 配置 --> <!-- 配置 -->
<template v-else> <template v-else>
<li :class="{ active: route.path === '/config/index' }" <li :class="{ active: route.path === '/config/index' }" @click="toPage('/config/index')">
@click="toPage('/config/index')"> <img class="icon" src="@/assets/images/icon4.png" alt="" />
<img class="icon" <img class="icon-1" src="@/assets/images/icon4-1.png" alt="" />
src="@/assets/images/icon4.png"
alt="" />
<img class="icon-1"
src="@/assets/images/icon4-1.png"
alt="" />
<p class="text">参数配置</p> <p class="text">参数配置</p>
</li> </li>
<!-- 中台进来的才需要显示关卡配置 --> <!-- 中台进来的才需要显示关卡配置 -->
<li v-if="isAdmin" <li v-if="isAdmin" :class="{ active: route.path === '/config/level' }" @click="toPage('/config/level')">
:class="{ active: route.path === '/config/level' }" <img class="icon" src="@/assets/images/icon1.png" alt="" />
@click="toPage('/config/level')"> <img class="icon-1" src="@/assets/images/icon1-1.png" alt="" />
<img class="icon"
src="@/assets/images/icon1.png"
alt="" />
<img class="icon-1"
src="@/assets/images/icon1-1.png"
alt="" />
<p class="text">关卡配置</p> <p class="text">关卡配置</p>
</li> </li>
</template> </template>

@ -1,11 +1,8 @@
<template> <template>
<div> <div>
<el-scrollbar wrap-style="height: calc(100% - 85px)"> <el-scrollbar wrap-style="height: calc(100% - 85px)">
<div v-if="!isConfig" <div v-if="!isConfig" class="avatar py-3 mx-auto mb-5 text-center">
class="avatar py-3 mx-auto mb-5 text-center"> <img class="mx-auto" src="@/assets/images/6.png" alt="" />
<img class="mx-auto"
src="@/assets/images/6.png"
alt="" />
<p class="text-white text-base lg:text-sm">{{ roleName }}</p> <p class="text-white text-base lg:text-sm">{{ roleName }}</p>
<p class="my-2 text-white text-sm lg:text-xs">产品部门</p> <p class="my-2 text-white text-sm lg:text-xs">产品部门</p>
<div class="flex justify-center items-center text-white text-xs lg:text-[10px]"> <div class="flex justify-center items-center text-white text-xs lg:text-[10px]">
@ -19,22 +16,14 @@
<menus></menus> <menus></menus>
</el-scrollbar> </el-scrollbar>
<el-dialog v-model="dateVisible" <el-dialog v-model="dateVisible" title="选择交易日期" width="400px" center>
title="选择交易日期"
width="400px"
center>
<div class="text-center"> <div class="text-center">
<el-date-picker v-model="diaDate" <el-date-picker v-model="diaDate" format="YYYY/MM/DD" value-format="YYYY-MM-DD" type="date" />
format="YYYY/MM/DD"
value-format="YYYY-MM-DD"
type="date" />
</div> </div>
<template #footer> <template #footer>
<span class="flex justify-center"> <span class="flex justify-center">
<div class="dia-btn cancel" <div class="dia-btn cancel" @click="dateVisible = false">取消</div>
@click="dateVisible = false">取消</div> <div class="dia-btn" @click="submitDate">确定</div>
<div class="dia-btn"
@click="submitDate">确定</div>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
@ -44,11 +33,11 @@
<script setup lang="ts"> <script setup lang="ts">
import { onMounted, ref, computed } from 'vue'; import { onMounted, ref, computed } from 'vue';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import Menus from './Menu.vue';
import { getOperationTime, saveOperationTime } from '@/api/config'; import { getOperationTime, saveOperationTime } from '@/api/config';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import { getNow } from '@/utils/common'; import { getNow } from '@/utils/common';
import Menus from './Menu.vue';
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
@ -67,9 +56,11 @@ const roleIds = {
const roleName = computed(() => { const roleName = computed(() => {
if (route.query.role) { if (route.query.role) {
return roleIds[+route.query.role]; return roleIds[+route.query.role];
} else if (route.path.includes('insurance')) { }
if (route.path.includes('insurance')) {
return '保险产品经理'; return '保险产品经理';
} else if (route.path.includes('fund')) { }
if (route.path.includes('fund')) {
return '基金产品经理'; return '基金产品经理';
} }
}); });

@ -1,7 +1,6 @@
<template> <template>
<div class="flex items-center justify-center overflow-hidden"> <div class="flex items-center justify-center overflow-hidden">
<router-link class="whitespace-nowrap text-center" <router-link class="whitespace-nowrap text-center" to="/">
to="/">
<h1 class="ml-1 text-[22px] lg:text-lg leading-[1] font-bold text-[#333]">{{ title }}</h1> <h1 class="ml-1 text-[22px] lg:text-lg leading-[1] font-bold text-[#333]">{{ title }}</h1>
</router-link> </router-link>
</div> </div>

@ -1,15 +1,9 @@
<template> <template>
<div class="min-h-full bg-[url('@/assets/images/1.png')] bg-[length:100%_100%] bg-no-repeat"> <div class="min-h-full bg-[url('@/assets/images/1.png')] bg-[length:100%_100%] bg-no-repeat">
<app-header /> <app-header />
<Back v-if="hidePanel" <Back v-if="hidePanel" class="mx-3" name="金融产品设计及数字化营销沙盘系统后台管理系统" :isLogout="true" />
class="mx-3" <app-sidebar v-if="!hideNav" class="sidebar fixed h-full px-5 overflow-hidden transition-width duration-300 z-40" />
name="金融产品设计及数字化营销沙盘系统后台管理系统" <div class="main h-[calc(100vh-86px)] transition-margin duration-300 overflow-auto" :class="{ ml: !hideNav }" id="appMain">
:isLogout="true" />
<app-sidebar v-if="!hideNav"
class="sidebar fixed h-full px-5 overflow-hidden transition-width duration-300 z-40" />
<div class="main h-[calc(100vh-86px)] transition-margin duration-300 overflow-auto"
:class="{ 'ml': !hideNav }"
id="appMain">
<app-main /> <app-main />
</div> </div>
<Panel /> <Panel />

@ -4,9 +4,7 @@
<h1 class="font-bold text-3xl">403</h1> <h1 class="font-bold text-3xl">403</h1>
<p class="mt-4">对不起您没有该页面的访问权限</p> <p class="mt-4">对不起您没有该页面的访问权限</p>
<p class="mt-4"> <p class="mt-4">
<el-button type="primary" <el-button type="primary" @click="handleLogout()" plain>退出</el-button>
@click="handleLogout()"
plain>退出</el-button>
</p> </p>
</div> </div>
</div> </div>

@ -2,14 +2,15 @@
<div class="wscn-http404-container"> <div class="wscn-http404-container">
<div class="wscn-http404"> <div class="wscn-http404">
<div class="pic-404"> <div class="pic-404">
<img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404"> <img class="pic-404__parent" src="@/assets/404_images/404.png" alt="404" />
<img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404"> <img class="pic-404__child left" src="@/assets/404_images/404_cloud.png" alt="404" />
<img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404"> <img class="pic-404__child mid" src="@/assets/404_images/404_cloud.png" alt="404" />
<img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404"> <img class="pic-404__child right" src="@/assets/404_images/404_cloud.png" alt="404" />
</div> </div>
<div class="bullshit"> <div class="bullshit">
<div class="bullshit__oops">OOPS!</div> <div class="bullshit__oops">OOPS!</div>
<div class="bullshit__info">All rights reserved <div class="bullshit__info">
All rights reserved
<a style="color: #20a0ff" href="https://wallstreetcn.com" target="_blank">wallstreetcn</a> <a style="color: #20a0ff" href="https://wallstreetcn.com" target="_blank">wallstreetcn</a>
</div> </div>
<div class="bullshit__headline">{{ message }}</div> <div class="bullshit__headline">{{ message }}</div>

@ -2,64 +2,40 @@
<div class="flex justify-between items-center h-[64px] px-5 bg-white"> <div class="flex justify-between items-center h-[64px] px-5 bg-white">
<h1>金融产品设计及数字化营销沙盘系统</h1> <h1>金融产品设计及数字化营销沙盘系统</h1>
<div class="inline-flex items-center"> <div class="inline-flex items-center">
<el-tooltip effect="light" <el-tooltip effect="light" content="退出实训" placement="bottom">
content="退出实训" <img class="mr-3 cursor-pointer" src="@/assets/images/11.png" alt="" @click="logout" />
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/11.png"
alt=""
@click="logout" />
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
<div class="relative h-[calc(100vh-64px)] pt-5 pl-5 bg-[url('@/assets/images/level/4.png')] bg-[length:100%_100%] bg-no-repeat bg-fixed overflow-auto" <div class="relative h-[calc(100vh-64px)] pt-5 pl-5 bg-[url('@/assets/images/level/4.png')] bg-[length:100%_100%] bg-no-repeat bg-fixed overflow-auto" id="wrap">
id="wrap">
<div class="fixed z-10"> <div class="fixed z-10">
<div class="w-[354px] h-[68px] bg-[url('@/assets/images/level/5.png')] bg-[length:100%_100%] bg-no-repeat"></div> <div class="w-[354px] h-[68px] bg-[url('@/assets/images/level/5.png')] bg-[length:100%_100%] bg-no-repeat"></div>
<div class="absolute top-5 left-40 flex items-center cursor-pointer" <div class="absolute top-5 left-40 flex items-center cursor-pointer" @click="getLevel(1)">
@click="getLevel(1)"> <img v-if="collected" src="@/assets/images/level/7.png" alt="" />
<img v-if="collected" <img v-else src="@/assets/images/level/6.png" alt="" />
src="@/assets/images/level/7.png"
alt="" />
<img v-else
src="@/assets/images/level/6.png"
alt="" />
<span class="ml-2 text-sm text-[#999]">仅显示已收藏的关卡</span> <span class="ml-2 text-sm text-[#999]">仅显示已收藏的关卡</span>
</div> </div>
</div> </div>
<div class="relative mt-20"> <div class="relative mt-20">
<div v-for="(item, i) in levels" <div v-for="(item, i) in levels" :key="i" :class="['item', { active: curLevel === item.checkpointId, disabled: !item.enableOrNot }]" @click="selecLevel(item)">
:key="i"
:class="['item', { active: curLevel === item.checkpointId, disabled: !item.enableOrNot }]"
@click="selecLevel(item)">
<span class="num">LV.{{ i + 1 }}</span> <span class="num">LV.{{ i + 1 }}</span>
<div class="texts"> <div class="texts">
<h6>{{ numToChinese(i + 1) }}</h6> <h6>{{ numToChinese(i + 1) }}</h6>
<p class="des mul-ellipsis2">{{ item.customsPassName }}</p> <p class="des mul-ellipsis2">{{ item.customsPassName }}</p>
<img v-if="item.collect" <img v-if="item.collect" class="icon" src="@/assets/images/level/star2.png" alt="" @click.stop="collectItem(item)" />
class="icon" <img v-else class="icon" src="@/assets/images/level/star1.png" alt="" @click.stop="collectItem(item)" />
src="@/assets/images/level/star2.png"
alt=""
@click.stop="collectItem(item)" />
<img v-else
class="icon"
src="@/assets/images/level/star1.png"
alt=""
@click.stop="collectItem(item)" />
</div> </div>
</div> </div>
</div> </div>
<div class="arrow top-[68px] left-[50%] translate-x-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-up.png')]" <div class="arrow top-[68px] left-[50%] translate-x-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-up.png')]" @click="move('up')"></div>
@click="move('up')"></div> <div class="arrow right-0 top-[50%] translate-y-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-right.png')]" @click="move('right')"></div>
<div class="arrow right-0 top-[50%] translate-y-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-right.png')]" <div class="arrow bottom-0 left-[50%] translate-x-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-down.png')]" @click="move('down')"></div>
@click="move('right')"></div> <div class="arrow left-0 top-[50%] translate-y-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-left.png')]" @click="move('left')"></div>
<div class="arrow bottom-0 left-[50%] translate-x-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-down.png')]" <div
@click="move('down')"></div> class="fixed bottom-2 right-1 w-[262px] h-[74px] bg-[url('@/assets/images/level/submit.png')] bg-[length:100%_100%] bg-no-repeat cursor-pointer hover:bg-[url('@/assets/images/level/submit-hover.png')]"
<div class="arrow left-0 top-[50%] translate-y-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-left.png')]" @click="toRole"
@click="move('left')"></div> ></div>
<div class="fixed bottom-2 right-1 w-[262px] h-[74px] bg-[url('@/assets/images/level/submit.png')] bg-[length:100%_100%] bg-no-repeat cursor-pointer hover:bg-[url('@/assets/images/level/submit-hover.png')]"
@click="toRole"></div>
</div> </div>
<Panel /> <Panel />
</template> </template>

@ -41,49 +41,50 @@
<p class="text">今日渠道订单</p> <p class="text">今日渠道订单</p>
</div> </div>
</div> </div>
<el-tooltip effect="light" <el-tooltip effect="light" content="退出实训" placement="bottom">
content="退出实训" <img class="mr-3 cursor-pointer" src="@/assets/images/11.png" alt="" @click="logout" />
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/11.png"
alt=""
@click="logout" />
</el-tooltip> </el-tooltip>
<el-tooltip effect="light" <el-tooltip effect="light" content="返回关卡" placement="bottom">
content="返回关卡" <img class="mr-3 cursor-pointer" src="@/assets/images/2.png" alt="" @click="toLevel" />
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/2.png"
alt=""
@click="toLevel" />
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
<div class="relative h-[calc(100vh-64px)] overflow-hidden bg-[#e5eafe]"> <div class="relative h-[calc(100vh-64px)] overflow-hidden bg-[#e5eafe]">
<img class="w-full h-full" <img class="w-full h-full" src="@/assets/images/role/bg.png" alt="" />
src="@/assets/images/role/bg.png"
alt="">
<div class="absolute top-5 left-[18px] w-[204px] h-[68px] bg-[url('@/assets/images/role/2.png')] bg-[length:100%_100%] bg-no-repeat"></div> <div class="absolute top-5 left-[18px] w-[204px] h-[68px] bg-[url('@/assets/images/role/2.png')] bg-[length:100%_100%] bg-no-repeat"></div>
<div class="date absolute top-[70px] left-[54%] w-[198px] h-[46px] pt-[10px] pl-[56px] text-base text-white bg-[url('@/assets/images/role/date.png')] bg-no-repeat transition"> <div class="date absolute top-[70px] left-[54%] w-[198px] h-[46px] pt-[10px] pl-[56px] text-base text-white bg-[url('@/assets/images/role/date.png')] bg-no-repeat transition">
{{ date }} {{ date }}
</div> </div>
<div class="role top-[30%] left-[17%] xl:top-[31%] lg:top-[32%] lg:left-[15%] bg-[url('@/assets/images/role/product.png')] hover:bg-[url('@/assets/images/role/product1.png')]" <div
@click="selectRole(41)"></div> class="role top-[30%] left-[17%] xl:top-[31%] lg:top-[32%] lg:left-[15%] bg-[url('@/assets/images/role/product.png')] hover:bg-[url('@/assets/images/role/product1.png')]"
<div class="role top-[22%] left-[25%] xl:top-[24%] lg:top-[25%] lg:left-[23%] bg-[url('@/assets/images/role/committee.png')] hover:bg-[url('@/assets/images/role/committee1.png')]" @click="selectRole(41)"
@click="selectRole(43)"></div> ></div>
<div class="role top-[17%] left-[31.5%] xl:top-[16%] xl:left-[31%] lg:left-[30%] bg-[url('@/assets/images/role/riskControl.png')] hover:bg-[url('@/assets/images/role/riskControl1.png')]" <div
@click="selectRole(42)"></div> class="role top-[22%] left-[25%] xl:top-[24%] lg:top-[25%] lg:left-[23%] bg-[url('@/assets/images/role/committee.png')] hover:bg-[url('@/assets/images/role/committee1.png')]"
<div class="role bottom-[200px] left-[100px] xl:bottom-[150px] lg:bottom-[120px] bg-[url('@/assets/images/role/insurance.png')] hover:bg-[url('@/assets/images/role/insurance1.png')]" @click="selectRole(43)"
@click="selectRole(275)"></div> ></div>
<div class="role relative bottom-[70px] left-[25%] bg-[url('@/assets/images/role/fund.png')] hover:bg-[url('@/assets/images/role/fund1.png')]" <div
@click="selectRole(1161)"></div> class="role top-[17%] left-[31.5%] xl:top-[16%] xl:left-[31%] lg:left-[30%] bg-[url('@/assets/images/role/riskControl.png')] hover:bg-[url('@/assets/images/role/riskControl1.png')]"
<div class="role relative bottom-[220px] left-[41%] bg-[url('@/assets/images/role/market-bank.png')] hover:bg-[url('@/assets/images/role/market-bank1.png')]" @click="selectRole(42)"
@click="selectRole('bank')"></div> ></div>
<div class="role relative bottom-[360px] left-[52%] bg-[url('@/assets/images/role/market-insurance.png')] hover:bg-[url('@/assets/images/role/market-insurance1.png')]" <div
@click="selectRole('insurance')"></div> class="role bottom-[200px] left-[100px] xl:bottom-[150px] lg:bottom-[120px] bg-[url('@/assets/images/role/insurance.png')] hover:bg-[url('@/assets/images/role/insurance1.png')]"
<div class="role relative bottom-[490px] left-[63%] bg-[url('@/assets/images/role/market-fund.png')] hover:bg-[url('@/assets/images/role/market-fund1.png')]" @click="selectRole(275)"
@click="selectRole('fund')"></div> ></div>
<div class="role relative bottom-[70px] left-[25%] bg-[url('@/assets/images/role/fund.png')] hover:bg-[url('@/assets/images/role/fund1.png')]" @click="selectRole(1161)"></div>
<div
class="role relative bottom-[220px] left-[41%] bg-[url('@/assets/images/role/market-bank.png')] hover:bg-[url('@/assets/images/role/market-bank1.png')]"
@click="selectRole('bank')"
></div>
<div
class="role relative bottom-[360px] left-[52%] bg-[url('@/assets/images/role/market-insurance.png')] hover:bg-[url('@/assets/images/role/market-insurance1.png')]"
@click="selectRole('insurance')"
></div>
<div
class="role relative bottom-[490px] left-[63%] bg-[url('@/assets/images/role/market-fund.png')] hover:bg-[url('@/assets/images/role/market-fund1.png')]"
@click="selectRole('fund')"
></div>
</div> </div>
<!-- <div class="fixed top-[80px] right-[80px]"> <!-- <div class="fixed top-[80px] right-[80px]">
<div class="flex items-center h-[60px] px-4 rounded-tl-[20px] rounded-tr-[20px]" <div class="flex items-center h-[60px] px-4 rounded-tl-[20px] rounded-tr-[20px]"
@ -124,20 +125,14 @@
<Panel /> <Panel />
<el-dialog v-model="dateVisible" <el-dialog v-model="dateVisible" title="选择交易日期" width="400px" center>
title="选择交易日期"
width="400px"
center>
<div class="text-center"> <div class="text-center">
<el-date-picker v-model="diaDate" <el-date-picker v-model="diaDate" type="date" />
type="date" />
</div> </div>
<template #footer> <template #footer>
<span class="flex justify-center"> <span class="flex justify-center">
<div class="dia-btn cancel" <div class="dia-btn cancel" @click="dateVisible = false">取消</div>
@click="dateVisible = false">取消</div> <div class="dia-btn" @click="submitDate">确定</div>
<div class="dia-btn"
@click="submitDate">确定</div>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
@ -155,11 +150,8 @@ import dayjs from 'dayjs';
import { getNow } from '@/utils/common'; import { getNow } from '@/utils/common';
const router = useRouter(); const router = useRouter();
const route = useRoute();
const projectId = +Cookies.get('sand-projectId'); const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level'); const levelId = +Cookies.get('sand-level');
const collected = ref<boolean>(false);
const curLevel = ref<number | string>('');
const dateVisible = ref<boolean>(false); const dateVisible = ref<boolean>(false);
const date = ref<string>(dayjs(new Date()).format('YYYY-MM-DD')); const date = ref<string>(dayjs(new Date()).format('YYYY-MM-DD'));
const diaDate = ref<string>(dayjs(new Date()).format('YYYY-M-D')); const diaDate = ref<string>(dayjs(new Date()).format('YYYY-M-D'));
@ -228,11 +220,7 @@ const ranks = ref<Record<string, any>[]>([
money: '沙盘名称', money: '沙盘名称',
}, },
]); ]);
//
const getLevel = async () => {
const { data } = await checkPointList(1);
levels.value = data;
};
// //
const selectRole = (id: number) => { const selectRole = (id: number) => {
let path = `/product/bank?type=0&i=1&role=${id}`; let path = `/product/bank?type=0&i=1&role=${id}`;

@ -4,45 +4,27 @@
<dl> <dl>
<dt>担保方式</dt> <dt>担保方式</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in methods" <dd v-for="(item, i) in methods" :key="i" :class="{ active: method === item.id }" @click="filterClick(item, 'method')">{{ item.name }}</dd>
:key="i"
:class="{ active: method === item.id }"
@click="filterClick(item, 'method')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
<dl> <dl>
<dt>产品进度</dt> <dt>产品进度</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in methods" <dd v-for="(item, i) in methods" :key="i" :class="{ active: method === item.id }" @click="filterClick(item, 'method')">{{ item.name }}</dd>
:key="i"
:class="{ active: method === item.id }"
@click="filterClick(item, 'method')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
</div> </div>
<div class="block mt-3"> <div class="block mt-3">
<div class="search"> <div class="search">
<input type="text" <input type="text" placeholder="搜索" maxlength="20" />
placeholder="搜索" <img src="@/assets/images/search.png" alt="" class="icon" />
maxlength="20" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="data" @selection-change="(rows) => (selection = rows)" @sort-change="handleSort">
v-loading="loading" <el-table-column type="selection" :selectable="deletable" width="50"></el-table-column>
:data="data" <el-table-column property="id" label="ID" width="64" sortable="custom"></el-table-column>
@selection-change="(rows) => (selection = rows)"
@sort-change="handleSort">
<el-table-column type="selection"
:selectable="deletable"
width="50"></el-table-column>
<el-table-column property="id"
label="ID"
width="64"
sortable="custom"></el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -51,7 +33,8 @@
@current-change="fetchData()" @current-change="fetchData()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
</div> </div>
</div> </div>
</template> </template>

@ -1,30 +1,18 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="params.customsPassName" <search v-model="params.customsPassName" @change="getList"></search>
@change="getList"></search>
<div class="filter"> <div class="filter">
<div class="select"> <div class="select">
<el-select v-model="params.isEnable" <el-select v-model="params.isEnable" placeholder="启用状态" size="large" clearable>
placeholder="启用状态" <el-option v-for="item in enables" :key="item.id" :label="item.name" :value="item.id" />
size="large"
clearable>
<el-option v-for="item in enables"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select> </el-select>
<img src="@/assets/images/7.png" <img src="@/assets/images/7.png" alt="" class="icon" />
alt=""
class="icon" />
</div> </div>
<el-popconfirm :title="delTitle" <el-popconfirm :title="delTitle" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
删除关卡 删除关卡
@ -32,120 +20,73 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增关卡 新增关卡
</div> </div>
</div> </div>
</div> </div>
<div class="h-[calc(100vh-310px)] overflow-auto" <div class="h-[calc(100vh-310px)] overflow-auto" id="tableWrap">
id="tableWrap"> <el-table v-loading="loading" :data="list" @sort-change="handleSort" @selection-change="handleSelectionChange">
<el-table v-loading="loading" <el-table-column label="移动" width="80">
:data="list"
@sort-change="handleSort"
@selection-change="handleSelectionChange">
<el-table-column label="移动"
width="80">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-popover placement="right" <el-popover placement="right" trigger="hover">
trigger="hover">
<template #reference> <template #reference>
<el-icon class="rotate-90 cursor-pointer" <el-icon class="rotate-90 cursor-pointer" :size="16" color="#877c7c">
:size="16"
color="#877c7c">
<MoreFilled /> <MoreFilled />
</el-icon> </el-icon>
</template> </template>
<div class="flex items-center mb-2"> <div class="flex items-center mb-2">
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model.number="row.serial"></el-input>
placeholder="请输入" <el-icon class="ml-2 cursor-pointer" :size="16" color="#877c7c" @click.stop="submitSerial(row, $index, row.serial)">
v-model.number="row.serial"></el-input>
<el-icon class="ml-2 cursor-pointer"
:size="16"
color="#877c7c"
@click.stop="submitSerial(row, $index, row.serial)">
<Check /> <Check />
</el-icon> </el-icon>
</div> </div>
<p class="my-2 cursor-pointer" <p class="my-2 cursor-pointer" @click="submitSerial(row, $index, 1)">置顶</p>
@click="submitSerial(row, $index, 1)">置顶</p> <p class="cursor-pointer" @click="submitSerial(row, $index, list.length)">置底</p>
<p class="cursor-pointer"
@click="submitSerial(row, $index, list.length)">置底</p>
</el-popover> </el-popover>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column type="selection" <el-table-column type="selection" width="55" />
width="55" /> <el-table-column label="序号" width="80" align="center">
<el-table-column label="序号"
width="80"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
{{ $index + 1 }} {{ $index + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="customsPassName" <el-table-column prop="customsPassName" min-width="200" label="关卡名称">
min-width="200"
label="关卡名称">
<template #default="{ row }"> <template #default="{ row }">
<div class="flex items-center"> <div class="flex items-center">
<el-input v-if="row.editing" <el-input v-if="row.editing" class="w-[250px]" placeholder="请输入关卡名称" v-model="row.customsPassName"></el-input>
class="w-[250px]"
placeholder="请输入关卡名称"
v-model="row.customsPassName"></el-input>
<span v-else>{{ row.customsPassName }}</span> <span v-else>{{ row.customsPassName }}</span>
<el-icon v-if="!row.editing" <el-icon v-if="!row.editing" class="mx-2 cursor-pointer" :size="16" color="#877c7c" @click="edit(row)">
class="mx-2 cursor-pointer"
:size="16"
color="#877c7c"
@click="edit(row)">
<Edit /> <Edit />
</el-icon> </el-icon>
<el-icon v-if="row.editing" <el-icon v-if="row.editing" class="ml-2 cursor-pointer" :size="16" color="#877c7c" @click="cancel(row)">
class="ml-2 cursor-pointer"
:size="16"
color="#877c7c"
@click="cancel(row)">
<Close /> <Close />
</el-icon> </el-icon>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="creator" <el-table-column prop="creator" min-width="170" label="创建人"></el-table-column>
min-width="170" <el-table-column prop="createTime" label="创建时间" width="180" sortable="custom"></el-table-column>
label="创建人"></el-table-column> <el-table-column label="启用关卡" width="140" align="center">
<el-table-column prop="createTime"
label="创建时间"
width="180"
sortable="custom"></el-table-column>
<el-table-column label="启用关卡"
width="140"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-popconfirm v-if="row.checkpointId" <el-popconfirm
v-if="row.checkpointId"
:title="row.isEnable ? '禁用关卡后,已关联该关卡的判分点将被禁用,确定禁用吗?' : '启用关卡后,已关联该关卡的判分点将被启用,确定启用吗?'" :title="row.isEnable ? '禁用关卡后,已关联该关卡的判分点将被禁用,确定禁用吗?' : '启用关卡后,已关联该关卡的判分点将被启用,确定启用吗?'"
@confirm.stop="enableSubmit(row)"> @confirm.stop="enableSubmit(row)"
>
<template #reference> <template #reference>
<el-switch v-if="row.checkpointId" <el-switch v-if="row.checkpointId" v-model="row.isEnable" :active-value="1" :inactive-value="0" @change="enableChange(row)" />
v-model="row.isEnable"
:active-value="1"
:inactive-value="0"
@change="enableChange(row)" />
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="操作" <el-table-column label="操作" width="120">
width="120">
<template #default="{ row }"> <template #default="{ row }">
<el-popconfirm v-if="row.checkpointId" <el-popconfirm v-if="row.checkpointId" :title="delTitle" @confirm.stop="handleDelete([row])">
:title="delTitle"
@confirm.stop="handleDelete([row])">
<template #reference> <template #reference>
<el-button type="text" <el-button type="text" size="small">删除</el-button>
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
@ -153,11 +94,7 @@
</el-table> </el-table>
</div> </div>
<div class="filter flex justify-end mt-3"> <div class="filter flex justify-end mt-3">
<div :class="['add-btn', {'not-allow': !hadChange}]" <div :class="['add-btn', { 'not-allow': !hadChange }]" @click="save" v-loading="saveLoading">保存</div>
@click="save"
v-loading="saveLoading">
保存
</div>
</div> </div>
</div> </div>
</template> </template>
@ -176,7 +113,7 @@ const route = useRoute();
const projectId = +Cookies.get('sand-projectId'); const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level'); const levelId = +Cookies.get('sand-level');
const hadChange = ref<number>(0); const hadChange = ref<number>(0);
const delTitle: string = '删除关卡后,已关联该关卡的判分点将被禁用,确定删除吗?'; const delTitle = '删除关卡后,已关联该关卡的判分点将被禁用,确定删除吗?';
const params = reactive({ const params = reactive({
createDateSort: '', createDateSort: '',
platformId: 3, platformId: 3,

@ -1,123 +1,71 @@
<template> <template>
<div class="max-h-[calc(100vh-290px)] overflow-auto"> <div class="max-h-[calc(100vh-290px)] overflow-auto">
<h6 class="title">城市人口及年龄参数</h6> <h6 class="title">城市人口及年龄参数</h6>
<el-table class="c-table" <el-table class="c-table" :data="form.ageAduRatioList" :span-method="ageSpan" border>
:data="form.ageAduRatioList" <el-table-column prop="productName" label="城市总人口 (人)" align="center">
:span-method="ageSpan"
border>
<el-table-column prop="productName"
label="城市总人口 (人)"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model.number="row.totalPopulation" <el-input v-model.number="row.totalPopulation" placeholder="请输入" type="number" min="0"></el-input>
placeholder="请输入"
type="number"
min="0"></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="ageStage" <el-table-column prop="ageStage" label="年龄 (岁)" align="center"></el-table-column>
label="年龄 (岁)" <el-table-column prop="ageRatio" label="年龄占比 (%)" align="center">
align="center"></el-table-column>
<el-table-column prop="ageRatio"
label="年龄占比 (%)"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model="row.ageRatio" <el-input v-model="row.ageRatio" placeholder="请输入"></el-input>
placeholder="请输入"></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<h6 class="title mt-7">学历参数</h6> <h6 class="title mt-7">学历参数</h6>
<el-table class="c-table" <el-table class="c-table" :data="edus" :span-method="eduSpan" border>
:data="edus" <el-table-column prop="ageStage" label="年龄 (岁)" align="center"> </el-table-column>
:span-method="eduSpan" <el-table-column prop="education" label="学历" align="center"></el-table-column>
border> <el-table-column prop="parentIds" label="学历占比 (%)" align="center">
<el-table-column prop="ageStage"
label="年龄 (岁)"
align="center"> </el-table-column>
<el-table-column prop="education"
label="学历"
align="center"></el-table-column>
<el-table-column prop="parentIds"
label="学历占比 (%)"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model="row.eduRatio" <el-input v-model="row.eduRatio" placeholder="请输入"></el-input>
placeholder="请输入"></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<h6 class="title mt-7">企业数量配置</h6> <h6 class="title mt-7">企业数量配置</h6>
<el-table class="c-table" <el-table class="c-table" :data="form.enterpriseNumList" border>
:data="form.enterpriseNumList" <el-table-column prop="productName" label="企业类型" align="center">
border>
<el-table-column prop="productName"
label="企业类型"
align="center">
<template #default="{ row }"> <template #default="{ row }">
{{ row.enterpriseType == 1 ? '小微企业' : '创业企业' }} {{ row.enterpriseType == 1 ? '小微企业' : '创业企业' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="parentIds" <el-table-column prop="parentIds" label="企业数量(家)" align="center">
label="企业数量(家)"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model.number="row.number" <el-input v-model.number="row.number" placeholder="请输入" maxlength="3" type="number" min="0"></el-input>
placeholder="请输入"
maxlength="3"
type="number"
min="0"></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<h6 class="title mt-7">单个商品每日需求量</h6> <h6 class="title mt-7">单个商品每日需求量</h6>
<el-table class="c-table" <el-table class="c-table" :data="form.commodityDemandList" border>
:data="form.commodityDemandList" <el-table-column prop="typeName" label="买家类型" min-width="100" align="center"> </el-table-column>
border> <el-table-column prop="parentIds" label="买家总占比 (%)" min-width="100" align="center">
<el-table-column prop="typeName"
label="买家类型"
min-width="100"
align="center"> </el-table-column>
<el-table-column prop="parentIds"
label="买家总占比 (%)"
min-width="100"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model="row.buyerRatio" <el-input v-model="row.buyerRatio" placeholder="请输入"></el-input>
placeholder="请输入"></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="parentIds" <el-table-column prop="parentIds" label="每次需求人数占比 (%)" min-width="130" align="center">
label="每次需求人数占比 (%)"
min-width="130"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-input v-model="row.peopleNumRatio" <el-input v-model="row.peopleNumRatio" placeholder="请输入"></el-input>
placeholder="请输入"></el-input>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="parentIds" <el-table-column prop="parentIds" label="单个买家单次需求" min-width="200" align="center">
label="单个买家单次需求"
min-width="200"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<div class="flex items-center"> <div class="flex items-center">
<template v-if="row.typeId == 7 || row.typeId == 8"> <template v-if="row.typeId == 7 || row.typeId == 8">
<span class="mr-2 whitespace-nowrap">一个保险产品一次最多购买</span> <span class="mr-2 whitespace-nowrap">一个保险产品一次最多购买</span>
<el-input v-model="row.buyerSingleDemand" <el-input v-model="row.buyerSingleDemand" placeholder="请输入"></el-input>
placeholder="请输入"></el-input>
<span class="ml-2"></span> <span class="ml-2"></span>
</template> </template>
<template v-else> <template v-else>
<span class="mr-2 whitespace-nowrap">{{ row.typeId == 9 ? '投入' : '贷款' }}</span> <span class="mr-2 whitespace-nowrap">{{ row.typeId == 9 ? '投入' : '贷款' }}</span>
<el-input v-model="row.buyerSingleDemandMin" <el-input v-model="row.buyerSingleDemandMin" placeholder="请输入"></el-input>
placeholder="请输入"></el-input>
<span class="mx-2">~</span> <span class="mx-2">~</span>
<el-input v-model="row.buyerSingleDemandMax" <el-input v-model="row.buyerSingleDemandMax" placeholder="请输入"></el-input>
placeholder="请输入"></el-input>
<span class="ml-2 whitespace-nowrap">万元</span> <span class="ml-2 whitespace-nowrap">万元</span>
</template> </template>
</div> </div>
@ -126,10 +74,7 @@
</el-table> </el-table>
<h6 class="title mt-7">系统账户起始金额</h6> <h6 class="title mt-7">系统账户起始金额</h6>
<el-form v-if="form.moneyAllocationList.length" <el-form v-if="form.moneyAllocationList.length" class="w-[300px]" label-width="120px" label-suffix=":">
class="w-[300px]"
label-width="120px"
label-suffix=":">
<el-form-item label="银行账户"> <el-form-item label="银行账户">
<el-input v-model="form.moneyAllocationList[0].startingAmount"> <el-input v-model="form.moneyAllocationList[0].startingAmount">
<template #suffix> 万元 </template> <template #suffix> 万元 </template>
@ -149,8 +94,7 @@
</div> </div>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit">保存修改</div>
@click="submit">保存修改</div>
</div> </div>
</template> </template>

@ -1,10 +1,6 @@
<template> <template>
<div class="max-h-[calc(100vh-290px)] overflow-auto"> <div class="max-h-[calc(100vh-290px)] overflow-auto">
<el-form ref="formRef" <el-form ref="formRef" label-width="100px" label-suffix="" class="form" status-icon>
label-width="100px"
label-suffix=":"
class="form"
status-icon>
<h6 class="title">单个银行账户</h6> <h6 class="title">单个银行账户</h6>
<el-form-item label="收益计算"> <el-form-item label="收益计算">
<div> <div>
@ -17,8 +13,7 @@
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center"> <div class="flex items-center">
<span class="text">起始金额</span> <span class="text">起始金额</span>
<el-input class="w-[140px] mx-2" <el-input class="w-[140px] mx-2" v-model="form[0].startingAmount"></el-input>
v-model="form[0].startingAmount"></el-input>
<span class="text">万元</span> <span class="text">万元</span>
</div> </div>
<p class="text mt-4">银行账户金额 = 起始金额 + 累计收益</p> <p class="text mt-4">银行账户金额 = 起始金额 + 累计收益</p>
@ -37,8 +32,7 @@
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center"> <div class="flex items-center">
<span class="text">起始金额</span> <span class="text">起始金额</span>
<el-input class="w-[140px] mx-2" <el-input class="w-[140px] mx-2" v-model="form[1].startingAmount"></el-input>
v-model="form[1].startingAmount"></el-input>
<span class="text">万元</span> <span class="text">万元</span>
</div> </div>
<p class="text mt-4">保险账户金额 = 起始金额 + 累计收益</p> <p class="text mt-4">保险账户金额 = 起始金额 + 累计收益</p>
@ -63,8 +57,7 @@
<div class="flex-1"> <div class="flex-1">
<div class="flex items-center"> <div class="flex items-center">
<span class="text">起始金额</span> <span class="text">起始金额</span>
<el-input class="w-[140px] mx-2" <el-input class="w-[140px] mx-2" v-model="form[2].startingAmount"></el-input>
v-model="form[2].startingAmount"></el-input>
<span class="text">万元</span> <span class="text">万元</span>
</div> </div>
<p class="text mt-4">基金账户金额 = 所有基金资产净值+起始金额 + 累计收益 - 购买渠道金额</p> <p class="text mt-4">基金账户金额 = 所有基金资产净值+起始金额 + 累计收益 - 购买渠道金额</p>
@ -74,8 +67,7 @@
</div> </div>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit">保存修改</div>
@click="submit">保存修改</div>
</div> </div>
</template> </template>

@ -1,19 +1,14 @@
<template> <template>
<div class="block"> <div class="block">
<el-tabs v-model="curTab" <el-tabs v-model="curTab" @tab-click="tabChange">
@tab-click="tabChange"> <el-tab-pane label="系统买方" name="tab1">
<el-tab-pane label="系统买方"
name="tab1">
<buyer /> <buyer />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="金融市场" <el-tab-pane label="金融市场" name="tab2">
name="tab2">
<Financial /> <Financial />
</el-tab-pane> </el-tab-pane>
<el-tab-pane label="扫单配置" <el-tab-pane label="扫单配置" name="tab3"> </el-tab-pane>
name="tab3"> </el-tab-pane> <el-tab-pane label="渠道广告" name="tab4"> </el-tab-pane>
<el-tab-pane label="渠道广告"
name="tab4"> </el-tab-pane>
</el-tabs> </el-tabs>
</div> </div>
</template> </template>

@ -9,23 +9,17 @@
<li> <li>
<h6 class="title mb-[10px]">收入总额</h6> <h6 class="title mb-[10px]">收入总额</h6>
<p class="text-lg text-[#F08B14]">696,652,660,000.00</p> <p class="text-lg text-[#F08B14]">696,652,660,000.00</p>
<img src="@/assets/images/account/1.png" <img src="@/assets/images/account/1.png" alt="" class="bg" />
alt=""
class="bg" />
</li> </li>
<li> <li>
<h6 class="title mb-[10px]">支出总额</h6> <h6 class="title mb-[10px]">支出总额</h6>
<p class="text-lg text-[#4488F4]">696,652,660,000.00</p> <p class="text-lg text-[#4488F4]">696,652,660,000.00</p>
<img src="@/assets/images/account/2.png" <img src="@/assets/images/account/2.png" alt="" class="bg" />
alt=""
class="bg" />
</li> </li>
<li> <li>
<h6 class="title mb-[10px]">累计收益</h6> <h6 class="title mb-[10px]">累计收益</h6>
<p class="text-lg text-[#FE4953]">696,652,660,000.00</p> <p class="text-lg text-[#FE4953]">696,652,660,000.00</p>
<img src="@/assets/images/account/3.png" <img src="@/assets/images/account/3.png" alt="" class="bg" />
alt=""
class="bg" />
</li> </li>
</ul> </ul>
</div> </div>
@ -40,8 +34,7 @@
<div> <div>
<div class="flex items-center mb-[75px]"> <div class="flex items-center mb-[75px]">
<div class="icon mr-2"> <div class="icon mr-2">
<img src="@/assets/images/account/6.png" <img src="@/assets/images/account/6.png" alt="" />
alt="" />
</div> </div>
<div class=""> <div class="">
<h6 class="mb-2 text-base text-[#333]">银行账户</h6> <h6 class="mb-2 text-base text-[#333]">银行账户</h6>
@ -50,8 +43,7 @@
</div> </div>
<div class="flex items-center mb-[75px]"> <div class="flex items-center mb-[75px]">
<div class="icon mr-2"> <div class="icon mr-2">
<img src="@/assets/images/account/7.png" <img src="@/assets/images/account/7.png" alt="" />
alt="" />
</div> </div>
<div class=""> <div class="">
@ -61,8 +53,7 @@
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
<div class="icon mr-2"> <div class="icon mr-2">
<img src="@/assets/images/account/8.png" <img src="@/assets/images/account/8.png" alt="" />
alt="" />
</div> </div>
<div class=""> <div class="">
<h6 class="mb-2 text-base text-[#333]">基金账户</h6> <h6 class="mb-2 text-base text-[#333]">基金账户</h6>
@ -81,8 +72,7 @@
<p class="text-[#448ACA] font-semibold">3656631.00</p> <p class="text-[#448ACA] font-semibold">3656631.00</p>
</div> </div>
<div class="icon blue ml-2"> <div class="icon blue ml-2">
<img src="@/assets/images/account/9.png" <img src="@/assets/images/account/9.png" alt="" />
alt="" />
</div> </div>
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
@ -91,8 +81,7 @@
<p class="text-[#448ACA] font-semibold">3656631.00</p> <p class="text-[#448ACA] font-semibold">3656631.00</p>
</div> </div>
<div class="icon blue ml-2"> <div class="icon blue ml-2">
<img src="@/assets/images/account/10.png" <img src="@/assets/images/account/10.png" alt="" />
alt="" />
</div> </div>
</div> </div>
</div> </div>

@ -5,77 +5,42 @@
<dl> <dl>
<dt>担保方式</dt> <dt>担保方式</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in productTypes" <dd v-for="(item, i) in productTypes" :key="i" :class="{ active: params.productType === item.id }" @click="filterClick(item, 'productType')">{{ item.name }}</dd>
:key="i"
:class="{ active: params.productType === item.id }"
@click="filterClick(item, 'productType')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
<dl> <dl>
<dt>担保方式</dt> <dt>担保方式</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in guarantees" <dd v-for="(item, i) in guarantees" :key="i" :class="{ active: params.guarantyStyleId === item.id }" @click="filterClick(item, 'guarantyStyleId')">{{ item.name }}</dd>
:key="i"
:class="{ active: params.guarantyStyleId === item.id }"
@click="filterClick(item, 'guarantyStyleId')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
<dl> <dl>
<dt>贷款期限</dt> <dt>贷款期限</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in times" <dd v-for="(item, i) in times" :key="i" :class="{ active: params.loanPeriod === item.name }" @click="filterClick(item, 'loanPeriod')">{{ item.name }}</dd>
:key="i"
:class="{ active: params.loanPeriod === item.name }"
@click="filterClick(item, 'loanPeriod')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
<dl> <dl>
<dt>贷款额度</dt> <dt>贷款额度</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in moneys" <dd v-for="(item, i) in moneys" :key="i" :class="{ active: params.loanLimit === item.name }" @click="filterClick(item, 'loanLimit')">{{ item.name }}</dd>
:key="i"
:class="{ active: params.loanLimit === item.name }"
@click="filterClick(item, 'loanLimit')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
</div> </div>
<div class="block mt-3"> <div class="block mt-3">
<div class="search mb-2"> <div class="search mb-2">
<input type="text" <input type="text" v-model="params.keyWord" placeholder="搜索" maxlength="20" />
v-model="params.keyWord" <img src="@/assets/images/search.png" alt="" class="icon" />
placeholder="搜索"
maxlength="20" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list">
v-loading="loading" <el-table-column prop="productName" label="贷款名称" min-width="110"></el-table-column>
:data="list"> <el-table-column prop="productTypeText" label="贷款对象" min-width="80"></el-table-column>
<el-table-column prop="productName" <el-table-column prop="guarantyStyle" label="担保方式" min-width="80"></el-table-column>
label="贷款名称" <el-table-column prop="loanPeriod" label="贷款期限" min-width="80"></el-table-column>
min-width="110"></el-table-column> <el-table-column prop="loanLimit" label="贷款额度" min-width="80"></el-table-column>
<el-table-column prop="productTypeText" <el-table-column prop="rateStandard" label="参考利率范围" min-width="80"></el-table-column>
label="贷款对象" <el-table-column prop="userName" label="产品经理" min-width="80"></el-table-column>
min-width="80"></el-table-column> <el-table-column prop="operationTime" label="发布日期" min-width="80"></el-table-column>
<el-table-column prop="guarantyStyle"
label="担保方式"
min-width="80"></el-table-column>
<el-table-column prop="loanPeriod"
label="贷款期限"
min-width="80"></el-table-column>
<el-table-column prop="loanLimit"
label="贷款额度"
min-width="80"></el-table-column>
<el-table-column prop="rateStandard"
label="参考利率范围"
min-width="80"></el-table-column>
<el-table-column prop="userName"
label="产品经理"
min-width="80"></el-table-column>
<el-table-column prop="operationTime"
label="发布日期"
min-width="80"></el-table-column>
<!-- <el-table-column prop="id" <!-- <el-table-column prop="id"
label="操作" label="操作"
width="100"> width="100">
@ -85,7 +50,8 @@
@click="toDetail(row)">查看详情</el-button> @click="toDetail(row)">查看详情</el-button>
</template></el-table-column> --> </template></el-table-column> -->
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -94,7 +60,8 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
</div> </div>
</div> </div>
</template> </template>

@ -49,7 +49,8 @@
</div> </div>
<div class="line"> <div class="line">
<span class="label">贷款用途</span> <span class="label">贷款用途</span>
<div class="val">{{ <div class="val">
{{
info.loanPurpose === '购房' info.loanPurpose === '购房'
? '可用于住房按揭贷款、二手房住房按揭贷款。' ? '可用于住房按揭贷款、二手房住房按揭贷款。'
: info.loanPurpose === '消费' : info.loanPurpose === '消费'
@ -61,7 +62,8 @@
: info.loanPurpose === '经营' && info.productType : info.loanPurpose === '经营' && info.productType
? '用于短期生产经营周转的可循环的人民币信用贷款业务。' ? '用于短期生产经营周转的可循环的人民币信用贷款业务。'
: info.otherPurposesOfLoan : info.otherPurposesOfLoan
}}</div> }}
</div>
</div> </div>
<div class="line"> <div class="line">
<span class="label">还款方式</span> <span class="label">还款方式</span>
@ -81,71 +83,43 @@
<span class="label">材料要求</span> <span class="label">材料要求</span>
<div class="val"> <div class="val">
<p class="text">办理账户-提供材料{{ riskInfo?.accountMaterials }}</p> <p class="text">办理账户-提供材料{{ riskInfo?.accountMaterials }}</p>
<p v-if="riskInfo?.sendingAccount" <p v-if="riskInfo?.sendingAccount" class="text">办理账户-发放账户借记卡或放款专户</p>
class="text">办理账户-发放账户借记卡或放款专户</p> <p v-if="riskInfo?.loanApplicationMethod" class="text">贷款申请-申请方式{{ riskInfo?.loanApplicationMethod }}</p>
<p v-if="riskInfo?.loanApplicationMethod" <p v-if="riskInfo?.borrowerMaterial" class="text">贷款申请-提供材料-借款人材料{{ riskInfo?.borrowerMaterial }}</p>
class="text">贷款申请-申请方式{{ riskInfo?.loanApplicationMethod }}</p>
<p v-if="riskInfo?.borrowerMaterial"
class="text">贷款申请-提供材料-借款人材料{{ riskInfo?.borrowerMaterial }}</p>
<template v-if="info.productType"> <template v-if="info.productType">
<p v-if="riskInfo?.enterpriseMaterial" <p v-if="riskInfo?.enterpriseMaterial" class="text">贷款申请-提供材料-企业材料{{ riskInfo?.enterpriseMaterial }}</p>
class="text">贷款申请-提供材料-企业材料{{ riskInfo?.enterpriseMaterial }}</p> <p v-if="riskInfo?.collateral" class="text">贷款申请-提供材料-抵押物{{ riskInfo?.collateral }}</p>
<p v-if="riskInfo?.collateral"
class="text">贷款申请-提供材料-抵押物{{ riskInfo?.collateral }}</p>
</template> </template>
<template v-else> <template v-else>
<p v-if="riskInfo?.mateMaterial" <p v-if="riskInfo?.mateMaterial" class="text">贷款申请-提供材料-配偶材料{{ riskInfo?.mateMaterial }}</p>
class="text">贷款申请-提供材料-配偶材料{{ riskInfo?.mateMaterial }}</p> <p v-if="riskInfo?.businessMaterials" class="text">贷款申请-提供材料-经营类材料{{ riskInfo?.businessMaterials }}</p>
<p v-if="riskInfo?.businessMaterials"
class="text">贷款申请-提供材料-经营类材料{{ riskInfo?.businessMaterials }}</p>
</template> </template>
<p v-if="riskInfo?.supplementaryMaterials" <p v-if="riskInfo?.supplementaryMaterials" class="text">贷款申请-提供材料-补充材料{{ riskInfo?.supplementaryMaterials }}</p>
class="text">贷款申请-提供材料-补充材料{{ riskInfo?.supplementaryMaterials }}</p> <p v-if="riskInfo?.runBatchObject" class="text">系统跑批准入风控策略-跑批对象{{ riskInfo?.runBatchObject }}</p>
<p v-if="riskInfo?.runBatchObject" <p v-if="riskInfo?.accessStrategy" class="text">系统跑批准入风控策略-准入策略{{ riskInfo?.accessStrategy }}</p>
class="text">系统跑批准入风控策略-跑批对象{{ riskInfo?.runBatchObject }}</p> <p v-if="riskInfo?.personalCreditScoringStrategies" class="text">系统跑批准入风控策略-信用评分策略{{ riskInfo?.personalCreditScoringStrategies }}</p>
<p v-if="riskInfo?.accessStrategy" <p v-if="riskInfo?.riskDegreeStrategy" class="text">系统跑批准入风控策略-风险度策略{{ riskInfo?.riskDegreeStrategy }}</p>
class="text">系统跑批准入风控策略-准入策略{{ riskInfo?.accessStrategy }}</p> <p v-if="riskInfo?.interestRatePricingModel" class="text">系统跑批准入风控策略-利率定价模型-个人额度模型{{ riskInfo?.interestRatePricingModel }}</p>
<p v-if="riskInfo?.personalCreditScoringStrategies" <p v-if="riskInfo?.individualInterestRateModel" class="text">系统跑批准入风控策略-利率定价模型-个人利率模型</p>
class="text">系统跑批准入风控策略-信用评分策略{{ riskInfo?.personalCreditScoringStrategies }}</p> <p v-if="riskInfo?.dueDiligenceMode" class="text">尽职调查-尽调方式{{ riskInfo?.dueDiligenceMode }}</p>
<p v-if="riskInfo?.riskDegreeStrategy" <p v-if="riskInfo?.dueDiligenceContent" class="text">尽职调查-尽调内容{{ riskInfo?.dueDiligenceContent }}</p>
class="text">系统跑批准入风控策略-风险度策略{{ riskInfo?.riskDegreeStrategy }}</p> <p v-if="riskInfo?.reviewContent" class="text">贷款审查-审查内容{{ riskInfo?.reviewContent }}</p>
<p v-if="riskInfo?.interestRatePricingModel" <p v-if="riskInfo?.reviewSignature" class="text">贷款审查-审查签字{{ riskInfo?.reviewSignature }}</p>
class="text">系统跑批准入风控策略-利率定价模型-个人额度模型{{ riskInfo?.interestRatePricingModel }}</p> <p v-if="riskInfo?.reviewApproveContent" class="text">贷款审批-审批内容{{ riskInfo?.reviewApproveContent }}</p>
<p v-if="riskInfo?.individualInterestRateModel" <p v-if="riskInfo?.approvalSignature" class="text">贷款审批-审批签字{{ riskInfo?.approvalSignature }}</p>
class="text">系统跑批准入风控策略-利率定价模型-个人利率模型</p> <p v-if="riskInfo?.contractMaterials" class="text">签订合同-提供的材料{{ riskInfo?.contractMaterials }}</p>
<p v-if="riskInfo?.dueDiligenceMode" <p v-if="riskInfo?.loanContract" class="text">签订合同-合同模板-借贷合同{{ riskInfo?.loanContract }}</p>
class="text">尽职调查-尽调方式{{ riskInfo?.dueDiligenceMode }}</p> <p v-if="riskInfo?.mortgageContract" class="text">签订合同-合同模板-抵押合同{{ riskInfo?.mortgageContract }}</p>
<p v-if="riskInfo?.dueDiligenceContent" <p v-if="riskInfo?.pledgeContract" class="text">签订合同-合同模板-质押合同{{ riskInfo?.pledgeContract }}</p>
class="text">尽职调查-尽调内容{{ riskInfo?.dueDiligenceContent }}</p> <p v-if="riskInfo?.guaranteeContract" class="text">签订合同-合同模板-担保合同{{ riskInfo?.guaranteeContract }}</p>
<p v-if="riskInfo?.reviewContent" <p v-if="riskInfo?.selectionStrategy" class="text">贷后管理-选择策略{{ riskInfo?.selectionStrategy }}</p>
class="text">贷款审查-审查内容{{ riskInfo?.reviewContent }}</p>
<p v-if="riskInfo?.reviewSignature"
class="text">贷款审查-审查签字{{ riskInfo?.reviewSignature }}</p>
<p v-if="riskInfo?.reviewApproveContent"
class="text">贷款审批-审批内容{{ riskInfo?.reviewApproveContent }}</p>
<p v-if="riskInfo?.approvalSignature"
class="text">贷款审批-审批签字{{ riskInfo?.approvalSignature }}</p>
<p v-if="riskInfo?.contractMaterials"
class="text">签订合同-提供的材料{{ riskInfo?.contractMaterials }}</p>
<p v-if="riskInfo?.loanContract"
class="text">签订合同-合同模板-借贷合同{{ riskInfo?.loanContract }}</p>
<p v-if="riskInfo?.mortgageContract"
class="text">签订合同-合同模板-抵押合同{{ riskInfo?.mortgageContract }}</p>
<p v-if="riskInfo?.pledgeContract"
class="text">签订合同-合同模板-质押合同{{ riskInfo?.pledgeContract }}</p>
<p v-if="riskInfo?.guaranteeContract"
class="text">签订合同-合同模板-担保合同{{ riskInfo?.guaranteeContract }}</p>
<p v-if="riskInfo?.selectionStrategy"
class="text">贷后管理-选择策略{{ riskInfo?.selectionStrategy }}</p>
</div> </div>
</div> </div>
</div> </div>
<div class="user m-4"> <div class="user m-4">
<h6 class="mb-4 text-lg font-semibold text-[#01305B]">产品经理</h6> <h6 class="mb-4 text-lg font-semibold text-[#01305B]">产品经理</h6>
<div class="text-center"> <div class="text-center">
<img src="@/assets/images/bankDetail/4.png" <img src="@/assets/images/bankDetail/4.png" alt="" class="mx-auto" />
alt=""
class="mx-auto" />
<p class="mt-2 font-semibold text-[#114575]">{{ userName }}</p> <p class="mt-2 font-semibold text-[#114575]">{{ userName }}</p>
</div> </div>
<p class="mt-2 text-[#114575]">财经学院 金融2班</p> <p class="mt-2 text-[#114575]">财经学院 金融2班</p>

@ -5,77 +5,41 @@
<dl> <dl>
<dt>申购费率</dt> <dt>申购费率</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in rates" <dd v-for="(item, i) in rates" :key="i" :class="{ active: params.subscriptionRate === item.id }" @click="filterClick(item, 'subscriptionRate')">{{ item.name }}</dd>
:key="i"
:class="{ active: params.subscriptionRate === item.id }"
@click="filterClick(item, 'subscriptionRate')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
<dl> <dl>
<dt>成立年限</dt> <dt>成立年限</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in times" <dd v-for="(item, i) in times" :key="i" :class="{ active: params.establishmentPeriod === item.name }" @click="filterClick(item, 'establishmentPeriod')">
:key="i" {{ item.name }}
:class="{ active: params.establishmentPeriod === item.name }" </dd>
@click="filterClick(item, 'establishmentPeriod')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
<dl> <dl>
<dt>基金规模</dt> <dt>基金规模</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in scales" <dd v-for="(item, i) in scales" :key="i" :class="{ active: params.fundraisingScale === item.name }" @click="filterClick(item, 'fundraisingScale')">{{ item.name }}</dd>
:key="i"
:class="{ active: params.fundraisingScale === item.name }"
@click="filterClick(item, 'fundraisingScale')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
</div> </div>
<div class="block mt-3"> <div class="block mt-3">
<div class="search mb-2"> <div class="search mb-2">
<input type="text" <input type="text" v-model="params.fundName" placeholder="搜索" maxlength="20" />
v-model="params.fundName" <img src="@/assets/images/search.png" alt="" class="icon" />
placeholder="搜索"
maxlength="20" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list">
v-loading="loading" <el-table-column prop="fundCode" label="基金代码" min-width="80"></el-table-column>
:data="list"> <el-table-column prop="fundName" label="基金名称" min-width="110"></el-table-column>
<el-table-column prop="fundCode" <el-table-column prop="dailyNetAssetValue" label="最新单位净值" min-width="80"></el-table-column>
label="基金代码" <el-table-column prop="dailyGrowthRate" label="日增长率(%)" min-width="80"></el-table-column>
min-width="80"></el-table-column> <el-table-column prop="weeklyGrowthRate" label="近1周(%)" min-width="80"></el-table-column>
<el-table-column prop="fundName" <el-table-column prop="monthlyGrowthRate" label="近1月(%)" min-width="80"></el-table-column>
label="基金名称" <el-table-column prop="growthRateInRecentMarch" label="近3月(%)" min-width="80"></el-table-column>
min-width="110"></el-table-column> <el-table-column prop="growthRateSinceInception" label="成立来(%)" min-width="80"></el-table-column>
<el-table-column prop="dailyNetAssetValue" <el-table-column prop="fundraisingScale" label="基金规模(万元)" min-width="80"></el-table-column>
label="最新单位净值" <el-table-column prop="userName" label="产品经理" min-width="80"></el-table-column>
min-width="80"></el-table-column> <el-table-column prop="operationTime" label="发布日期" min-width="80"></el-table-column>
<el-table-column prop="dailyGrowthRate"
label="日增长率(%)"
min-width="80"></el-table-column>
<el-table-column prop="weeklyGrowthRate"
label="近1周(%)"
min-width="80"></el-table-column>
<el-table-column prop="monthlyGrowthRate"
label="近1月(%)"
min-width="80"></el-table-column>
<el-table-column prop="growthRateInRecentMarch"
label="近3月(%)"
min-width="80"></el-table-column>
<el-table-column prop="growthRateSinceInception"
label="成立来(%)"
min-width="80"></el-table-column>
<el-table-column prop="fundraisingScale"
label="基金规模(万元)"
min-width="80"></el-table-column>
<el-table-column prop="userName"
label="产品经理"
min-width="80"></el-table-column>
<el-table-column prop="operationTime"
label="发布日期"
min-width="80"></el-table-column>
<!-- <el-table-column prop="id" <!-- <el-table-column prop="id"
label="操作" label="操作"
width="100"> width="100">
@ -85,7 +49,8 @@
@click="toDetail(row)">查看详情</el-button> @click="toDetail(row)">查看详情</el-button>
</template></el-table-column> --> </template></el-table-column> -->
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -94,7 +59,8 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
</div> </div>
</div> </div>
</template> </template>

@ -5,71 +5,39 @@
<dl> <dl>
<dt>险种分类</dt> <dt>险种分类</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in insuranceTypes" <dd v-for="(item, i) in insuranceTypes" :key="i" :class="{ active: params.insuranceType === item.id }" @click="filterClick(item, 'insuranceType')">{{ item.name }}</dd>
:key="i"
:class="{ active: params.insuranceType === item.id }"
@click="filterClick(item, 'insuranceType')">{{ item.name }}</dd>
</div> </div>
</dl> </dl>
<dl v-if="params.insuranceType !== 311"> <dl v-if="params.insuranceType !== 311">
<dt>承保年龄</dt> <dt>承保年龄</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in ages" <dd v-for="(item, i) in ages" :key="i" :class="{ active: params.coverageAge === item.id }" @click="filterClick(item, 'coverageAge')">{{ item.id }}</dd>
:key="i"
:class="{ active: params.coverageAge === item.id }"
@click="filterClick(item, 'coverageAge')">{{ item.id }}</dd>
</div> </div>
</dl> </dl>
<dl> <dl>
<dt>保险期限</dt> <dt>保险期限</dt>
<div class="vals"> <div class="vals">
<dd v-for="(item, i) in times" <dd v-for="(item, i) in times" :key="i" :class="{ active: params.protectionPeriod === item.id }" @click="filterClick(item, 'protectionPeriod')">{{ item.id }}</dd>
:key="i"
:class="{ active: params.protectionPeriod === item.id }"
@click="filterClick(item, 'protectionPeriod')">{{ item.id }}</dd>
</div> </div>
</dl> </dl>
</div> </div>
<div class="block mt-3"> <div class="block mt-3">
<div class="search mb-2"> <div class="search mb-2">
<input type="text" <input type="text" v-model="params.insuranceName" placeholder="搜索" maxlength="20" />
v-model="params.insuranceName" <img src="@/assets/images/search.png" alt="" class="icon" />
placeholder="搜索"
maxlength="20" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list">
v-loading="loading" <el-table-column prop="insuranceName" label="保险名称" min-width="110"></el-table-column>
:data="list"> <el-table-column prop="insuranceTypeText" label="险种分类" min-width="80"></el-table-column>
<el-table-column prop="insuranceName" <el-table-column v-if="params.insuranceType !== 311" prop="guarantyStyle" label="承保年龄" min-width="80">
label="保险名称"
min-width="110"></el-table-column>
<el-table-column prop="insuranceTypeText"
label="险种分类"
min-width="80"></el-table-column>
<el-table-column v-if="params.insuranceType !== 311"
prop="guarantyStyle"
label="承保年龄"
min-width="80">
<template #default="{ row }"> <template #default="{ row }">
{{ row.minimumAge ? row.minimumAge + '-' + row.maximumAge + '周岁' : '-' }} {{ row.minimumAge ? row.minimumAge + '-' + row.maximumAge + '周岁' : '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="insuranceDeadline" <el-table-column prop="insuranceDeadline" label="保险期限" min-width="80"></el-table-column>
label="保险期限" <el-table-column prop="premiumAmount" label="保费(元)" min-width="80"></el-table-column>
min-width="80"></el-table-column> <el-table-column prop="userName" label="产品经理" min-width="80"></el-table-column>
<el-table-column prop="premiumAmount" <el-table-column prop="operationTime" label="发布日期" min-width="80"></el-table-column>
label="保费(元)"
min-width="80"></el-table-column>
<el-table-column prop="userName"
label="产品经理"
min-width="80"></el-table-column>
<el-table-column prop="operationTime"
label="发布日期"
min-width="80"></el-table-column>
<!-- <el-table-column prop="id" <!-- <el-table-column prop="id"
label="操作" label="操作"
width="100"> width="100">
@ -79,7 +47,8 @@
@click="toDetail(row)">查看详情</el-button> @click="toDetail(row)">查看详情</el-button>
</template></el-table-column> --> </template></el-table-column> -->
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -88,7 +57,8 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
</div> </div>
</div> </div>
</template> </template>

@ -8,46 +8,27 @@
<h6 class="title mb-5">订单列表</h6> <h6 class="title mb-5">订单列表</h6>
<div class="flex justify-between mb-5"> <div class="flex justify-between mb-5">
<div class="search"> <div class="search">
<input type="text" <input type="text" placeholder="搜索" maxlength="20" />
placeholder="搜索" <img src="@/assets/images/search.png" alt="" class="icon" />
maxlength="20" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
</div> </div>
<div> <div>
<el-select v-model="form.status" <el-select v-model="form.status" placeholder="订单类型" size="large">
placeholder="订单类型" <el-option v-for="item in paces" :key="item.id" :label="item.name" :value="item.id" />
size="large">
<el-option v-for="item in paces"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select> </el-select>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="data">
v-loading="loading" <el-table-column type="selection" :selectable="deletable" width="50"></el-table-column>
:data="data"> <el-table-column prop="parentIds" label="订单号"></el-table-column>
<el-table-column type="selection" <el-table-column prop="parentIds" label="产品名称"></el-table-column>
:selectable="deletable" <el-table-column prop="parentIds" label="订单类型"></el-table-column>
width="50"></el-table-column> <el-table-column prop="parentIds" label="成交情况"></el-table-column>
<el-table-column prop="parentIds" <el-table-column prop="parentIds" label="成交日期"></el-table-column>
label="订单号"></el-table-column> <el-table-column prop="parentIds" label="订单情况 "></el-table-column>
<el-table-column prop="parentIds" <el-table-column prop="parentIds" label="备注"></el-table-column>
label="产品名称"></el-table-column>
<el-table-column prop="parentIds"
label="订单类型"></el-table-column>
<el-table-column prop="parentIds"
label="成交情况"></el-table-column>
<el-table-column prop="parentIds"
label="成交日期"></el-table-column>
<el-table-column prop="parentIds"
label="订单情况 "></el-table-column>
<el-table-column prop="parentIds"
label="备注"></el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -56,7 +37,8 @@
@current-change="fetchData()" @current-change="fetchData()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
</div> </div>
</div> </div>
</template> </template>

@ -6,34 +6,25 @@
<div class="line"> <div class="line">
<label class="label">产品类型</label> <label class="label">产品类型</label>
<div class="fields"> <div class="fields">
<el-input value="银行产品" <el-input value="银行产品" disabled></el-input>
disabled></el-input>
</div> </div>
</div> </div>
<div class="line"> <div class="line">
<label class="label">选择产品</label> <label class="label">选择产品</label>
<div class="fields flex items-center"> <div class="fields flex items-center">
<el-input class="mr-5" <el-input class="mr-5" placeholder="点击选择需要发布的产品"></el-input>
placeholder="点击选择需要发布的产品"></el-input> <div class="btn" @click="showProduct">新增</div>
<div class="btn"
@click="showProduct">新增</div>
</div> </div>
</div> </div>
<div class="line"> <div class="line">
<label class="label">产品图标</label> <label class="label">产品图标</label>
<div class="fields"> <div class="fields">
<p class="tips">上传产品LOGO图片</p> <p class="tips">上传产品LOGO图片</p>
<div class="avatar-uploader" <div class="avatar-uploader" action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" :show-file-list="false">
action="https://run.mocky.io/v3/9d059bf9-4660-45f2-925d-ce80ad6c4d15" <img v-if="imageUrl" :src="imageUrl" class="avatar" />
:show-file-list="false"> <div v-else class="upload">
<img v-if="imageUrl"
:src="imageUrl"
class="avatar" />
<div v-else
class="upload">
<el-icon :size="20"> <el-icon :size="20">
<Plus :size="20" <Plus :size="20" color="#DFE9F8" />
color="#DFE9F8" />
</el-icon> </el-icon>
</div> </div>
</div> </div>
@ -52,15 +43,11 @@
<p class="tips">选择需要购买的投放渠道</p> <p class="tips">选择需要购买的投放渠道</p>
<div class="route"> <div class="route">
<p class="text">{百度广告类型}单次广告价格为{}适用于{}次扫单</p> <p class="text">{百度广告类型}单次广告价格为{}适用于{}次扫单</p>
<el-input-number v-model="num" <el-input-number v-model="num" :min="1" :max="10" />
:min="1"
:max="10" />
</div> </div>
<div class="route"> <div class="route">
<p class="text">{百度广告类型}单次广告价格为{}适用于{}次扫单</p> <p class="text">{百度广告类型}单次广告价格为{}适用于{}次扫单</p>
<el-input-number v-model="num" <el-input-number v-model="num" :min="1" :max="10" />
:min="1"
:max="10" />
</div> </div>
</div> </div>
</div> </div>
@ -77,35 +64,23 @@
</div> </div>
</div> </div>
<el-dialog v-model="productVisible" <el-dialog v-model="productVisible" title="选择需要发布的银行产品" width="1000px" center>
title="选择需要发布的银行产品"
width="1000px"
center>
<div class="flex justify-between mb-4"> <div class="flex justify-between mb-4">
<search v-model="keyword"></search> <search v-model="keyword"></search>
<el-checkbox label="仅查看未发布的产品" /> <el-checkbox label="仅查看未发布的产品" />
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list">
v-loading="loading" <el-table-column prop="productNumber" label="产品名称"></el-table-column>
:data="list"> <el-table-column prop="productNumber" label="产品编号"></el-table-column>
<el-table-column prop="productNumber" <el-table-column prop="productNumber" label="产品对象"></el-table-column>
label="产品名称"></el-table-column> <el-table-column prop="parentIds" label="担保方式"></el-table-column>
<el-table-column prop="productNumber" <el-table-column prop="parentIds" label="贷款用途"></el-table-column>
label="产品编号"></el-table-column> <el-table-column prop="loanCeiling" label="最高额度/年利率/期限"></el-table-column>
<el-table-column prop="productNumber" <el-table-column prop="createTime" label="创建日期"></el-table-column>
label="产品对象"></el-table-column> <el-table-column prop="status" label="状态"></el-table-column>
<el-table-column prop="parentIds"
label="担保方式"></el-table-column>
<el-table-column prop="parentIds"
label="贷款用途"></el-table-column>
<el-table-column prop="loanCeiling"
label="最高额度/年利率/期限"></el-table-column>
<el-table-column prop="createTime"
label="创建日期"></el-table-column>
<el-table-column prop="status"
label="状态"></el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -114,13 +89,12 @@
@current-change="fetchData()" @current-change="fetchData()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<template #footer> <template #footer>
<span class="flex justify-center"> <span class="flex justify-center">
<div class="dia-btn cancel" <div class="dia-btn cancel" @click="productVisible = false">取消</div>
@click="productVisible = false">取消</div> <div class="dia-btn" @click="productVisible = false">确定</div>
<div class="dia-btn"
@click="productVisible = false">确定</div>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>

@ -1,115 +1,63 @@
<template> <template>
<!-- 五级分类 --> <!-- 五级分类 -->
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" :span-method="span" :cell-style="{ background: '#fff' }" border>
:data="form" <el-table-column prop="recordName" label="产品类别" min-width="150" align="center"> </el-table-column>
:span-method="span" <el-table-column label="逾期时间" align="center">
:cell-style="{background:'#fff'}" <el-table-column label="未逾期" align="center">
border>
<el-table-column prop="recordName"
label="产品类别"
min-width="150"
align="center">
</el-table-column>
<el-table-column label="逾期时间"
align="center">
<el-table-column label="未逾期"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select clearable <el-select clearable v-model="row.notOverdue">
v-model="row.notOverdue"> <el-option v-for="item in row.recordChildren[0].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
<el-option v-for="item in row.recordChildren[0].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="1~30天" <el-table-column label="1~30天" align="center">
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select clearable <el-select clearable v-model="row.thirtyDays">
v-model="row.thirtyDays"> <el-option v-for="item in row.recordChildren[0].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
<el-option v-for="item in row.recordChildren[0].subject.itemList" </el-select> </template
:key="item" ></el-table-column>
:label="item.options" <el-table-column label="31~90天" align="center">
:value="item.itemId" />
</el-select>
</template></el-table-column>
<el-table-column label="31~90天"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select clearable <el-select clearable v-model="row.ninetyDays">
v-model="row.ninetyDays"> <el-option v-for="item in row.recordChildren[0].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
<el-option v-for="item in row.recordChildren[0].subject.itemList" </el-select> </template
:key="item" ></el-table-column>
:label="item.options" <el-table-column label="91~180天" align="center">
:value="item.itemId" />
</el-select>
</template></el-table-column>
<el-table-column label="91~180天"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select clearable <el-select clearable v-model="row.oneHundredAndEightyDays">
v-model="row.oneHundredAndEightyDays"> <el-option v-for="item in row.recordChildren[0].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
<el-option v-for="item in row.recordChildren[0].subject.itemList" </el-select> </template
:key="item" ></el-table-column>
:label="item.options" <el-table-column label="181~360天" align="center">
:value="item.itemId" />
</el-select>
</template></el-table-column>
<el-table-column label="181~360天"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select clearable <el-select clearable v-model="row.threeHundredAndSixtyDays">
v-model="row.threeHundredAndSixtyDays"> <el-option v-for="item in row.recordChildren[0].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
<el-option v-for="item in row.recordChildren[0].subject.itemList" </el-select> </template
:key="item" ></el-table-column>
:label="item.options" <el-table-column label="360天以上" align="center">
:value="item.itemId" />
</el-select>
</template></el-table-column>
<el-table-column label="360天以上"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select clearable <el-select clearable v-model="row.threeHundredAndSixtyDaysAbove">
v-model="row.threeHundredAndSixtyDaysAbove"> <el-option v-for="item in row.recordChildren[0].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
<el-option v-for="item in row.recordChildren[0].subject.itemList" </el-select> </template
:key="item" ></el-table-column>
:label="item.options"
:value="item.itemId" />
</el-select>
</template></el-table-column>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -209,7 +157,7 @@ const addRecord = async (data: Record<string, any>) => {
const submit = async (synchronizeUpdate?: number) => { const submit = async (synchronizeUpdate?: number) => {
loading.value = true; loading.value = true;
try { try {
let param = JSON.parse(JSON.stringify(form.value)); const param = JSON.parse(JSON.stringify(form.value));
const recordParam = JSON.parse(JSON.stringify(param)); const recordParam = JSON.parse(JSON.stringify(param));
param.map((e) => { param.map((e) => {

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="五级分类策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="五级分类策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '五级分类策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '五级分类策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
@ -176,7 +143,7 @@ const toAdd = () => {
visible.value = true; visible.value = true;
}; };
// //
const toDetail = async (row: Record<string, any>, detail: boolean = false) => { const toDetail = async (row: Record<string, any>, detail = false) => {
i.value++; i.value++;
isDetail.value = detail; isDetail.value = detail;
curRow.value = row; curRow.value = row;

@ -1,80 +1,41 @@
<template> <template>
<!-- 贷后检查 --> <!-- 贷后检查 -->
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" :cell-style="{ background: '#fff' }" border>
:data="form" <el-table-column prop="name" label="选用" width="130" align="center">
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="选用"
width="130"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.isChoose"> <el-radio-group v-model="row.isChoose">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="recordName" <el-table-column prop="recordName" label="检查方式" min-width="150" align="center"></el-table-column>
label="检查方式" <el-table-column label="检查对象" min-width="200" align="center">
min-width="150"
align="center"></el-table-column>
<el-table-column label="检查对象"
min-width="200"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" clearable v-model="row.checkObject">
clearable <el-option v-for="item in row?.recordChildren[1].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
v-model="row.checkObject">
<el-option v-for="item in row?.recordChildren[1].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="检查时间" <el-table-column label="检查时间" min-width="270" align="center">
min-width="270"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<span v-if="$index === 4">点击后触发</span> <span v-if="$index === 4">点击后触发</span>
<div v-else <div v-else class="flex items-center">
class="flex items-center"> <el-select v-if="row.recordChildren" clearable v-model="row.checkTimeType">
<el-select v-if="row.recordChildren" <el-option v-for="item in row?.recordChildren[2].recordChildren[0].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.checkTimeType">
<el-option v-for="item in row?.recordChildren[2].recordChildren[0].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
<el-input class="w-[100px] mx-2" <el-input class="w-[100px] mx-2" placeholder="请输入" v-model="row.timeDays"></el-input>
placeholder="请输入"
v-model="row.timeDays"></el-input>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="检查内容" <el-table-column label="检查内容" min-width="230" align="center">
min-width="230"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-checkbox v-model="row.governmentData">政务数据</el-checkbox> <el-checkbox v-model="row.governmentData">政务数据</el-checkbox>
<el-checkbox v-model="row.creditData">征信数据</el-checkbox> <el-checkbox v-model="row.creditData">征信数据</el-checkbox>
@ -82,17 +43,13 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -125,7 +82,7 @@ const getConfig = async () => {
const result = []; const result = [];
process.slice(1).map((e, i) => { process.slice(1).map((e, i) => {
const cur = info.value.length ? info.value[i] : {}; const cur = info.value.length ? info.value[i] : {};
let temp = { const temp = {
...getIds(), ...getIds(),
recordName: e.name, recordName: e.name,
recordChildren: e.recordChildren, recordChildren: e.recordChildren,
@ -182,7 +139,8 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 2, rowspan: 2,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 2) { }
if (rowIndex === 2) {
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
@ -197,14 +155,14 @@ const addRecord = async (data: Record<string, any>) => {
data.forEach((e, i) => { data.forEach((e, i) => {
e.isChoose && rule.push(handleId(1052, 140, e.isChoose, `${preIds},${e.stRecordId},1052`, 1)); e.isChoose && rule.push(handleId(1052, 140, e.isChoose, `${preIds},${e.stRecordId},1052`, 1));
e.checkObject && rule.push(handleId(1053, 282, e.checkObject, preIds + ',' + e.stRecordId + ',1053', 1)); e.checkObject && rule.push(handleId(1053, 282, e.checkObject, `${preIds},${e.stRecordId},1053`, 1));
i !== 4 && e.checkTimeType && rule.push(handleId(1054, 283, e.checkTimeType, preIds + ',' + e.stRecordId + ',1054,1056', 1)); i !== 4 && e.checkTimeType && rule.push(handleId(1054, 283, e.checkTimeType, `${preIds},${e.stRecordId},1054,1056`, 1));
e.timeDays && rule.push(handleId(1057, 284, e.timeDays, preIds + ',' + e.stRecordId + ',1054,1057', 3)); e.timeDays && rule.push(handleId(1057, 284, e.timeDays, `${preIds},${e.stRecordId},1054,1057`, 3));
const ids = []; const ids = [];
e.governmentData && ids.push(778); e.governmentData && ids.push(778);
e.creditData && ids.push(793); e.creditData && ids.push(793);
e.governmentData && rule.push(handleId(1055, 323, ids.join(), preIds + ',' + e.stRecordId + ',1055', 1)); e.governmentData && rule.push(handleId(1055, 323, ids.join(), `${preIds},${e.stRecordId},1055`, 1));
}); });
await addOperation({ await addOperation({
@ -221,7 +179,7 @@ const addRecord = async (data: Record<string, any>) => {
const submit = async (synchronizeUpdate?: number) => { const submit = async (synchronizeUpdate?: number) => {
loading.value = true; loading.value = true;
try { try {
let param = JSON.parse(JSON.stringify(form.value)); const param = JSON.parse(JSON.stringify(form.value));
param.map((e, i) => { param.map((e, i) => {
e.creditData = +e.creditData; e.creditData = +e.creditData;
e.governmentData = +e.governmentData; e.governmentData = +e.governmentData;

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="贷后检查策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="贷后检查策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '贷后检查策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '贷后检查策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
@ -176,7 +143,7 @@ const toAdd = () => {
visible.value = true; visible.value = true;
}; };
// //
const toDetail = async (row: Record<string, any>, detail: boolean = false) => { const toDetail = async (row: Record<string, any>, detail = false) => {
i.value++; i.value++;
isDetail.value = detail; isDetail.value = detail;
curRow.value = row; curRow.value = row;

@ -1,131 +1,61 @@
<template> <template>
<!-- 贷后评分 --> <!-- 贷后评分 -->
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" :span-method="span" :cell-style="{ background: '#fff' }" border>
:data="form" <el-table-column prop="name" label="选用" width="130" align="center">
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="选用"
width="130"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-radio-group v-if="$index" <el-radio-group v-if="$index" v-model="row.isChoose">
v-model="row.isChoose"> <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
<el-radio v-for="(item, i) in opt1"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
<span v-else>基准分</span> <span v-else>基准分</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="recordName" <el-table-column prop="recordName" label="指标" min-width="80" align="center"></el-table-column>
label="指标" <el-table-column prop="recordName" label="公式/取值" min-width="200" align="center">
min-width="80"
align="center"></el-table-column>
<el-table-column prop="recordName"
label="公式/取值"
min-width="200"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<div class="flex items-center"> <div class="flex items-center">
<template v-if="$index === 1"> <template v-if="$index === 1">
存贷比 = 存贷比 =
<div class="inline-flex flex-col justify-center mx-2"> <div class="inline-flex flex-col justify-center mx-2">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px]" clearable v-model="row.formulaOne" disabled>
class="w-[140px]" <el-option v-for="item in row?.recordChildren[1].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaOne"
disabled>
<el-option v-for="item in row?.recordChildren[1].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
<p class="h-[1px] my-2 bg-[#cdcdcd]"></p> <p class="h-[1px] my-2 bg-[#cdcdcd]"></p>
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px]" clearable v-model="row.formulaTwo" disabled>
class="w-[140px]" <el-option v-for="item in row?.recordChildren[2].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaTwo"
disabled>
<el-option v-for="item in row?.recordChildren[2].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</div> </div>
x 100% x 100%
</template> </template>
<template v-if="$index === 6"> <template v-if="$index === 6">
房屋净值 = 房屋净值 =
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px] mx-2" clearable v-model="row.formulaOne" disabled>
class="w-[140px] mx-2" <el-option v-for="item in row?.recordChildren[1].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaOne"
disabled>
<el-option v-for="item in row?.recordChildren[1].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
- -
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px] ml-2" clearable v-model="row.formulaTwo" disabled>
class="w-[140px] ml-2" <el-option v-for="item in row?.recordChildren[2].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaTwo"
disabled>
<el-option v-for="item in row?.recordChildren[2].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</template> </template>
<template v-if="$index === 9"> <template v-if="$index === 9">
<el-input class="w-[80px] mx-2" <el-input class="w-[80px] mx-2" placeholder="请输入" v-model="row.formulaOne" disabled></el-input>
placeholder="请输入" <el-select v-if="row.recordChildren" class="w-[140px] mr-2" clearable v-model="row.formulaTwo" disabled>
v-model="row.formulaOne" <el-option v-for="item in row?.recordChildren[2].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
disabled></el-input>
<el-select v-if="row.recordChildren"
class="w-[140px] mr-2"
clearable
v-model="row.formulaTwo"
disabled>
<el-option v-for="item in row?.recordChildren[2].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
内逾期次数 内逾期次数
</template> </template>
<template v-if="$index === 12"> <template v-if="$index === 12">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px] mx-2" clearable v-model="row.formulaOne" disabled>
class="w-[140px] mx-2" <el-option v-for="item in row?.recordChildren[1].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaOne"
disabled>
<el-option v-for="item in row?.recordChildren[1].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
开始算还款当天不计算利息 开始算还款当天不计算利息
</template> </template>
@ -133,26 +63,12 @@
<template v-if="$index === 18"> <template v-if="$index === 18">
平均额度使用率 = 平均额度使用率 =
<div class="inline-flex flex-col justify-center mx-2"> <div class="inline-flex flex-col justify-center mx-2">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px]" clearable v-model="row.formulaOne" disabled>
class="w-[140px]" <el-option v-for="item in row?.recordChildren[1].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaOne"
disabled>
<el-option v-for="item in row?.recordChildren[1].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
<p class="h-[1px] my-2 bg-[#cdcdcd]"></p> <p class="h-[1px] my-2 bg-[#cdcdcd]"></p>
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px]" clearable v-model="row.formulaTwo" disabled>
class="w-[140px]" <el-option v-for="item in row?.recordChildren[2].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaTwo"
disabled>
<el-option v-for="item in row?.recordChildren[2].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</div> </div>
x 100% x 100%
@ -160,26 +76,12 @@
<template v-if="$index === 22"> <template v-if="$index === 22">
最大用信率 = 最大用信率 =
<div class="inline-flex flex-col justify-center mx-2"> <div class="inline-flex flex-col justify-center mx-2">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px]" clearable v-model="row.formulaOne" disabled>
class="w-[140px]" <el-option v-for="item in row?.recordChildren[1].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaOne"
disabled>
<el-option v-for="item in row?.recordChildren[1].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
<p class="h-[1px] my-2 bg-[#cdcdcd]"></p> <p class="h-[1px] my-2 bg-[#cdcdcd]"></p>
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="w-[140px]" clearable v-model="row.formulaTwo" disabled>
class="w-[140px]" <el-option v-for="item in row?.recordChildren[2].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.formulaTwo"
disabled>
<el-option v-for="item in row?.recordChildren[2].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</div> </div>
x 100% x 100%
@ -191,38 +93,24 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="ruleName" <el-table-column prop="ruleName" label="取值" min-width="100" align="center"></el-table-column>
label="取值" <el-table-column label="分数" min-width="80" align="center">
min-width="100"
align="center"></el-table-column>
<el-table-column label="分数"
min-width="80"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select v-if="row.subject" <el-select v-if="row.subject" clearable v-model="row.score">
clearable <el-option v-for="item in row.subject.itemList.sort((a, b) => +a.options - +b.options)" :key="item" :label="item.options" :value="item.itemId" />
v-model="row.score">
<el-option v-for="item in row.subject.itemList.sort((a, b) => +a.options - +b.options)"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
<span v-else>600</span> <span v-else>600</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -302,7 +190,7 @@ const getDetail = async () => {
const { data } = await postCreditScoreDetails({ const { data } = await postCreditScoreDetails({
strategyId: strategyId.value, strategyId: strategyId.value,
}); });
info.value = data; info.value = data.slice(1);
} }
getConfig(); getConfig();
@ -337,18 +225,18 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 1, rowspan: 1,
colspan: 4, colspan: 4,
}; };
} else if (columnIndex === 4) { }
if (columnIndex === 4) {
return { return {
rowspan: 1, rowspan: 1,
colspan: 1, colspan: 1,
}; };
} else { }
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
}; };
} }
}
if (columnIndex < 3) { if (columnIndex < 3) {
if (rowMerge1.includes(rowIndex)) { if (rowMerge1.includes(rowIndex)) {
@ -356,28 +244,30 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 5, rowspan: 5,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge2.includes(rowIndex)) { }
if (rowMerge2.includes(rowIndex)) {
return { return {
rowspan: 3, rowspan: 3,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge3.includes(rowIndex)) { }
if (rowMerge3.includes(rowIndex)) {
return { return {
rowspan: 4, rowspan: 4,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge4.includes(rowIndex)) { }
if (rowMerge4.includes(rowIndex)) {
return { return {
rowspan: 2, rowspan: 2,
colspan: 1, colspan: 1,
}; };
} else { }
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
}; };
} }
}
}; };
// //
const addRecord = async (data: Record<string, any>) => { const addRecord = async (data: Record<string, any>) => {
@ -410,7 +300,7 @@ const addRecord = async (data: Record<string, any>) => {
const submit = async (synchronizeUpdate?: number) => { const submit = async (synchronizeUpdate?: number) => {
loading.value = true; loading.value = true;
try { try {
let param = JSON.parse(JSON.stringify(form.value)); const param = JSON.parse(JSON.stringify(form.value));
const recordParam = JSON.parse(JSON.stringify(param)); const recordParam = JSON.parse(JSON.stringify(param));
param.map((e) => { param.map((e) => {
delete e.recordChildren; delete e.recordChildren;

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="贷后评分策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="贷后评分策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '贷后评分策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '贷后评分策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
@ -176,7 +143,7 @@ const toAdd = () => {
visible.value = true; visible.value = true;
}; };
// //
const toDetail = async (row: Record<string, any>, detail: boolean = false) => { const toDetail = async (row: Record<string, any>, detail = false) => {
i.value++; i.value++;
isDetail.value = detail; isDetail.value = detail;
curRow.value = row; curRow.value = row;

@ -1,77 +1,43 @@
<template> <template>
<!-- 贷后预警 --> <!-- 贷后预警 -->
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" :cell-style="{ background: '#fff' }" border>
:data="form" <el-table-column label="选用" width="130" align="center">
:cell-style="{background:'#fff'}"
border>
<el-table-column label="选用"
width="130"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.isChoose"> <el-radio-group v-model="row.isChoose">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="recordName" <el-table-column prop="recordName" label="风险类型" align="center"></el-table-column>
label="风险类型" <el-table-column label="风险等级" align="center">
align="center"></el-table-column>
<el-table-column label="风险等级"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<div class="flex"> <div class="flex">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" class="mr-2" clearable v-model="row.riskGradeType">
class="mr-2" <el-option v-for="item in row?.recordChildren[1].recordChildren[0].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
clearable
v-model="row.riskGradeType">
<el-option v-for="item in row?.recordChildren[1].recordChildren[0].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" clearable v-model="row.riskGrade">
clearable <el-option v-for="item in row?.recordChildren[1].recordChildren[1].subject.itemList" :key="item" :label="item.options" :value="item.itemId" />
v-model="row.riskGrade">
<el-option v-for="item in row?.recordChildren[1].recordChildren[1].subject.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</div> </div> </template
</template></el-table-column> ></el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="贷后预警策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="贷后预警策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '贷后预警策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '贷后预警策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
@ -98,6 +65,7 @@ import { Delete } from '@element-plus/icons-vue';
import { pageSizes, pageLayout } from '@/utils/common'; import { pageSizes, pageLayout } from '@/utils/common';
import { postLoanWarning, postLoanWarningDel } from '@/api/model'; import { postLoanWarning, postLoanWarningDel } from '@/api/model';
import Search from '@/components/Search.vue'; import Search from '@/components/Search.vue';
const Detail = defineAsyncComponent(() => import('./Detail.vue')); const Detail = defineAsyncComponent(() => import('./Detail.vue'));
const keyWord = ref<string>(); const keyWord = ref<string>();
@ -175,7 +143,7 @@ const toAdd = () => {
visible.value = true; visible.value = true;
}; };
// //
const toDetail = async (row: Record<string, any>, detail: boolean = false) => { const toDetail = async (row: Record<string, any>, detail = false) => {
i.value++; i.value++;
isDetail.value = detail; isDetail.value = detail;
curRow.value = row; curRow.value = row;

@ -1,46 +1,23 @@
<template> <template>
<!-- 贷后催收 --> <!-- 贷后催收 -->
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled">
label-suffix=":"
class="form"
:disabled="disabled">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" :span-method="span" :cell-style="{ background: '#fff' }" border>
:data="form" <el-table-column prop="name" label="选用" width="130" align="center">
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="选用"
width="130"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.isChoose"> <el-radio-group v-model="row.isChoose">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="recordName" <el-table-column prop="recordName" label="逾期时长" width="150" align="center"> </el-table-column>
label="逾期时长" <el-table-column label="选择催收方式" width="440" align="center">
width="150"
align="center">
</el-table-column>
<el-table-column label="选择催收方式"
width="440"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-checkbox v-model="row.shortMessageCollection">短信催收</el-checkbox> <el-checkbox v-model="row.shortMessageCollection">短信催收</el-checkbox>
<el-checkbox v-model="row.appCollection">APP催收</el-checkbox> <el-checkbox v-model="row.appCollection">APP催收</el-checkbox>
@ -48,47 +25,32 @@
<el-checkbox v-model="row.manualCollection">人工催收</el-checkbox> <el-checkbox v-model="row.manualCollection">人工催收</el-checkbox>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="短信/APP/自动外呼 话术" <el-table-column label="短信/APP/自动外呼 话术" min-width="310" align="center">
min-width="310"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<p v-if="row.recordChildren && row.verbalTrick">{{ row?.recordChildren[1]?.subject?.itemList.find(e => e.itemId === row.verbalTrick)?.options }}</p> <p v-if="row.recordChildren && row.verbalTrick">{{ row?.recordChildren[1]?.subject?.itemList.find((e) => e.itemId === row.verbalTrick)?.options }}</p>
<el-button type="primary" <el-button type="primary" :icon="Plus" @click="showDia(row)">选择</el-button>
:icon="Plus" </template></el-table-column
@click="showDia(row)">选择</el-button> >
</template></el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
<el-dialog v-model="selectDia" <el-dialog v-model="selectDia" custom-class="select-dia">
custom-class="select-dia"> <div class="selects" v-if="curRow.recordChildren">
<div class="selects" <div v-for="item in curRow?.recordChildren[1]?.subject?.itemList" :key="item" class="line" @click="curRow.verbalTrick = item.itemId">
v-if="curRow.recordChildren"> <el-radio v-model="curRow.verbalTrick" :label="item.itemId"></el-radio>
<div v-for="item in
curRow?.recordChildren[1]?.subject?.itemList"
:key="item"
class="line"
@click="curRow.verbalTrick = item.itemId">
<el-radio v-model="curRow.verbalTrick"
:label="item.itemId"></el-radio>
<span>{{ item.options }}</span> <span>{{ item.options }}</span>
</div> </div>
</div> </div>
<template #footer> <template #footer>
<span class="dialog-footer"> <span class="dialog-footer">
<el-button type="primary" <el-button type="primary" @click="selectDia = false">关闭</el-button>
@click="selectDia = false">关闭</el-button>
</span> </span>
</template> </template>
</el-dialog> </el-dialog>
@ -207,7 +169,7 @@ const addRecord = async (data: Record<string, any>) => {
// //
const submit = async (synchronizeUpdate?: number) => { const submit = async (synchronizeUpdate?: number) => {
try { try {
let param = JSON.parse(JSON.stringify(form.value)); const param = JSON.parse(JSON.stringify(form.value));
param.map((e) => { param.map((e) => {
e.appCollection = +e.appCollection; e.appCollection = +e.appCollection;
e.automaticOutboundCall = +e.automaticOutboundCall; e.automaticOutboundCall = +e.automaticOutboundCall;

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="贷后催收策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="贷后催收策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '贷后催收策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '贷后催收策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
@ -98,6 +65,7 @@ import { Delete } from '@element-plus/icons-vue';
import { pageSizes, pageLayout } from '@/utils/common'; import { pageSizes, pageLayout } from '@/utils/common';
import { collectionAfterLoan, collectionAfterLoanDel } from '@/api/model'; import { collectionAfterLoan, collectionAfterLoanDel } from '@/api/model';
import Search from '@/components/Search.vue'; import Search from '@/components/Search.vue';
const Detail = defineAsyncComponent(() => import('./Detail.vue')); const Detail = defineAsyncComponent(() => import('./Detail.vue'));
const keyWord = ref<string>(); const keyWord = ref<string>();
@ -175,7 +143,7 @@ const toAdd = () => {
visible.value = true; visible.value = true;
}; };
// //
const toDetail = async (row: Record<string, any>, detail: boolean = false) => { const toDetail = async (row: Record<string, any>, detail = false) => {
i.value++; i.value++;
isDetail.value = detail; isDetail.value = detail;
curRow.value = row; curRow.value = row;

@ -1,16 +1,11 @@
<template> <template>
<div v-if="list.length"> <div v-if="list.length">
<div class="menu-card"> <div class="menu-card">
<el-menu class="left" <el-menu class="left" :default-active="curMenu" @select="handleSelect">
:default-active="curMenu" <el-menu-item v-for="(item, i) in list" :key="i" :index="String(item.id)">{{ item.name }}</el-menu-item>
@select="handleSelect">
<el-menu-item v-for="(item, i) in list"
:key="i"
:index="String(item.id)">{{ item.name }}</el-menu-item>
</el-menu> </el-menu>
<div class="right"> <div class="right">
<component v-if="loadedComponents[activeComponent]" <component v-if="loadedComponents[activeComponent]" :is="loadedComponents[activeComponent]" />
:is="loadedComponents[activeComponent]" />
</div> </div>
</div> </div>
</div> </div>

@ -1,60 +1,46 @@
<template> <template>
<div> <div>
<el-tabs v-model="curTab"> <el-tabs v-model="curTab">
<el-tab-pane :label="id ? '配置要素' : '新增产品'" <el-tab-pane :label="id ? '配置要素' : '新增产品'" name="tab1">
name="tab1"> <el-form ref="formRef" :model="form" :rules="rules" label-width="100px" label-suffix="" class="form" status-icon>
<el-form ref="formRef"
:model="form"
:rules="rules"
label-width="100px"
label-suffix=":"
class="form"
status-icon>
<div class="h-[calc(100vh-230px)] pr-1 overflow-auto"> <div class="h-[calc(100vh-230px)] pr-1 overflow-auto">
<el-form-item label="产品定义" <el-form-item label="产品定义" prop="productDefinition">
prop="productDefinition"> <el-input
<el-input type="textarea" type="textarea"
placeholder="用一段话简单介绍一下这个产品或者描述产品的设计理念。例如:本产品根据个人客户的信用状况,为其提供的一种短期融资便利产品,借款人可在额度金额内可循环周转使用贷款。" placeholder="用一段话简单介绍一下这个产品或者描述产品的设计理念。例如:本产品根据个人客户的信用状况,为其提供的一种短期融资便利产品,借款人可在额度金额内可循环周转使用贷款。"
maxlength="200" maxlength="200"
v-model="form.productDefinition"></el-input> v-model="form.productDefinition"
></el-input>
</el-form-item> </el-form-item>
<el-form-item label="产品名称" <el-form-item label="产品名称" prop="productName">
prop="productName"> <el-input placeholder="取个有吸引力的产品名,限20字。" maxlength="20" v-model="form.productName"></el-input>
<el-input placeholder="取个有吸引力的产品名,限20字。"
maxlength="20"
v-model="form.productName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="产品币种" <el-form-item label="产品币种" prop="productCurrency">
prop="productCurrency"> <el-select v-model="form.productCurrency" placeholder="请选择">
<el-select v-model="form.productCurrency" <el-option label="人民币" :value="1" />
placeholder="请选择">
<el-option label="人民币"
:value="1" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="贷款对象" <el-form-item label="贷款对象" required>
required>
<div class="flex-1"> <div class="flex-1">
<!-- 企业 --> <!-- 企业 -->
<template v-if="productType"> <template v-if="productType">
<div class="flex items-center"> <div class="flex items-center">
<span class="mr-3 text-[#333] text-sm">企业类型</span> <span class="mr-3 text-[#333] text-sm">企业类型</span>
<el-select v-model="form.productObject" <el-select v-model="form.productObject" placeholder="请选择">
placeholder="请选择"> <el-option
<el-option v-for="(item, i) in config.find((e) => e.name === '企业产品-贷款对象')?.recordChildren[0]?.subject?.itemList" v-for="(item, i) in config.find((e) => e.name === '企业产品-贷款对象')?.recordChildren[0]?.subject?.itemList"
:key="i" :key="i"
:label="item.options" :label="item.options"
:value="item.itemId" /> :value="item.itemId"
/>
</el-select> </el-select>
</div> </div>
<div class="flex items-center mt-4"> <div class="flex items-center mt-4">
<span class="mr-3 text-[#333] text-sm">借款人年龄</span> <span class="mr-3 text-[#333] text-sm">借款人年龄</span>
<div class="num-inputs ml-7"> <div class="num-inputs ml-7">
<el-input placeholder="最小年龄" <el-input placeholder="最小年龄" v-model.number="form.minimumAge"></el-input>
v-model.number="form.minimumAge"></el-input>
<span class="split">-</span> <span class="split">-</span>
<el-input placeholder="最大年龄" <el-input placeholder="最大年龄" v-model.number="form.maximumAge"></el-input>
v-model.number="form.maximumAge"></el-input>
<span class="unit">周岁</span> <span class="unit">周岁</span>
</div> </div>
</div> </div>
@ -67,19 +53,14 @@
<span class="label">1年龄</span> <span class="label">1年龄</span>
<span class="whether">是否启用</span> <span class="whether">是否启用</span>
<el-radio-group v-model="form.ageSelectedState"> <el-radio-group v-model="form.ageSelectedState">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div v-if="form.ageSelectedState === 795" <div v-if="form.ageSelectedState === 795" class="num-inputs ml-7">
class="num-inputs ml-7"> <el-input placeholder="最小年龄" v-model.number="form.minimumAge"></el-input>
<el-input placeholder="最小年龄"
v-model.number="form.minimumAge"></el-input>
<span class="split">-</span> <span class="split">-</span>
<el-input placeholder="最大年龄" <el-input placeholder="最大年龄" v-model.number="form.maximumAge"></el-input>
v-model.number="form.maximumAge"></el-input>
</div> </div>
</div> </div>
<div class="flex items-center h-[47px] mb-2"> <div class="flex items-center h-[47px] mb-2">
@ -87,18 +68,17 @@
<span class="label">2学历要求</span> <span class="label">2学历要求</span>
<span class="whether">是否启用</span> <span class="whether">是否启用</span>
<el-radio-group v-model="form.degreeSelectedStatus"> <el-radio-group v-model="form.degreeSelectedStatus">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<el-checkbox-group v-if="form.degreeSelectedStatus === 795" <el-checkbox-group v-if="form.degreeSelectedStatus === 795" class="mt-2 ml-5" v-model="form.educationalRequirements">
class="mt-2 ml-5" <el-checkbox
v-model="form.educationalRequirements"> v-for="(item, i) in config.find((e) => e.name === '个人产品-贷款对象')?.recordChildren[1]?.recordChildren[1]?.subject?.itemList"
<el-checkbox v-for="(item, i) in config.find((e) => e.name === '个人产品-贷款对象')?.recordChildren[1]?.recordChildren[1]?.subject?.itemList"
:key="i" :key="i"
:label="item.itemId">{{ item.options }}</el-checkbox> :label="item.itemId"
>{{ item.options }}</el-checkbox
>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
@ -107,18 +87,17 @@
<span class="label">3工作年限</span> <span class="label">3工作年限</span>
<span class="whether">是否启用</span> <span class="whether">是否启用</span>
<el-radio-group v-model="form.workingLifeSelectedState"> <el-radio-group v-model="form.workingLifeSelectedState">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<el-checkbox-group v-if="form.workingLifeSelectedState === 795" <el-checkbox-group v-if="form.workingLifeSelectedState === 795" class="mt-2 ml-5" v-model="form.currentWorkingLife">
class="mt-2 ml-5" <el-checkbox
v-model="form.currentWorkingLife"> v-for="(item, i) in config.find((e) => e.name === '个人产品-贷款对象')?.recordChildren[2]?.recordChildren[1]?.subject?.itemList"
<el-checkbox v-for="(item, i) in config.find((e) => e.name === '个人产品-贷款对象')?.recordChildren[2]?.recordChildren[1]?.subject?.itemList"
:key="i" :key="i"
:label="item.itemId">{{ item.options }}</el-checkbox> :label="item.itemId"
>{{ item.options }}</el-checkbox
>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
@ -126,179 +105,152 @@
<span class="label">4公积金/社保</span> <span class="label">4公积金/社保</span>
<span class="whether">是否启用</span> <span class="whether">是否启用</span>
<el-radio-group v-model="form.providentFundAndSocialSecurity"> <el-radio-group v-model="form.providentFundAndSocialSecurity">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
</template> </template>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="贷款用途" <el-form-item
label="贷款用途"
prop="loanPurpose" prop="loanPurpose"
:rules="[ :rules="[
{ required: true, message: '请选择贷款用途', trigger: 'change' }, { required: true, message: '请选择贷款用途', trigger: 'change' },
{ {
asyncValidator: async (rule, value, callback) => { asyncValidator: async (rule, value, callback) => {
if (value === 107 && !form.otherPurposesOfLoan) { if (value === 107 && !form.otherPurposesOfLoan) {
callback('请输入其他贷款用途') callback('请输入其他贷款用途');
} else { } else {
callback() callback();
} }
}, },
}, },
]"> ]"
>
<div class="flex-1"> <div class="flex-1">
<p class="field-name">选择本产品贷款资金的用途</p> <p class="field-name">选择本产品贷款资金的用途</p>
<el-radio-group v-model="form.loanPurpose"> <el-radio-group v-model="form.loanPurpose">
<template v-if="productType"> <template v-if="productType">
<el-radio v-for="(item, i) in config.find((e) => e.name === '企业产品-贷款用途')?.subject?.itemList" <el-radio v-for="(item, i) in config.find((e) => e.name === '企业产品-贷款用途')?.subject?.itemList" :key="i" :label="item.itemId">{{ item.options }}</el-radio>
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</template> </template>
<template v-else> <template v-else>
<el-radio v-for="(item, i) in config.find(e => e.name === '个人产品-贷款用途')?.recordChildren[0]?.subject?.itemList" <el-radio v-for="(item, i) in config.find((e) => e.name === '个人产品-贷款用途')?.recordChildren[0]?.subject?.itemList" :key="i" :label="item.itemId">{{
:key="i" item.options
:label="item.itemId">{{ item.options }}</el-radio> }}</el-radio>
</template> </template>
</el-radio-group> </el-radio-group>
<el-input v-if="form?.loanPurpose === 822" <el-input
v-if="form?.loanPurpose === 822"
class="w-[300px] ml-5" class="w-[300px] ml-5"
placeholder="请描述其他贷款用途可用于哪些方面。" placeholder="请描述其他贷款用途可用于哪些方面。"
maxlength="10" maxlength="10"
v-model="form.otherPurposesOfLoan"></el-input> v-model="form.otherPurposesOfLoan"
></el-input>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="担保方式" <el-form-item
label="担保方式"
prop="bankGuaranteeTypeIds" prop="bankGuaranteeTypeIds"
:rules="[ :rules="[
{ {
asyncValidator: async (rule, value, callback) => { asyncValidator: async (rule, value, callback) => {
if (form.mortgageSelectedStatus === 795 && !value.find(e => e > 22 && e < 33)) { if (form.mortgageSelectedStatus === 795 && !value.find((e) => e > 22 && e < 33)) {
callback('请选择抵押物') callback('请选择抵押物');
} else if (form.hypothecatedSelectedStatus === 795 && !value.find(e => e > 32 && e < 38)) { } else if (form.hypothecatedSelectedStatus === 795 && !value.find((e) => e > 32 && e < 38)) {
callback('请选择质押贷') callback('请选择质押贷');
} else { } else {
callback() callback();
} }
}, },
}, },
]"> ]"
>
<div class="flex-1"> <div class="flex-1">
<p class="field-name">选择本产品的担保种类</p> <p class="field-name">选择本产品的担保种类</p>
<div class="radio-wrap"> <div class="radio-wrap">
<span class="label">信用贷</span> <span class="label">信用贷</span>
<el-radio-group v-model="form.creditSelectedStatus"> <el-radio-group v-model="form.creditSelectedStatus">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="radio-wrap my-1"> <div class="radio-wrap my-1">
<span class="label">保证贷</span> <span class="label">保证贷</span>
<el-radio-group v-model="form.guaranteeLoanSelectedStatus"> <el-radio-group v-model="form.guaranteeLoanSelectedStatus">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<div class="radio-wrap"> <div class="radio-wrap">
<span class="label">抵押贷</span> <span class="label">抵押贷</span>
<el-radio-group v-model="form.mortgageSelectedStatus"> <el-radio-group v-model="form.mortgageSelectedStatus">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<el-checkbox-group v-if="form.mortgageSelectedStatus === 795" <el-checkbox-group v-if="form.mortgageSelectedStatus === 795" v-model="form.bankGuaranteeTypeIds">
v-model="form.bankGuaranteeTypeIds"> <el-checkbox
<el-checkbox v-for="(child, j) in config.find((e) => e.name === '担保方式')?.recordChildren[2]?.recordChildren[0]?.subject?.itemList" v-for="(child, j) in config.find((e) => e.name === '担保方式')?.recordChildren[2]?.recordChildren[0]?.subject?.itemList"
:key="j" :key="j"
:label="child.itemId">{{ child.options }}</el-checkbox> :label="child.itemId"
>{{ child.options }}</el-checkbox
>
</el-checkbox-group> </el-checkbox-group>
<div class="radio-wrap mt-1"> <div class="radio-wrap mt-1">
<span class="label">质押贷</span> <span class="label">质押贷</span>
<el-radio-group v-model="form.hypothecatedSelectedStatus"> <el-radio-group v-model="form.hypothecatedSelectedStatus">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</div> </div>
<el-checkbox-group v-if="form.hypothecatedSelectedStatus === 795" <el-checkbox-group v-if="form.hypothecatedSelectedStatus === 795" v-model="form.bankGuaranteeTypeIds">
v-model="form.bankGuaranteeTypeIds"> <el-checkbox
<el-checkbox v-for="(child, j) in config.find((e) => e.name === '担保方式')?.recordChildren[3]?.recordChildren[0]?.subject?.itemList" v-for="(child, j) in config.find((e) => e.name === '担保方式')?.recordChildren[3]?.recordChildren[0]?.subject?.itemList"
:key="j" :key="j"
:label="child.itemId">{{ child.options }}</el-checkbox> :label="child.itemId"
>{{ child.options }}</el-checkbox
>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="贷款额度" <el-form-item label="贷款额度" prop="minimumLoan" :rules="[{ required: true, message: '请输入贷款额度', trigger: 'blur' }]">
prop="minimumLoan"
:rules="[
{ required: true, message: '请输入贷款额度', trigger: 'blur' },
]">
<div class="flex-1"> <div class="flex-1">
<div class="num-inputs"> <div class="num-inputs">
<el-input placeholder="最小额度" <el-input placeholder="最小额度" v-model="form.minimumLoan"></el-input>
v-model="form.minimumLoan"></el-input>
<span class="split">-</span> <span class="split">-</span>
<el-input placeholder="最高额度" <el-input placeholder="最高额度" v-model="form.loanCeiling"></el-input>
v-model="form.loanCeiling"></el-input>
<span class="unit">万元</span> <span class="unit">万元</span>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="贷款利率" <el-form-item label="贷款利率" prop="minimumAprOnLoan" :rules="[{ required: true, message: '请输入贷款利率', trigger: 'blur' }]">
prop="minimumAprOnLoan"
:rules="[
{ required: true, message: '请输入贷款利率', trigger: 'blur' },
]">
<div class="flex-1"> <div class="flex-1">
<div class="num-inputs"> <div class="num-inputs">
<el-input placeholder="最小年利率" <el-input placeholder="最小年利率" min="0" v-model="form.minimumAprOnLoan"></el-input>
min="0"
v-model="form.minimumAprOnLoan"></el-input>
<span class="split">-</span> <span class="split">-</span>
<el-input placeholder="最高年利率" <el-input placeholder="最高年利率" min="0" v-model="form.maximumAnnualInterestRate"></el-input>
min="0"
v-model="form.maximumAnnualInterestRate"></el-input>
<span class="unit">%</span> <span class="unit">%</span>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="贷款期限" <el-form-item label="贷款期限" prop="minimumTermOfLoan" :rules="[{ required: true, message: '请输入贷款期限', trigger: 'blur' }]">
prop="minimumTermOfLoan"
:rules="[
{ required: true, message: '请输入贷款期限', trigger: 'blur' },
]">
<div class="flex-1"> <div class="flex-1">
<div class="num-inputs"> <div class="num-inputs">
<el-input placeholder="最小期限" <el-input placeholder="最小期限" v-model="form.minimumTermOfLoan"></el-input>
v-model="form.minimumTermOfLoan"></el-input>
<span class="split">-</span> <span class="split">-</span>
<el-input placeholder="最大期限" <el-input placeholder="最大期限" v-model="form.maximumTermOfLoan"></el-input>
v-model="form.maximumTermOfLoan"></el-input>
<span class="unit"></span> <span class="unit"></span>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="还款方式" <el-form-item label="还款方式" prop="modeRepayment">
prop="modeRepayment">
<div class="flex-1"> <div class="flex-1">
<p class="field-name">选择本产品可以选择的还款方式</p> <p class="field-name">选择本产品可以选择的还款方式</p>
<el-checkbox-group v-model="form.modeRepayment"> <el-checkbox-group v-model="form.modeRepayment">
<el-checkbox v-for="(item, i) in config.find((e) => e.name === '还款方式')?.subject?.itemList" <el-checkbox v-for="(item, i) in config.find((e) => e.name === '还款方式')?.subject?.itemList" :key="i" :label="item.itemId">{{ item.options }}</el-checkbox>
:key="i"
:label="item.itemId">{{ item.options }}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="提前还款" <el-form-item label="提前还款" prop="whetherToSupportEarlyRepayment">
prop="whetherToSupportEarlyRepayment">
<div class="flex-1 flex items-center"> <div class="flex-1 flex items-center">
<el-switch v-model="form.whetherToSupportEarlyRepayment" /> <el-switch v-model="form.whetherToSupportEarlyRepayment" />
<p class="tips ml-4">本产品是否支持提前还款</p> <p class="tips ml-4">本产品是否支持提前还款</p>
@ -306,14 +258,11 @@
</el-form-item> </el-form-item>
</div> </div>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit(formRef)">完成提交风控经理</div>
@click="submit(formRef)">完成提交风控经理</div>
</div> </div>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
<el-tab-pane v-if="id" <el-tab-pane v-if="id" label="产品详情" name="tab2">
label="产品详情"
name="tab2">
<div class="h-[calc(100vh-170px)] pr-1 overflow-auto"> <div class="h-[calc(100vh-170px)] pr-1 overflow-auto">
<info /> <info />
</div> </div>
@ -330,9 +279,9 @@ import { findById, save, update, elementDetail } from '@/api/bank';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment'; import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import { handleId, isIllegalNum, getIds, whethers, getUsername } from '@/utils/common'; import { handleId, isIllegalNum, getIds, whethers, getUsername } from '@/utils/common';
import Info from './Info.vue';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import { getStat } from '@/store/useProduct'; import { getStat } from '@/store/useProduct';
import Info from './Info.vue';
const emit = defineEmits(['getList']); const emit = defineEmits(['getList']);
interface RuleForm { interface RuleForm {
@ -377,7 +326,7 @@ const info = ref<Record<string, any>>(null);
const formRef = ref<FormInstance>(); const formRef = ref<FormInstance>();
const userName = ref<string>(); const userName = ref<string>();
let form = reactive<RuleForm>({ const form = reactive<RuleForm>({
...getIds(), ...getIds(),
productDefinition: '', productDefinition: '',
productName: '', productName: '',
@ -472,51 +421,51 @@ const addRecord = async (data: Record<string, any>) => {
const isEnterprise = productType === 1; const isEnterprise = productType === 1;
const preIds = `1,${Cookies.get('sand-level')},41,${productType ? 45 : 44}`; // 1id/44/45 const preIds = `1,${Cookies.get('sand-level')},41,${productType ? 45 : 44}`; // 1id/44/45
const lcRule: Array<Record<string, any>> = [ const lcRule: Array<Record<string, any>> = [
handleId(48, 1, data.productDefinition, preIds + ',48', 3), handleId(48, 1, data.productDefinition, `${preIds},48`, 3),
handleId(49, 2, data.productName, preIds + ',49', 3), handleId(49, 2, data.productName, `${preIds},49`, 3),
handleId(50, 3, 1, preIds + ',50', 1), handleId(50, 3, 1, `${preIds},50`, 1),
]; ];
// //
if (isEnterprise) { if (isEnterprise) {
// //
lcRule.push( lcRule.push(
handleId(62, 7, data.productObject, preIds + ',61,62', 1), handleId(62, 7, data.productObject, `${preIds},61,62`, 1),
handleId(63, 8, data.minimumAge + '~' + data.maximumAge + '', preIds + ',61,63', 5), handleId(63, 8, `${data.minimumAge}~${data.maximumAge}`, `${preIds},61,63`, 5),
handleId(65, 19, data.loanPurpose, preIds + ',65', 1), handleId(65, 19, data.loanPurpose, `${preIds},65`, 1),
); );
} else { } else {
// //
data.ageSelectedState && lcRule.push(handleId(1235, 324, data.ageSelectedState, preIds + ',51,1234,1235', 1)); 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.ageSelectedState === 795 && lcRule.push(handleId(1236, 41, `${data.minimumAge}~${data.maximumAge}`, `${preIds},51,1234,1236`, 5));
data.degreeSelectedStatus && lcRule.push(handleId(1238, 324, data.degreeSelectedStatus, preIds + ',51,1237,1238', 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.degreeSelectedStatus === 795 && lcRule.push(handleId(1239, 42, data.educationalRequirements, `${preIds},51,1237,1239`, 1));
data.workingLifeSelectedState && lcRule.push(handleId(1241, 324, data.workingLifeSelectedState, preIds + ',51,1240,1241', 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.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)); // 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)); lcRule.push(handleId(1316, 328, data.loanPurpose, `${preIds},52,1316`, 1));
data.loanPurpose === 822 && lcRule.push(handleId(1317, 11, data.otherPurposesOfLoan, preIds + ',52,1317', 3)); data.loanPurpose === 822 && lcRule.push(handleId(1317, 11, data.otherPurposesOfLoan, `${preIds},52,1317`, 3));
} }
// //
data.creditSelectedStatus && lcRule.push(handleId(108, 324, data.creditSelectedStatus, preIds + ',53,108', 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.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.mortgageSelectedStatus && lcRule.push(handleId(1277, 324, data.mortgageSelectedStatus, `${preIds},53,110,1277`, 1));
data.hypothecatedSelectedStatus && lcRule.push(handleId(1278, 324, data.hypothecatedSelectedStatus, preIds + ',53,111,1278', 1)); data.hypothecatedSelectedStatus && lcRule.push(handleId(1278, 324, data.hypothecatedSelectedStatus, `${preIds},53,111,1278`, 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.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)); 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( lcRule.push(
handleId(54, 15, data.minimumLoan + '~' + data.loanCeiling, preIds + ',54', 5), handleId(54, 15, `${data.minimumLoan}~${data.loanCeiling}`, `${preIds},54`, 5),
handleId(55, 16, data.minimumAprOnLoan + '~' + data.maximumAnnualInterestRate, preIds + ',55', 5), handleId(55, 16, `${data.minimumAprOnLoan}~${data.maximumAnnualInterestRate}`, `${preIds},55`, 5),
handleId(56, 17, data.minimumTermOfLoan + '~' + data.maximumTermOfLoan, preIds + ',56', 5), handleId(56, 17, `${data.minimumTermOfLoan}~${data.maximumTermOfLoan}`, `${preIds},56`, 5),
handleId(57, 18, data.modeRepayment, preIds + ',57', 1), handleId(57, 18, data.modeRepayment, `${preIds},57`, 1),
); );
lcRule.push(handleId(58, 140, data.whetherToSupportEarlyRepayment ? 345 : 346, preIds + ',58', 1)); lcRule.push(handleId(58, 140, data.whetherToSupportEarlyRepayment ? 345 : 346, `${preIds},58`, 1));
await addOperation({ await addOperation({
...getIds(), ...getIds(),

@ -1,34 +1,17 @@
<template> <template>
<div> <div>
<el-tabs v-model="curTab"> <el-tabs v-model="curTab">
<el-tab-pane label="审批" <el-tab-pane label="审批" name="tab1">
name="tab1">
<div class="h-[calc(100vh-170px)] pr-1 overflow-auto"> <div class="h-[calc(100vh-170px)] pr-1 overflow-auto">
<info ref="infoRef" <info ref="infoRef" @updateAudits="updateAudits" />
@updateAudits="updateAudits" /> <el-form ref="formRef" :model="form" :rules="rules" label-width="100px" label-suffix="" class="form pt-5 mt-5 border-t border-t-solid border-t-[#EDF1F5]" status-icon>
<el-form ref="formRef" <el-form-item label="审批意见" prop="status">
:model="form" <el-select v-model="form.status" placeholder="请选择">
:rules="rules" <el-option v-for="(item, i) in autids" :key="i" :label="item.name" :value="item.id" />
label-width="100px"
label-suffix=":"
class="form pt-5 mt-5 border-t border-t-solid border-t-[#EDF1F5]"
status-icon>
<el-form-item label="审批意见"
prop="status">
<el-select v-model="form.status"
placeholder="请选择">
<el-option v-for="(item, i) in autids"
:key="i"
:label="item.name"
:value="item.id" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="意见描述" <el-form-item label="意见描述" prop="opinionDescription">
prop="opinionDescription"> <el-input type="textarea" placeholder="审批意见500字以内。" maxlength="500" v-model="form.opinionDescription"></el-input>
<el-input type="textarea"
placeholder="审批意见500字以内。"
maxlength="500"
v-model="form.opinionDescription"></el-input>
</el-form-item> </el-form-item>
<div class="flex flex-col items-end"> <div class="flex flex-col items-end">
<div class="mb-[18px] text-sm leading-[1.6]"> <div class="mb-[18px] text-sm leading-[1.6]">
@ -37,16 +20,12 @@
</div> </div>
<div class="inline-flex items-center mb-[18px] text-sm leading-[1.6]"> <div class="inline-flex items-center mb-[18px] text-sm leading-[1.6]">
<span class="text-sm font-semibold">审批员</span> <span class="text-sm font-semibold">审批员</span>
<span v-if="signed" <span v-if="signed" class="text-lg text-[#f00]">{{ signed }}</span>
class="text-lg text-[#f00]">{{ signed }}</span> <span v-else class="py-2 px-5 ml-1 text-sm text-white bg-[#006BFF] cursor-pointer" @click="sign">签章</span>
<span v-else
class="py-2 px-5 ml-1 text-sm text-white bg-[#006BFF] cursor-pointer"
@click="sign">签章</span>
</div> </div>
</div> </div>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit(formRef)">审批</div>
@click="submit(formRef)">审批</div>
</div> </div>
</el-form> </el-form>
</div> </div>
@ -60,7 +39,6 @@ import { ref, computed, reactive, onMounted, watch } from 'vue';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import type { FormInstance, FormRules } from 'element-plus'; import type { FormInstance, FormRules } from 'element-plus';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import Info from './Info.vue';
import { handleId, getIds, getNow, getUsername } from '@/utils/common'; import { handleId, getIds, getNow, getUsername } from '@/utils/common';
import { examineAndApprove } from '@/api/bank'; import { examineAndApprove } from '@/api/bank';
import { getOperationTime } from '@/api/config'; import { getOperationTime } from '@/api/config';
@ -68,6 +46,7 @@ import { addOperation } from '@/api/judgment';
import dayjs from 'dayjs'; import dayjs from 'dayjs';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import { productState, getStat } from '@/store/useProduct'; import { productState, getStat } from '@/store/useProduct';
import Info from './Info.vue';
const emit = defineEmits(['getList']); const emit = defineEmits(['getList']);
interface RuleForm { interface RuleForm {

@ -1,34 +1,24 @@
<template> <template>
<div class="block card-list flex py-0"> <div class="block card-list flex py-0">
<div class="left"> <div class="left">
<div v-if="role == 41" <div
v-if="role == 41"
class="flex justify-center items-center py-2 mb-3 text-sm text-[#006BFF] bg-[rgba(0,107,255,0.1)] border border-solid border-[#006BFF] rounded-[10px] cursor-pointer" class="flex justify-center items-center py-2 mb-3 text-sm text-[#006BFF] bg-[rgba(0,107,255,0.1)] border border-solid border-[#006BFF] rounded-[10px] cursor-pointer"
@click="toAdd"> @click="toAdd"
<el-icon class="mr-1" >
:size="16" <el-icon class="mr-1" :size="16" color="#006BFF">
color="#006BFF">
<Plus /> <Plus />
</el-icon> </el-icon>
新增产品 新增产品
</div> </div>
<div class="flex justify-end mb-4"> <div class="flex justify-end mb-4">
<img src="@/assets/images/fold.png" <img src="@/assets/images/fold.png" alt="" class="cursor-pointer" @click="toList" />
alt=""
class="cursor-pointer"
@click="toList" />
</div> </div>
<ul class="products"> <ul class="products">
<li v-for="(item, i) in list" <li v-for="(item, i) in list" :key="i" :class="{ active: item.id === id }" @click="switchProduct(item)">
:key="i" <el-popconfirm v-if="role == 41" title="您确定删除吗?" @confirm="handleDelete(item.id)">
:class="{ active: item.id === id }"
@click="switchProduct(item)">
<el-popconfirm v-if="role == 41"
title="您确定删除吗?"
@confirm="handleDelete(item.id)">
<template #reference> <template #reference>
<img src="@/assets/images/trash.png" <img src="@/assets/images/trash.png" alt="" class="del" />
alt=""
class="del" />
</template> </template>
</el-popconfirm> </el-popconfirm>
@ -40,41 +30,31 @@
</ul> </ul>
</div> </div>
<div class="right"> <div class="right">
<!-- <component :is="currentSubApp" <config v-if="action === 'config'" :key="actionKey" @getList="getList"></config>
@getList="getList"></component> -->
<config v-if="action === 'config'"
:key="actionKey"
@getList="getList"></config>
<detail v-if="action === 'detail'"></detail> <detail v-if="action === 'detail'"></detail>
<add v-else-if="action === 'add'" <add v-else-if="action === 'add'" :key="actionKey" @getList="getList"></add>
:key="actionKey" <approve v-else-if="action === 'approve'" :key="actionKey" @getList="getList"></approve>
@getList="getList"></add>
<approve v-else-if="action === 'approve'"
:key="actionKey"
@getList="getList"></approve>
</div> </div>
</div> </div>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { computed, onMounted, ref, watch, defineAsyncComponent } from 'vue'; import { computed, onMounted, ref, watch } from 'vue';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { Plus } from '@element-plus/icons-vue'; import { Plus } from '@element-plus/icons-vue';
import { bankingProductsList, batchDeletion } from '@/api/bank'; import { bankingProductsList, batchDeletion } from '@/api/bank';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import { getStatus } from '@/store/useProduct'; import { getStatus } from '@/store/useProduct';
import { getIds } from '@/utils/common';
import Config from './Config.vue'; import Config from './Config.vue';
import Detail from './Detail.vue'; import Detail from './Detail.vue';
import Add from './Add.vue'; import Add from './Add.vue';
import Approve from './Approve.vue'; import Approve from './Approve.vue';
import { getIds } from '@/utils/common';
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
const action = ref<any>(''); const action = ref<any>('');
// const modules: any = import.meta.glob('./*.vue');
// let currentSubApp = defineAsyncComponent(modules[`./${route.params.action}.vue`]);
const list = ref<Array<any>>([]); const list = ref<Array<any>>([]);
const loading = ref<boolean>(false); const loading = ref<boolean>(false);
const productType = computed(() => route.query.type); // / const productType = computed(() => route.query.type); // /
@ -102,9 +82,7 @@ const getList = async (refresh?: number) => {
loading.value = false; loading.value = false;
} }
}; };
onMounted(() => { onMounted(getList);
getList();
});
watch( watch(
route, route,

File diff suppressed because it is too large Load Diff

@ -1,8 +1,7 @@
<template> <template>
<div> <div>
<el-tabs v-model="curTab"> <el-tabs v-model="curTab">
<el-tab-pane :label="status" <el-tab-pane :label="status" name="tab1">
name="tab1">
<div class="h-[calc(100vh-170px)] pr-1 overflow-auto"> <div class="h-[calc(100vh-170px)] pr-1 overflow-auto">
<info /> <info />
</div> </div>

@ -1,14 +1,12 @@
<template> <template>
<div class="info my-2"> <div class="info my-2">
<h1 v-if="riskInfo" <h1 v-if="riskInfo" class="mb-3 text-xl font-semibold text-center">{{ info.productName }}产品手册</h1>
class="mb-3 text-xl font-semibold text-center">{{ info.productName }}产品手册</h1>
<h6 class="step-name">{{ route.params.action !== 'config' ? '一、' : '' }}产品定义</h6> <h6 class="step-name">{{ route.params.action !== 'config' ? '一、' : '' }}产品定义</h6>
<p class="text">{{ info.productDefinition }}</p> <p class="text">{{ info.productDefinition }}</p>
<h6 class="step-name mt-5">{{ route.params.action !== 'config' ? '二、' : '' }}产品要素</h6> <h6 class="step-name mt-5">{{ route.params.action !== 'config' ? '二、' : '' }}产品要素</h6>
<p class="text">产品名称{{ info.productName }}</p> <p class="text">产品名称{{ info.productName }}</p>
<p class="text">贷款币种人民币</p> <p class="text">贷款币种人民币</p>
<p v-if="info.loanPurpose" <p v-if="info.loanPurpose" class="text">
class="text">
贷款用途{{ 贷款用途{{
info.loanPurpose === '购房' info.loanPurpose === '购房'
? '可用于住房按揭贷款、二手房住房按揭贷款。' ? '可用于住房按揭贷款、二手房住房按揭贷款。'
@ -23,11 +21,9 @@
: info.otherPurposesOfLoan : info.otherPurposesOfLoan
}} }}
</p> </p>
<div v-if="info.guarantyStyle" <div v-if="info.guarantyStyle" class="flex my-2">
class="flex my-2">
<p class="text whitespace-nowrap">担保方式</p> <p class="text whitespace-nowrap">担保方式</p>
<p v-html="info.guarantyStyle" <p v-html="info.guarantyStyle" class="text"></p>
class="text"></p>
</div> </div>
<p class="text">贷款期限{{ info.minimumTermOfLoan }} - {{ info.maximumTermOfLoan }}</p> <p class="text">贷款期限{{ info.minimumTermOfLoan }} - {{ info.maximumTermOfLoan }}</p>
@ -35,132 +31,85 @@
<p class="text">贷款利率{{ info.minimumAprOnLoan }}% - {{ info.maximumAnnualInterestRate }}%</p> <p class="text">贷款利率{{ info.minimumAprOnLoan }}% - {{ info.maximumAnnualInterestRate }}%</p>
<p class="text">还款方式{{ info.modeRepayment }}</p> <p class="text">还款方式{{ info.modeRepayment }}</p>
<div v-if="info.prospectiveBorrowerText" <div v-if="info.prospectiveBorrowerText" class="flex my-2">
class="flex my-2">
<p class="text whitespace-nowrap">适用条件</p> <p class="text whitespace-nowrap">适用条件</p>
<div class="text" <div class="text" v-html="info.prospectiveBorrowerText"></div>
v-html="info.prospectiveBorrowerText"></div>
</div> </div>
<template v-if="riskInfo"> <template v-if="riskInfo">
<h6 class="step-name mt-5">{{ route.params.action !== 'add' ? '三、' : '' }}材料要求</h6> <h6 class="step-name mt-5">{{ route.params.action !== 'add' ? '三、' : '' }}材料要求</h6>
<p v-if="riskInfo?.accountMaterials" <p v-if="riskInfo?.accountMaterials" class="text">办理账户-提供材料{{ riskInfo?.accountMaterials }}</p>
class="text">办理账户-提供材料{{ riskInfo?.accountMaterials }}</p> <p v-if="riskInfo?.sendingAccount" class="text">办理账户-发放账户借记卡或放款专户</p>
<p v-if="riskInfo?.sendingAccount" <p v-if="riskInfo?.loanApplicationMethod" class="text">贷款申请-申请方式{{ riskInfo?.loanApplicationMethod }}</p>
class="text">办理账户-发放账户借记卡或放款专户</p> <p v-if="riskInfo?.borrowerMaterial" class="text">贷款申请-提供材料-借款人材料{{ riskInfo?.borrowerMaterial }}</p>
<p v-if="riskInfo?.loanApplicationMethod"
class="text">贷款申请-申请方式{{ riskInfo?.loanApplicationMethod }}</p>
<p v-if="riskInfo?.borrowerMaterial"
class="text">贷款申请-提供材料-借款人材料{{ riskInfo?.borrowerMaterial }}</p>
<template v-if="info.productType"> <template v-if="info.productType">
<p v-if="riskInfo?.enterpriseMaterial" <p v-if="riskInfo?.enterpriseMaterial" class="text">贷款申请-提供材料-企业材料{{ riskInfo?.enterpriseMaterial }}</p>
class="text">贷款申请-提供材料-企业材料{{ riskInfo?.enterpriseMaterial }}</p> <p v-if="riskInfo?.collateral" class="text">贷款申请-提供材料-抵押物{{ riskInfo?.collateral }}</p>
<p v-if="riskInfo?.collateral"
class="text">贷款申请-提供材料-抵押物{{ riskInfo?.collateral }}</p>
</template> </template>
<template v-else> <template v-else>
<p v-if="riskInfo?.mateMaterial" <p v-if="riskInfo?.mateMaterial" class="text">贷款申请-提供材料-配偶材料{{ riskInfo?.mateMaterial }}</p>
class="text">贷款申请-提供材料-配偶材料{{ riskInfo?.mateMaterial }}</p> <p v-if="riskInfo?.businessMaterials" class="text">贷款申请-提供材料-经营类材料{{ riskInfo?.businessMaterials }}</p>
<p v-if="riskInfo?.businessMaterials"
class="text">贷款申请-提供材料-经营类材料{{ riskInfo?.businessMaterials }}</p>
</template> </template>
<p v-if="riskInfo?.supplementaryMaterials" <p v-if="riskInfo?.supplementaryMaterials" class="text">贷款申请-提供材料-补充材料{{ riskInfo?.supplementaryMaterials }}</p>
class="text">贷款申请-提供材料-补充材料{{ riskInfo?.supplementaryMaterials }}</p> <p v-if="riskInfo?.runBatchObject" class="text">系统跑批准入风控策略-跑批对象{{ riskInfo?.runBatchObject }}</p>
<p v-if="riskInfo?.runBatchObject"
class="text">系统跑批准入风控策略-跑批对象{{ riskInfo?.runBatchObject }}</p>
<template v-if="info.bankRiskControlAllocationTacticsList && info.bankRiskControlAllocationTacticsList.length"> <template v-if="info.bankRiskControlAllocationTacticsList && info.bankRiskControlAllocationTacticsList.length">
<template v-for="(item, i) in info.bankRiskControlAllocationTacticsList"> <template v-for="(item, i) in info.bankRiskControlAllocationTacticsList">
<p v-if="item.tacticsSelectedStatus" <p v-if="item.tacticsSelectedStatus" :key="i" class="text flex">
:key="i"
class="text flex">
系统跑批{{ item.pointName }}{{ item.tacticsName || '无需跑批' }} 系统跑批{{ item.pointName }}{{ item.tacticsName || '无需跑批' }}
<img v-if="item.tacticsName" <img v-if="item.tacticsName" src="@/assets/svgs/preview.svg" alt="" class="cursor-pointer ml-2" @click="preview(item, i)" />
src="@/assets/svgs/preview.svg"
alt=""
class="cursor-pointer ml-2"
@click="preview(item, i)">
</p> </p>
</template> </template>
</template> </template>
<template v-if="info.creditScoringStrategyList && info.creditScoringStrategyList.length"> <template v-if="info.creditScoringStrategyList && info.creditScoringStrategyList.length">
<template v-for="(item, i) in info.creditScoringStrategyList"> <template v-for="(item, i) in info.creditScoringStrategyList">
<p v-if="item.tacticsSelectedStatus" <p v-if="item.tacticsSelectedStatus" :key="i" class="text flex">
:key="i"
class="text flex">
系统跑批{{ item.pointName }}{{ item.tacticsName || '无需跑批' }} 系统跑批{{ item.pointName }}{{ item.tacticsName || '无需跑批' }}
<img v-if="item.tacticsName" <img v-if="item.tacticsName" src="@/assets/svgs/preview.svg" alt="" class="cursor-pointer ml-2" @click="previewCredits(item, i)" />
src="@/assets/svgs/preview.svg"
alt=""
class="cursor-pointer ml-2"
@click="previewCredits(item, i)">
</p> </p>
</template> </template>
</template> </template>
<p v-if="info?.personalRiskDegreeStrategySelectedStatus === 803 || info?.enterpriseRiskDegreeStrategySelectedStatus === 803" <p v-if="info?.personalRiskDegreeStrategySelectedStatus === 803 || info?.enterpriseRiskDegreeStrategySelectedStatus === 803" class="text">
class="text">系统跑批风险度策略 系统跑批风险度策略
{{ info?.personalRiskDegreeStrategySelectedStatus === 803 ? '个人风险度策略' : '' }} {{ info?.personalRiskDegreeStrategySelectedStatus === 803 ? '个人风险度策略' : '' }}
{{ info?.personalRiskDegreeStrategySelectedStatus === 803 && info?.enterpriseRiskDegreeStrategySelectedStatus === 803 ? ',' : '' }} {{ info?.personalRiskDegreeStrategySelectedStatus === 803 && info?.enterpriseRiskDegreeStrategySelectedStatus === 803 ? ',' : '' }}
{{ info?.enterpriseRiskDegreeStrategySelectedStatus === 803 ? '企业风险度策略' : '' }}</p> {{ info?.enterpriseRiskDegreeStrategySelectedStatus === 803 ? '企业风险度策略' : '' }}
</p>
<template v-if="info.interestRatePricingModelList && info.interestRatePricingModelList.length"> <template v-if="info.interestRatePricingModelList && info.interestRatePricingModelList.length">
<template v-for="(item, i) in info.interestRatePricingModelList"> <template v-for="(item, i) in info.interestRatePricingModelList">
<p v-if="item.tacticsSelectedStatus" <p v-if="item.tacticsSelectedStatus" :key="i" class="text flex">
:key="i"
class="text flex">
系统跑批{{ item.pointName }}{{ item.tacticsName || '无需跑批' }} 系统跑批{{ item.pointName }}{{ item.tacticsName || '无需跑批' }}
<img v-if="item.tacticsName" <img v-if="item.tacticsName" src="@/assets/svgs/preview.svg" alt="" class="cursor-pointer ml-2" @click="previewRate(item, i)" />
src="@/assets/svgs/preview.svg"
alt=""
class="cursor-pointer ml-2"
@click="previewRate(item, i)">
</p> </p>
</template> </template>
</template> </template>
<p v-if="info?.enterpriseQuotaModelStr" <p v-if="info?.enterpriseQuotaModelStr" class="text">系统跑批企业额度模型{{ info?.enterpriseQuotaModelStr }}</p>
class="text">系统跑批企业额度模型{{ info?.enterpriseQuotaModelStr }}</p>
<p v-if="riskInfo?.dueDiligenceMode" <p v-if="riskInfo?.dueDiligenceMode" class="text">尽职调查-尽调方式{{ riskInfo?.dueDiligenceMode }}</p>
class="text">尽职调查-尽调方式{{ riskInfo?.dueDiligenceMode }}</p> <p v-if="riskInfo?.dueDiligenceContent" class="text">尽职调查-尽调内容{{ riskInfo?.dueDiligenceContent }}</p>
<p v-if="riskInfo?.dueDiligenceContent" <p v-if="riskInfo?.reviewContent" class="text">贷款审查-审查内容{{ riskInfo?.reviewContent }}</p>
class="text">尽职调查-尽调内容{{ riskInfo?.dueDiligenceContent }}</p> <p v-if="riskInfo?.reviewSignature" class="text">贷款审查-审查签字{{ riskInfo?.reviewSignature }}</p>
<p v-if="riskInfo?.reviewContent" <p v-if="riskInfo?.reviewApproveContent" class="text">贷款审批-审批内容{{ riskInfo?.reviewApproveContent }}</p>
class="text">贷款审查-审查内容{{ riskInfo?.reviewContent }}</p> <p v-if="riskInfo?.approvalSignature" class="text">贷款审批-审批签字{{ riskInfo?.approvalSignature }}</p>
<p v-if="riskInfo?.reviewSignature" <p v-if="riskInfo?.contractMaterials" class="text">签订合同-提供的材料{{ riskInfo?.contractMaterials }}</p>
class="text">贷款审查-审查签字{{ riskInfo?.reviewSignature }}</p> <p v-if="riskInfo?.loanContract" class="text">需要签订借贷合同{{ riskInfo?.loanContract }}</p>
<p v-if="riskInfo?.reviewApproveContent" <p v-if="riskInfo?.mortgageContract" class="text">需要签订抵押合同{{ riskInfo?.mortgageContract }}</p>
class="text">贷款审批-审批内容{{ riskInfo?.reviewApproveContent }}</p> <p v-if="riskInfo?.pledgeContract" class="text">需要签订质押合同{{ riskInfo?.pledgeContract }}</p>
<p v-if="riskInfo?.approvalSignature" <p v-if="riskInfo?.guaranteeContract" class="text">需要签订担保合同{{ riskInfo?.guaranteeContract }}</p>
class="text">贷款审批-审批签字{{ riskInfo?.approvalSignature }}</p>
<p v-if="riskInfo?.contractMaterials"
class="text">签订合同-提供的材料{{ riskInfo?.contractMaterials }}</p>
<p v-if="riskInfo?.loanContract"
class="text">需要签订借贷合同{{ riskInfo?.loanContract }}</p>
<p v-if="riskInfo?.mortgageContract"
class="text">需要签订抵押合同{{ riskInfo?.mortgageContract }}</p>
<p v-if="riskInfo?.pledgeContract"
class="text">需要签订质押合同{{ riskInfo?.pledgeContract }}</p>
<p v-if="riskInfo?.guaranteeContract"
class="text">需要签订担保合同{{ riskInfo?.guaranteeContract }}</p>
<template v-if="info.postLoanSelectionStrategyList && info.postLoanSelectionStrategyList.length"> <template v-if="info.postLoanSelectionStrategyList && info.postLoanSelectionStrategyList.length">
<template v-for="(item, i) in info.postLoanSelectionStrategyList"> <template v-for="(item, i) in info.postLoanSelectionStrategyList">
<p v-if="item.tacticsSelectedStatus" <p v-if="item.tacticsSelectedStatus" :key="i" class="text flex">
:key="i"
class="text flex">
系统跑批{{ item.pointName }}{{ item.tacticsName || '无需跑批' }} 系统跑批{{ item.pointName }}{{ item.tacticsName || '无需跑批' }}
<img v-if="item.tacticsName" <img v-if="item.tacticsName" src="@/assets/svgs/preview.svg" alt="" class="cursor-pointer ml-2" @click="previewAfter(item, i)" />
src="@/assets/svgs/preview.svg"
alt=""
class="cursor-pointer ml-2"
@click="previewAfter(item, i)">
</p> </p>
</template> </template>
</template> </template>
@ -180,11 +129,8 @@
</template> </template>
</div> </div>
<div v-if="approvals.length" <div v-if="approvals.length" class="mt-10">
class="mt-10"> <div v-for="(item, i) in approvals" :key="i" class="audit">
<div v-for="(item, i) in approvals"
:key="i"
class="audit">
<div class="line"> <div class="line">
<span class="field">审批意见</span> <span class="field">审批意见</span>
<span class="status">{{ getStatus(item?.status) }}</span> <span class="status">{{ getStatus(item?.status) }}</span>
@ -198,15 +144,8 @@
</div> </div>
</div> </div>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="curPreviewTitle" size="100%" class="model-drawer">
:title="curPreviewTitle" <component v-if="loadedComponents[activeComponent]" :is="loadedComponents[activeComponent]" v-model:row="curRow" disabled :key="curRow.strategyId" />
size="100%"
class="model-drawer">
<component v-if="loadedComponents[activeComponent]"
:is="loadedComponents[activeComponent]"
v-model:row="curRow"
disabled
:key="curRow.strategyId" />
</el-drawer> </el-drawer>
</template> </template>
@ -279,14 +218,13 @@ const getDetail = async () => {
}); });
approvals.value = res.list; approvals.value = res.list;
emit('updateAudits', res.list.length); emit('updateAudits', res.list.length);
} finally { } catch (e) {}
}
} }
}; };
watch( watch(
() => route.query, () => route.query,
() => { () => {
getDetail(); route.path.startsWith('/product/bank') && getDetail();
}, },
{ {
immediate: true, immediate: true,

@ -1,134 +1,69 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="params.keyWord" <search v-model="params.keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-checkbox-group v-if="params.roleId == 42" <el-checkbox-group v-if="params.roleId == 42" class="mr-5" v-model="productTypes">
class="mr-5"
v-model="productTypes">
<el-checkbox :label="0">个人</el-checkbox> <el-checkbox :label="0">个人</el-checkbox>
<el-checkbox :label="1">企业</el-checkbox> <el-checkbox :label="1">企业</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
<div class="select"> <div class="select">
<el-select v-model="params.guarantyStyleId" <el-select v-model="params.guarantyStyleId" placeholder="担保方式" size="large">
placeholder="担保方式" <el-option label="担保方式" value="" />
size="large"> <el-option v-for="item in guarantees" :key="item.id" :label="item.name" :value="item.id" />
<el-option label="担保方式"
value="" />
<el-option v-for="item in guarantees"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select> </el-select>
<img src="@/assets/images/7.png" <img src="@/assets/images/7.png" alt="" class="icon" />
alt=""
class="icon" />
</div> </div>
<div class="select"> <div class="select">
<el-select v-model="params.status" <el-select v-model="params.status" placeholder="产品进度" size="large">
placeholder="产品进度" <el-option v-for="item in params.roleId == 43 ? getExpertStatus() : productState.status" :key="item.id" :label="item.name" :value="item.id" />
size="large">
<el-option v-for="item in params.roleId == 43 ? getExpertStatus() : productState.status"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select> </el-select>
<img src="@/assets/images/8.png" <img src="@/assets/images/8.png" alt="" class="icon" />
alt=""
class="icon" />
</div> </div>
<div v-if="params.roleId == 41" <div v-if="params.roleId == 41" class="add-btn" @click="toAdd">
class="add-btn" <img src="@/assets/images/plus.png" alt="" class="icon" />
@click="toAdd">
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增产品 新增产品
</div> </div>
<img src="@/assets/images/9.png" <img src="@/assets/images/9.png" alt="" class="ml-4 cursor-pointer" @click="toCardList" />
alt=""
class="ml-4 cursor-pointer"
@click="toCardList" />
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @sort-change="handleSort">
v-loading="loading" <el-table-column prop="productName" label="产品名称" min-width="110"></el-table-column>
:data="list" <el-table-column prop="productNumber" label="产品编号" min-width="80"></el-table-column>
@sort-change="handleSort"> <el-table-column v-if="params.roleId != 41" prop="loanCeiling" :label="params.roleId == 42 ? '贷款对象' : '产品对象'" min-width="80">
<el-table-column prop="productName"
label="产品名称"
min-width="110"></el-table-column>
<el-table-column prop="productNumber"
label="产品编号"
min-width="80"></el-table-column>
<el-table-column v-if="params.roleId != 41"
prop="loanCeiling"
:label="params.roleId == 42 ? '贷款对象' : '产品对象'"
min-width="80">
<template #default="{ row }"> <template #default="{ row }">
{{ row.productType ? '企业' : '个人' }} {{ row.productType ? '企业' : '个人' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="guarantyStyle" <el-table-column prop="guarantyStyle" label="担保方式" min-width="80"></el-table-column>
label="担保方式" <el-table-column prop="loanCeiling" label="最高额度/年利率/期限" min-width="110">
min-width="80"></el-table-column>
<el-table-column prop="loanCeiling"
label="最高额度/年利率/期限"
min-width="110">
<template #default="{ row }"> <template #default="{ row }">
{{ row.loanCeiling + '万元/' + row.maximumAnnualInterestRate + '%/' + row.maximumTermOfLoan + '个月' }} {{ row.loanCeiling + '万元/' + row.maximumAnnualInterestRate + '%/' + row.maximumTermOfLoan + '个月' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="operationTime" <el-table-column prop="operationTime" label="创建日期" sortable="custom" min-width="80"></el-table-column>
label="创建日期" <el-table-column prop="status" label="产品进度" min-width="80">
sortable="custom"
min-width="80"></el-table-column>
<el-table-column prop="status"
label="产品进度"
min-width="80">
<template #default="{ row }"> <template #default="{ row }">
{{ getStatus(row.status) }} {{ getStatus(row.status) }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="id" <el-table-column prop="id" label="操作" min-width="110">
label="操作"
min-width="110">
<template #default="{ row }"> <template #default="{ row }">
<el-button v-if="row.showDetailsOrNot" <el-button v-if="row.showDetailsOrNot" type="primary" link @click="toDetail(`/product/bank/detail`, row)" size="small">产品详情</el-button>
type="primary" <el-button v-if="row.showElementsOrNot" type="primary" link size="small" @click="toDetail(`/product/bank/add`, row)">配置要素</el-button>
link <el-button v-if="row.showRiskControlOrNot" type="primary" link size="small" @click="toDetail(`/product/bank/config`, row)">配置风控</el-button>
@click="toDetail(`/product/bank/detail`, row)" <el-popconfirm v-if="row.showDeleteOrNot" title="您确定删除吗?" @confirm.stop="handleDelete(row.id)">
size="small">产品详情</el-button>
<el-button v-if="row.showElementsOrNot"
type="primary"
link
size="small"
@click="toDetail(`/product/bank/add`, row)">配置要素</el-button>
<el-button v-if="row.showRiskControlOrNot"
type="primary"
link
size="small"
@click="toDetail(`/product/bank/config`, row)">配置风控</el-button>
<el-popconfirm v-if="row.showDeleteOrNot"
title="您确定删除吗?"
@confirm.stop="handleDelete(row.id)">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small" @click.stop="stop">删除</el-button>
link
size="small"
@click.stop="stop">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
<el-button v-if="row.showApprovalOrNot" <el-button v-if="row.showApprovalOrNot" type="primary" link size="small" @click="toDetail(`/product/bank/approve`, row)">审批</el-button>
type="primary" </template></el-table-column
link >
size="small"
@click="toDetail(`/product/bank/approve`, row)">审批</el-button>
</template></el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -137,7 +72,8 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
</div> </div>
</template> </template>

@ -1,44 +1,26 @@
<template> <template>
<div> <div>
<el-tabs v-model="curTab"> <el-tabs v-model="curTab">
<el-tab-pane :label="id ? '产品要素' : '新增产品'" <el-tab-pane :label="id ? '产品要素' : '新增产品'" name="tab1">
name="tab1"> <el-form label-width="100px" label-suffix="" class="max-w-[calc(100vw-540px)] overflow-auto form" status-icon>
<el-form label-width="100px" <el-form-item label="基金名称" prop="fundName">
label-suffix=":" <el-input placeholder="取个有吸引力的产品名,限20字。" maxlength="20" v-model="form.fundName"></el-input>
class="max-w-[calc(100vw-540px)] overflow-auto form"
status-icon>
<el-form-item label="基金名称"
prop="fundName">
<el-input placeholder="取个有吸引力的产品名,限20字。"
maxlength="20"
v-model="form.fundName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="基金类型" <el-form-item label="基金类型" prop="fundType">
prop="fundType"> <el-select v-model="form.fundType" placeholder="请选择">
<el-select v-model="form.fundType" <el-option v-for="item in config[1]?.subject?.itemList" :key="item" :label="item.options" :value="item.itemId" />
placeholder="请选择">
<el-option v-for="item in config[1]?.subject?.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="募集规模"> <el-form-item label="募集规模">
<div> <div>
<el-input placeholder="请输入" <el-input placeholder="请输入" v-model="form.fundraisingScale">
v-model="form.fundraisingScale">
<template #append>万元</template> <template #append>万元</template>
</el-input> </el-input>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="运作方式" <el-form-item label="运作方式" prop="modeOfOperation">
prop="modeOfOperation"> <el-select v-model="form.modeOfOperation" placeholder="请选择">
<el-select v-model="form.modeOfOperation" <el-option v-for="item in config[3]?.subject?.itemList" :key="item" :label="item.options" :value="item.itemId" />
placeholder="请选择">
<el-option v-for="item in config[3]?.subject?.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="持股配置"> <el-form-item label="持股配置">
@ -48,37 +30,30 @@
<p class="field-name w-[300px] mr-32">股票</p> <p class="field-name w-[300px] mr-32">股票</p>
<p class="field-name w-[100px] mr-32">比重(%)</p> <p class="field-name w-[100px] mr-32">比重(%)</p>
<div class="field-name"> <div class="field-name">
<el-icon class="cursor-pointer" <el-icon class="cursor-pointer" :size="16" color="#333" @click="addStock">
:size="16"
color="#333"
@click="addStock">
<Plus /> <Plus />
</el-icon> </el-icon>
</div> </div>
</div> </div>
<div v-for="(item, i) in form.shareholdingAllocationsList" <div v-for="(item, i) in form.shareholdingAllocationsList" :key="i" class="flex items-center mb-2">
:key="i"
class="flex items-center mb-2">
<div class="w-[300px] mr-32"> <div class="w-[300px] mr-32">
<el-select-v2 class="w-full" <el-select-v2
class="w-full"
v-model="item.stockCode" v-model="item.stockCode"
filterable filterable
remote remote
:remote-method="val => remoteMethod(val, item)" :remote-method="(val) => remoteMethod(val, item)"
clearable clearable
:options="item.stocks" :options="item.stocks"
:loading="loading" :loading="loading"
placeholder="请输入A股代码或者名称" /> placeholder="请输入A股代码或者名称"
/>
</div> </div>
<div class="w-[100px] mr-32"> <div class="w-[100px] mr-32">
<el-input placeholder="请输入" <el-input placeholder="请输入" v-model="item.proportion"></el-input>
v-model="item.proportion"></el-input>
</div> </div>
<div> <div>
<el-icon class="cursor-pointer" <el-icon class="cursor-pointer" :size="16" color="#333" @click="delStock(i)">
:size="16"
color="#333"
@click="delStock(i)">
<Minus /> <Minus />
</el-icon> </el-icon>
</div> </div>
@ -91,29 +66,17 @@
<!-- 份额时长 --> <!-- 份额时长 -->
<div class="flex items-center mb-3"> <div class="flex items-center mb-3">
客户T时买入T+ 客户T时买入T+
<el-input class="w-[100px] mx-2" <el-input class="w-[100px] mx-2" placeholder="请输入" v-model="form.buyingDuration"></el-input>
placeholder="请输入" <el-select class="w-[100px] mr-2" v-model="form.buyingUnit" placeholder="请选择">
v-model="form.buyingDuration"></el-input> <el-option v-for="item in config[5]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
<el-select class="w-[100px] mr-2"
v-model="form.buyingUnit"
placeholder="请选择">
<el-option v-for="item in config[5]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
确认申购份额期间资金进入冻结账户 确认申购份额期间资金进入冻结账户
</div> </div>
<div class="flex items-center"> <div class="flex items-center">
客户T时卖出T+ 客户T时卖出T+
<el-input class="w-[100px] mx-2" <el-input class="w-[100px] mx-2" placeholder="请输入" v-model="form.sellingTime"></el-input>
placeholder="请输入" <el-select class="w-[100px] mr-2" v-model="form.soldUnit" placeholder="请选择">
v-model="form.sellingTime"></el-input> <el-option v-for="item in config[5]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
<el-select class="w-[100px] mr-2"
v-model="form.soldUnit"
placeholder="请选择">
<el-option v-for="item in config[5]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
确认赎回金额期间资金进入冻结账户 确认赎回金额期间资金进入冻结账户
</div> </div>
@ -124,58 +87,33 @@
<p class="field-name w-[400px] mr-32">金额</p> <p class="field-name w-[400px] mr-32">金额</p>
<p class="field-name w-[100px] mr-32">费率</p> <p class="field-name w-[100px] mr-32">费率</p>
<div class="field-name"> <div class="field-name">
<el-icon class="cursor-pointer" <el-icon class="cursor-pointer" :size="16" color="#333" @click="addRatio(0)">
:size="16"
color="#333"
@click="addRatio(0)">
<Plus /> <Plus />
</el-icon> </el-icon>
</div> </div>
</div> </div>
<div v-for="(item, i) in form.buySellRatioList0" <div v-for="(item, i) in form.buySellRatioList0" :key="i" class="flex items-center mb-2">
:key="i"
class="flex items-center mb-2">
<div class="w-[400px] mr-10"> <div class="w-[400px] mr-10">
<el-input v-if="i" <el-input v-if="i" class="w-[100px] mr-2" placeholder="请输入" disabled v-model="form.buySellRatioList0[i - 1].input2"></el-input>
class="w-[100px] mr-2" <el-input v-else class="w-[100px] mr-2" placeholder="请输入" disabled v-model="item.input1"></el-input>
placeholder="请输入"
disabled
v-model="form.buySellRatioList0[i - 1].input2"></el-input>
<el-input v-else
class="w-[100px] mr-2"
placeholder="请输入"
disabled
v-model="item.input1"></el-input>
{{ i ? '万' : '&emsp;' }} {{ i ? '万' : '&emsp;' }}
<span class="mx-2"> <span class="mx-2"> &lt;= 买入金额</span>
&lt;= 买入金额</span>
<template v-if="i !== form.buySellRatioList0.length - 1"> <template v-if="i !== form.buySellRatioList0.length - 1">
&lt; &lt;
<el-input class="w-[100px] mx-2" <el-input class="w-[100px] mx-2" placeholder="请输入" v-model="item.input2"></el-input>
placeholder="请输入"
v-model="item.input2"></el-input>
</template> </template>
</div> </div>
<div class="mr-32"> <div class="mr-32">
<el-input class="w-[100px] mr-2" <el-input class="w-[100px] mr-2" placeholder="请输入" v-model="item.rate"></el-input>
placeholder="请输入" <el-select class="w-[90px]" v-model="item.rateUnit" placeholder="请选择">
v-model="item.rate"></el-input> <el-option v-for="item in units" :key="item" :value="item" />
<el-select class="w-[90px]"
v-model="item.rateUnit"
placeholder="请选择">
<el-option v-for="item in units"
:key="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div v-if="i"> <div v-if="i">
<el-icon class="cursor-pointer" <el-icon class="cursor-pointer" :size="16" color="#333" @click="delRatio(0, i)">
:size="16"
color="#333"
@click="delRatio(0, i)">
<Minus /> <Minus />
</el-icon> </el-icon>
</div> </div>
@ -191,21 +129,15 @@
<p class="mt-10 mb-2 text-xs text-[#ef3838]">运作费率单笔费率应小于5.00%</p> <p class="mt-10 mb-2 text-xs text-[#ef3838]">运作费率单笔费率应小于5.00%</p>
<div class="flex"> <div class="flex">
<span class="w-[140px]">管理费</span> <span class="w-[140px]">管理费</span>
<el-input class="w-[100px] mr-2" <el-input class="w-[100px] mr-2" placeholder="请输入" v-model="form.operationManagementRate"></el-input>%
placeholder="请输入"
v-model="form.operationManagementRate"></el-input>%
</div> </div>
<div class="flex my-2"> <div class="flex my-2">
<span class="w-[140px]">托管费</span> <span class="w-[140px]">托管费</span>
<el-input class="w-[100px] mr-2" <el-input class="w-[100px] mr-2" placeholder="请输入" v-model="form.operatingEscrowRate"></el-input>%
placeholder="请输入"
v-model="form.operatingEscrowRate"></el-input>%
</div> </div>
<div class="flex"> <div class="flex">
<span class="w-[140px]">销售服务费</span> <span class="w-[140px]">销售服务费</span>
<el-input class="w-[100px] mr-2" <el-input class="w-[100px] mr-2" placeholder="请输入" v-model="form.operatingSalesServiceRates"></el-input>%
placeholder="请输入"
v-model="form.operatingSalesServiceRates"></el-input>%
</div> </div>
<div class="mt-5 text-xs text-[#7a7a7a]"> <div class="mt-5 text-xs text-[#7a7a7a]">
<p>运作费计算</p> <p>运作费计算</p>
@ -220,75 +152,40 @@
<p class="field-name w-[600px] mr-32">持有时长</p> <p class="field-name w-[600px] mr-32">持有时长</p>
<p class="field-name w-[100px] mr-32">费率</p> <p class="field-name w-[100px] mr-32">费率</p>
<div class="field-name"> <div class="field-name">
<el-icon class="cursor-pointer" <el-icon class="cursor-pointer" :size="16" color="#333" @click="addRatio(1)">
:size="16"
color="#333"
@click="addRatio(1)">
<Plus /> <Plus />
</el-icon> </el-icon>
</div> </div>
</div> </div>
<div v-for="(item, i) in form.buySellRatioList1" <div v-for="(item, i) in form.buySellRatioList1" :key="i" class="flex items-center mb-2">
:key="i"
class="flex items-center mb-2">
<div class="w-[600px] mr-10"> <div class="w-[600px] mr-10">
<el-input v-if="i" <el-input v-if="i" class="w-[100px] mr-2" placeholder="请输入" disabled v-model="form.buySellRatioList1[i - 1].input2"></el-input>
class="w-[100px] mr-2" <el-input v-else class="w-[100px] mr-[108px]" placeholder="请输入" disabled v-model="item.input1"></el-input>
placeholder="请输入"
disabled
v-model="form.buySellRatioList1[i - 1].input2"></el-input>
<el-input v-else
class="w-[100px] mr-[108px]"
placeholder="请输入"
disabled
v-model="item.input1"></el-input>
<el-select v-if="i" <el-select v-if="i" class="w-[100px]" v-model="form.buySellRatioList1[i - 1].soldUnit2" placeholder="请选择" disabled>
class="w-[100px]" <el-option v-for="item in times" :key="item" :value="item" />
v-model="form.buySellRatioList1[i - 1].soldUnit2"
placeholder="请选择"
disabled>
<el-option v-for="item in times"
:key="item"
:value="item" />
</el-select> </el-select>
<span class="mx-2"> <span class="mx-2"> &lt;= 持有时长</span>
&lt;= 持有时长</span>
<template v-if="i !== form.buySellRatioList1.length - 1"> <template v-if="i !== form.buySellRatioList1.length - 1">
&lt; &lt;
<el-input class="w-[100px] mx-2" <el-input class="w-[100px] mx-2" placeholder="请输入" v-model="item.input2"></el-input>
placeholder="请输入"
v-model="item.input2"></el-input>
<el-select class="w-[100px]" <el-select class="w-[100px]" v-model="item.soldUnit2" placeholder="请选择">
v-model="item.soldUnit2" <el-option v-for="item in times" :key="item" :value="item" />
placeholder="请选择">
<el-option v-for="item in times"
:key="item"
:value="item" />
</el-select> </el-select>
</template> </template>
</div> </div>
<div class="mr-32"> <div class="mr-32">
<el-input class="w-[100px] mr-2" <el-input class="w-[100px] mr-2" placeholder="请输入" v-model="item.rate"></el-input>
placeholder="请输入" <el-select class="w-[90px]" v-model="item.rateUnit" placeholder="请选择">
v-model="item.rate"></el-input> <el-option v-for="item in units" :key="item" :value="item" />
<el-select class="w-[90px]"
v-model="item.rateUnit"
placeholder="请选择">
<el-option v-for="item in units"
:key="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div v-if="i"> <div v-if="i">
<el-icon class="cursor-pointer" <el-icon class="cursor-pointer" :size="16" color="#333" @click="delRatio(1, i)">
:size="16"
color="#333"
@click="delRatio(1, i)">
<Minus /> <Minus />
</el-icon> </el-icon>
</div> </div>
@ -301,8 +198,7 @@
</div> </div>
</el-form-item> </el-form-item>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit">完成</div>
@click="submit">完成</div>
</div> </div>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
@ -437,7 +333,7 @@ const remoteMethod = (query: string, item: Record<string, any>) => {
// //
const addRatio = (type: number) => { const addRatio = (type: number) => {
if (form['buySellRatioList' + type].length === 5) { if (form[`buySellRatioList${type}`].length === 5) {
ElMessage.error('规则最多只能添加5条!'); ElMessage.error('规则最多只能添加5条!');
} else { } else {
const temp = { const temp = {
@ -451,12 +347,12 @@ const addRatio = (type: number) => {
temp.soldUnit1 = ''; temp.soldUnit1 = '';
temp.soldUnit2 = ''; temp.soldUnit2 = '';
} }
form['buySellRatioList' + type].push(temp); form[`buySellRatioList${type}`].push(temp);
} }
}; };
// //
const delRatio = (type: number, i: number) => { const delRatio = (type: number, i: number) => {
form['buySellRatioList' + type].length > 1 && form['buySellRatioList' + type].splice(i, 1); form[`buySellRatioList${type}`].length > 1 && form[`buySellRatioList${type}`].splice(i, 1);
}; };
const getId = (str: string): string | number => { const getId = (str: string): string | number => {
@ -467,10 +363,10 @@ const getId = (str: string): string | number => {
const addRecord = async (data: Record<string, any>) => { const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${levelId},1161`; // 1id const preIds = `1,${levelId},1161`; // 1id
const rule = [ const rule = [
handleId(1162, 308, data.fundName, preIds + ',1162', 3), handleId(1162, 308, data.fundName, `${preIds},1162`, 3),
handleId(1163, 309, 764, preIds + ',1163', 1), handleId(1163, 309, 764, `${preIds},1163`, 1),
handleId(1164, 310, data.fundraisingScale, preIds + ',1164', 3), handleId(1164, 310, data.fundraisingScale, `${preIds},1164`, 3),
handleId(1165, 311, 765, preIds + ',1165', 1), handleId(1165, 311, 765, `${preIds},1165`, 1),
]; ];
const stockId = 1167; const stockId = 1167;
@ -479,10 +375,10 @@ const addRecord = async (data: Record<string, any>) => {
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( rule.push(
handleId(1181, 314, data.buyingDuration, preIds + ',1179,1180,1181', 3), handleId(1181, 314, data.buyingDuration, `${preIds},1179,1180,1181`, 3),
handleId(1182, 315, getId(data.buyingUnit), preIds + ',1179,1180,1182', 1), handleId(1182, 315, getId(data.buyingUnit), `${preIds},1179,1180,1182`, 1),
handleId(1184, 314, data.sellingTime, preIds + ',1179,1183,1184', 3), handleId(1184, 314, data.sellingTime, `${preIds},1179,1183,1184`, 3),
handleId(1185, 315, getId(data.soldUnit), preIds + ',1179,1183,1185', 1), handleId(1185, 315, getId(data.soldUnit), `${preIds},1179,1183,1185`, 1),
); );
// //
@ -500,9 +396,9 @@ const addRecord = async (data: Record<string, any>) => {
}); });
rule.push( rule.push(
handleId(1196, 319, data.operationManagementRate, preIds + ',1179,1195,1196', 3), handleId(1196, 319, data.operationManagementRate, `${preIds},1179,1195,1196`, 3),
handleId(1197, 320, data.operatingEscrowRate, preIds + ',1179,1195,1197', 3), handleId(1197, 320, data.operatingEscrowRate, `${preIds},1179,1195,1197`, 3),
handleId(1198, 321, data.operatingSalesServiceRates, preIds + ',1179,1195,1198', 3), handleId(1198, 321, data.operatingSalesServiceRates, `${preIds},1179,1195,1198`, 3),
); );
await addOperation({ await addOperation({
@ -545,7 +441,7 @@ const submit = async () => {
// //
param.buySellRatioList0.forEach((e, i) => { 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) => { param.buySellRatioList1.forEach((e, i) => {
e.amountOrDuration = i ? param.buySellRatioList1[i - 1].input2 + param.buySellRatioList1[i - 1].soldUnit2 : e.input1; e.amountOrDuration = i ? param.buySellRatioList1[i - 1].input2 + param.buySellRatioList1[i - 1].soldUnit2 : e.input1;
@ -557,7 +453,7 @@ const submit = async () => {
delete param.buySellRatioList0; delete param.buySellRatioList0;
delete param.buySellRatioList1; delete param.buySellRatioList1;
const res = await saveFund(param); const res = await saveFund(param);
router.push(`/product/fund/detail?id=` + res.message); router.push(`/product/fund/detail?id=${res.message}`);
addRecord(recordParam); addRecord(recordParam);
ElMessage.success('提交成功!'); ElMessage.success('提交成功!');
emit('getList'); emit('getList');

@ -1,32 +1,23 @@
<template> <template>
<div class="block card-list flex py-0"> <div class="block card-list flex py-0">
<div class="left"> <div class="left">
<div class="flex justify-center items-center py-2 mb-3 text-sm text-[#006BFF] bg-[rgba(0,107,255,0.1)] border border-solid border-[#006BFF] rounded-[10px] cursor-pointer" <div
@click="toAdd"> class="flex justify-center items-center py-2 mb-3 text-sm text-[#006BFF] bg-[rgba(0,107,255,0.1)] border border-solid border-[#006BFF] rounded-[10px] cursor-pointer"
<el-icon class="mr-1" @click="toAdd"
:size="16" >
color="#006BFF"> <el-icon class="mr-1" :size="16" color="#006BFF">
<Plus /> <Plus />
</el-icon> </el-icon>
新增产品 新增产品
</div> </div>
<div class="flex justify-end mb-4"> <div class="flex justify-end mb-4">
<img src="@/assets/images/fold.png" <img src="@/assets/images/fold.png" alt="" class="cursor-pointer" @click="toList" />
alt=""
class="cursor-pointer"
@click="toList" />
</div> </div>
<ul class="products"> <ul class="products">
<li v-for="(item, i) in list" <li v-for="(item, i) in list" :key="i" :class="{ active: item.id === id }" @click="switchProduct(item.id)">
:key="i" <el-popconfirm title="您确定删除吗?" @confirm="handleDelete(item.id)">
:class="{ active: item.id === id }"
@click="switchProduct(item.id)">
<el-popconfirm title="您确定删除吗?"
@confirm="handleDelete(item.id)">
<template #reference> <template #reference>
<img src="@/assets/images/trash.png" <img src="@/assets/images/trash.png" alt="" class="del" />
alt=""
class="del" />
</template> </template>
</el-popconfirm> </el-popconfirm>
@ -39,8 +30,7 @@
</div> </div>
<div class="right"> <div class="right">
<detail v-if="action === 'detail'"></detail> <detail v-if="action === 'detail'"></detail>
<add v-else-if="action === 'add'" <add v-else-if="action === 'add'" @getList="getList"></add>
@getList="getList"></add>
</div> </div>
</div> </div>
</template> </template>
@ -51,10 +41,10 @@ import { ElMessage } from 'element-plus';
import { Plus } from '@element-plus/icons-vue'; import { Plus } from '@element-plus/icons-vue';
import { fundProductList, batchDeletion } from '@/api/fund'; import { fundProductList, batchDeletion } from '@/api/fund';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import Detail from './Detail.vue';
import Add from './Add.vue';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import { getIds } from '@/utils/common'; import { getIds } from '@/utils/common';
import Detail from './Detail.vue';
import Add from './Add.vue';
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
@ -95,7 +85,7 @@ watch(
); );
// //
const switchProduct = (fundId: number) => { const switchProduct = (fundId: number) => {
router.push(`/product/fund/detail?id=` + fundId); router.push(`/product/fund/detail?id=${fundId}`);
}; };
// //
const toAdd = () => { const toAdd = () => {

@ -1,8 +1,7 @@
<template> <template>
<div> <div>
<el-tabs v-model="curTab"> <el-tabs v-model="curTab">
<el-tab-pane label="产品详情" <el-tab-pane label="产品详情" name="tab1">
name="tab1">
<info /> <info />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>

@ -10,9 +10,7 @@
<p class="w-[130px] mr-32">股票</p> <p class="w-[130px] mr-32">股票</p>
<p class="">比重(%)</p> <p class="">比重(%)</p>
</div> </div>
<div v-for="(item, i) in info.shareholdingAllocationsList" <div v-for="(item, i) in info.shareholdingAllocationsList" :key="item" class="flex">
:key="item"
class="flex">
<p class="w-[130px] mr-32">{{ item.stockName }}({{ item.stockCode }})</p> <p class="w-[130px] mr-32">{{ item.stockName }}({{ item.stockCode }})</p>
<p class="">{{ item.proportion }}</p> <p class="">{{ item.proportion }}</p>
</div> </div>
@ -27,12 +25,9 @@
<p class="w-[130px] mr-32">金额</p> <p class="w-[130px] mr-32">金额</p>
<p class="">费率</p> <p class="">费率</p>
</div> </div>
<div v-for="(item, i) in info.purchaseRateList" <div v-for="(item, i) in info.purchaseRateList" :key="item" class="flex">
:key="item"
class="flex">
<p class="w-[130px] mr-32">{{ item.amountOrDuration }}</p> <p class="w-[130px] mr-32">{{ item.amountOrDuration }}</p>
<p class="">{{ item.rate }}{{ item.rateUnit <p class="">{{ item.rate }}{{ item.rateUnit }}</p>
}}</p>
</div> </div>
</div> </div>
@ -46,9 +41,7 @@
<p class="w-[130px] mr-32">持有时长</p> <p class="w-[130px] mr-32">持有时长</p>
<p class="">费率</p> <p class="">费率</p>
</div> </div>
<div v-for="(item, i) in info.sellingRateList" <div v-for="(item, i) in info.sellingRateList" :key="item" class="flex">
:key="item"
class="flex">
<p class="w-[130px] mr-32">{{ item.amountOrDuration }}</p> <p class="w-[130px] mr-32">{{ item.amountOrDuration }}</p>
<p class="">{{ item.rate }}{{ item.rateUnit }}</p> <p class="">{{ item.rate }}{{ item.rateUnit }}</p>
</div> </div>

@ -1,69 +1,37 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="params.fundName" <search v-model="params.fundName" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增产品 新增产品
</div> </div>
<img src="@/assets/images/9.png" <img src="@/assets/images/9.png" alt="" class="ml-4 cursor-pointer" @click="toCardList" />
alt=""
class="ml-4 cursor-pointer"
@click="toCardList" />
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @sort-change="handleSort">
v-loading="loading" <el-table-column prop="fundName" label="基金名称" min-width="150"></el-table-column>
:data="list" <el-table-column prop="fundCode" label="基金代码" min-width="100"></el-table-column>
@sort-change="handleSort"> <el-table-column prop="fundType" label="基金类型" min-width="100"></el-table-column>
<el-table-column prop="fundName" <el-table-column prop="fundraisingScale" label="募集规模" min-width="100"></el-table-column>
label="基金名称" <el-table-column prop="modeOfOperation" label="运作方式" min-width="100"></el-table-column>
min-width="150"></el-table-column> <el-table-column prop="buying" label="买入费率" min-width="120"></el-table-column>
<el-table-column prop="fundCode" <el-table-column prop="sale" label="赎回费率" min-width="120"></el-table-column>
label="基金代码" <el-table-column prop="operationTime" label="创建日期" width="180" sortable="custom"></el-table-column>
min-width="100"></el-table-column> <el-table-column label="操作" width="140">
<el-table-column prop="fundType"
label="基金类型"
min-width="100"></el-table-column>
<el-table-column prop="fundraisingScale"
label="募集规模"
min-width="100"></el-table-column>
<el-table-column prop="modeOfOperation"
label="运作方式"
min-width="100"></el-table-column>
<el-table-column prop="buying"
label="买入费率"
min-width="120"></el-table-column>
<el-table-column prop="sale"
label="赎回费率"
min-width="120"></el-table-column>
<el-table-column prop="operationTime"
label="创建日期"
width="180"
sortable="custom"></el-table-column>
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-popconfirm title="您确定删除吗?" <el-popconfirm title="您确定删除吗?" @confirm.stop="handleDelete(row.id)">
@confirm.stop="handleDelete(row.id)">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
<el-button type="primary" <el-button type="primary" link @click="toDetail(`/product/fund/detail`, row.id)" size="small">产品详情</el-button>
link </template></el-table-column
@click="toDetail(`/product/fund/detail`, row.id)" >
size="small">产品详情</el-button>
</template></el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -72,7 +40,8 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
</div> </div>
</template> </template>

@ -1,37 +1,22 @@
<template> <template>
<div> <div>
<el-tabs v-model="curTab"> <el-tabs v-model="curTab">
<el-tab-pane :label="id ? '产品要素' : '新增产品'" <el-tab-pane :label="id ? '产品要素' : '新增产品'" name="tab1">
name="tab1"> <el-form label-width="100px" label-suffix="" class="max-w-[calc(100vw-540px)] overflow-auto form" status-icon>
<el-form label-width="100px" <el-form-item label="保险名称" prop="insuranceName">
label-suffix=":" <el-input placeholder="取个有吸引力的产品名,限20字。" maxlength="20" v-model="form.insuranceName"></el-input>
class="max-w-[calc(100vw-540px)] overflow-auto form"
status-icon>
<el-form-item label="保险名称"
prop="insuranceName">
<el-input placeholder="取个有吸引力的产品名,限20字。"
maxlength="20"
v-model="form.insuranceName"></el-input>
</el-form-item> </el-form-item>
<el-form-item label="险种分类" <el-form-item label="险种分类" prop="insuranceType">
prop="insuranceType"> <el-select v-model="form.insuranceType" placeholder="请选择">
<el-select v-model="form.insuranceType" <el-option v-for="item in config[0]?.recordChildren[1]?.subject?.itemList" :key="item" :label="item.options" :value="item.itemId" />
placeholder="请选择">
<el-option v-for="item in config[0]?.recordChildren[1]?.subject?.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item v-if="form.insuranceType === 310" <el-form-item v-if="form.insuranceType === 310" label="承保年龄">
label="承保年龄">
<div class="flex items-center"> <div class="flex items-center">
<div class="num-inputs"> <div class="num-inputs">
<el-input placeholder="最小年龄" <el-input placeholder="最小年龄" v-model.number="form.minimumAge"></el-input>
v-model.number="form.minimumAge"></el-input>
<span class="split">-</span> <span class="split">-</span>
<el-input placeholder="最大年龄" <el-input placeholder="最大年龄" v-model.number="form.maximumAge"></el-input>
v-model.number="form.maximumAge"></el-input>
<span class="unit">周岁</span> <span class="unit">周岁</span>
</div> </div>
</div> </div>
@ -42,68 +27,50 @@
<p class="field-name w-[130px] mr-32">保险责任</p> <p class="field-name w-[130px] mr-32">保险责任</p>
<p class="field-name">保额</p> <p class="field-name">保额</p>
</div> </div>
<div v-for="(item, i) in config[form.insuranceType === 310 ? 0 : 1]?.recordChildren[2]?.recordChildren" <div v-for="(item, i) in config[form.insuranceType === 310 ? 0 : 1]?.recordChildren[2]?.recordChildren" :key="i" class="flex items-center mb-2">
:key="i"
class="flex items-center mb-2">
<div class="w-[130px] mr-32"> <div class="w-[130px] mr-32">
<el-checkbox :key="item.id" <el-checkbox :key="item.id" v-model="item.check" :label="item.name" />
v-model="item.check"
:label="item.name" />
</div> </div>
<div v-if="item.check"> <div v-if="item.check">
<el-input placeholder="请输入" <el-input placeholder="请输入" v-model="item.sumInsured">
v-model="item.sumInsured">
<template #append>{{ item.id === 764 || item.id === 765 ? '元' : '万' }}</template> <template #append>{{ item.id === 764 || item.id === 765 ? '元' : '万' }}</template>
</el-input> </el-input>
</div> </div>
</div> </div>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="保费金额" <el-form-item label="保费金额" prop="minimumLoan">
prop="minimumLoan">
<div> <div>
<el-input placeholder="请输入" <el-input placeholder="请输入" v-model="form.premiumAmount">
v-model="form.premiumAmount">
<template #append></template> <template #append></template>
</el-input> </el-input>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="缴纳形式"> <el-form-item label="缴纳形式">
<el-radio :label="312" <el-radio :label="312" v-model="form.formOfPayment">趸交</el-radio>
v-model="form.formOfPayment">趸交</el-radio>
</el-form-item> </el-form-item>
<el-form-item label="保险期限"> <el-form-item label="保险期限">
<div class="flex"> <div class="flex">
<el-input class="mr-2" <el-input class="mr-2" placeholder="请输入" v-model="form.insuranceDeadline"></el-input>
placeholder="请输入" <el-select v-model="form.insuranceDeadlineUnit" placeholder="请选择" clearable>
v-model="form.insuranceDeadline"></el-input> <el-option v-for="item in units" :key="item" :label="item" :value="item" />
<el-select v-model="form.insuranceDeadlineUnit"
placeholder="请选择"
clearable>
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="申请材料"> <el-form-item label="申请材料">
<el-checkbox-group v-model="form.applicationMaterial"> <el-checkbox-group v-model="form.applicationMaterial">
<el-checkbox v-for="(item, i) in config[form.insuranceType === 310 ? 0 : 1]?.recordChildren[6]?.subject?.itemList" <el-checkbox v-for="(item, i) in config[form.insuranceType === 310 ? 0 : 1]?.recordChildren[6]?.subject?.itemList" :key="i" :label="item.itemId">{{
:key="i" item.options
:label="item.itemId">{{ item.options }}</el-checkbox> }}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
<el-form-item label="责任免除"> <el-form-item label="责任免除">
<el-checkbox-group v-model="form.exemptionFromLiability"> <el-checkbox-group v-model="form.exemptionFromLiability">
<el-checkbox v-for="(item, i) in config[0]?.recordChildren[7]?.subject?.itemList" <el-checkbox v-for="(item, i) in config[0]?.recordChildren[7]?.subject?.itemList" :key="i" :label="item.itemId">{{ item.options }}</el-checkbox>
:key="i"
:label="item.itemId">{{ item.options }}</el-checkbox>
</el-checkbox-group> </el-checkbox-group>
</el-form-item> </el-form-item>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit">完成</div>
@click="submit">完成</div>
</div> </div>
</el-form> </el-form>
</el-tab-pane> </el-tab-pane>
@ -172,30 +139,30 @@ watch(
const addRecord = async (data: Record<string, any>) => { const addRecord = async (data: Record<string, any>) => {
const isAcci = data.insuranceType === 310; // const isAcci = data.insuranceType === 310; //
const preIds = `1,${Cookies.get('sand-level')},275,${isAcci ? 276 : 277}`; // 1id const preIds = `1,${Cookies.get('sand-level')},275,${isAcci ? 276 : 277}`; // 1id
const rule: Array<Record<string, any>> = [handleId(278, 118, data.insuranceName, preIds + ',278', 3), handleId(279, 119, data.insuranceType, preIds + ',279', 1)]; const rule: Array<Record<string, any>> = [handleId(278, 118, data.insuranceName, `${preIds},278`, 3), handleId(279, 119, data.insuranceType, `${preIds},279`, 1)];
data.minimumAge && rule.push(handleId(680, 219, data.minimumAge, preIds + ',678,680', 3)); data.minimumAge && rule.push(handleId(680, 219, data.minimumAge, `${preIds},678,680`, 3));
data.maximumAge && rule.push(handleId(679, 218, data.maximumAge, preIds + ',678,679', 3)); data.maximumAge && rule.push(handleId(679, 218, data.maximumAge, `${preIds},678,679`, 3));
// //
config.value[form.insuranceType === 310 ? 0 : 1]?.recordChildren[2]?.recordChildren?.map((e) => { config.value[form.insuranceType === 310 ? 0 : 1]?.recordChildren[2]?.recordChildren?.map((e) => {
rule.push(handleId(isAcci ? 766 : 768, 140, e.check ? 345 : 346, `${preIds},${isAcci ? 280 : 288},${e.id},${isAcci ? 766 : 768}`, 1)); rule.push(handleId(isAcci ? 766 : 768, 140, e.check ? 345 : 346, `${preIds},${isAcci ? 280 : 288},${e.id},${isAcci ? 766 : 768}`, 1));
e.check && e.sumInsured && rule.push(handleId(isAcci ? 767 : 769, 234, e.sumInsured, `${preIds},${isAcci ? 280 : 288},${e.id},${isAcci ? 767 : 769}`, 3)); e.check && e.sumInsured && rule.push(handleId(isAcci ? 767 : 769, 234, e.sumInsured, `${preIds},${isAcci ? 280 : 288},${e.id},${isAcci ? 767 : 769}`, 3));
}); });
data.premiumAmount && rule.push(handleId(296, 134, data.premiumAmount, preIds + ',296', 3)); data.premiumAmount && rule.push(handleId(296, 134, data.premiumAmount, `${preIds},296`, 3));
data.formOfPayment && rule.push(handleId(297, 135, data.formOfPayment, preIds + ',297', 1)); data.formOfPayment && rule.push(handleId(297, 135, data.formOfPayment, `${preIds},297`, 1));
form.insuranceDeadline && rule.push(handleId(770, 136, form.insuranceDeadline, preIds + ',298,770', 3)); form.insuranceDeadline && rule.push(handleId(770, 136, form.insuranceDeadline, `${preIds},298,770`, 3));
form.insuranceDeadlineUnit && form.insuranceDeadlineUnit &&
rule.push( rule.push(
handleId( handleId(
771, 771,
235, 235,
config.value[form.insuranceType === 310 ? 0 : 1]?.recordChildren[5]?.recordChildren[1]?.subject?.itemList?.find((e) => e.options === form.insuranceDeadlineUnit)?.itemId, config.value[form.insuranceType === 310 ? 0 : 1]?.recordChildren[5]?.recordChildren[1]?.subject?.itemList?.find((e) => e.options === form.insuranceDeadlineUnit)?.itemId,
preIds + ',298,771', `${preIds},298,771`,
1, 1,
), ),
); );
data.applicationMaterial && rule.push(handleId(isAcci ? 299 : 300, isAcci ? 137 : 138, data.applicationMaterial, `${preIds},${isAcci ? 299 : 300}`, 1)); data.applicationMaterial && rule.push(handleId(isAcci ? 299 : 300, isAcci ? 137 : 138, data.applicationMaterial, `${preIds},${isAcci ? 299 : 300}`, 1));
data.exemptionFromLiability && rule.push(handleId(301, 139, data.exemptionFromLiability, preIds + ',301', 1)); data.exemptionFromLiability && rule.push(handleId(301, 139, data.exemptionFromLiability, `${preIds},301`, 1));
await addOperation({ await addOperation({
...getIds(), ...getIds(),
@ -234,19 +201,19 @@ const submit = async () => {
if (!param.insuranceCoverageConfigList.length) return ElMessage.error('请至少输入一项保险额度'); if (!param.insuranceCoverageConfigList.length) return ElMessage.error('请至少输入一项保险额度');
if (isIllegalNum(param.premiumAmount)) { if (isIllegalNum(param.premiumAmount)) {
return ElMessage.error('请输入合理的保费金额'); return ElMessage.error('请输入合理的保费金额');
} else {
param.premiumAmount = Math.round(Number(param.premiumAmount) * 100) / 100;
} }
param.premiumAmount = Math.round(Number(param.premiumAmount) * 100) / 100;
if (!param.formOfPayment) return ElMessage.error('请选择缴纳形式'); if (!param.formOfPayment) return ElMessage.error('请选择缴纳形式');
if (isIllegalNum(param.insuranceDeadline)) return ElMessage.error('请输入合理的保险期限'); if (isIllegalNum(param.insuranceDeadline)) return ElMessage.error('请输入合理的保险期限');
if (!param.insuranceDeadlineUnit) return ElMessage.error('请选择保险期限'); if (!param.insuranceDeadlineUnit) return ElMessage.error('请选择保险期限');
param.insuranceDeadline = param.insuranceDeadline + param.insuranceDeadlineUnit; param.insuranceDeadline += param.insuranceDeadlineUnit;
if (!param.applicationMaterial.length) return ElMessage.error('请至少选择一项申请材料'); if (!param.applicationMaterial.length) return ElMessage.error('请至少选择一项申请材料');
if (!param.exemptionFromLiability.length) return ElMessage.error('请至少选择一项责任免除'); if (!param.exemptionFromLiability.length) return ElMessage.error('请至少选择一项责任免除');
param.applicationMaterial = param.applicationMaterial.join(); param.applicationMaterial = param.applicationMaterial.join();
param.exemptionFromLiability = param.exemptionFromLiability.join(); param.exemptionFromLiability = param.exemptionFromLiability.join();
const res = await addInsuranceProducts(param); const res = await addInsuranceProducts(param);
router.push(`/product/insurance/detail?id=` + res.message); router.push(`/product/insurance/detail?id=${res.message}`);
addRecord(param); addRecord(param);
ElMessage.success('提交成功!'); ElMessage.success('提交成功!');
emit('getList'); emit('getList');

@ -1,48 +1,36 @@
<template> <template>
<div class="block card-list flex py-0"> <div class="block card-list flex py-0">
<div class="left"> <div class="left">
<div class="flex justify-center items-center py-2 mb-3 text-sm text-[#006BFF] bg-[rgba(0,107,255,0.1)] border border-solid border-[#006BFF] rounded-[10px] cursor-pointer" <div
@click="toAdd"> class="flex justify-center items-center py-2 mb-3 text-sm text-[#006BFF] bg-[rgba(0,107,255,0.1)] border border-solid border-[#006BFF] rounded-[10px] cursor-pointer"
<el-icon class="mr-1" @click="toAdd"
:size="16" >
color="#006BFF"> <el-icon class="mr-1" :size="16" color="#006BFF">
<Plus /> <Plus />
</el-icon> </el-icon>
新增产品 新增产品
</div> </div>
<div class="flex justify-end mb-4"> <div class="flex justify-end mb-4">
<img src="@/assets/images/fold.png" <img src="@/assets/images/fold.png" alt="" class="cursor-pointer" @click="toList" />
alt=""
class="cursor-pointer"
@click="toList" />
</div> </div>
<ul class="products"> <ul class="products">
<li v-for="(item, i) in list" <li v-for="(item, i) in list" :key="i" :class="{ active: item.insuranceId === id }" @click="switchProduct(item.insuranceId)">
:key="i" <el-popconfirm title="您确定删除吗?" @confirm="handleDelete(item.insuranceId)">
:class="{ active: item.insuranceId === id }"
@click="switchProduct(item.insuranceId)">
<el-popconfirm title="您确定删除吗?"
@confirm="handleDelete(item.insuranceId)">
<template #reference> <template #reference>
<img src="@/assets/images/trash.png" <img src="@/assets/images/trash.png" alt="" class="del" />
alt=""
class="del" />
</template> </template>
</el-popconfirm> </el-popconfirm>
<h6>{{ item.insuranceName }}</h6> <h6>{{ item.insuranceName }}</h6>
<p v-if="item.minimumAge && item.maximumAge" <p v-if="item.minimumAge && item.maximumAge" class="type">{{ item.minimumAge + '-' + item.maximumAge + '周岁' }}</p>
class="type">{{ item.minimumAge + '-' + item.maximumAge + '周岁' }}</p> <p v-if="item.insuranceCoverageConfig" class="type">{{ item.insuranceCoverageConfig }}万保额</p>
<p v-if="item.insuranceCoverageConfig"
class="type">{{ item.insuranceCoverageConfig }}万保额</p>
<p class="meta">创建日期{{ item.operationTime }}</p> <p class="meta">创建日期{{ item.operationTime }}</p>
</li> </li>
</ul> </ul>
</div> </div>
<div class="right"> <div class="right">
<detail v-if="action === 'detail'"></detail> <detail v-if="action === 'detail'"></detail>
<add v-else-if="action === 'add'" <add v-else-if="action === 'add'" @getList="getList"></add>
@getList="getList"></add>
</div> </div>
</div> </div>
</template> </template>
@ -53,10 +41,10 @@ import { ElMessage } from 'element-plus';
import { Plus } from '@element-plus/icons-vue'; import { Plus } from '@element-plus/icons-vue';
import { insuranceList, batchDeletion } from '@/api/insurance'; import { insuranceList, batchDeletion } from '@/api/insurance';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import Detail from './Detail.vue';
import Add from './Add.vue';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
import { getIds } from '@/utils/common'; import { getIds } from '@/utils/common';
import Detail from './Detail.vue';
import Add from './Add.vue';
const router = useRouter(); const router = useRouter();
const route = useRoute(); const route = useRoute();
@ -100,7 +88,7 @@ watch(
); );
// //
const switchProduct = (insId: number) => { const switchProduct = (insId: number) => {
router.push(`/product/insurance/detail?id=` + insId); router.push(`/product/insurance/detail?id=${insId}`);
}; };
// //
const toAdd = () => { const toAdd = () => {

@ -1,8 +1,7 @@
<template> <template>
<div> <div>
<el-tabs v-model="curTab"> <el-tabs v-model="curTab">
<el-tab-pane label="产品详情" <el-tab-pane label="产品详情" name="tab1">
name="tab1">
<info /> <info />
</el-tab-pane> </el-tab-pane>
</el-tabs> </el-tabs>

@ -2,37 +2,27 @@
<div class="info my-2"> <div class="info my-2">
<h2 class="text-center text-lg">{{ info.insuranceName }}</h2> <h2 class="text-center text-lg">{{ info.insuranceName }}</h2>
<p class="text">险种分类{{ info.insuranceType }}</p> <p class="text">险种分类{{ info.insuranceType }}</p>
<p v-if="info.minimumAge && info.maximumAge" <p v-if="info.minimumAge && info.maximumAge" class="text">承保年龄{{ info.minimumAge + '-' + info.maximumAge + '周岁' }}</p>
class="text">承保年龄{{ info.minimumAge + '-' + info.maximumAge + '周岁' }}</p> <p v-if="info.insuranceDeadline" class="text">保险期限{{ info.insuranceDeadline }}</p>
<p v-if="info.insuranceDeadline"
class="text">保险期限{{ info.insuranceDeadline }}</p>
<div class="text"> <div class="text">
<div class="flex"> <div class="flex">
<p class="w-[130px] mr-32">保险责任</p> <p class="w-[130px] mr-32">保险责任</p>
<p class="">保额</p> <p class="">保额</p>
</div> </div>
<div v-for="(item, i) in info.insuranceCoverageConfigList" <div v-for="(item, i) in info.insuranceCoverageConfigList" :key="item" class="flex">
:key="item"
class="flex">
<p class="w-[130px] mr-32">{{ item.insuranceCoverage }}</p> <p class="w-[130px] mr-32">{{ item.insuranceCoverage }}</p>
<p>{{ Number(item.sumInsured * (item.insuredLiabilityId === 764 || item.insuredLiabilityId === 765 ? 1 : 10000)).toFixed(2) }}</p> <p>{{ Number(item.sumInsured * (item.insuredLiabilityId === 764 || item.insuredLiabilityId === 765 ? 1 : 10000)).toFixed(2) }}</p>
</div> </div>
</div> </div>
<p v-if="info.premiumAmount" <p v-if="info.premiumAmount" class="text">保费金额{{ Number(info.premiumAmount).toFixed(2) }}</p>
class="text">保费金额{{ Number(info.premiumAmount).toFixed(2) }}</p> <p v-if="info.formOfPayment" class="text">缴纳形式{{ info.formOfPayment }}</p>
<p v-if="info.formOfPayment" <div v-if="info.applicationMaterialList?.length" class="text">
class="text">缴纳形式{{ info.formOfPayment }}</p>
<div v-if="info.applicationMaterialList?.length"
class="text">
申请材料 申请材料
<p v-for="(item, i) in info.applicationMaterialList" <p v-for="(item, i) in info.applicationMaterialList" :key="item">{{ i + 1 }}{{ item }}</p>
:key="item">{{ i + 1 }}{{item}}</p>
</div> </div>
<div v-if="info.exemptionFromLiabilityList?.length" <div v-if="info.exemptionFromLiabilityList?.length" class="text">
class="text">
责任免除 责任免除
<p v-for="(item, i) in info.exemptionFromLiabilityList" <p v-for="(item, i) in info.exemptionFromLiabilityList" :key="item">{{ i + 1 }}{{ item }}</p>
:key="item">{{ i + 1 }}{{item}}</p>
</div> </div>
</div> </div>
</template> </template>

@ -1,97 +1,58 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="params.insuranceName" <search v-model="params.insuranceName" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<div class="select"> <div class="select">
<el-select v-model="params.insuranceType" <el-select v-model="params.insuranceType" placeholder="险种分类" size="large" clearable>
placeholder="险种分类" <el-option v-for="item in insuranceTypes" :key="item.id" :label="item.name" :value="item.id" />
size="large"
clearable>
<el-option v-for="item in insuranceTypes"
:key="item.id"
:label="item.name"
:value="item.id" />
</el-select> </el-select>
<img src="@/assets/images/7.png" <img src="@/assets/images/7.png" alt="" class="icon" />
alt=""
class="icon" />
</div> </div>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增产品 新增产品
</div> </div>
<img src="@/assets/images/9.png" <img src="@/assets/images/9.png" alt="" class="ml-4 cursor-pointer" @click="toCardList" />
alt=""
class="ml-4 cursor-pointer"
@click="toCardList" />
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @sort-change="handleSort">
v-loading="loading" <el-table-column prop="insuranceName" label="保险名称" min-width="150"></el-table-column>
:data="list" <el-table-column prop="insuranceTypeName" label="险种分类" min-width="100"></el-table-column>
@sort-change="handleSort"> <el-table-column prop="minimumAge" label="承保年龄" min-width="100">
<el-table-column prop="insuranceName"
label="保险名称"
min-width="150"></el-table-column>
<el-table-column prop="insuranceTypeName"
label="险种分类"
min-width="100"></el-table-column>
<el-table-column prop="minimumAge"
label="承保年龄"
min-width="100">
<template #default="{ row }"> <template #default="{ row }">
{{ row.minimumAge && row.maximumAge ? row.minimumAge + ' - ' + row.maximumAge + '周岁' : '-' }} {{ row.minimumAge && row.maximumAge ? row.minimumAge + ' - ' + row.maximumAge + '周岁' : '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="insuranceCoverageConfig" <el-table-column prop="insuranceCoverageConfig" label="保险额度(元)" min-width="300">
label="保险额度(元)"
min-width="300">
<template #default="{ row }"> <template #default="{ row }">
{{ row.insuranceCoverageConfig ? row.insuranceCoverageConfig + '万' : '-' }} {{ row.insuranceCoverageConfig ? row.insuranceCoverageConfig + '万' : '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="insuranceDeadline" <el-table-column prop="insuranceDeadline" label="保险期限" min-width="100">
label="保险期限"
min-width="100">
<template #default="{ row }"> <template #default="{ row }">
{{ row.insuranceDeadline || '-' }} {{ row.insuranceDeadline || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="premiumAmount" <el-table-column prop="premiumAmount" label="保费金额(元)" min-width="140">
label="保费金额(元)"
min-width="140">
<template #default="{ row }"> <template #default="{ row }">
{{ row.premiumAmount?.toFixed(2) || '-' }} {{ row.premiumAmount?.toFixed(2) || '-' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="operationTime" <el-table-column prop="operationTime" label="创建日期" width="180" sortable="custom"></el-table-column>
label="创建日期" <el-table-column label="操作" width="140">
width="180"
sortable="custom"></el-table-column>
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-popconfirm title="您确定删除吗?" <el-popconfirm title="您确定删除吗?" @confirm.stop="handleDelete(row.insuranceId)">
@confirm.stop="handleDelete(row.insuranceId)">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small" @click.stop="stop">删除</el-button>
link
size="small"
@click.stop="stop">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
<el-button type="primary" <el-button type="primary" link @click="toDetail(`/product/insurance/detail`, row.insuranceId)" size="small">产品详情</el-button>
link </template></el-table-column
@click="toDetail(`/product/insurance/detail`, row.insuranceId)" >
size="small">产品详情</el-button>
</template></el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -100,7 +61,8 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
</div> </div>
</template> </template>

@ -1,17 +1,10 @@
<template> <template>
<!-- 个人额度模型 --> <!-- 个人额度模型 -->
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" :disabled="disabled">
label-suffix=":"
:disabled="disabled">
<el-form-item label="模型名称"> <el-form-item label="模型名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="modelName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="modelName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
@ -19,71 +12,52 @@
<h6 class="step-name mb-2">{{ formProcess[0]?.name }}</h6> <h6 class="step-name mb-2">{{ formProcess[0]?.name }}</h6>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.firstMode"> <el-select v-model="form.firstMode">
<el-option v-for="item in formProcess[0]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in formProcess[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<h6 class="step-name mt-4 mb-2">{{ formProcess[1]?.name }}</h6> <h6 class="step-name mt-4 mb-2">{{ formProcess[1]?.name }}</h6>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.secondMode"> <el-select v-model="form.secondMode">
<el-option v-for="item in formProcess[1]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in formProcess[1]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<h6 class="step-name mt-4 mb-2">{{ formProcess[2]?.name }}</h6> <h6 class="step-name mt-4 mb-2">{{ formProcess[2]?.name }}</h6>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.thirdMode"> <el-select v-model="form.thirdMode">
<el-option v-for="item in formProcess[2]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in formProcess[2]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="且"></el-form-item> <el-form-item label="且"></el-form-item>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.andThird"> <el-select v-model="form.andThird">
<el-option v-for="item in formProcess[2]?.recordChildren[1]?.subject?.itemList" <el-option v-for="item in formProcess[2]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="额度模型"> <el-form-item label="额度模型">
<el-table class="c-table" <el-table class="c-table" :data="form.individualCreditModels" :span-method="span" :cell-style="{ background: '#fff' }" border>
:data="form.individualCreditModels" <el-table-column prop="indexName" label="指标名称" min-width="100" align="center">
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="indexName"
label="指标名称"
min-width="100"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<span :class="{ 'text-[#006bff]': !$index || $index === len }">{{ row?.indexName }}</span> <span :class="{ 'text-[#006bff]': !$index || $index === len }">{{ row?.indexName }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="描述" <el-table-column label="描述" min-width="150">
min-width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<span :class="{ 'text-[#006bff]': !$index || $index === len }">{{ row?.description }}</span> <span :class="{ 'text-[#006bff]': !$index || $index === len }">{{ row?.description }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="分值" <el-table-column label="分值" min-width="150">
min-width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<div v-if="$index !== len" <div v-if="$index !== len" class="flex items-center">
class="flex items-center"> <span v-if="!$index" class="mr-2 whitespace-nowrap">{{ row?.subject?.name }}</span>
<span v-if="!$index" <el-select v-if="row.subject" v-model="row.score">
class="mr-2 whitespace-nowrap">{{ row?.subject?.name }}</span> <el-option
<el-select v-if="row.subject" v-for="item in row?.subject?.itemList.sort((a, b) => +a.options.replace(/[^\d-]/, '') - +b.options.replace(/[^\d-]/, ''))"
v-model="row.score">
<el-option v-for="item in row?.subject?.itemList.sort((a, b) => +(a.options.replace(/[^\d-]/, '')) - +(b.options.replace(/[^\d-]/, '')))"
:key="item" :key="item"
:value="item.options" /> :value="item.options"
/>
</el-select> </el-select>
</div> </div>
<span v-else <span v-else class="text-[#006bff]">以上分值合计</span>
class="text-[#006bff]">以上分值合计</span>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -91,16 +65,12 @@
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -242,43 +212,48 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 4, rowspan: 4,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge2.includes(rowIndex)) { }
if (rowMerge2.includes(rowIndex)) {
return { return {
rowspan: 2, rowspan: 2,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge3.includes(rowIndex)) { }
if (rowMerge3.includes(rowIndex)) {
return { return {
rowspan: 5, rowspan: 5,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge4.includes(rowIndex)) { }
if (rowMerge4.includes(rowIndex)) {
return { return {
rowspan: 3, rowspan: 3,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 32) { }
if (rowIndex === 32) {
return { return {
rowspan: 6, rowspan: 6,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 91) { }
if (rowIndex === 91) {
return { return {
rowspan: 7, rowspan: 7,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge5.includes(rowIndex)) { }
if (rowMerge5.includes(rowIndex)) {
return { return {
rowspan: 1, rowspan: 1,
colspan: 1, colspan: 1,
}; };
} else { }
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
}; };
} }
}
}; };
const getItemId = (name: string): number | string => { const getItemId = (name: string): number | string => {
@ -291,10 +266,10 @@ const addRecord = async (data: Record<string, any>) => {
let preIds = `1,${Cookies.get('sand-level')},42,68,756,772`; // 1id let preIds = `1,${Cookies.get('sand-level')},42,68,756,772`; // 1id
const rule = [handleId(140, 28, modelName.value, `${preIds},140`, 3)]; const rule = [handleId(140, 28, modelName.value, `${preIds},140`, 3)];
data.firstMode && rule.push(handleId(777, 236, getItemId(data.firstMode), preIds + ',774,777', 1)); data.firstMode && rule.push(handleId(777, 236, getItemId(data.firstMode), `${preIds},774,777`, 1));
data.secondMode && rule.push(handleId(777, 236, getItemId(data.secondMode), preIds + ',775,777', 1)); data.secondMode && rule.push(handleId(777, 236, getItemId(data.secondMode), `${preIds},775,777`, 1));
data.thirdMode && rule.push(handleId(777, 236, getItemId(data.thirdMode), preIds + ',776,777', 1)); data.thirdMode && rule.push(handleId(777, 236, getItemId(data.thirdMode), `${preIds},776,777`, 1));
data.andThird && rule.push(handleId(778, 236, getItemId(data.andThird), preIds + ',776,778', 1)); data.andThird && rule.push(handleId(778, 236, getItemId(data.andThird), `${preIds},776,778`, 1));
preIds += `,788`; preIds += `,788`;
form.value.individualCreditModels[0].score && form.value.individualCreditModels[0].score &&
@ -303,7 +278,7 @@ const addRecord = async (data: Record<string, any>) => {
790, 790,
238, 238,
form.value?.individualCreditModels[0]?.subject?.itemList.find((e) => e.options === form.value.individualCreditModels[0].score)?.itemId, form.value?.individualCreditModels[0]?.subject?.itemList.find((e) => e.options === form.value.individualCreditModels[0].score)?.itemId,
preIds + ',789,790', `${preIds},789,790`,
1, 1,
), ),
); );

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="modelName" label="个人额度模型名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="modelName"
label="个人额度模型名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.id])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.id])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '个人额度模型'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '个人额度模型'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,86 +1,63 @@
<template> <template>
<!-- 企业额度模型 --> <!-- 企业额度模型 -->
<el-form label-width="80px" <el-form label-width="80px" class="form" status-icon>
class="form"
status-icon>
<h6 class="step-name mb-2">{{ info[0]?.name }}</h6> <h6 class="step-name mb-2">{{ info[0]?.name }}</h6>
<el-form-item class="mb-1" <el-form-item class="mb-1" label="不超过">
label="不超过">
<el-select v-model="form.firstMode"> <el-select v-model="form.firstMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item class="mb-1" <el-form-item class="mb-1" label="且"></el-form-item>
label="且"></el-form-item>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.andFirst"> <el-select v-model="form.andFirst">
<el-option v-for="item in info[0]?.recordChildren[1]?.subject?.itemList" <el-option v-for="item in info[0]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[1]?.name }}</h6> <h6 class="step-name mt-4 mb-2">{{ info[1]?.name }}</h6>
<el-form-item class="mb-1" <el-form-item class="mb-1" label="不超过">
label="不超过">
<el-select v-model="form.secondMode"> <el-select v-model="form.secondMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item class="mb-1" <el-form-item class="mb-1" label="且"></el-form-item>
label="且"></el-form-item>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.andSecond"> <el-select v-model="form.andSecond">
<el-option v-for="item in info[0]?.recordChildren[1]?.subject?.itemList" <el-option v-for="item in info[0]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[2]?.name }}</h6> <h6 class="step-name mt-4 mb-2">{{ info[2]?.name }}</h6>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.thirdMode"> <el-select v-model="form.thirdMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[3]?.name }}</h6> <h6 class="step-name mt-4 mb-2">{{ info[3]?.name }}</h6>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.fourthMode"> <el-select v-model="form.fourthMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[4]?.name }}</h6> <h6 class="step-name mt-4 mb-2">{{ info[4]?.name }}</h6>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.fifthMode"> <el-select v-model="form.fifthMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[5]?.name }}</h6> <h6 class="step-name mt-4 mb-2">{{ info[5]?.name }}</h6>
<el-form-item label="不超过"> <el-form-item label="不超过">
<el-select v-model="form.sixthMode"> <el-select v-model="form.sixthMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit">确认完成配置</div>
@click="submit">确认完成配置</div>
</div> </div>
</template> </template>
@ -138,16 +115,16 @@ const getItemId = (name: string): number | string => {
}; };
// //
const addRecord = async (data: Record<string, any>) => { const addRecord = async (data: Record<string, any>) => {
let preIds = `1,${Cookies.get('sand-level')},42,68,756,773`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,68,756,773`; // 1id
const rule: Array<Record<string, any>> = []; const rule: Array<Record<string, any>> = [];
data.firstMode && rule.push(handleId(785, 237, getItemId(data.firstMode), preIds + ',779,785', 1)); data.firstMode && rule.push(handleId(785, 237, getItemId(data.firstMode), `${preIds},779,785`, 1));
data.andFirst && rule.push(handleId(786, 237, getItemId(data.andFirst), preIds + ',779,786', 1)); data.andFirst && rule.push(handleId(786, 237, getItemId(data.andFirst), `${preIds},779,786`, 1));
data.secondMode && rule.push(handleId(785, 237, getItemId(data.secondMode), preIds + ',780,785', 1)); data.secondMode && rule.push(handleId(785, 237, getItemId(data.secondMode), `${preIds},780,785`, 1));
data.andSecond && rule.push(handleId(786, 237, getItemId(data.andSecond), preIds + ',780,786', 1)); data.andSecond && rule.push(handleId(786, 237, getItemId(data.andSecond), `${preIds},780,786`, 1));
data.thirdMode && rule.push(handleId(785, 237, getItemId(data.thirdMode), preIds + ',781,785', 1)); data.thirdMode && rule.push(handleId(785, 237, getItemId(data.thirdMode), `${preIds},781,785`, 1));
data.fourthMode && rule.push(handleId(787, 237, getItemId(data.fourthMode), preIds + ',782,787', 1)); data.fourthMode && rule.push(handleId(787, 237, getItemId(data.fourthMode), `${preIds},782,787`, 1));
data.fifthMode && rule.push(handleId(785, 237, getItemId(data.fifthMode), preIds + ',783,785', 1)); data.fifthMode && rule.push(handleId(785, 237, getItemId(data.fifthMode), `${preIds},783,785`, 1));
data.sixthMode && rule.push(handleId(785, 237, getItemId(data.sixthMode), preIds + ',784,785', 1)); data.sixthMode && rule.push(handleId(785, 237, getItemId(data.sixthMode), `${preIds},784,785`, 1));
await addOperation({ await addOperation({
...getIds(), ...getIds(),

@ -1,54 +1,31 @@
<template> <template>
<!-- 个人利率模型 --> <!-- 个人利率模型 -->
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled">
label-suffix=":"
class="form"
:disabled="disabled">
<el-form-item label="模型名称"> <el-form-item label="模型名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="modelName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="modelName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="利率模型"> <el-form-item label="利率模型">
<el-table class="c-table" <el-table class="c-table" :data="form.individualInterestRateModels" :span-method="span" :cell-style="{ background: '#fff' }" border>
:data="form.individualInterestRateModels" <el-table-column prop="indexName" label="指标名称" min-width="100" align="center">
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="indexName"
label="指标名称"
min-width="100"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<span>{{ row?.indexName }}</span> <span>{{ row?.indexName }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="描述" <el-table-column label="描述" min-width="150">
min-width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<span>{{ $index === 11 ? '=起始浮动比例+增减分值 且 不超过最高浮动比例' : row?.description }}</span> <span>{{ $index === 11 ? '=起始浮动比例+增减分值 且 不超过最高浮动比例' : row?.description }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="分值" <el-table-column label="分值" min-width="150">
min-width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<span v-if="$index === 11">以上分值合计</span> <span v-if="$index === 11">以上分值合计</span>
<el-select v-else-if="$index !== 13 && row.subject && row.subject.itemList" <el-select v-else-if="$index !== 13 && row.subject && row.subject.itemList" class="w-full" v-model="row.score">
class="w-full" <el-option v-for="item in row?.subject?.itemList.sort((a, b) => +a.options - +b.options)" :key="item" :value="item.options" />
v-model="row.score">
<el-option v-for="item in row?.subject?.itemList.sort((a, b) => +a.options - +b.options)"
:key="item"
:value="item.options" />
</el-select> </el-select>
<el-input v-else <el-input v-else placeholder="请输入" v-model="row.score"></el-input>
placeholder="请输入"
v-model="row.score"></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
@ -57,25 +34,16 @@
<el-form-item :label="formProcess[0]?.name"> <el-form-item :label="formProcess[0]?.name">
<div class="flex-1"> <div class="flex-1">
<p class="mb-1">{{ formProcess[0]?.recordChildren[0]?.name }}</p> <p class="mb-1">{{ formProcess[0]?.recordChildren[0]?.name }}</p>
<el-select v-model="form.finalFloatingRatioEqual" <el-select v-model="form.finalFloatingRatioEqual" clearable>
clearable> <el-option v-for="item in formProcess[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
<el-option v-for="item in formProcess[0]?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
<p class="mt-3 mb-1">{{ formProcess[0]?.recordChildren[1]?.name }}</p> <p class="mt-3 mb-1">{{ formProcess[0]?.recordChildren[1]?.name }}</p>
<el-select v-model="form.finalFloatingRatioLess" <el-select v-model="form.finalFloatingRatioLess" clearable>
clearable> <el-option v-for="item in formProcess[0]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
<el-option v-for="item in formProcess[0]?.recordChildren[1]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
<p class="mt-3 mb-1">{{ formProcess[0]?.recordChildren[2]?.name }}</p> <p class="mt-3 mb-1">{{ formProcess[0]?.recordChildren[2]?.name }}</p>
<el-select v-model="form.finalFloatingRatioGreater" <el-select v-model="form.finalFloatingRatioGreater" clearable>
clearable> <el-option v-for="item in formProcess[0]?.recordChildren[2]?.subject?.itemList" :key="item" :value="item.options" />
<el-option v-for="item in formProcess[0]?.recordChildren[2]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
</div> </div>
</el-form-item> </el-form-item>
@ -84,23 +52,17 @@
<div class="flex-1"> <div class="flex-1">
<p class="mb-1">{{ formProcess[1]?.recordChildren[0]?.name }}</p> <p class="mb-1">{{ formProcess[1]?.recordChildren[0]?.name }}</p>
<el-select v-model="form.finalInterestRateEqual"> <el-select v-model="form.finalInterestRateEqual">
<el-option v-for="item in formProcess[1]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in formProcess[1]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -218,23 +180,24 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 5, rowspan: 5,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 5 || rowIndex === 8) { }
if (rowIndex === 5 || rowIndex === 8) {
return { return {
rowspan: 3, rowspan: 3,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 11 || rowIndex === 12 || rowIndex === 13) { }
if (rowIndex === 11 || rowIndex === 12 || rowIndex === 13) {
return { return {
rowspan: 1, rowspan: 1,
colspan: 1, colspan: 1,
}; };
} else { }
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
}; };
} }
}
}; };
const getItemId = (name: string): number | string => { const getItemId = (name: string): number | string => {
@ -247,21 +210,21 @@ const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,68,757,935`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,68,757,935`; // 1id
const rule = [handleId(140, 28, modelName.value, `${preIds},140`, 3)]; const rule = [handleId(140, 28, modelName.value, `${preIds},140`, 3)];
const listIds = preIds + ',937'; const listIds = `${preIds},937`;
form.value.individualInterestRateModels.forEach((e, i) => { form.value.individualInterestRateModels.forEach((e, i) => {
if (i !== 12 && i !== 13 && e.subject) { if (i !== 12 && i !== 13 && e.subject) {
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)); 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[12].score && rule.push(handleId(1229, 306, form.value.individualInterestRateModels[12].score, listIds + ',1229', 3)); form.value.individualInterestRateModels[12].score && rule.push(handleId(1229, 306, form.value.individualInterestRateModels[12].score, `${listIds},1229`, 3));
form.value.individualInterestRateModels[13].score && rule.push(handleId(1230, 307, form.value.individualInterestRateModels[13].score, listIds + ',1230', 3)); form.value.individualInterestRateModels[13].score && rule.push(handleId(1230, 307, form.value.individualInterestRateModels[13].score, `${listIds},1230`, 3));
data.finalFloatingRatioEqual && rule.push(handleId(1024, 279, getItemId(data.finalFloatingRatioEqual), preIds + ',1023,1024', 1)); 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)); data.finalFloatingRatioLess && rule.push(handleId(1025, 279, getItemId(data.finalFloatingRatioLess), `${preIds},1023,1025`, 1));
data.finalFloatingRatioGreater && rule.push(handleId(1026, 279, getItemId(data.finalFloatingRatioGreater), preIds + ',1023,1026', 1)); data.finalFloatingRatioGreater && rule.push(handleId(1026, 279, getItemId(data.finalFloatingRatioGreater), `${preIds},1023,1026`, 1));
data.finalInterestRateEqual && data.finalInterestRateEqual &&
rule.push( rule.push(
handleId(1028, 280, formProcess.value[1]?.recordChildren[0]?.subject?.itemList.find((e) => e.options === data.finalInterestRateEqual)?.itemId, preIds + ',1027,1028', 1), handleId(1028, 280, formProcess.value[1]?.recordChildren[0]?.subject?.itemList.find((e) => e.options === data.finalInterestRateEqual)?.itemId, `${preIds},1027,1028`, 1),
); );
await addOperation({ await addOperation({

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="modelName" label="个人利率模型名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="modelName"
label="个人利率模型名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.id])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.id])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '个人利率模型'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '个人利率模型'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
@ -98,6 +65,7 @@ import { Delete } from '@element-plus/icons-vue';
import { pageSizes, pageLayout } from '@/utils/common'; import { pageSizes, pageLayout } from '@/utils/common';
import { interestRateModelList, deletePersonalInterestRate } from '@/api/model'; import { interestRateModelList, deletePersonalInterestRate } from '@/api/model';
import Search from '@/components/Search.vue'; import Search from '@/components/Search.vue';
const Detail = defineAsyncComponent(() => import('./Detail.vue')); const Detail = defineAsyncComponent(() => import('./Detail.vue'));
const keyWord = ref<string>(); const keyWord = ref<string>();

@ -1,64 +1,31 @@
<template> <template>
<!-- 企业利率模型 --> <!-- 企业利率模型 -->
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled">
label-suffix=":"
class="form"
:disabled="disabled">
<el-form-item label="模型名称"> <el-form-item label="模型名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="modelName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="modelName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="利率模型"> <el-form-item label="利率模型">
<el-table class="c-table" <el-table class="c-table" :data="form.corporateInterestRateModelIndicators" :span-method="span" :cell-style="{ background: '#fff' }" border>
:data="form.corporateInterestRateModelIndicators" <el-table-column prop="indexName" label="指标名称" min-width="100" align="center"></el-table-column>
:span-method="span" <el-table-column label="计算公式" min-width="100" align="center">
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="indexName"
label="指标名称"
min-width="100"
align="center"></el-table-column>
<el-table-column label="计算公式"
min-width="100"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<el-select v-if="row.recordChildren && row?.recordChildren?.length < 3" <el-select v-if="row.recordChildren && row?.recordChildren?.length < 3" class="w-full" v-model="row.computationalFormula" disabled>
class="w-full" <el-option v-for="item in row.recordChildren[0]?.subject?.itemList" :key="item" :label="item.options" :value="item.itemId" />
v-model="row.computationalFormula"
disabled>
<el-option v-for="item in row.recordChildren[0]?.subject?.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
<span v-else-if="$index === 50"> =起始浮动比例+增减分值 不超过最高浮动比例</span> <span v-else-if="$index === 50"> =起始浮动比例+增减分值 不超过最高浮动比例</span>
<span v-else>--</span> <span v-else>--</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="standard" <el-table-column prop="standard" label="标准" min-width="150" align="center"></el-table-column>
label="标准" <el-table-column label="浮动系数" min-width="150">
min-width="150"
align="center"></el-table-column>
<el-table-column label="浮动系数"
min-width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<span v-if="$index === 50">以上分值合计</span> <span v-if="$index === 50">以上分值合计</span>
<el-input v-else-if="$index === 51 || $index === 52" <el-input v-else-if="$index === 51 || $index === 52" placeholder="请输入" v-model="row.floatingCoefficient"></el-input>
placeholder="请输入" <el-select v-else-if="row.subject" class="w-full" v-model="row.floatingCoefficient">
v-model="row.floatingCoefficient"></el-input> <el-option v-for="item in row?.subject?.itemList" :key="item" :value="item.options" />
<el-select v-else-if="row.subject"
class="w-full"
v-model="row.floatingCoefficient">
<el-option v-for="item in row?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
@ -68,25 +35,16 @@
<el-form-item :label="formProcess[0]?.name"> <el-form-item :label="formProcess[0]?.name">
<div class="flex-1"> <div class="flex-1">
<p class="mb-1">{{ formProcess[0]?.recordChildren[0]?.name }}</p> <p class="mb-1">{{ formProcess[0]?.recordChildren[0]?.name }}</p>
<el-select v-model="form.finalFloatingRatioEqual" <el-select v-model="form.finalFloatingRatioEqual" clearable>
clearable> <el-option v-for="item in formProcess[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
<el-option v-for="item in formProcess[0]?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
<p class="mt-3 mb-1">{{ formProcess[0]?.recordChildren[1]?.name }}</p> <p class="mt-3 mb-1">{{ formProcess[0]?.recordChildren[1]?.name }}</p>
<el-select v-model="form.finalFloatingRatioLess" <el-select v-model="form.finalFloatingRatioLess" clearable>
clearable> <el-option v-for="item in formProcess[0]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
<el-option v-for="item in formProcess[0]?.recordChildren[1]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
<p class="mt-3 mb-1">{{ formProcess[0]?.recordChildren[2]?.name }}</p> <p class="mt-3 mb-1">{{ formProcess[0]?.recordChildren[2]?.name }}</p>
<el-select v-model="form.finalFloatingRatioGreater" <el-select v-model="form.finalFloatingRatioGreater" clearable>
clearable> <el-option v-for="item in formProcess[0]?.recordChildren[2]?.subject?.itemList" :key="item" :value="item.options" />
<el-option v-for="item in formProcess[0]?.recordChildren[2]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
</div> </div>
</el-form-item> </el-form-item>
@ -95,23 +53,17 @@
<div class="flex-1"> <div class="flex-1">
<p class="mb-1">{{ formProcess[1]?.recordChildren[0]?.name }}</p> <p class="mb-1">{{ formProcess[1]?.recordChildren[0]?.name }}</p>
<el-select v-model="form.finalInterestRateEqual"> <el-select v-model="form.finalInterestRateEqual">
<el-option v-for="item in formProcess[1]?.recordChildren[0]?.subject?.itemList" <el-option v-for="item in formProcess[1]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
:key="item"
:value="item.options" />
</el-select> </el-select>
</div> </div>
</el-form-item> </el-form-item>
</el-form> </el-form>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -169,7 +121,7 @@ const getConfig = async () => {
ruleId: children[0]?.id, ruleId: children[0]?.id,
standard: children[0]?.name, standard: children[0]?.name,
subject: children[0]?.subject, subject: children[0]?.subject,
floatingCoefficient: cur?.corporateInterestRateModels ? (cur?.corporateInterestRateModels[0].floatingCoefficient ?? '') + '' : '', floatingCoefficient: cur?.corporateInterestRateModels ? `${cur?.corporateInterestRateModels[0].floatingCoefficient ?? ''}` : '',
id: cur?.corporateInterestRateModels ? cur?.corporateInterestRateModels[0].id : '', id: cur?.corporateInterestRateModels ? cur?.corporateInterestRateModels[0].id : '',
}; };
@ -181,7 +133,7 @@ const getConfig = async () => {
temp.standard = n.name; temp.standard = n.name;
temp.subject = n.subject; temp.subject = n.subject;
temp.ruleId = n.id; temp.ruleId = n.id;
temp.floatingCoefficient = (cur?.floatingCoefficient ?? '') + ''; temp.floatingCoefficient = `${cur?.floatingCoefficient ?? ''}`;
temp.id = cur?.id ?? ''; temp.id = cur?.id ?? '';
temp.rule = 1; temp.rule = 1;
result.push(temp); result.push(temp);
@ -248,18 +200,21 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 4, rowspan: 4,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge2.includes(rowIndex)) { }
if (rowMerge2.includes(rowIndex)) {
return { return {
rowspan: 5, rowspan: 5,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge3.includes(rowIndex)) { }
if (rowMerge3.includes(rowIndex)) {
if (columnIndex === 1) { if (columnIndex === 1) {
return { return {
rowspan: 1, rowspan: 1,
colspan: 2, colspan: 2,
}; };
} else if (columnIndex !== 2) { }
if (columnIndex !== 2) {
return { return {
rowspan: 1, rowspan: 1,
colspan: 1, colspan: 1,
@ -299,7 +254,7 @@ const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,68,757,936`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,68,757,936`; // 1id
const rule = [handleId(140, 28, modelName.value, `${preIds},140`, 3)]; const rule = [handleId(140, 28, modelName.value, `${preIds},140`, 3)];
const listIds = preIds + ',938'; const listIds = `${preIds},938`;
form.value.corporateInterestRateModelIndicators.forEach((e, i) => { form.value.corporateInterestRateModelIndicators.forEach((e, i) => {
// //
e.floatingCoefficient && e.floatingCoefficient &&
@ -309,7 +264,7 @@ const addRecord = async (data: Record<string, any>) => {
e.ruleId, e.ruleId,
e?.subject?.subjectId, e?.subject?.subjectId,
e?.subject?.itemList?.find((n) => n.options === e.floatingCoefficient)?.itemId, e?.subject?.itemList?.find((n) => n.options === e.floatingCoefficient)?.itemId,
`${listIds},${e.stRecordId}${e?.recordChildren?.length > 2 ? '' : ',' + e?.recordChildren[1]?.id},${e.ruleId}`, `${listIds},${e.stRecordId}${e?.recordChildren?.length > 2 ? '' : `,${e?.recordChildren[1]?.id}`},${e.ruleId}`,
1, 1,
), ),
); );
@ -333,12 +288,12 @@ const addRecord = async (data: Record<string, any>) => {
} }
}); });
data.finalFloatingRatioEqual && rule.push(handleId(1024, 279, getItemId(data.finalFloatingRatioEqual), preIds + ',1023,1024', 1)); 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)); data.finalFloatingRatioLess && rule.push(handleId(1025, 279, getItemId(data.finalFloatingRatioLess), `${preIds},1023,1025`, 1));
data.finalFloatingRatioGreater && rule.push(handleId(1026, 279, getItemId(data.finalFloatingRatioGreater), preIds + ',1023,1026', 1)); data.finalFloatingRatioGreater && rule.push(handleId(1026, 279, getItemId(data.finalFloatingRatioGreater), `${preIds},1023,1026`, 1));
data.finalInterestRateEqual && data.finalInterestRateEqual &&
rule.push( rule.push(
handleId(1028, 280, formProcess.value[1]?.recordChildren[0]?.subject?.itemList.find((e) => e.options === data.finalInterestRateEqual)?.itemId, preIds + ',1027,1028', 1), handleId(1028, 280, formProcess.value[1]?.recordChildren[0]?.subject?.itemList.find((e) => e.options === data.finalInterestRateEqual)?.itemId, `${preIds},1027,1028`, 1),
); );
await addOperation({ await addOperation({

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="modelName" label="企业利率模型名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="modelName"
label="企业利率模型名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.id])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.id])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '企业利率模型'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '企业利率模型'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>
@ -98,6 +65,7 @@ import { Delete } from '@element-plus/icons-vue';
import { pageSizes, pageLayout } from '@/utils/common'; import { pageSizes, pageLayout } from '@/utils/common';
import { interestRateModelList, deleteBusinessInterestRate } from '@/api/model'; import { interestRateModelList, deleteBusinessInterestRate } from '@/api/model';
import Search from '@/components/Search.vue'; import Search from '@/components/Search.vue';
const Detail = defineAsyncComponent(() => import('./Detail.vue')); const Detail = defineAsyncComponent(() => import('./Detail.vue'));
const keyWord = ref<string>(); const keyWord = ref<string>();

@ -1,23 +1,16 @@
<template> <template>
<div v-if="list.length"> <div v-if="list.length">
<div class="menu-card"> <div class="menu-card">
<el-menu class="left" <el-menu class="left" :default-active="curMenu" @select="handleSelect">
:default-active="curMenu" <el-sub-menu v-for="(item, i) in list" :key="i" :index="String(item.id)">
@select="handleSelect">
<el-sub-menu v-for="(item, i) in list"
:key="i"
:index="String(item.id)">
<template #title> <template #title>
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</template> </template>
<el-menu-item v-for="(child, j) in item?.recordChildren" <el-menu-item v-for="(child, j) in item?.recordChildren" :key="j" :index="String(child.id)">{{ child.name }}</el-menu-item>
:key="j"
:index="String(child.id)">{{ child.name }}</el-menu-item>
</el-sub-menu> </el-sub-menu>
</el-menu> </el-menu>
<div class="right"> <div class="right">
<component v-if="loadedComponents[activeComponent]" <component v-if="loadedComponents[activeComponent]" :is="loadedComponents[activeComponent]" />
:is="loadedComponents[activeComponent]" />
</div> </div>
</div> </div>
</div> </div>

@ -1,64 +1,33 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" :max-height="'calc(100vh - ' + (disabled ? 190 : 230) + 'px)'" :cell-style="{ background: '#fff' }" :span-method="span" border>
:data="form" <el-table-column prop="name" label="政务黑名单指标" min-width="100" align="center"> </el-table-column>
:max-height="'calc(100vh - ' + (disabled ? 190 : 230) + 'px)'" <el-table-column label="进黑名单条件" min-width="350" align="center">
:cell-style="{background:'#fff'}"
:span-method="span"
border>
<el-table-column prop="name"
label="政务黑名单指标"
min-width="100"
align="center">
</el-table-column>
<el-table-column label="进黑名单条件"
min-width="350"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<!-- 大病报销 || 贫困户 --> <!-- 大病报销 || 贫困户 -->
<div v-if="row.stRecordId == 161 || row.stRecordId == 164" <div v-if="row.stRecordId == 161 || row.stRecordId == 164" class="flex items-center">
class="flex items-center"> <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[row.span ? 1 : 0]?.name }}</span>
<span v-if="row.recordChildren"
class="whitespace-nowrap">{{ row?.recordChildren[row.span ? 1 : 0]?.name }}</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol">
clearable <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
placeholder="请输入"
v-model="row.num"></el-input>
<span class="ml-2 whitespace-nowrap">万元</span> <span class="ml-2 whitespace-nowrap">万元</span>
</div> </div>
<!-- 大龄未婚 --> <!-- 大龄未婚 -->
<div v-else-if="row.stRecordId == 167" <div v-else-if="row.stRecordId == 167" class="flex items-center">
class="flex items-center">
<template v-if="row.span"> <template v-if="row.span">
<span class="whitespace-nowrap">且近一年</span> <span class="whitespace-nowrap">且近一年</span>
<div class="w-[90px]"> <div class="w-[90px]">
<el-select class="mx-2" <el-select class="mx-2" v-model="row.had">
v-model="row.had">
<el-option value="有" /> <el-option value="有" />
<el-option value="无" /> <el-option value="无" />
</el-select> </el-select>
@ -68,20 +37,13 @@
<template v-else> <template v-else>
<span class="whitespace-nowrap">未婚且年龄</span> <span class="whitespace-nowrap">未婚且年龄</span>
<div class="w-[90px]"> <div class="w-[90px]">
<el-select class="mx-2" <el-select class="mx-2" v-model="row.symbol">
v-model="row.symbol"> <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
placeholder="请输入"
v-model="row.num"></el-input>
<span class="ml-2 whitespace-nowrap">,</span> <span class="ml-2 whitespace-nowrap">,</span>
<el-select class="w-[80px] ml-2" <el-select class="w-[80px] ml-2" v-model="row.had">
v-model="row.had">
<el-option value="有" /> <el-option value="有" />
<el-option value="无" /> <el-option value="无" />
</el-select> </el-select>
@ -91,74 +53,50 @@
<span v-else>{{ '命中' + row.name }}</span> <span v-else>{{ '命中' + row.name }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="本人命中进黑名单" <el-table-column label="本人命中进黑名单" min-width="100" align="center">
min-width="100"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.personalHitBlacklist"> <el-radio-group v-model="row.personalHitBlacklist">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="配偶命中拒入" <el-table-column label="配偶命中拒入" min-width="100" align="center">
min-width="100"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.mateHitRejected"> <el-radio-group v-model="row.mateHitRejected">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="父母/子女命中拒入" <el-table-column label="父母/子女命中拒入" min-width="100" align="center">
min-width="100"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.parentsHitRejected"> <el-radio-group v-model="row.parentsHitRejected">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="其他家庭成员命中拒入" <el-table-column label="其他家庭成员命中拒入" min-width="100" align="center">
min-width="100"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.otherFamilyMembersHitRejected"> <el-radio-group v-model="row.otherFamilyMembersHitRejected">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="企业大股东命中拒入" <el-table-column label="企业大股东命中拒入" min-width="100" align="center">
min-width="100"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.corporateMajorityHitRejected"> <el-radio-group v-model="row.corporateMajorityHitRejected">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -210,7 +148,7 @@ const getConfig = async () => {
const cur = info.value.find((n) => n.stRecordId === e.id); const cur = info.value.find((n) => n.stRecordId === e.id);
let num = cur?.ruleOne.match(/\d+/g); let num = cur?.ruleOne.match(/\d+/g);
let symbol = cur?.ruleOne.match(/[<>=]+/g); let symbol = cur?.ruleOne.match(/[<>=]+/g);
let had = cur?.ruleOne.match(/[有无]+/g); const had = cur?.ruleOne.match(/[有无]+/g);
let temp = { let temp = {
...getIds(), ...getIds(),
name: e.name, name: e.name,
@ -289,7 +227,8 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 2, rowspan: 2,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 5 || rowIndex === 7 || rowIndex === 9) { }
if (rowIndex === 5 || rowIndex === 7 || rowIndex === 9) {
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
@ -308,15 +247,15 @@ const addRecord = async (data: Record<string, any>) => {
e?.recordChildren.map((n, j) => { e?.recordChildren.map((n, j) => {
if (j !== len) { if (j !== len) {
if (n.id === 169 && e.had) { if (n.id === 169 && e.had) {
rule.push(handleId(n.id, n.subjectId, e.had === '有' ? 387 : 388, preIds + ',' + e.stRecordId + ',' + n.id, 1)); rule.push(handleId(n.id, n.subjectId, e.had === '有' ? 387 : 388, `${preIds},${e.stRecordId},${n.id}`, 1));
} else if (n.id === 168) { } else if (n.id === 168) {
const val = e.symbol + e.num; const val = e.symbol + e.num;
val && rule.push(handleId(n.id, n.subjectId, val, preIds + ',' + e.stRecordId + ',' + n.id, 5)); val && rule.push(handleId(n.id, n.subjectId, val, `${preIds},${e.stRecordId},${n.id}`, 5));
} else if (n.id === 170 && e.had) { } else if (n.id === 170 && e.had) {
rule.push(handleId(n.id, n.subjectId, e.had === '有' ? 389 : 390, preIds + ',' + e.stRecordId + ',' + n.id, 1)); rule.push(handleId(n.id, n.subjectId, e.had === '有' ? 389 : 390, `${preIds},${e.stRecordId},${n.id}`, 1));
} else { } else {
const val = j ? (n.id === 168 ? e.symbol + e.num : e.ruleTwo) : e.ruleOne; const val = j ? (n.id === 168 ? e.symbol + e.num : e.ruleTwo) : e.ruleOne;
val && rule.push(handleId(n.id, n.subjectId, val, preIds + ',' + e.stRecordId + ',' + n.id, 5)); val && rule.push(handleId(n.id, n.subjectId, val, `${preIds},${e.stRecordId},${n.id}`, 5));
} }
} }
}); });
@ -363,7 +302,7 @@ const submit = async (synchronizeUpdate?: number) => {
// //
param[i - 1].ruleTwo = e.had; param[i - 1].ruleTwo = e.had;
} else { } else {
e.ruleOne = e.symbol + e.num + ',' + e.had; e.ruleOne = `${e.symbol + e.num},${e.had}`;
} }
} }
}); });

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="政务黑名单策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="政务黑名单策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '政务黑名单策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '政务黑名单策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,145 +1,83 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" :cell-style="{ background: '#fff' }" max-height="calc(100vh - 230px)" border>
:data="form" <el-table-column prop="name" label="征信黑名单指标" min-width="220" align="center"> </el-table-column>
:cell-style="{background:'#fff'}" <el-table-column label="进黑名单条件" width="700" align="center">
max-height="calc(100vh - 230px)"
border>
<el-table-column prop="name"
label="征信黑名单指标"
min-width="220"
align="center">
</el-table-column>
<el-table-column label="进黑名单条件"
width="700"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<!-- 贷记卡账户状态 --> <!-- 贷记卡账户状态 -->
<div v-if="row.stRecordId == 204" <div v-if="row.stRecordId == 204" class="flex items-center">
class="flex items-center"> <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[0]?.name }}</span>
<span v-if="row.recordChildren" <el-input class="w-[150px] mx-2" placeholder="请输入" v-model="row.ruleOne"></el-input>
class="whitespace-nowrap">{{ row?.recordChildren[0]?.name }}</span>
<el-input class="w-[150px] mx-2"
placeholder="请输入"
v-model="row.ruleOne"></el-input>
<span class="whitespace-nowrap">的信用卡</span> <span class="whitespace-nowrap">的信用卡</span>
</div> </div>
<!-- 贷记卡审批通过率 --> <!-- 贷记卡审批通过率 -->
<div v-else-if="isRule(row.stRecordId)" <div v-else-if="isRule(row.stRecordId)" class="flex items-center">
class="flex items-center"> <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[0]?.name }}</span>
<span v-if="row.recordChildren"
class="whitespace-nowrap">{{ row?.recordChildren[0]?.name }}</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol">
clearable <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
placeholder="请输入" <span v-if="row.recordChildren" class="ml-2 whitespace-nowrap">{{ row?.recordChildren[1]?.name }}</span>
v-model="row.num"></el-input>
<span v-if="row.recordChildren"
class="ml-2 whitespace-nowrap">{{ row?.recordChildren[1]?.name }}</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol1">
clearable <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol1">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num1"></el-input>
placeholder="请输入"
v-model="row.num1"></el-input>
<span class="ml-2 whitespace-nowrap"></span> <span class="ml-2 whitespace-nowrap"></span>
</div> </div>
<div v-else-if="row.stRecordId == 230 || row.stRecordId == 231" <div v-else-if="row.stRecordId == 230 || row.stRecordId == 231" class="flex">
class="flex"> <el-select class="w-[85px] ml-2" clearable v-model="row.ruleOne">
<el-select class="w-[85px] ml-2"
clearable
v-model="row.ruleOne">
<el-option value="有" /> <el-option value="有" />
<el-option value="无" /> <el-option value="无" />
</el-select> </el-select>
</div> </div>
<div v-else <div v-else class="flex items-center">
class="flex items-center"> <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[0]?.name }}</span>
<span v-if="row.recordChildren"
class="whitespace-nowrap">{{ row?.recordChildren[0]?.name }}</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol">
clearable <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
placeholder="请输入" <span class="ml-2 whitespace-nowrap"
v-model="row.num"></el-input> >{{ row.stRecordId === 203 || row.stRecordId === 205 ? '元' : row.stRecordId === 207 || row.stRecordId === 229 ? '万元' : ' ' }}</span
<span class="ml-2 whitespace-nowrap">{{ row.stRecordId === 203 || row.stRecordId === 205 ? '元' : row.stRecordId === 207 || row.stRecordId === 229 ? '万元' : ' ' }}</span> >
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="本人命中是否进黑名单" <el-table-column label="本人命中是否进黑名单" min-width="160" align="center">
min-width="160"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.hitTheBlacklist"> <el-radio-group v-model="row.hitTheBlacklist">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="配偶命中是否拒入" <el-table-column label="配偶命中是否拒入" min-width="160" align="center">
min-width="160"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.mateRejectedStandardIdentity"> <el-radio-group v-model="row.mateRejectedStandardIdentity">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -198,11 +136,11 @@ const getConfig = async () => {
const result = []; const result = [];
process.slice(1).map((e) => { process.slice(1).map((e) => {
const cur = info.value.find((n) => n.stRecordId === e.id); const cur = info.value.find((n) => n.stRecordId === e.id);
let num = cur?.ruleOne?.match(/\d+/g); const num = cur?.ruleOne?.match(/\d+/g);
let num1 = cur?.ruleTwo?.match(/\d+/g); const num1 = cur?.ruleTwo?.match(/\d+/g);
let symbol = cur?.ruleOne?.match(/[<>=]+/g); const symbol = cur?.ruleOne?.match(/[<>=]+/g);
let symbol1 = cur?.ruleTwo?.match(/[<>=]+/g); const symbol1 = cur?.ruleTwo?.match(/[<>=]+/g);
let temp = { const temp = {
...getIds(), ...getIds(),
name: e.name, name: e.name,
recordChildren: e.recordChildren, recordChildren: e.recordChildren,
@ -256,20 +194,20 @@ const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,151`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,67,147,151`; // 1id
const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)]; const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)];
data[1].ruleOne && rule.push(handleId(234, 81, data[1].ruleOne, preIds + ',204,234', 3)); data[1].ruleOne && rule.push(handleId(234, 81, data[1].ruleOne, `${preIds},204,234`, 3));
data[27].ruleOne && rule.push(handleId(267, 114, data[27].ruleOne === '有' ? 306 : 305, preIds + ',230,267', 1)); data[27].ruleOne && rule.push(handleId(267, 114, data[27].ruleOne === '有' ? 306 : 305, `${preIds},230,267`, 1));
data[28].ruleOne && rule.push(handleId(268, 115, data[28].ruleOne === '有' ? 308 : 307, preIds + ',231,268', 1)); data[28].ruleOne && rule.push(handleId(268, 115, data[28].ruleOne === '有' ? 308 : 307, `${preIds},231,268`, 1));
data.map((e, i) => { data.map((e, i) => {
if (e.stRecordId != 204 && e.stRecordId != 230 && e.stRecordId != 231) { if (e.stRecordId != 204 && e.stRecordId != 230 && e.stRecordId != 231) {
const len = e?.recordChildren?.length - 1; const len = e?.recordChildren?.length - 1;
e?.recordChildren.map((n, j) => { e?.recordChildren.map((n, j) => {
const val = j ? e.ruleTwo : e.ruleOne; const val = j ? e.ruleTwo : e.ruleOne;
j !== len && val && rule.push(handleId(n.id, n.subjectId, val, preIds + ',' + e.stRecordId + ',' + n.id, 5)); j !== len && val && rule.push(handleId(n.id, n.subjectId, val, `${preIds},${e.stRecordId},${n.id}`, 5));
}); });
} }
// //
e.hitTheBlacklist && rule.push(handleId(1245, 140, e.hitTheBlacklist, preIds + ',' + e.stRecordId + ',1245', 1)); e.hitTheBlacklist && rule.push(handleId(1245, 140, e.hitTheBlacklist, `${preIds},${e.stRecordId},1245`, 1));
e.mateRejectedStandardIdentity && rule.push(handleId(274, 140, e.mateRejectedStandardIdentity, preIds + ',' + e.stRecordId + ',274', 1)); e.mateRejectedStandardIdentity && rule.push(handleId(274, 140, e.mateRejectedStandardIdentity, `${preIds},${e.stRecordId},274`, 1));
}); });
await addOperation({ await addOperation({
@ -286,7 +224,7 @@ const addRecord = async (data: Record<string, any>) => {
const submit = async (synchronizeUpdate?: number) => { const submit = async (synchronizeUpdate?: number) => {
loading.value = true; loading.value = true;
try { try {
let param = JSON.parse(JSON.stringify(form.value)); const param = JSON.parse(JSON.stringify(form.value));
param.map((e, i) => { param.map((e, i) => {
if (info.value.length) e.id = info.value.find((n) => n.stRecordId === e.stRecordId)?.id; if (info.value.length) e.id = info.value.find((n) => n.stRecordId === e.stRecordId)?.id;
if (e.stRecordId != 204 && e.stRecordId != 230 && e.stRecordId != 231) { if (e.stRecordId != 204 && e.stRecordId != 230 && e.stRecordId != 231) {

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="征信黑名单策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="征信黑名单策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '征信黑名单策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '征信黑名单策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,172 +1,87 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" max-height="calc(100vh - 230px)" :cell-style="{ background: '#fff' }" :span-method="span" border>
:data="form" <el-table-column prop="name" label="数据源" min-width="100" align="center"> </el-table-column>
max-height="calc(100vh - 230px)" <el-table-column prop="rule" label="商采黑名单指标" min-width="150"> </el-table-column>
:cell-style="{background:'#fff'}" <el-table-column label="进黑名单条件" width="540">
:span-method="span"
border>
<el-table-column prop="name"
label="数据源"
min-width="100"
align="center">
</el-table-column>
<el-table-column prop="rule"
label="商采黑名单指标"
min-width="150">
</el-table-column>
<el-table-column label="进黑名单条件"
width="540">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<div v-if="$index < 4" <div v-if="$index < 4" class="flex items-center">
class="flex items-center">
<span class="whitespace-nowrap">{{ row.rule }}</span> <span class="whitespace-nowrap">{{ row.rule }}</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol">
clearable <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
placeholder="请输入"
v-model="row.num"></el-input>
<span class="ml-2 whitespace-nowrap"></span> <span class="ml-2 whitespace-nowrap"></span>
</div> </div>
<template v-else-if="$index > 3 && $index < 14 || $index === 16 || $index === 17 || $index === 19 || $index === 28">命中{{ row.rule }}</template> <template v-else-if="($index > 3 && $index < 14) || $index === 16 || $index === 17 || $index === 19 || $index === 28">命中{{ row.rule }}</template>
<!-- 腾讯 --> <!-- 腾讯 -->
<div v-else-if="$index === 14" <div v-else-if="$index === 14" class="flex items-center">
class="flex items-center"> <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[0]?.recordChildren[0]?.name }}</span>
<span v-if="row.recordChildren"
class="whitespace-nowrap">{{ row?.recordChildren[0]?.recordChildren[0]?.name }}</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol">
clearable <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
placeholder="请输入"
v-model="row.num"></el-input>
<span class="ml-2 whitespace-nowrap"></span> <span class="ml-2 whitespace-nowrap"></span>
<div class="w-[120px]"> <div class="w-[120px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.had">
clearable <el-option v-for="item in house" :key="item" :label="item.name" :value="item.name" />
v-model="row.had">
<el-option v-for="item in house"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<span class="ml-2 whitespace-nowrap"></span> <span class="ml-2 whitespace-nowrap"></span>
</div> </div>
<div v-else-if="$index === 15" <div v-else-if="$index === 15" class="flex items-center">
class="flex items-center"> <el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
<el-input class="w-[80px]"
placeholder="请输入"
v-model="row.num"></el-input>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol">
clearable <el-option v-for="item in units" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol">
<el-option v-for="item in units"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<span class="ml-2 whitespace-nowrap">内申请次数</span> <span class="ml-2 whitespace-nowrap">内申请次数</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol1">
clearable <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol1">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num1"></el-input>
placeholder="请输入"
v-model="row.num1"></el-input>
<span class="ml-2 whitespace-nowrap"></span> <span class="ml-2 whitespace-nowrap"></span>
<div class="w-[120px]"> <div class="w-[120px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.had">
clearable <el-option v-for="item in house" :key="item" :label="item.name" :value="item.name" />
v-model="row.had">
<el-option v-for="item in house"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<span class="ml-2 whitespace-nowrap"></span> <span class="ml-2 whitespace-nowrap"></span>
</div> </div>
<div v-else-if="$index === 18" <div v-else-if="$index === 18" class="w-[95px]">
class="w-[95px] "> <el-select v-if="row.recordChildren" clearable v-model="row.symbol">
<el-select v-if="row.recordChildren" <el-option v-for="item in row?.recordChildren[0]?.subject?.itemList" :key="item" :label="item.options" :value="item.options" />
clearable
v-model="row.symbol">
<el-option v-for="item in row?.recordChildren[0]?.subject?.itemList"
:key="item"
:label="item.options"
:value="item.options" />
</el-select> </el-select>
</div> </div>
<div v-else-if="$index > 19 && $index < 28" <div v-else-if="$index > 19 && $index < 28" class="flex items-center">
class="flex items-center"> <el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
<el-input class="w-[80px]"
placeholder="请输入"
v-model="row.num"></el-input>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol">
clearable <el-option v-for="item in units" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol">
<el-option v-for="item in units"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<span class="ml-2 whitespace-nowrap">{{ tdNames[row.ruleId] }}</span> <span class="ml-2 whitespace-nowrap">{{ tdNames[row.ruleId] }}</span>
<template v-if="row.ruleId === 350"> <template v-if="row.ruleId === 350">
<div class="w-[95px]"> <div class="w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.symbol1">
clearable <el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
v-model="row.symbol1">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
</el-select> </el-select>
</div> </div>
<el-input class="w-[80px]" <el-input class="w-[80px]" placeholder="请输入" v-model="row.num1"></el-input>
placeholder="请输入"
v-model="row.num1"></el-input>
<span class="ml-2 whitespace-nowrap"></span> <span class="ml-2 whitespace-nowrap"></span>
</template> </template>
</div> </div>
@ -174,17 +89,13 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -266,9 +177,9 @@ const getConfig = async () => {
const result = []; const result = [];
process.slice(1).map((e, i) => { process.slice(1).map((e, i) => {
const cur = info.value.find((n) => n.stRecordId === e.id); const cur = info.value.find((n) => n.stRecordId === e.id);
let num = getNum(cur?.ruleOne); const num = getNum(cur?.ruleOne);
let symbol = getSymbol(cur?.ruleOne); const symbol = getSymbol(cur?.ruleOne);
let had = getChinese(cur?.ruleOne); const had = getChinese(cur?.ruleOne);
let temp = { let temp = {
...getIds(), ...getIds(),
name: e.name, name: e.name,
@ -396,22 +307,26 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 4, rowspan: 4,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 4) { }
if (rowIndex === 4) {
return { return {
rowspan: 10, rowspan: 10,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 14 || rowIndex === 16) { }
if (rowIndex === 14 || rowIndex === 16) {
return { return {
rowspan: 2, rowspan: 2,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 18) { }
if (rowIndex === 18) {
return { return {
rowspan: 10, rowspan: 10,
colspan: 1, colspan: 1,
}; };
} else if (spanRows.includes(rowIndex)) { }
if (spanRows.includes(rowIndex)) {
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
@ -424,39 +339,39 @@ const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,152`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,67,147,152`; // 1id
const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)]; const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)];
data[0].ruleOne && rule.push(handleId(324, 150, data[0].ruleOne, preIds + ',318,324', 5)); data[0].ruleOne && rule.push(handleId(324, 150, data[0].ruleOne, `${preIds},318,324`, 5));
data[0].ruleTwo && rule.push(handleId(325, 151, data[0].ruleTwo, preIds + ',318,325', 5)); data[0].ruleTwo && rule.push(handleId(325, 151, data[0].ruleTwo, `${preIds},318,325`, 5));
data[0].ruleThree && rule.push(handleId(326, 152, data[0].ruleThree, preIds + ',318,326', 5)); data[0].ruleThree && rule.push(handleId(326, 152, data[0].ruleThree, `${preIds},318,326`, 5));
data[0].ruleFour && rule.push(handleId(327, 153, data[0].ruleFour, preIds + ',318,327', 5)); data[0].ruleFour && rule.push(handleId(327, 153, data[0].ruleFour, `${preIds},318,327`, 5));
const line14 = form.value[14].symbol + form.value[14].num; const line14 = form.value[14].symbol + form.value[14].num;
line14 && rule.push(handleId(353, 154, line14, preIds + ',320,338,353', 5)); line14 && rule.push(handleId(353, 154, line14, `${preIds},320,338,353`, 5));
form.value[14].had && rule.push(handleId(354, 155, form.value[14].had === '有商品房' ? 353 : 354, preIds + ',320,338,354', 1)); form.value[14].had && rule.push(handleId(354, 155, form.value[14].had === '有商品房' ? 353 : 354, `${preIds},320,338,354`, 1));
const line15 = form.value[15].num + form.value[15].symbol; const line15 = form.value[15].num + form.value[15].symbol;
line15 && rule.push(handleId(355, 156, line15, preIds + ',320,339,355', 5)); line15 && rule.push(handleId(355, 156, line15, `${preIds},320,339,355`, 5));
const line151 = form.value[15].symbol1 + form.value[15].num1; const line151 = form.value[15].symbol1 + form.value[15].num1;
line151 && rule.push(handleId(356, 157, line151, preIds + ',320,339,356', 5)); line151 && rule.push(handleId(356, 157, line151, `${preIds},320,339,356`, 5));
form.value[15].had && rule.push(handleId(357, 155, form.value[15].had === '有商品房' ? 353 : 354, preIds + ',320,339,357', 1)); form.value[15].had && rule.push(handleId(357, 155, form.value[15].had === '有商品房' ? 353 : 354, `${preIds},320,339,357`, 1));
data[2].ruleOne && rule.push(handleId(342, 158, data[2].ruleOne === '拒绝' ? 355 : 356, preIds + ',322,342', 1)); data[2].ruleOne && rule.push(handleId(342, 158, data[2].ruleOne === '拒绝' ? 355 : 356, `${preIds},322,342`, 1));
data[2].ruleTwo && rule.push(handleId(344, 159, data[2].ruleTwo, preIds + ',322,344', 5)); data[2].ruleTwo && rule.push(handleId(344, 159, data[2].ruleTwo, `${preIds},322,344`, 5));
data[2].ruleThree && rule.push(handleId(345, 160, data[2].ruleThree, preIds + ',322,345', 5)); data[2].ruleThree && rule.push(handleId(345, 160, data[2].ruleThree, `${preIds},322,345`, 5));
data[2].ruleFour && rule.push(handleId(346, 161, data[2].ruleFour, preIds + ',322,346', 5)); data[2].ruleFour && rule.push(handleId(346, 161, data[2].ruleFour, `${preIds},322,346`, 5));
data[2].ruleFive && rule.push(handleId(347, 162, data[2].ruleFive, preIds + ',322,347', 5)); data[2].ruleFive && rule.push(handleId(347, 162, data[2].ruleFive, `${preIds},322,347`, 5));
data[2].ruleSix && rule.push(handleId(348, 163, data[2].ruleSix, preIds + ',322,348', 5)); data[2].ruleSix && rule.push(handleId(348, 163, data[2].ruleSix, `${preIds},322,348`, 5));
data[2].ruleSeven && rule.push(handleId(349, 164, data[2].ruleSeven, preIds + ',322,349', 5)); data[2].ruleSeven && rule.push(handleId(349, 164, data[2].ruleSeven, `${preIds},322,349`, 5));
const line26 = form.value[26].num + form.value[26].symbol; const line26 = form.value[26].num + form.value[26].symbol;
line26 && rule.push(handleId(355, 156, line26, preIds + ',322,350,355', 5)); line26 && rule.push(handleId(355, 156, line26, `${preIds},322,350,355`, 5));
const line261 = form.value[26].symbol1 + form.value[26].num1; const line261 = form.value[26].symbol1 + form.value[26].num1;
line261 && rule.push(handleId(356, 157, line261, preIds + ',322,350,356', 5)); line261 && rule.push(handleId(356, 157, line261, `${preIds},322,350,356`, 5));
data[2].ruleNine && rule.push(handleId(351, 165, data[2].ruleNine, preIds + ',322,351', 5)); data[2].ruleNine && rule.push(handleId(351, 165, data[2].ruleNine, `${preIds},322,351`, 5));
await addOperation({ await addOperation({
...getIds(), ...getIds(),
@ -486,8 +401,8 @@ const submit = async (synchronizeUpdate?: number) => {
id: info.value.find((n) => n.stRecordId === 320)?.id, id: info.value.find((n) => n.stRecordId === 320)?.id,
stRecordId: 320, stRecordId: 320,
...getIds(), ...getIds(),
ruleOne: form.value[14].symbol + form.value[14].num + ',' + form.value[14].had, ruleOne: `${form.value[14].symbol + form.value[14].num},${form.value[14].had}`,
ruleTwo: form.value[15].num + form.value[15].symbol + ',' + form.value[15].symbol1 + form.value[15].num1 + ',' + form.value[15].had, ruleTwo: `${form.value[15].num + form.value[15].symbol},${form.value[15].symbol1}${form.value[15].num1},${form.value[15].had}`,
}, },
{ {
id: info.value.find((n) => n.stRecordId === 322)?.id, id: info.value.find((n) => n.stRecordId === 322)?.id,
@ -500,7 +415,7 @@ const submit = async (synchronizeUpdate?: number) => {
ruleFive: form.value[23].num + form.value[23].symbol, ruleFive: form.value[23].num + form.value[23].symbol,
ruleSix: form.value[24].num + form.value[24].symbol, ruleSix: form.value[24].num + form.value[24].symbol,
ruleSeven: form.value[25].num + form.value[25].symbol, ruleSeven: form.value[25].num + form.value[25].symbol,
ruleEight: form.value[26].num + form.value[26].symbol + ',' + form.value[26].symbol1 + form.value[26].num1, ruleEight: `${form.value[26].num + form.value[26].symbol},${form.value[26].symbol1}${form.value[26].num1}`,
ruleNine: form.value[27].num + form.value[27].symbol, ruleNine: form.value[27].num + form.value[27].symbol,
}, },
]; ];

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="商采黑名单策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="商采黑名单策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '商采黑名单策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '商采黑名单策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,142 +1,77 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" max-height="calc(100vh - 230px)" :cell-style="{ background: '#fff' }" :span-method="span" border>
:data="form" <el-table-column prop="name" label="五级分类" min-width="100" align="center"> </el-table-column>
max-height="calc(100vh - 230px)" <el-table-column label="未结清是否进黑名单" min-width="100" align="center">
:cell-style="{background:'#fff'}"
:span-method="span"
border>
<el-table-column prop="name"
label="五级分类"
min-width="100"
align="center">
</el-table-column>
<el-table-column label="未结清是否进黑名单"
min-width="100"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<span v-if="$index == 4">不存在未结清情况</span> <span v-if="$index == 4">不存在未结清情况</span>
<el-radio-group v-else <el-radio-group v-else v-model="row.enterBlacklist">
v-model="row.enterBlacklist"> <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
<el-radio v-for="(item, i) in whethers"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="进黑名单条件" <el-table-column label="进黑名单条件" width="330" align="center">
width="330"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<div class="flex items-center"> <div class="flex items-center">
<span v-if="row.recordChildren" <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[1]?.recordChildren[0]?.name }}认定{{ row.name }}</span>
class="whitespace-nowrap">{{ row?.recordChildren[1]?.recordChildren[0]?.name }}认定{{row.name}}</span>
<div class="min-w-[95px]"> <div class="min-w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.enterRuleOne">
clearable <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
v-model="row.enterRuleOne">
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap">天以上进入黑名单</span> <span class="whitespace-nowrap">天以上进入黑名单</span>
</div> </div>
<div class="flex items-center mt-2"> <div class="flex items-center mt-2">
<span v-if="row.recordChildren" <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[1]?.recordChildren[1]?.name }}认定{{ row.name }}</span>
class="whitespace-nowrap">{{ row?.recordChildren[1]?.recordChildren[1]?.name }}认定{{row.name}}</span>
<div class="min-w-[95px]"> <div class="min-w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.enterRuleTwo">
clearable <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
v-model="row.enterRuleTwo">
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap">天以上进入黑名单</span> <span class="whitespace-nowrap">天以上进入黑名单</span>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="结清是否能出黑名单" <el-table-column label="结清是否能出黑名单" min-width="120" align="center">
min-width="120"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.outBlacklist"> <el-radio-group v-model="row.outBlacklist">
<el-radio v-for="(item, i) in whethers" <el-radio v-for="(item, i) in whethers" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="出黑名单条件" <el-table-column label="出黑名单条件" width="380" align="center">
width="380"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<div class="flex items-center"> <div class="flex items-center">
<span v-if="row.recordChildren" <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[1]?.recordChildren[0]?.name }}结清后</span>
class="whitespace-nowrap">{{ row?.recordChildren[1]?.recordChildren[0]?.name }}结清后</span>
<div class="min-w-[95px]"> <div class="min-w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.num">
clearable <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
v-model="row.num">
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="min-w-[95px]"> <div class="min-w-[95px]">
<el-select class="mr-2" <el-select class="mr-2" clearable v-model="row.symbol">
clearable <el-option v-for="item in units" :key="item" :label="item" :value="item" />
v-model="row.symbol">
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap">后出黑名单</span> <span class="whitespace-nowrap">后出黑名单</span>
</div> </div>
<div class="flex items-center mt-2"> <div class="flex items-center mt-2">
<span v-if="row.recordChildren" <span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[1]?.recordChildren[1]?.name }}结清后</span>
class="whitespace-nowrap">{{ row?.recordChildren[1]?.recordChildren[1]?.name }}结清后</span>
<div class="min-w-[95px]"> <div class="min-w-[95px]">
<el-select class="mx-2" <el-select class="mx-2" clearable v-model="row.num1">
clearable <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
v-model="row.num1">
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="min-w-[95px]"> <div class="min-w-[95px]">
<el-select class="mr-2" <el-select class="mr-2" clearable v-model="row.symbol1">
clearable <el-option v-for="item in units" :key="item" :label="item" :value="item" />
v-model="row.symbol1">
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap">后出黑名单</span> <span class="whitespace-nowrap">后出黑名单</span>
@ -145,17 +80,13 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -200,7 +131,7 @@ const getConfig = async () => {
const result = []; const result = [];
process.slice(1).map((e) => { process.slice(1).map((e) => {
const cur = info.value.find((n) => n.stRecordId === e.id); const cur = info.value.find((n) => n.stRecordId === e.id);
let temp = { const temp = {
...getIds(), ...getIds(),
name: e.name, name: e.name,
recordChildren: e.recordChildren, recordChildren: e.recordChildren,
@ -263,7 +194,8 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 1, rowspan: 1,
colspan: 4, colspan: 4,
}; };
} else if (columnIndex > 1) { }
if (columnIndex > 1) {
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
@ -277,12 +209,12 @@ const addRecord = async (data: Record<string, any>) => {
const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)]; const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)];
data.map((e) => { data.map((e) => {
e.enterBlacklist && rule.push(handleId(363, 140, e.enterBlacklist, preIds + ',' + e.stRecordId + ',363', 1)); e.enterBlacklist && rule.push(handleId(363, 140, e.enterBlacklist, `${preIds},${e.stRecordId},363`, 1));
e.enterRuleOne && rule.push(handleId(367, 166, e.enterRuleOne, preIds + ',' + e.stRecordId + ',364,367', 5)); e.enterRuleOne && rule.push(handleId(367, 166, e.enterRuleOne, `${preIds},${e.stRecordId},364,367`, 5));
e.enterRuleTwo && rule.push(handleId(368, 167, e.enterRuleTwo, preIds + ',' + e.stRecordId + ',364,368', 5)); e.enterRuleTwo && rule.push(handleId(368, 167, e.enterRuleTwo, `${preIds},${e.stRecordId},364,368`, 5));
e.outBlacklist && rule.push(handleId(365, 140, e.outBlacklist, preIds + ',' + e.stRecordId + ',365', 1)); e.outBlacklist && rule.push(handleId(365, 140, e.outBlacklist, `${preIds},${e.stRecordId},365`, 1));
e.outRuleOne && rule.push(handleId(367, 166, e.outRuleOne, preIds + ',' + e.stRecordId + ',366,367', 5)); e.outRuleOne && rule.push(handleId(367, 166, e.outRuleOne, `${preIds},${e.stRecordId},366,367`, 5));
e.outRuleTwo && rule.push(handleId(368, 167, e.outRuleTwo, preIds + ',' + e.stRecordId + ',366,368', 5)); e.outRuleTwo && rule.push(handleId(368, 167, e.outRuleTwo, `${preIds},${e.stRecordId},366,368`, 5));
}); });
await addOperation({ await addOperation({

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="行内黑名单策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="行内黑名单策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '行内黑名单策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '行内黑名单策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,53 +1,27 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" max-height="calc(100vh - 230px)" :cell-style="{ background: '#fff' }" border>
:data="form" <el-table-column prop="name" label="企业黑名单指标" min-width="180" align="center"> </el-table-column>
max-height="calc(100vh - 230px)" <el-table-column label="进黑名单条件" min-width="250">
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="企业黑名单指标"
min-width="180"
align="center">
</el-table-column>
<el-table-column label="进黑名单条件"
min-width="250">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<div class="flex items-center"> <div class="flex items-center">
<template v-if="!$index"> <template v-if="!$index">
<span class="whitespace-nowrap">跨行业经营行业门类数</span> <span class="whitespace-nowrap">跨行业经营行业门类数</span>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.symbol" <el-select v-model="row.symbol" clearable>
clearable> <el-option v-for="item in symbols" :key="item" :label="item" :value="item" />
<el-option v-for="item in symbols"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2"></span> <span class="whitespace-nowrap ml-2"></span>
@ -55,12 +29,8 @@
<template v-else-if="$index === 1"> <template v-else-if="$index === 1">
<span class="whitespace-nowrap">名下企业</span> <span class="whitespace-nowrap">名下企业</span>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.had" <el-select v-model="row.had" clearable>
clearable> <el-option v-for="item in have" :key="item" :label="item" :value="item" />
<el-option v-for="item in have"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2">房产查封</span> <span class="whitespace-nowrap ml-2">房产查封</span>
@ -68,12 +38,8 @@
<template v-else-if="$index === 2"> <template v-else-if="$index === 2">
<span class="whitespace-nowrap">名下企业</span> <span class="whitespace-nowrap">名下企业</span>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.had" <el-select v-model="row.had" clearable>
clearable> <el-option v-for="item in have" :key="item" :label="item" :value="item" />
<el-option v-for="item in have"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2">股权冻结</span> <span class="whitespace-nowrap ml-2">股权冻结</span>
@ -81,28 +47,20 @@
<template v-else-if="$index === 3"> <template v-else-if="$index === 3">
<span class="whitespace-nowrap">行内企业</span> <span class="whitespace-nowrap">行内企业</span>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.had" <el-select v-model="row.had" clearable>
clearable> <el-option v-for="item in have" :key="item" :label="item" :value="item" />
<el-option v-for="item in have"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2">不良贷款客户</span> <span class="whitespace-nowrap ml-2">不良贷款客户</span>
</template> </template>
<template v-else-if="$index === 4"> <template v-else-if="$index === 4">
<el-checkbox-group v-if="row.subject" <el-checkbox-group v-if="row.subject" v-model="row.check">
v-model="row.check"> <el-checkbox v-for="item in row?.subject?.itemList" :key="item" :label="item.options" />
<el-checkbox v-for="item in row?.subject?.itemList"
:key="item"
:label="item.options" />
</el-checkbox-group> </el-checkbox-group>
</template> </template>
<template v-else-if="$index === 5"> <template v-else-if="$index === 5">
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.had" <el-select v-model="row.had" clearable>
clearable>
<el-option value="不是" /> <el-option value="不是" />
<el-option value="是" /> <el-option value="是" />
</el-select> </el-select>
@ -111,8 +69,7 @@
</template> </template>
<template v-else-if="$index === 6"> <template v-else-if="$index === 6">
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.had" <el-select v-model="row.had" clearable>
clearable>
<el-option value="不是" /> <el-option value="不是" />
<el-option value="是" /> <el-option value="是" />
</el-select> </el-select>
@ -122,162 +79,100 @@
<template v-else-if="$index === 7"> <template v-else-if="$index === 7">
<span class="whitespace-nowrap">经营年限</span> <span class="whitespace-nowrap">经营年限</span>
<div class="w-[95px] ml-2"> <div class="w-[95px] ml-2">
<el-select v-model="row.symbol" <el-select v-model="row.symbol" clearable>
clearable> <el-option v-for="item in symbols" :key="item" :label="item" :value="item" />
<el-option v-for="item in symbols"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.unit" <el-select v-model="row.unit" clearable>
clearable> <el-option v-for="item in units" :key="item" :label="item" :value="item" />
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2"></span> <span class="whitespace-nowrap ml-2"></span>
</template> </template>
<template v-else-if="$index === 8"> <template v-else-if="$index === 8">
<span class="whitespace-nowrap mr-2">企业性质涉及</span> <span class="whitespace-nowrap mr-2">企业性质涉及</span>
<el-checkbox-group v-if="row.subject" <el-checkbox-group v-if="row.subject" v-model="row.check">
v-model="row.check"> <el-checkbox v-for="item in row?.subject?.itemList" :key="item" :label="item.options" />
<el-checkbox v-for="item in row?.subject?.itemList"
:key="item"
:label="item.options" />
</el-checkbox-group> </el-checkbox-group>
</template> </template>
<template v-else-if="$index === 9"> <template v-else-if="$index === 9">
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.symbol" <el-select v-model="row.symbol" clearable>
clearable> <el-option v-for="item in symbols" :key="item" :label="item" :value="item" />
<el-option v-for="item in symbols"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.unit" <el-select v-model="row.unit" clearable>
clearable> <el-option v-for="item in units" :key="item" :label="item" :value="item" />
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2">注册资本减少</span> <span class="whitespace-nowrap ml-2">注册资本减少</span>
</template> </template>
<template v-else-if="$index === 10"> <template v-else-if="$index === 10">
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.symbol" <el-select v-model="row.symbol" clearable>
clearable> <el-option v-for="item in symbols" :key="item" :label="item" :value="item" />
<el-option v-for="item in symbols"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.unit" <el-select v-model="row.unit" clearable>
clearable> <el-option v-for="item in units" :key="item" :label="item" :value="item" />
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2">内法定代表人变更</span> <span class="whitespace-nowrap ml-2">内法定代表人变更</span>
</template> </template>
<template v-else-if="$index === 11"> <template v-else-if="$index === 11">
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.symbol" <el-select v-model="row.symbol" clearable>
clearable> <el-option v-for="item in symbols" :key="item" :label="item" :value="item" />
<el-option v-for="item in symbols"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.unit" <el-select v-model="row.unit" clearable>
clearable> <el-option v-for="item in units" :key="item" :label="item" :value="item" />
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2">内大股东股权占比>=50%变更</span> <span class="whitespace-nowrap ml-2">内大股东股权占比>=50%变更</span>
</template> </template>
<template v-else-if="$index === 12"> <template v-else-if="$index === 12"> 命中禁入行业名单中企业拒绝规则 </template>
命中禁入行业名单中企业拒绝规则
</template>
<template v-else-if="$index === 13"> <template v-else-if="$index === 13">
<span class="whitespace-nowrap">申请人在该企业的股权占比</span> <span class="whitespace-nowrap">申请人在该企业的股权占比</span>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.symbol" <el-select v-model="row.symbol" clearable>
clearable> <el-option v-for="item in symbols" :key="item" :label="item" :value="item" />
<el-option v-for="item in symbols"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2">%</span> <span class="whitespace-nowrap ml-2">%</span>
</template> </template>
<template v-else-if="$index === 14"> <template v-else-if="$index === 14">
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.had" <el-select v-model="row.had" clearable>
clearable>
<el-option value="不在" /> <el-option value="不在" />
<el-option value="在" /> <el-option value="在" />
</el-select> </el-select>
@ -289,17 +184,13 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -335,10 +226,10 @@ const getConfig = async () => {
const result = []; const result = [];
process.slice(1).map((e, i) => { process.slice(1).map((e, i) => {
const cur = info.value.find((n) => n.stRecordId === e.id); const cur = info.value.find((n) => n.stRecordId === e.id);
let num = getNum(cur?.rule); const num = getNum(cur?.rule);
let symbol = getSymbol(cur?.rule); const symbol = getSymbol(cur?.rule);
let had = getChinese(cur?.rule); const had = getChinese(cur?.rule);
let temp = { const temp = {
name: e.name, name: e.name,
subject: e.subject, subject: e.subject,
stRecordId: e.id, stRecordId: e.id,
@ -385,23 +276,23 @@ const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,154`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,67,147,154`; // 1id
const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)]; const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)];
data[0].rule && rule.push(handleId(369, 168, data[0].rule, preIds + ',369', 5)); data[0].rule && rule.push(handleId(369, 168, data[0].rule, `${preIds},369`, 5));
data[13].rule && rule.push(handleId(382, 179, data[13].rule, preIds + ',382', 5)); data[13].rule && rule.push(handleId(382, 179, data[13].rule, `${preIds},382`, 5));
data[7].rule && rule.push(handleId(376, 174, data[7].rule, preIds + ',376', 5)); data[7].rule && rule.push(handleId(376, 174, data[7].rule, `${preIds},376`, 5));
data[9].rule && rule.push(handleId(378, 176, data[9].rule, preIds + ',378', 5)); data[9].rule && rule.push(handleId(378, 176, data[9].rule, `${preIds},378`, 5));
data[10].rule && rule.push(handleId(379, 177, data[10].rule, preIds + ',379', 5)); data[10].rule && rule.push(handleId(379, 177, data[10].rule, `${preIds},379`, 5));
data[11].rule && rule.push(handleId(380, 178, data[11].rule, preIds + ',380', 5)); data[11].rule && rule.push(handleId(380, 178, data[11].rule, `${preIds},380`, 5));
form.value.map((e, i) => { form.value.map((e, i) => {
if (((i > 0 && i < 4) || i === 5 || i === 6 || i === 14) && e.had) { if (((i > 0 && i < 4) || i === 5 || i === 6 || i === 14) && e.had) {
rule.push(handleId(e.stRecordId, e?.subject?.subjectId, e?.subject?.itemList?.find((n) => n.options === e.had)?.itemId, preIds + ',' + e.stRecordId, 1)); rule.push(handleId(e.stRecordId, e?.subject?.subjectId, e?.subject?.itemList?.find((n) => n.options === e.had)?.itemId, `${preIds},${e.stRecordId}`, 1));
} else if ((i === 4 || i === 8) && e.check.length) { } else if ((i === 4 || i === 8) && e.check.length) {
const ids = []; const ids = [];
e.check.map((n) => { e.check.map((n) => {
const cur = e.subject?.itemList?.find((e) => e.options === n); const cur = e.subject?.itemList?.find((e) => e.options === n);
cur && ids.push(cur.itemId); cur && ids.push(cur.itemId);
}); });
ids.length && rule.push(handleId(e.stRecordId, e?.subject?.subjectId, ids.join(), preIds + ',' + e.stRecordId, 1)); ids.length && rule.push(handleId(e.stRecordId, e?.subject?.subjectId, ids.join(), `${preIds},${e.stRecordId}`, 1));
} }
}); });
await addOperation({ await addOperation({

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,58 +14,34 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="企业黑名单策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="企业黑名单策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -78,16 +50,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '企业黑名单策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '企业黑名单策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,133 +1,74 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" max-height="calc(100vh - 230px)" :cell-style="{ background: '#fff' }" :span-method="span" border>
:data="form" <el-table-column prop="name" label="反欺诈类型" min-width="100" align="center"> </el-table-column>
max-height="calc(100vh - 230px)" <el-table-column prop="rule" label="反欺诈指标" min-width="150"> </el-table-column>
:cell-style="{background:'#fff'}" <el-table-column label="进黑名单条件" min-width="250">
:span-method="span"
border>
<el-table-column prop="name"
label="反欺诈类型"
min-width="100"
align="center">
</el-table-column>
<el-table-column prop="rule"
label="反欺诈指标"
min-width="150">
</el-table-column>
<el-table-column label="进黑名单条件"
min-width="250">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<div class="flex items-center"> <div class="flex items-center">
<template v-if="!$index"> <template v-if="!$index">
<span class="whitespace-nowrap">人脸识别匹配度</span> <span class="whitespace-nowrap">人脸识别匹配度</span>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.symbol" <el-select v-model="row.symbol" clearable>
clearable> <el-option v-for="item in symbols" :key="item" :label="item" :value="item" />
<el-option v-for="item in symbols"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2">%</span> <span class="whitespace-nowrap ml-2">%</span>
</template> </template>
<div v-else-if="$index === 1 || $index === 2 || $index > 18" <div v-else-if="$index === 1 || $index === 2 || $index > 18" class="w-[95px] mx-2">
class="w-[95px] mx-2"> <el-select v-model="row.had" clearable>
<el-select v-model="row.had" <el-option v-for="item in have" :key="item" :label="item" :value="item" />
clearable>
<el-option v-for="item in have"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<template v-else-if="$index === 3 || $index === 4"> <template v-else-if="$index === 3 || $index === 4">
<span class="whitespace-nowrap">在网期限</span> <span class="whitespace-nowrap">在网期限</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="mx-2">~</span> <span class="mx-2">~</span>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.num1" <el-select v-model="row.num1" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.unit" <el-select v-model="row.unit" clearable>
clearable> <el-option v-for="item in units" :key="item" :label="item" :value="item" />
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
</template> </template>
<template v-else-if="row.stRecordId === 385"> <template v-else-if="row.stRecordId === 385">
<span class="whitespace-nowrap">命中</span> <span class="whitespace-nowrap">命中</span>
<div class="flex-1"> <div class="flex-1">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" clearable v-model="row.select">
clearable <el-option v-for="item in row?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
v-model="row.select">
<el-option v-for="item in row?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
</el-select> </el-select>
</div> </div>
</template> </template>
<template v-else-if="$index > 13 && $index < 19"> <template v-else-if="$index > 13 && $index < 19">
<span class="whitespace-nowrap">关联人数</span> <span class="whitespace-nowrap">关联人数</span>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-model="row.symbol" <el-select v-model="row.symbol" clearable>
clearable> <el-option v-for="item in symbols" :key="item" :label="item" :value="item" />
<el-option v-for="item in symbols"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<div class="w-[95px]"> <div class="w-[95px]">
<el-select v-model="row.num" <el-select v-model="row.num" clearable>
clearable> <el-option v-for="item in nums" :key="item" :label="item" :value="item" />
<el-option v-for="item in nums"
:key="item"
:label="item"
:value="item" />
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap ml-2"></span> <span class="whitespace-nowrap ml-2"></span>
@ -137,17 +78,13 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -184,8 +121,8 @@ const getConfig = async () => {
const result = []; const result = [];
process.slice(1).forEach((e, i) => { process.slice(1).forEach((e, i) => {
const cur = info.value.find((n) => n.stRecordId === e.id); const cur = info.value.find((n) => n.stRecordId === e.id);
let num = getNum(cur?.ruleOne); const num = getNum(cur?.ruleOne);
let symbol = getSymbol(cur?.ruleOne); const symbol = getSymbol(cur?.ruleOne);
let temp = { let temp = {
name: e.name, name: e.name,
recordChildren: e.recordChildren, recordChildren: e.recordChildren,
@ -322,23 +259,24 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 5, rowspan: 5,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 5) { }
if (rowIndex === 5) {
return { return {
rowspan: 9, rowspan: 9,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 14) { }
if (rowIndex === 14) {
return { return {
rowspan: 14, rowspan: 14,
colspan: 1, colspan: 1,
}; };
} else { }
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
}; };
} }
}
}; };
const getName = (str: string): string | number => { const getName = (str: string): string | number => {
const result = form.value[5]?.recordChildren[0]?.subject?.itemList?.find((e) => e.options === str); const result = form.value[5]?.recordChildren[0]?.subject?.itemList?.find((e) => e.options === str);
@ -349,37 +287,37 @@ const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,155`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,67,147,155`; // 1id
const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)]; const rule = [handleId(140, 28, strategyName.value, `${preIds},140`, 3)];
data[0].ruleOne && rule.push(handleId(387, 181, data[0].ruleOne, preIds + ',384,387', 5)); data[0].ruleOne && rule.push(handleId(387, 181, data[0].ruleOne, `${preIds},384,387`, 5));
data[0].ruleTwo && rule.push(handleId(388, 140, data[0].ruleTwo === '是' ? 345 : 346, preIds + ',384,388', 1)); data[0].ruleTwo && rule.push(handleId(388, 140, data[0].ruleTwo === '是' ? 345 : 346, `${preIds},384,388`, 1));
data[0].ruleThree && rule.push(handleId(389, 140, data[0].ruleThree === '是' ? 345 : 346, preIds + ',384,389', 1)); data[0].ruleThree && rule.push(handleId(389, 140, data[0].ruleThree === '是' ? 345 : 346, `${preIds},384,389`, 1));
data[0].ruleFour && rule.push(handleId(390, 187, data[0].ruleFour, preIds + ',384,390', 5)); data[0].ruleFour && rule.push(handleId(390, 187, data[0].ruleFour, `${preIds},384,390`, 5));
data[0].ruleFive && rule.push(handleId(391, 187, data[0].ruleFive, preIds + ',384,391', 5)); data[0].ruleFive && rule.push(handleId(391, 187, data[0].ruleFive, `${preIds},384,391`, 5));
data[1].ruleOne && rule.push(handleId(392, 188, getName(data[1].ruleOne), preIds + ',385,392', 1)); data[1].ruleOne && rule.push(handleId(392, 188, getName(data[1].ruleOne), `${preIds},385,392`, 1));
data[1].ruleTwo && rule.push(handleId(393, 188, getName(data[1].ruleTwo), preIds + ',385,393', 1)); data[1].ruleTwo && rule.push(handleId(393, 188, getName(data[1].ruleTwo), `${preIds},385,393`, 1));
data[1].ruleThree && rule.push(handleId(394, 188, getName(data[1].ruleThree), preIds + ',385,394', 1)); data[1].ruleThree && rule.push(handleId(394, 188, getName(data[1].ruleThree), `${preIds},385,394`, 1));
data[1].ruleFour && rule.push(handleId(395, 188, getName(data[1].ruleFour), preIds + ',385,395', 1)); data[1].ruleFour && rule.push(handleId(395, 188, getName(data[1].ruleFour), `${preIds},385,395`, 1));
data[1].ruleFive && rule.push(handleId(396, 188, getName(data[1].ruleFive), preIds + ',385,396', 1)); data[1].ruleFive && rule.push(handleId(396, 188, getName(data[1].ruleFive), `${preIds},385,396`, 1));
data[1].ruleSix && rule.push(handleId(397, 188, getName(data[1].ruleSix), preIds + ',385,397', 1)); data[1].ruleSix && rule.push(handleId(397, 188, getName(data[1].ruleSix), `${preIds},385,397`, 1));
data[1].ruleSeven && rule.push(handleId(398, 188, getName(data[1].ruleSeven), preIds + ',385,398', 1)); data[1].ruleSeven && rule.push(handleId(398, 188, getName(data[1].ruleSeven), `${preIds},385,398`, 1));
data[1].ruleEight && rule.push(handleId(399, 188, getName(data[1].ruleEight), preIds + ',385,399', 1)); data[1].ruleEight && rule.push(handleId(399, 188, getName(data[1].ruleEight), `${preIds},385,399`, 1));
data[1].ruleNine && rule.push(handleId(400, 188, getName(data[1].ruleNine), preIds + ',385,400', 1)); data[1].ruleNine && rule.push(handleId(400, 188, getName(data[1].ruleNine), `${preIds},385,400`, 1));
data[2].ruleOne && rule.push(handleId(401, 182, data[2].ruleOne, preIds + ',386,401', 5)); data[2].ruleOne && rule.push(handleId(401, 182, data[2].ruleOne, `${preIds},386,401`, 5));
data[2].ruleTwo && rule.push(handleId(402, 183, data[2].ruleTwo, preIds + ',386,402', 5)); data[2].ruleTwo && rule.push(handleId(402, 183, data[2].ruleTwo, `${preIds},386,402`, 5));
data[2].ruleThree && rule.push(handleId(403, 184, data[2].ruleThree, preIds + ',386,403', 5)); data[2].ruleThree && rule.push(handleId(403, 184, data[2].ruleThree, `${preIds},386,403`, 5));
data[2].ruleFour && rule.push(handleId(404, 185, data[2].ruleFour, preIds + ',386,404', 5)); data[2].ruleFour && rule.push(handleId(404, 185, data[2].ruleFour, `${preIds},386,404`, 5));
data[2].ruleFive && rule.push(handleId(405, 186, data[2].ruleFive, preIds + ',386,405', 5)); data[2].ruleFive && rule.push(handleId(405, 186, data[2].ruleFive, `${preIds},386,405`, 5));
data[2].ruleSix && rule.push(handleId(406, 140, data[2].ruleSix === '是' ? 345 : 346, preIds + ',386,406', 1)); data[2].ruleSix && rule.push(handleId(406, 140, data[2].ruleSix === '是' ? 345 : 346, `${preIds},386,406`, 1));
data[2].ruleSeven && rule.push(handleId(407, 140, data[2].ruleSeven === '是' ? 345 : 346, preIds + ',386,407', 1)); data[2].ruleSeven && rule.push(handleId(407, 140, data[2].ruleSeven === '是' ? 345 : 346, `${preIds},386,407`, 1));
data[2].ruleEight && rule.push(handleId(408, 140, data[2].ruleEight === '是' ? 345 : 346, preIds + ',386,408', 1)); data[2].ruleEight && rule.push(handleId(408, 140, data[2].ruleEight === '是' ? 345 : 346, `${preIds},386,408`, 1));
data[2].ruleNine && rule.push(handleId(409, 140, data[2].ruleNine === '是' ? 345 : 346, preIds + ',386,409', 1)); data[2].ruleNine && rule.push(handleId(409, 140, data[2].ruleNine === '是' ? 345 : 346, `${preIds},386,409`, 1));
data[2].ruleTen && rule.push(handleId(410, 140, data[2].ruleTen === '是' ? 345 : 346, preIds + ',386,410', 1)); data[2].ruleTen && rule.push(handleId(410, 140, data[2].ruleTen === '是' ? 345 : 346, `${preIds},386,410`, 1));
data[2].ruleEleven && rule.push(handleId(411, 140, data[2].ruleEleven === '是' ? 345 : 346, preIds + ',386,411', 1)); data[2].ruleEleven && rule.push(handleId(411, 140, data[2].ruleEleven === '是' ? 345 : 346, `${preIds},386,411`, 1));
data[2].ruleTwelve && rule.push(handleId(412, 140, data[2].ruleTwelve === '是' ? 345 : 346, preIds + ',386,412', 1)); data[2].ruleTwelve && rule.push(handleId(412, 140, data[2].ruleTwelve === '是' ? 345 : 346, `${preIds},386,412`, 1));
data[2].ruleThirteen && rule.push(handleId(413, 140, data[2].ruleThirteen === '是' ? 345 : 346, preIds + ',386,413', 1)); data[2].ruleThirteen && rule.push(handleId(413, 140, data[2].ruleThirteen === '是' ? 345 : 346, `${preIds},386,413`, 1));
data[2].ruleFourteen && rule.push(handleId(414, 140, data[2].ruleFourteen === '是' ? 345 : 346, preIds + ',386,414', 1)); data[2].ruleFourteen && rule.push(handleId(414, 140, data[2].ruleFourteen === '是' ? 345 : 346, `${preIds},386,414`, 1));
await addOperation({ await addOperation({
...getIds(), ...getIds(),
@ -403,8 +341,8 @@ const submit = async (synchronizeUpdate?: number) => {
ruleOne: form.value[0].symbol + form.value[0].num, ruleOne: form.value[0].symbol + form.value[0].num,
ruleTwo: form.value[1].had, ruleTwo: form.value[1].had,
ruleThree: form.value[2].had, ruleThree: form.value[2].had,
ruleFour: form.value[3].num + '~' + form.value[3].num1 + form.value[3].unit, ruleFour: `${form.value[3].num}~${form.value[3].num1}${form.value[3].unit}`,
ruleFive: form.value[4].num + '~' + form.value[4].num1 + form.value[4].unit, ruleFive: `${form.value[4].num}~${form.value[4].num1}${form.value[4].unit}`,
}, },
{ {
id: info.value.find((n) => n.stRecordId === 385)?.id, id: info.value.find((n) => n.stRecordId === 385)?.id,

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,58 +14,34 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="反欺诈策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="反欺诈策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -78,16 +50,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '反欺诈策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '反欺诈策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,98 +1,57 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="form" max-height="calc(100vh - 230px)" :cell-style="{ background: '#fff' }" :span-method="span" border>
:data="form" <el-table-column label="序号" width="80" align="center">
max-height="calc(100vh - 230px)"
:cell-style="{background:'#fff'}"
:span-method="span"
border>
<el-table-column label="序号"
width="80"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<p v-if="isRule($index)" <p v-if="isRule($index)" class="text-left font-semibold text-base text-[#333]">{{ row.name }}</p>
class="text-left font-semibold text-base text-[#333]">{{ row.name }}</p>
<span v-else>{{ row.index }}</span> <span v-else>{{ row.index }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" <el-table-column prop="name" label="负面行业" min-width="150" align="center"> </el-table-column>
label="负面行业" <el-table-column label="本人工作单位命中进黑名单" min-width="150" align="center">
min-width="150"
align="center">
</el-table-column>
<el-table-column label="本人工作单位命中进黑名单"
min-width="150"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.myselfWorkplace"> <el-radio-group v-model="row.myselfWorkplace">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="配偶工作单位命中拒入" <el-table-column label="配偶工作单位命中拒入" min-width="150" align="center">
min-width="150"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.spouseWorkplace"> <el-radio-group v-model="row.spouseWorkplace">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="本人名下企业命中进黑名单" <el-table-column label="本人名下企业命中进黑名单" min-width="150" align="center">
min-width="150"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.myselfEnterprise"> <el-radio-group v-model="row.myselfEnterprise">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="配偶名下企业命中拒入" <el-table-column label="配偶名下企业命中拒入" min-width="150" align="center">
min-width="150"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.spouseEnterprise"> <el-radio-group v-model="row.spouseEnterprise">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -192,13 +151,12 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 1, rowspan: 1,
colspan: 7, colspan: 7,
}; };
} else { }
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
}; };
} }
}
}; };
// //
const addRecord = async () => { const addRecord = async () => {

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,58 +14,34 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="strategyName" label="负面行业黑名单策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="strategyName"
label="负面行业黑名单策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.strategyId])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -78,16 +50,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '负面行业黑名单策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '负面行业黑名单策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,80 +1,41 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="form.scoreCardName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="form.scoreCardName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="list" :max-height="'calc(100vh - ' + (disabled ? 260 : 300) + 'px)'" :span-method="span" :cell-style="{ background: '#fff' }" border>
:data="list" <el-table-column prop="name" label="选用" width="130" align="center">
:max-height="'calc(100vh - ' + (disabled ? 260 : 300) + 'px)'"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="选用"
width="130"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-model="row.isChoose"> <el-radio-group v-model="row.isChoose">
<el-radio v-for="(item, i) in opt1" <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="name" <el-table-column prop="name" label="维度" min-width="150" align="center"></el-table-column>
label="维度" <el-table-column prop="sub" label="指标" min-width="150" align="center"></el-table-column>
min-width="150" <el-table-column label="分值" min-width="150" align="center">
align="center"></el-table-column>
<el-table-column prop="sub"
label="指标"
min-width="150"
align="center"></el-table-column>
<el-table-column label="分值"
min-width="150"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select v-if="row.itemList" <el-select v-if="row.itemList" clearable v-model="row.score">
clearable <el-option v-for="item in row?.itemList.sort((a, b) => +a.options - +b.options)" :key="item" :value="item.options" />
v-model="row.score">
<el-option v-for="item in row?.itemList.sort((a, b) => +a.options - +b.options)"
:key="item"
:value="item.options" />
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<el-form-item label="描述" <el-form-item label="描述" prop="description">
prop="description"> <el-input placeholder="请输入" maxlength="100" type="textarea" v-model="form.description" />
<el-input placeholder="请输入"
maxlength="100"
type="textarea"
v-model="form.description" />
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -128,7 +89,7 @@ const getConfig = async () => {
name: e.name, name: e.name,
sub: n.name, sub: n.name,
isChoose: cur?.isChoose || '', isChoose: cur?.isChoose || '',
score: cur ? cur?.dimensionIndexList[i - 1]?.score + '' : '', score: cur ? `${cur?.dimensionIndexList[i - 1]?.score}` : '',
span: i === 1 ? 1 : 0, span: i === 1 ? 1 : 0,
parent: i === 1 ? '' : j, parent: i === 1 ? '' : j,
itemList: n?.subject?.itemList || [], itemList: n?.subject?.itemList || [],
@ -188,39 +149,41 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 5, rowspan: 5,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 5 || rowIndex === 11 || rowIndex === 39 || rowIndex === 53) { }
if (rowIndex === 5 || rowIndex === 11 || rowIndex === 39 || rowIndex === 53) {
return { return {
rowspan: 2, rowspan: 2,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 7 || rowIndex === 13 || rowIndex === 17 || rowIndex === 27 || rowIndex === 41 || rowIndex === 45 || rowIndex === 49) { }
if (rowIndex === 7 || rowIndex === 13 || rowIndex === 17 || rowIndex === 27 || rowIndex === 41 || rowIndex === 45 || rowIndex === 49) {
return { return {
rowspan: 4, rowspan: 4,
colspan: 1, colspan: 1,
}; };
} else if (rowIndex === 21 || rowIndex === 24 || rowIndex === 36) { }
if (rowIndex === 21 || rowIndex === 24 || rowIndex === 36) {
return { return {
rowspan: 3, rowspan: 3,
colspan: 1, colspan: 1,
}; };
} else { }
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
}; };
} }
}
}; };
// //
const addRecord = async () => { const addRecord = async () => {
const preIds = `1,${Cookies.get('sand-level')},42,67,148,${form.scoringObject ? 513 : 512}`; // 1id/512/513 const preIds = `1,${Cookies.get('sand-level')},42,67,148,${form.scoringObject ? 513 : 512}`; // 1id/512/513
const lcRule: Array<Record<string, any>> = [handleId(514, 190, form.scoreCardName, preIds + ',514', 3), handleId(515, 191, form.scoringObject ? 392 : 391, preIds + ',515', 1)]; const lcRule: Array<Record<string, any>> = [handleId(514, 190, form.scoreCardName, `${preIds},514`, 3), handleId(515, 191, form.scoringObject ? 392 : 391, `${preIds},515`, 1)];
form.description && lcRule.push(handleId(516, 192, form.description, preIds + ',516', 3)); form.description && lcRule.push(handleId(516, 192, form.description, `${preIds},516`, 3));
list.value.forEach((e) => { list.value.forEach((e) => {
e.span && e.isChoose && lcRule.push(handleId(518, 140, e.isChoose, `${preIds},${e.answerId1},518`, 1)); e.span && e.isChoose && lcRule.push(handleId(518, 140, e.isChoose, `${preIds},${e.answerId1},518`, 1));
e.score && lcRule.push(handleId(e.answerId2, e.subjectId, e?.itemList?.find((n) => n.options == e.score)?.itemId || '', preIds + ',' + e.answerId1 + ',' + e.answerId2, 1)); e.score && lcRule.push(handleId(e.answerId2, e.subjectId, e?.itemList?.find((n) => n.options == e.score)?.itemId || '', `${preIds},${e.answerId1},${e.answerId2}`, 1));
}); });
await addOperation({ await addOperation({
...getIds(), ...getIds(),

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="scoreCardName" label="个人信用评分策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="scoreCardName"
label="个人信用评分策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.id])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.id])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '个人信用评分策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '个人信用评分策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,117 +1,89 @@
<template> <template>
<el-form label-width="90px" <el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form-item label="策略名称"> <el-form-item label="策略名称">
<div> <div>
<el-input class="w-[320px]" <el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="form.scoreCardName" />
placeholder="请输入20以内字符" <p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
maxlength="20"
clearable
v-model="form.scoreCardName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
</div> </div>
</el-form-item> </el-form-item>
<el-form-item label="策略规则"> <el-form-item label="策略规则">
<el-table class="c-table" <el-table class="c-table" :data="list" :max-height="'calc(100vh - ' + (disabled ? 260 : 300) + 'px)'" :span-method="span" :cell-style="{ background: '#fff' }" border>
:data="list" <el-table-column prop="name" label="选用" width="130">
:max-height="'calc(100vh - ' + (disabled ? 260 : 300) + 'px)'"
:span-method="span"
:cell-style="{background:'#fff'}"
border>
<el-table-column prop="name"
label="选用"
width="130">
<template #default="{ row }"> <template #default="{ row }">
<el-radio-group v-if="!row.top" <el-radio-group v-if="!row.top" v-model="row.isChoose">
v-model="row.isChoose"> <el-radio v-for="(item, i) in opt1" :key="i" :label="item.id">{{ item.name }}</el-radio>
<el-radio v-for="(item, i) in opt1"
:key="i"
:label="item.id">{{ item.name }}</el-radio>
</el-radio-group> </el-radio-group>
<span v-else>{{ row.name }}</span> <span v-else>{{ row.name }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="sub" <el-table-column prop="sub" label="维度" width="150"></el-table-column>
label="维度" <el-table-column prop="remark" label="计算公式">
width="150"></el-table-column>
<el-table-column prop="remark"
label="计算公式">
<template #default="{ row }"> <template #default="{ row }">
<span v-if="isSelect(row.answerId1)">{{ row.remark }}</span> <span v-if="isSelect(row.answerId1)">{{ row.remark }}</span>
<span v-else-if="row.answerId2 === 643">年末正常类贷款占全部贷款余额比重</span> <span v-else-if="row.answerId2 === 643">年末正常类贷款占全部贷款余额比重</span>
<el-select v-else-if="row.recordChildren" <el-select v-else-if="row.recordChildren" class="w-full" v-model="row.calculationFormula" disabled>
class="w-full" <el-option v-for="item in row?.recordChildren[1]?.subject?.itemList" :key="item" :label="item.options" :value="item.itemId" />
v-model="row.calculationFormula"
disabled>
<el-option v-for="item in row?.recordChildren[1]?.subject?.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
</el-select> </el-select>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="index" <el-table-column prop="index" label="指标" width="110" align="center">
label="指标"
width="110"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<span v-if="isSelect(row.answerId1)">{{ row.index }}</span> <span v-if="isSelect(row.answerId1)">{{ row.index }}</span>
<span v-else-if="row.recordChildren">{{ row?.recordChildren[2]?.recordChildren[0]?.name }}</span> <span v-else-if="row.recordChildren">{{ row?.recordChildren[2]?.recordChildren[0]?.name }}</span>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="分值" <el-table-column label="分值" align="center">
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-select v-if="isSelect(row.answerId1) && row.subject" <el-select v-if="isSelect(row.answerId1) && row.subject" clearable v-model="row.score">
clearable <el-option v-for="item in row?.subject?.itemList.sort((a, b) => +a.options - +b.options)" :key="item" :value="item.options" />
v-model="row.score">
<el-option v-for="item in row?.subject?.itemList.sort((a, b) => +a.options - +b.options)"
:key="item"
:value="item.options" />
</el-select> </el-select>
<div v-else <div v-else :class="'flex items-center'">
:class="'flex items-center'"> <span v-if="row.answerId2 === 643" class="mr-2 whitespace-nowrap">全部为正常贷款满分</span>
<span v-if="row.answerId2 === 643" <span v-if="row.answerId2 === 627" class="whitespace-nowrap">每少1倍扣</span>
class="mr-2 whitespace-nowrap">全部为正常贷款满分</span>
<span v-if="row.answerId2 === 627" <span v-else-if="(row.answerId1 === 590 || row.answerId1 === 591 || row.answerId1 === 592) && row.recordChildren" class="whitespace-nowrap">{{
class="whitespace-nowrap">每少1倍扣</span> row?.recordChildren[2]?.recordChildren[0]?.recordChildren[0]?.name.replace('分', '')
}}</span>
<span v-else-if="(row.answerId1 === 590 || row.answerId1 === 591 || row.answerId1 === 592) && row.recordChildren" <span v-else-if="row.answerId1 === 595 || row.answerId1 === 593" class="whitespace-nowrap">每降1%</span>
class="whitespace-nowrap">{{ row?.recordChildren[2]?.recordChildren[0]?.recordChildren[0]?.name.replace('分', '') }}</span>
<span v-else-if="row.answerId1 === 595 || row.answerId1 === 593"
class="whitespace-nowrap">每降1%</span>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" clearable v-model="row.score">
clearable <el-option
v-model="row.score"> v-for="item in row?.recordChildren[2]?.recordChildren[0]?.recordChildren[0]?.subject?.itemList.sort((a, b) => +a.options - +b.options)"
<el-option v-for="item in row?.recordChildren[2]?.recordChildren[0]?.recordChildren[0]?.subject?.itemList.sort((a, b) => +a.options - +b.options)"
:key="item" :key="item"
:value="item.options" /> :value="item.options"
/>
</el-select> </el-select>
</div> </div>
<span></span> <span></span>
<span v-if="row.answerId2 !== 627 && row.answerId2 !== 646" <span v-if="row.answerId2 !== 627 && row.answerId2 !== 646" class="mx-2 whitespace-nowrap">
class="mx-2 whitespace-nowrap">
{{ {{
row.answerId2 === 607 || row.answerId2 === 609 ? row.answerId2 === 607 || row.answerId2 === 609
',大于等于' : ? ',大于等于'
row.answerId2 === 667 || row.answerId2 === 668 || row.answerId2 === 670 || row.answerId2 === 694 || row.answerId2 === 695 ? : row.answerId2 === 667 || row.answerId2 === 668 || row.answerId2 === 670 || row.answerId2 === 694 || row.answerId2 === 695
',负增长不计分' : ? ',负增长不计分'
',小于等于' : ',小于等于'
}} }}
</span> </span>
<template v-if="row.answerId2 !== 627 && row.answerId2 !== 646 && row.answerId2 !== 667 && row.answerId2 !== 668 && row.answerId2 !== 670 && row.answerId2 !== 694 && row.answerId2 !== 695"> <template
v-if="
row.answerId2 !== 627 &&
row.answerId2 !== 646 &&
row.answerId2 !== 667 &&
row.answerId2 !== 668 &&
row.answerId2 !== 670 &&
row.answerId2 !== 694 &&
row.answerId2 !== 695
"
>
<div class="w-[95px] mx-2"> <div class="w-[95px] mx-2">
<el-select v-if="row.recordChildren" <el-select v-if="row.recordChildren" clearable v-model="row.percentage">
clearable <el-option
v-model="row.percentage"> v-for="item in row.answerId2 === 669 || row.answerId2 === 671
<el-option v-for="item in row.answerId2 === 669 || row.answerId2 === 671 ? row?.recordChildren[2]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList : row?.recordChildren[2]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList.sort((a, b) => +(a.options.replace('%', '')) - +(b.options.replace('%', '')))" ? row?.recordChildren[2]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList
: row?.recordChildren[2]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList.sort((a, b) => +a.options.replace('%', '') - +b.options.replace('%', ''))"
:key="item" :key="item"
:value="item.options" /> :value="item.options"
/>
</el-select> </el-select>
</div> </div>
<span class="whitespace-nowrap">不计分</span> <span class="whitespace-nowrap">不计分</span>
@ -121,24 +93,16 @@
</el-table-column> </el-table-column>
</el-table> </el-table>
</el-form-item> </el-form-item>
<el-form-item label="描述" <el-form-item label="描述" prop="description">
prop="description"> <el-input placeholder="请输入" maxlength="100" type="textarea" v-model="form.description" />
<el-input placeholder="请输入"
maxlength="100"
type="textarea"
v-model="form.description" />
</el-form-item> </el-form-item>
<div v-if="!disabled" <div v-if="!disabled" class="flex justify-end mt-3">
class="flex justify-end mt-3"> <div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn cancel" <div class="dia-btn" @click="confirmSubmit">确定</div>
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
</div> </div>
</el-form> </el-form>
<Confirm v-model="syncVisible" <Confirm v-model="syncVisible" @submit="submit" />
@submit="submit" />
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
@ -585,13 +549,12 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 1, rowspan: 1,
colspan: 5, colspan: 5,
}; };
} else { }
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
}; };
} }
}
if (!columnIndex || columnIndex === 1 || columnIndex === 2) { if (!columnIndex || columnIndex === 1 || columnIndex === 2) {
if (rowMerge1.includes(rowIndex)) { if (rowMerge1.includes(rowIndex)) {
@ -599,7 +562,8 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 3, rowspan: 3,
colspan: 1, colspan: 1,
}; };
} else if (rowMerge2.includes(rowIndex)) { }
if (rowMerge2.includes(rowIndex)) {
return { return {
rowspan: 0, rowspan: 0,
colspan: 0, colspan: 0,
@ -611,8 +575,8 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
// //
const addRecord = async () => { const addRecord = async () => {
const preIds = `1,${Cookies.get('sand-level')},42,67,148,${form.scoringObject ? 513 : 512}`; // 1id/512/513 const preIds = `1,${Cookies.get('sand-level')},42,67,148,${form.scoringObject ? 513 : 512}`; // 1id/512/513
const lcRule: Array<Record<string, any>> = [handleId(514, 190, form.scoreCardName, preIds + ',514', 3), handleId(515, 191, form.scoringObject ? 392 : 391, preIds + ',515', 1)]; const lcRule: Array<Record<string, any>> = [handleId(514, 190, form.scoreCardName, `${preIds},514`, 3), handleId(515, 191, form.scoringObject ? 392 : 391, `${preIds},515`, 1)];
form.description && lcRule.push(handleId(516, 192, form.description, preIds + ',516', 3)); form.description && lcRule.push(handleId(516, 192, form.description, `${preIds},516`, 3));
list.value.forEach((e) => { list.value.forEach((e) => {
// //

@ -1,16 +1,12 @@
<template> <template>
<div class="block"> <div class="block">
<div class="flex justify-between items-center mb-5"> <div class="flex justify-between items-center mb-5">
<search v-model="keyWord" <search v-model="keyWord" @change="initList"></search>
@change="initList"></search>
<div class="filter"> <div class="filter">
<el-popconfirm title="确定删除选中策略吗?" <el-popconfirm title="确定删除选中策略吗?" :disabled="!multipleSelection.length" @confirm.stop="delAll">
:disabled="!multipleSelection.length"
@confirm.stop="delAll">
<template #reference> <template #reference>
<div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]"> <div :class="['add-btn mr-2', { 'cursor-not-allowed': !multipleSelection.length }]">
<el-icon :size="24" <el-icon :size="24" color="#fff">
color="#fff">
<Delete /> <Delete />
</el-icon> </el-icon>
批量删除 批量删除
@ -18,57 +14,33 @@
</template> </template>
</el-popconfirm> </el-popconfirm>
<div class="add-btn" <div class="add-btn" @click="toAdd">
@click="toAdd"> <img src="@/assets/images/plus.png" alt="" class="icon" />
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
新增 新增
</div> </div>
</div> </div>
</div> </div>
<el-table ref="table" <el-table ref="table" v-loading="loading" :data="list" @selection-change="handleSelectionChange">
v-loading="loading" <el-table-column type="selection" width="55" :selectable="handleDisable" />
:data="list" <el-table-column label="序号" type="index" width="60" align="center" />
@selection-change="handleSelectionChange"> <el-table-column prop="scoreCardName" label="企业信用评分策略名称" min-width="180" />
<el-table-column type="selection" <el-table-column prop="createTime" label="新增日期" min-width="140" />
width="55" <el-table-column label="操作" width="140">
:selectable="handleDisable" />
<el-table-column label="序号"
type="index"
width="60"
align="center" />
<el-table-column prop="scoreCardName"
label="企业信用评分策略名称"
min-width="180" />
<el-table-column prop="createTime"
label="新增日期"
min-width="140" />
<el-table-column label="操作"
width="140">
<template #default="{ row }"> <template #default="{ row }">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row, true)" size="small">查看</el-button>
link
@click="toDetail(row, true)"
size="small">查看</el-button>
<template v-if="!row.builtIn"> <template v-if="!row.builtIn">
<el-button type="primary" <el-button type="primary" link @click="toDetail(row)" size="small">编辑</el-button>
link <el-popconfirm title="确定删除这条策略吗?" @confirm.stop="handleDelete([row.id])">
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="确定删除这条策略吗?"
@confirm.stop="handleDelete([row.id])">
<template #reference> <template #reference>
<el-button type="primary" <el-button type="primary" link size="small">删除</el-button>
link
size="small">删除</el-button>
</template> </template>
</el-popconfirm> </el-popconfirm>
</template> </template>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<el-pagination v-model:currentPage="currentPage" <el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize" v-model:pageSize="pageSize"
:total="total" :total="total"
:page-sizes="pageSizes" :page-sizes="pageSizes"
@ -77,16 +49,11 @@
@current-change="getList()" @current-change="getList()"
small small
background background
class="px-3 py-2 justify-end"></el-pagination> class="px-3 py-2 justify-end"
></el-pagination>
<el-drawer v-model="visible" <el-drawer v-model="visible" :title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '企业信用评分策略'" size="100%" class="model-drawer">
:title="(isDetail ? '查看' : curRow.id ? '编辑' : '新增') + '企业信用评分策略'" <Detail v-model:row="curRow" :disabled="isDetail" :key="i" @close="closeDrawer" />
size="100%"
class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer> </el-drawer>
</div> </div>
</template> </template>

@ -1,23 +1,16 @@
<template> <template>
<div v-if="list.length"> <div v-if="list.length">
<div class="menu-card"> <div class="menu-card">
<el-menu class="left" <el-menu class="left" :default-active="curMenu" @select="handleSelect">
:default-active="curMenu" <el-sub-menu v-for="(item, i) in list" :key="i" :index="String(item.id)">
@select="handleSelect">
<el-sub-menu v-for="(item, i) in list"
:key="i"
:index="String(item.id)">
<template #title> <template #title>
<span>{{ item.name }}</span> <span>{{ item.name }}</span>
</template> </template>
<el-menu-item v-for="(child, j) in item?.recordChildren" <el-menu-item v-for="(child, j) in item?.recordChildren" :key="j" :index="String(child.id)">{{ child.name }}</el-menu-item>
:key="j"
:index="String(child.id)">{{ child.name }}</el-menu-item>
</el-sub-menu> </el-sub-menu>
</el-menu> </el-menu>
<div class="right"> <div class="right">
<component v-if="loadedComponents[activeComponent]" <component v-if="loadedComponents[activeComponent]" :is="loadedComponents[activeComponent]" />
:is="loadedComponents[activeComponent]" />
</div> </div>
</div> </div>
</div> </div>

@ -11,46 +11,27 @@
<span class="text-[#ed8269]">贷款期限基础系数</span> <span class="text-[#ed8269]">贷款期限基础系数</span>
</div> </div>
<h6 class="mb-3 text-sm text-[#006BFF] font-semibold">个人评分系数配置</h6> <h6 class="mb-3 text-sm text-[#006BFF] font-semibold">个人评分系数配置</h6>
<el-table class="c-table" <el-table class="c-table" :data="form.slice(0, 5)" border>
:data="form.slice(0,5)" <el-table-column prop="recordName" label="信用等级" min-width="150" align="center"> </el-table-column>
border> <el-table-column label="系数" min-width="150" align="center">
<el-table-column prop="recordName"
label="信用等级"
min-width="150"
align="center">
</el-table-column>
<el-table-column label="系数"
min-width="150"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-input placeholder="输入系数" <el-input placeholder="输入系数" v-model="row.coefficient"></el-input>
v-model="row.coefficient"></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<h6 class="mt-5 mb-3 text-sm text-[#006BFF] font-semibold">企业评分系数配置</h6> <h6 class="mt-5 mb-3 text-sm text-[#006BFF] font-semibold">企业评分系数配置</h6>
<el-table class="c-table" <el-table class="c-table" :data="form.slice(5)" border>
:data="form.slice(5)" <el-table-column prop="recordName" label="信用等级" min-width="150" align="center"> </el-table-column>
border> <el-table-column label="系数" min-width="150" align="center">
<el-table-column prop="recordName"
label="信用等级"
min-width="150"
align="center">
</el-table-column>
<el-table-column label="系数"
min-width="150"
align="center">
<template #default="{ row }"> <template #default="{ row }">
<el-input placeholder="输入系数" <el-input placeholder="输入系数" v-model="row.coefficient"></el-input>
v-model="row.coefficient"></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit">完成配置</div>
@click="submit">完成配置</div>
</div> </div>
</div> </div>
</template> </template>

@ -10,32 +10,22 @@
<span class="text-[#0034ad]"> * </span> <span class="text-[#0034ad]"> * </span>
<span class="text-[#ed8269]">贷款期限基础系数</span> <span class="text-[#ed8269]">贷款期限基础系数</span>
</div> </div>
<el-table class="c-table" <el-table class="c-table" :data="form" border max-height="calc(100vh - 230px)">
:data="form" <el-table-column prop="recordName" label="信用等级" min-width="150">
border
max-height="calc(100vh - 230px)">
<el-table-column prop="recordName"
label="信用等级"
min-width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<p :class="$index === 5 || $index === 6 || $index === 7 ? 'pl-20' : !$index || $index === 1 || $index === 10 || $index === 23 ? '' : 'pl-10'">{{ row.recordName }}</p> <p :class="$index === 5 || $index === 6 || $index === 7 ? 'pl-20' : !$index || $index === 1 || $index === 10 || $index === 23 ? '' : 'pl-10'">{{ row.recordName }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="系数" <el-table-column label="系数" min-width="150" align="center">
min-width="150"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<p v-if="$index === 1 || $index === 4 || $index === 10 || $index === 23">--</p> <p v-if="$index === 1 || $index === 4 || $index === 10 || $index === 23">--</p>
<el-input v-else <el-input v-else placeholder="输入系数" v-model="row.coefficient"></el-input>
placeholder="输入系数"
v-model="row.coefficient"></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit">完成配置</div>
@click="submit">完成配置</div>
</div> </div>
</div> </div>
</template> </template>

@ -10,31 +10,22 @@
<span class="text-[#0034ad]"> * </span> <span class="text-[#0034ad]"> * </span>
<span class="text-[#ed8269]">贷款期限基础系数</span> <span class="text-[#ed8269]">贷款期限基础系数</span>
</div> </div>
<el-table class="c-table" <el-table class="c-table" :data="form" border>
:data="form" <el-table-column prop="recordName" label="贷款期限" min-width="150">
border>
<el-table-column prop="recordName"
label="贷款期限"
min-width="150">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<p :class="!$index || $index === 3 ? '' : 'pl-10'">{{ row.recordName }}</p> <p :class="!$index || $index === 3 ? '' : 'pl-10'">{{ row.recordName }}</p>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column label="系数" <el-table-column label="系数" min-width="150" align="center">
min-width="150"
align="center">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
<p v-if="!$index || $index === 3">--</p> <p v-if="!$index || $index === 3">--</p>
<el-input v-else <el-input v-else placeholder="输入系数" v-model="row.coefficient"></el-input>
placeholder="输入系数"
v-model="row.coefficient"></el-input>
</template> </template>
</el-table-column> </el-table-column>
</el-table> </el-table>
<div class="flex justify-end"> <div class="flex justify-end">
<div class="submit" <div class="submit" @click="submit">完成配置</div>
@click="submit">完成配置</div>
</div> </div>
</div> </div>
</template> </template>

@ -2,176 +2,118 @@
<div class="flex justify-between items-center h-[64px] px-5 bg-white"> <div class="flex justify-between items-center h-[64px] px-5 bg-white">
<h1>金融产品设计及数字化营销沙盘系统</h1> <h1>金融产品设计及数字化营销沙盘系统</h1>
<div class="inline-flex items-center"> <div class="inline-flex items-center">
<el-tooltip effect="light" <el-tooltip effect="light" content="退出实训" placement="bottom">
content="退出实训" <img class="mr-3 cursor-pointer" src="@/assets/images/11.png" alt="" @click="logout" />
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/11.png"
alt=""
@click="logout" />
</el-tooltip> </el-tooltip>
<el-tooltip effect="light" <el-tooltip effect="light" content="返回关卡" placement="bottom">
content="返回关卡" <img class="mr-3 cursor-pointer" src="@/assets/images/2.png" alt="" @click="toLevel" />
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/2.png"
alt=""
@click="toLevel" />
</el-tooltip> </el-tooltip>
</div> </div>
</div> </div>
<div class="py-5 px-[300px]"> <div class="py-5 px-[300px]">
<div class="content" <div class="content" :class="{ loading }" id="pdfDom">
:class="{loading}" <div class="text-right" v-if="!loading">
id="pdfDom">
<div class="text-right"
v-if="!loading">
<el-button @click="editReport"> <el-button @click="editReport">
{{ editing ? "保存" : "编辑" }} {{ editing ? '保存' : '编辑' }}
</el-button> </el-button>
<el-button type="primary" <el-button type="primary" @click="exportPage">导出报告</el-button>
@click="exportPage">导出报告</el-button>
</div> </div>
<h6 class="mb-8 text-[24px] text-center text-[#333]">标准实验报告</h6> <h6 class="mb-8 text-[24px] text-center text-[#333]">标准实验报告</h6>
<div class="max-h-[calc(100vh-204px)] overflow-auto p-4 border border-solid border-[#e1e6f2]"> <div class="max-h-[calc(100vh-204px)] overflow-auto p-4 border border-solid border-[#e1e6f2]">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/images/report/report1.png" <img src="@/assets/images/report/report1.png" alt="" />
alt="">
基本信息 基本信息
</h6> </h6>
<ul class="info-list flex flex-wrap py-2 px-4" <ul class="info-list flex flex-wrap py-2 px-4" :class="[{ edit: editing }]">
:class="[{edit: editing}]">
<li> <li>
<label>学生姓名</label> <label>学生姓名</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="form.userName" disabled></el-input>
v-model="form.userName"
disabled></el-input>
<span v-else>{{ form.userName }}</span> <span v-else>{{ form.userName }}</span>
</li> </li>
<li> <li>
<label>学生学号</label> <label>学生学号</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="form.workNumber" disabled></el-input>
v-model="form.workNumber"
disabled></el-input>
<span v-else>{{ form.workNumber }}</span> <span v-else>{{ form.workNumber }}</span>
</li> </li>
<li> <li>
<label>实验时间</label> <label>实验时间</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="form.submitTime" disabled></el-input>
v-model="form.submitTime"
disabled></el-input>
<span v-else>{{ form.submitTime }}</span> <span v-else>{{ form.submitTime }}</span>
</li> </li>
<li> <li>
<label>实验成绩</label> <label>实验成绩</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="form.score" disabled></el-input>
v-model="form.score" <div v-else class="relative min-w-[150px] border-b border-solid border-[#e1e6f2]">
disabled></el-input>
<div v-else
class="relative min-w-[150px] border-b border-solid border-[#e1e6f2]">
<em class="absolute top-[-12px] left-[30px] font-semibold font-['din'] text-[30px] text-[#0b1d30]">{{ form.score }}</em> <em class="absolute top-[-12px] left-[30px] font-semibold font-['din'] text-[30px] text-[#0b1d30]">{{ form.score }}</em>
<img class="absolute bottom-[-15px] left-0" <img class="absolute bottom-[-15px] left-0" src="@/assets/images/report/point.png" alt="" />
src="@/assets/images/report/point.png"
alt="">
</div> </div>
</li> </li>
<li> <li>
<label>学生班级</label> <label>学生班级</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="form.className"></el-input>
v-model="form.className"></el-input>
<span v-else>{{ form.className }}</span> <span v-else>{{ form.className }}</span>
</li> </li>
<li> <li>
<label>指导老师</label> <label>指导老师</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="form.instructor"></el-input>
v-model="form.instructor"></el-input>
<span v-else>{{ form.instructor }}</span> <span v-else>{{ form.instructor }}</span>
</li> </li>
<li> <li>
<label>实验学时</label> <label>实验学时</label>
<el-input v-if="editing" <el-input v-if="editing" v-model="form.period"></el-input>
v-model="form.period"></el-input>
<span v-else>{{ form.period }}</span> <span v-else>{{ form.period }}</span>
</li> </li>
</ul> </ul>
<div class="m-b-20"> <div class="m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/images/report/report2.png" <img src="@/assets/images/report/report2.png" alt="" />
alt="">
实验项目名称 实验项目名称
</h6> </h6>
<el-input v-if="editing" <el-input v-if="editing" v-model="form.projectName" type="textarea"></el-input>
v-model="form.projectName" <div v-else class="pre-wrap" v-html="form.projectName"></div>
type="textarea"></el-input>
<div v-else
class="pre-wrap"
v-html="form.projectName"></div>
</div> </div>
<div class="m-b-20"> <div class="m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/images/report/report3.png" <img src="@/assets/images/report/report3.png" alt="" />
alt="">
实验目的 实验目的
</h6> </h6>
<tinymce v-if="editing" <tinymce v-if="editing" v-model="form.purpose" />
v-model="form.purpose" /> <div v-else class="pre-wrap" v-html="form.purpose"></div>
<div v-else
class="pre-wrap"
v-html="form.purpose"></div>
</div> </div>
<div class="m-b-20"> <div class="m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/images/report/report4.png" <img src="@/assets/images/report/report4.png" alt="" />
alt="">
实验数据 实验数据
</h6> </h6>
<el-table class="mb-4" <el-table class="mb-4" :data="expData" border header-align="center">
:data="expData" <el-table-column type="index" label="序号" align="center" width="60">
border
header-align="center">
<el-table-column type="index"
label="序号"
align="center"
width="60">
<template #default="{ row, $index }"> <template #default="{ row, $index }">
{{ $index + 1 }} {{ $index + 1 }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="judgmentName" <el-table-column prop="judgmentName" label="判分点" width="200" align="center"></el-table-column>
label="判分点" <el-table-column prop="judgmentName" label="考核点" align="center" width="150">
width="200"
align="center"></el-table-column>
<el-table-column prop="judgmentName"
label="考核点"
align="center"
width="150">
<template #default="{ row }"> <template #default="{ row }">
<div v-for="(item, i) in row.lcRuleRecords" <div v-for="(item, i) in row.lcRuleRecords" :key="i">
:key="i">
<span> <span>
<span>{{ i + 1 }}. </span>{{ item.name }} <span>{{ i + 1 }}. </span>{{ item.name }}
</span> </span>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="ruleAnswer" <el-table-column prop="ruleAnswer" label="参考答案" style="word-wrap: break-word">
label="参考答案"
style='word-wrap: break-word'>
<template #default="{ row }"> <template #default="{ row }">
<div v-for="(item, i) in row?.lcRuleRecords" <div v-for="(item, i) in row?.lcRuleRecords" :key="i">
:key="i">
<span> <span>
<span>{{ i + 1 }}. </span>{{ item.ruleAnswer }} <span>{{ i + 1 }}. </span>{{ item.ruleAnswer }}
</span> </span>
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="userAnswer" <el-table-column prop="userAnswer" label="学生答案">
label="学生答案">
<template #default="{ row }"> <template #default="{ row }">
<div v-for="(item, i) in row?.lcRuleRecords" <div v-for="(item, i) in row?.lcRuleRecords" :key="i">
:key="i"> <span v-if="item.userAnswer">
<span v-if='item.userAnswer'>
<span>{{ i + 1 }}. </span>{{ item.userAnswer }} <span>{{ i + 1 }}. </span>{{ item.userAnswer }}
</span> </span>
<span v-else> <span v-else>
@ -180,27 +122,17 @@
</div> </div>
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="quesScore" <el-table-column prop="quesScore" label="分值" width="80" align="center"></el-table-column>
label="分值" <el-table-column prop="score" label="得分" width="80" align="center"></el-table-column>
width="80"
align="center"></el-table-column>
<el-table-column prop="score"
label="得分"
width="80"
align="center"></el-table-column>
</el-table> </el-table>
</div> </div>
<div class="m-b-20"> <div class="m-b-20">
<h6 class="l-title"> <h6 class="l-title">
<img src="@/assets/images/report/report5.png" <img src="@/assets/images/report/report5.png" alt="" />
alt="">
实验总结与体会 实验总结与体会
</h6> </h6>
<tinymce v-if="editing" <tinymce v-if="editing" v-model="form.summarize" />
v-model="form.summarize" /> <div v-else class="pre-wrap" v-html="form.summarize"></div>
<div v-else
class="pre-wrap"
v-html="form.summarize"></div>
</div> </div>
</div> </div>
</div> </div>

Loading…
Cancel
Save