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. 189
      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. 17
      src/views/404.vue
  17. 58
      src/views/Home.vue
  18. 90
      src/views/Role.vue
  19. 55
      src/views/bankProduct/index.vue
  20. 139
      src/views/config/level/Index.vue
  21. 110
      src/views/config/param/Buyer.vue
  22. 40
      src/views/config/param/Financial.vue
  23. 15
      src/views/config/param/Index.vue
  24. 27
      src/views/finance/Account.vue
  25. 87
      src/views/finance/Bank.vue
  26. 110
      src/views/finance/BankDetail.vue
  27. 96
      src/views/finance/Fund.vue
  28. 80
      src/views/finance/Insurance.vue
  29. 68
      src/views/finance/Order.vue
  30. 92
      src/views/finance/Publish.vue
  31. 130
      src/views/product/afterLoan/1029/Detail.vue
  32. 95
      src/views/product/afterLoan/1029/Index.vue
  33. 98
      src/views/product/afterLoan/1030/Detail.vue
  34. 95
      src/views/product/afterLoan/1030/Index.vue
  35. 222
      src/views/product/afterLoan/1031/Detail.vue
  36. 95
      src/views/product/afterLoan/1031/Index.vue
  37. 70
      src/views/product/afterLoan/1032/Detail.vue
  38. 96
      src/views/product/afterLoan/1032/Index.vue
  39. 84
      src/views/product/afterLoan/1033/Detail.vue
  40. 96
      src/views/product/afterLoan/1033/Index.vue
  41. 11
      src/views/product/afterLoan/CardList.vue
  42. 345
      src/views/product/bank/Add.vue
  43. 45
      src/views/product/bank/Approve.vue
  44. 54
      src/views/product/bank/CardList.vue
  45. 664
      src/views/product/bank/Config.vue
  46. 3
      src/views/product/bank/Detail.vue
  47. 154
      src/views/product/bank/Info.vue
  48. 146
      src/views/product/bank/List.vue
  49. 256
      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. 93
      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. 30
      src/views/product/insurance/Info.vue
  58. 104
      src/views/product/insurance/List.vue
  59. 119
      src/views/product/interestRate/772/Detail.vue
  60. 93
      src/views/product/interestRate/772/Index.vue
  61. 69
      src/views/product/interestRate/773.vue
  62. 109
      src/views/product/interestRate/935/Detail.vue
  63. 94
      src/views/product/interestRate/935/Index.vue
  64. 121
      src/views/product/interestRate/936/Detail.vue
  65. 94
      src/views/product/interestRate/936/Index.vue
  66. 15
      src/views/product/interestRate/CardList.vue
  67. 145
      src/views/product/strategy/150/Detail.vue
  68. 93
      src/views/product/strategy/150/Index.vue
  69. 164
      src/views/product/strategy/151/Detail.vue
  70. 93
      src/views/product/strategy/151/Index.vue
  71. 255
      src/views/product/strategy/152/Detail.vue
  72. 93
      src/views/product/strategy/152/Index.vue
  73. 162
      src/views/product/strategy/153/Detail.vue
  74. 93
      src/views/product/strategy/153/Index.vue
  75. 249
      src/views/product/strategy/154/Detail.vue
  76. 93
      src/views/product/strategy/154/Index.vue
  77. 210
      src/views/product/strategy/155/Detail.vue
  78. 93
      src/views/product/strategy/155/Index.vue
  79. 88
      src/views/product/strategy/156/Detail.vue
  80. 93
      src/views/product/strategy/156/Index.vue
  81. 99
      src/views/product/strategy/512/Detail.vue
  82. 93
      src/views/product/strategy/512/Index.vue
  83. 176
      src/views/product/strategy/513/Detail.vue
  84. 93
      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. 158
      src/views/report/Index.vue

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -1,15 +1,9 @@
<template>
<div class="min-h-full bg-[url('@/assets/images/1.png')] bg-[length:100%_100%] bg-no-repeat">
<app-header />
<Back v-if="hidePanel"
class="mx-3"
name="金融产品设计及数字化营销沙盘系统后台管理系统"
: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">
<Back v-if="hidePanel" class="mx-3" name="金融产品设计及数字化营销沙盘系统后台管理系统" :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 />
</div>
<Panel />

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

@ -2,15 +2,16 @@
<div class="wscn-http404-container">
<div class="wscn-http404">
<div class="pic-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 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__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 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" />
</div>
<div class="bullshit">
<div class="bullshit__oops">OOPS!</div>
<div class="bullshit__info">All rights reserved
<a style="color:#20a0ff" href="https://wallstreetcn.com" target="_blank">wallstreetcn</a>
<div class="bullshit__info">
All rights reserved
<a style="color: #20a0ff" href="https://wallstreetcn.com" target="_blank">wallstreetcn</a>
</div>
<div class="bullshit__headline">{{ message }}</div>
<div class="bullshit__info">Please check that the URL you entered is correct, or click the button below to return to the homepage.</div>
@ -34,8 +35,8 @@ export default defineComponent({
</script>
<style lang="scss" scoped>
.wscn-http404-container{
transform: translate(-50%,-50%);
.wscn-http404-container {
transform: translate(-50%, -50%);
position: absolute;
top: 40%;
left: 50%;

@ -2,64 +2,40 @@
<div class="flex justify-between items-center h-[64px] px-5 bg-white">
<h1>金融产品设计及数字化营销沙盘系统</h1>
<div class="inline-flex items-center">
<el-tooltip effect="light"
content="退出实训"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/11.png"
alt=""
@click="logout" />
<el-tooltip effect="light" content="退出实训" placement="bottom">
<img class="mr-3 cursor-pointer" src="@/assets/images/11.png" alt="" @click="logout" />
</el-tooltip>
</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"
id="wrap">
<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">
<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="absolute top-5 left-40 flex items-center cursor-pointer"
@click="getLevel(1)">
<img v-if="collected"
src="@/assets/images/level/7.png"
alt="" />
<img v-else
src="@/assets/images/level/6.png"
alt="" />
<div class="absolute top-5 left-40 flex items-center cursor-pointer" @click="getLevel(1)">
<img v-if="collected" 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>
</div>
</div>
<div class="relative mt-20">
<div v-for="(item, i) in levels"
:key="i"
:class="['item', { active: curLevel === item.checkpointId, disabled: !item.enableOrNot }]"
@click="selecLevel(item)">
<div v-for="(item, i) in levels" :key="i" :class="['item', { active: curLevel === item.checkpointId, disabled: !item.enableOrNot }]" @click="selecLevel(item)">
<span class="num">LV.{{ i + 1 }}</span>
<div class="texts">
<h6>{{ numToChinese(i + 1) }}</h6>
<p class="des mul-ellipsis2">{{ item.customsPassName }}</p>
<img v-if="item.collect"
class="icon"
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)" />
<img v-if="item.collect" class="icon" 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 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>
<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 bottom-0 left-[50%] translate-x-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-down.png')]"
@click="move('down')"></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="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 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>
<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 bottom-0 left-[50%] translate-x-[-50%] w-[64px] h-[64px] bg-[url('@/assets/images/level/arrow-down.png')]" @click="move('down')"></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="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>
<Panel />
</template>

@ -41,49 +41,50 @@
<p class="text">今日渠道订单</p>
</div>
</div>
<el-tooltip effect="light"
content="退出实训"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/11.png"
alt=""
@click="logout" />
<el-tooltip effect="light" content="退出实训" placement="bottom">
<img class="mr-3 cursor-pointer" src="@/assets/images/11.png" alt="" @click="logout" />
</el-tooltip>
<el-tooltip effect="light"
content="返回关卡"
placement="bottom">
<img class="mr-3 cursor-pointer"
src="@/assets/images/2.png"
alt=""
@click="toLevel" />
<el-tooltip effect="light" content="返回关卡" placement="bottom">
<img class="mr-3 cursor-pointer" src="@/assets/images/2.png" alt="" @click="toLevel" />
</el-tooltip>
</div>
</div>
<div class="relative h-[calc(100vh-64px)] overflow-hidden bg-[#e5eafe]">
<img class="w-full h-full"
src="@/assets/images/role/bg.png"
alt="">
<img class="w-full h-full" 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="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 }}
</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')]"
@click="selectRole(41)"></div>
<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(43)"></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')]"
@click="selectRole(42)"></div>
<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(275)"></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
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')]"
@click="selectRole(41)"
></div>
<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(43)"
></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')]"
@click="selectRole(42)"
></div>
<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(275)"
></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 class="fixed top-[80px] right-[80px]">
<div class="flex items-center h-[60px] px-4 rounded-tl-[20px] rounded-tr-[20px]"
@ -124,20 +125,14 @@
<Panel />
<el-dialog v-model="dateVisible"
title="选择交易日期"
width="400px"
center>
<el-dialog v-model="dateVisible" title="选择交易日期" width="400px" center>
<div class="text-center">
<el-date-picker v-model="diaDate"
type="date" />
<el-date-picker v-model="diaDate" type="date" />
</div>
<template #footer>
<span class="flex justify-center">
<div class="dia-btn cancel"
@click="dateVisible = false">取消</div>
<div class="dia-btn"
@click="submitDate">确定</div>
<div class="dia-btn cancel" @click="dateVisible = false">取消</div>
<div class="dia-btn" @click="submitDate">确定</div>
</span>
</template>
</el-dialog>
@ -155,11 +150,8 @@ import dayjs from 'dayjs';
import { getNow } from '@/utils/common';
const router = useRouter();
const route = useRoute();
const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level');
const collected = ref<boolean>(false);
const curLevel = ref<number | string>('');
const dateVisible = ref<boolean>(false);
const date = ref<string>(dayjs(new Date()).format('YYYY-MM-DD'));
const diaDate = ref<string>(dayjs(new Date()).format('YYYY-M-D'));
@ -228,11 +220,7 @@ const ranks = ref<Record<string, any>[]>([
money: '沙盘名称',
},
]);
//
const getLevel = async () => {
const { data } = await checkPointList(1);
levels.value = data;
};
//
const selectRole = (id: number) => {
let path = `/product/bank?type=0&i=1&role=${id}`;

@ -4,54 +4,37 @@
<dl>
<dt>担保方式</dt>
<div class="vals">
<dd v-for="(item, i) in methods"
:key="i"
:class="{ active: method === item.id }"
@click="filterClick(item, 'method')">{{ item.name }}</dd>
<dd v-for="(item, i) in methods" :key="i" :class="{ active: method === item.id }" @click="filterClick(item, 'method')">{{ item.name }}</dd>
</div>
</dl>
<dl>
<dt>产品进度</dt>
<div class="vals">
<dd v-for="(item, i) in methods"
:key="i"
:class="{ active: method === item.id }"
@click="filterClick(item, 'method')">{{ item.name }}</dd>
<dd v-for="(item, i) in methods" :key="i" :class="{ active: method === item.id }" @click="filterClick(item, 'method')">{{ item.name }}</dd>
</div>
</dl>
</div>
<div class="block mt-3">
<div class="search">
<input type="text"
placeholder="搜索"
maxlength="20" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
<input type="text" placeholder="搜索" maxlength="20" />
<img src="@/assets/images/search.png" alt="" class="icon" />
</div>
<el-table ref="table"
v-loading="loading"
:data="data"
@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 ref="table" v-loading="loading" :data="data" @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-pagination v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="fetchData()"
@current-change="fetchData()"
small
background
class="px-3 py-2 justify-end"></el-pagination>
<el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="fetchData()"
@current-change="fetchData()"
small
background
class="px-3 py-2 justify-end"
></el-pagination>
</div>
</div>
</template>

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

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

@ -1,24 +1,19 @@
<template>
<div class="max-h-[calc(100vh-290px)] overflow-auto">
<el-form ref="formRef"
label-width="100px"
label-suffix=":"
class="form"
status-icon>
<el-form ref="formRef" label-width="100px" label-suffix="" class="form" status-icon>
<h6 class="title">单个银行账户</h6>
<el-form-item label="收益计算">
<div>
<p class="text leading-[32px] ">收入 = 收回的本金 + 利息</p>
<p class="text leading-[32px] ">成本 = 贷出去未收回的本金 + 购买渠道金额</p>
<p class="text leading-[32px] ">收益 = 收入 - 成本</p>
<p class="text leading-[32px]">收入 = 收回的本金 + 利息</p>
<p class="text leading-[32px]">成本 = 贷出去未收回的本金 + 购买渠道金额</p>
<p class="text leading-[32px]">收益 = 收入 - 成本</p>
</div>
</el-form-item>
<el-form-item label="银行资产">
<div class="flex-1">
<div class="flex items-center">
<span class="text">起始金额</span>
<el-input class="w-[140px] mx-2"
v-model="form[0].startingAmount"></el-input>
<el-input class="w-[140px] mx-2" v-model="form[0].startingAmount"></el-input>
<span class="text">万元</span>
</div>
<p class="text mt-4">银行账户金额 = 起始金额 + 累计收益</p>
@ -28,17 +23,16 @@
<h6 class="title">单个保险账户</h6>
<el-form-item label="收益计算">
<div>
<p class="text leading-[32px] ">收入 = 收到的保费</p>
<p class="text leading-[32px] ">成本 = 赔偿金 + 购买渠道金额</p>
<p class="text leading-[32px] ">收益 = 收入 - 成本</p>
<p class="text leading-[32px]">收入 = 收到的保费</p>
<p class="text leading-[32px]">成本 = 赔偿金 + 购买渠道金额</p>
<p class="text leading-[32px]">收益 = 收入 - 成本</p>
</div>
</el-form-item>
<el-form-item label="保险资产">
<div class="flex-1">
<div class="flex items-center">
<span class="text">起始金额</span>
<el-input class="w-[140px] mx-2"
v-model="form[1].startingAmount"></el-input>
<el-input class="w-[140px] mx-2" v-model="form[1].startingAmount"></el-input>
<span class="text">万元</span>
</div>
<p class="text mt-4">保险账户金额 = 起始金额 + 累计收益</p>
@ -48,23 +42,22 @@
<h6 class="title">单个基金账户</h6>
<el-form-item label="冻结账户">
<div>
<p class="text leading-[32px] ">冻结账户金额 = 申购金额 + 赎回金额</p>
<p class="text leading-[32px] ">基金申购以及赎回确认份额期间</p>
<p class="text leading-[32px]">冻结账户金额 = 申购金额 + 赎回金额</p>
<p class="text leading-[32px]">基金申购以及赎回确认份额期间</p>
</div>
</el-form-item>
<el-form-item label="收益计算">
<div>
<p class="text leading-[32px] ">收入 = 申购费用 + 管理费用 + 托管费用 + 销售服务费用 + 赎回费用</p>
<p class="text leading-[32px] ">成本 = 购买渠道金额</p>
<p class="text leading-[32px] ">收益 = 申购费用 + 管理费用 + 托管费用 + 销售服务费用 + 赎回费用</p>
<p class="text leading-[32px]">收入 = 申购费用 + 管理费用 + 托管费用 + 销售服务费用 + 赎回费用</p>
<p class="text leading-[32px]">成本 = 购买渠道金额</p>
<p class="text leading-[32px]">收益 = 申购费用 + 管理费用 + 托管费用 + 销售服务费用 + 赎回费用</p>
</div>
</el-form-item>
<el-form-item label="基金资产:">
<div class="flex-1">
<div class="flex items-center">
<span class="text">起始金额</span>
<el-input class="w-[140px] mx-2"
v-model="form[2].startingAmount"></el-input>
<el-input class="w-[140px] mx-2" v-model="form[2].startingAmount"></el-input>
<span class="text">万元</span>
</div>
<p class="text mt-4">基金账户金额 = 所有基金资产净值+起始金额 + 累计收益 - 购买渠道金额</p>
@ -74,8 +67,7 @@
</div>
<div class="flex justify-end">
<div class="submit"
@click="submit">保存修改</div>
<div class="submit" @click="submit">保存修改</div>
</div>
</template>

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

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

@ -5,77 +5,42 @@
<dl>
<dt>担保方式</dt>
<div class="vals">
<dd v-for="(item, i) in productTypes"
:key="i"
:class="{ active: params.productType === item.id }"
@click="filterClick(item, 'productType')">{{ item.name }}</dd>
<dd v-for="(item, i) in productTypes" :key="i" :class="{ active: params.productType === item.id }" @click="filterClick(item, 'productType')">{{ item.name }}</dd>
</div>
</dl>
<dl>
<dt>担保方式</dt>
<div class="vals">
<dd v-for="(item, i) in guarantees"
:key="i"
:class="{ active: params.guarantyStyleId === item.id }"
@click="filterClick(item, 'guarantyStyleId')">{{ item.name }}</dd>
<dd v-for="(item, i) in guarantees" :key="i" :class="{ active: params.guarantyStyleId === item.id }" @click="filterClick(item, 'guarantyStyleId')">{{ item.name }}</dd>
</div>
</dl>
<dl>
<dt>贷款期限</dt>
<div class="vals">
<dd v-for="(item, i) in times"
:key="i"
:class="{ active: params.loanPeriod === item.name }"
@click="filterClick(item, 'loanPeriod')">{{ item.name }}</dd>
<dd v-for="(item, i) in times" :key="i" :class="{ active: params.loanPeriod === item.name }" @click="filterClick(item, 'loanPeriod')">{{ item.name }}</dd>
</div>
</dl>
<dl>
<dt>贷款额度</dt>
<div class="vals">
<dd v-for="(item, i) in moneys"
:key="i"
:class="{ active: params.loanLimit === item.name }"
@click="filterClick(item, 'loanLimit')">{{ item.name }}</dd>
<dd v-for="(item, i) in moneys" :key="i" :class="{ active: params.loanLimit === item.name }" @click="filterClick(item, 'loanLimit')">{{ item.name }}</dd>
</div>
</dl>
</div>
<div class="block mt-3">
<div class="search mb-2">
<input type="text"
v-model="params.keyWord"
placeholder="搜索"
maxlength="20" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
<input type="text" v-model="params.keyWord" placeholder="搜索" maxlength="20" />
<img src="@/assets/images/search.png" alt="" class="icon" />
</div>
<el-table ref="table"
v-loading="loading"
:data="list">
<el-table-column prop="productName"
label="贷款名称"
min-width="110"></el-table-column>
<el-table-column prop="productTypeText"
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 ref="table" v-loading="loading" :data="list">
<el-table-column prop="productName" label="贷款名称" min-width="110"></el-table-column>
<el-table-column prop="productTypeText" 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"
label="操作"
width="100">
@ -85,16 +50,18 @@
@click="toDetail(row)">查看详情</el-button>
</template></el-table-column> -->
</el-table>
<el-pagination v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="getList()"
@current-change="getList()"
small
background
class="px-3 py-2 justify-end"></el-pagination>
<el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="getList()"
@current-change="getList()"
small
background
class="px-3 py-2 justify-end"
></el-pagination>
</div>
</div>
</template>

@ -49,19 +49,21 @@
</div>
<div class="line">
<span class="label">贷款用途</span>
<div class="val">{{
info.loanPurpose === '购房'
? '可用于住房按揭贷款、二手房住房按揭贷款。'
: info.loanPurpose === '消费'
? '贷款用途可用于除购房之外的合法个人消费支出,不得用于投资经营,不得用于无指定用途的个人支出。'
: info.loanPurpose === '经营' && !info.productType
? '可用于个人或其企业生产和经营活动中临时性、季节性等流动资金周转以及购置、安装或修理小型设备和装潢经营性场所所需的人民币贷款业务。'
: info.loanPurpose === '创业'
? '用于创业或再创业过程中的资金需求。'
: info.loanPurpose === '经营' && info.productType
? '用于短期生产经营周转的可循环的人民币信用贷款业务。'
: info.otherPurposesOfLoan
}}</div>
<div class="val">
{{
info.loanPurpose === '购房'
? '可用于住房按揭贷款、二手房住房按揭贷款。'
: info.loanPurpose === '消费'
? '贷款用途可用于除购房之外的合法个人消费支出,不得用于投资经营,不得用于无指定用途的个人支出。'
: info.loanPurpose === '经营' && !info.productType
? '可用于个人或其企业生产和经营活动中临时性、季节性等流动资金周转以及购置、安装或修理小型设备和装潢经营性场所所需的人民币贷款业务。'
: info.loanPurpose === '创业'
? '用于创业或再创业过程中的资金需求。'
: info.loanPurpose === '经营' && info.productType
? '用于短期生产经营周转的可循环的人民币信用贷款业务。'
: info.otherPurposesOfLoan
}}
</div>
</div>
<div class="line">
<span class="label">还款方式</span>
@ -81,71 +83,43 @@
<span class="label">材料要求</span>
<div class="val">
<p class="text">办理账户-提供材料{{ riskInfo?.accountMaterials }}</p>
<p v-if="riskInfo?.sendingAccount"
class="text">办理账户-发放账户借记卡或放款专户</p>
<p v-if="riskInfo?.loanApplicationMethod"
class="text">贷款申请-申请方式{{ riskInfo?.loanApplicationMethod }}</p>
<p v-if="riskInfo?.borrowerMaterial"
class="text">贷款申请-提供材料-借款人材料{{ riskInfo?.borrowerMaterial }}</p>
<p v-if="riskInfo?.sendingAccount" class="text">办理账户-发放账户借记卡或放款专户</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">
<p v-if="riskInfo?.enterpriseMaterial"
class="text">贷款申请-提供材料-企业材料{{ riskInfo?.enterpriseMaterial }}</p>
<p v-if="riskInfo?.collateral"
class="text">贷款申请-提供材料-抵押物{{ riskInfo?.collateral }}</p>
<p v-if="riskInfo?.enterpriseMaterial" class="text">贷款申请-提供材料-企业材料{{ riskInfo?.enterpriseMaterial }}</p>
<p v-if="riskInfo?.collateral" class="text">贷款申请-提供材料-抵押物{{ riskInfo?.collateral }}</p>
</template>
<template v-else>
<p v-if="riskInfo?.mateMaterial"
class="text">贷款申请-提供材料-配偶材料{{ riskInfo?.mateMaterial }}</p>
<p v-if="riskInfo?.businessMaterials"
class="text">贷款申请-提供材料-经营类材料{{ riskInfo?.businessMaterials }}</p>
<p v-if="riskInfo?.mateMaterial" class="text">贷款申请-提供材料-配偶材料{{ riskInfo?.mateMaterial }}</p>
<p v-if="riskInfo?.businessMaterials" class="text">贷款申请-提供材料-经营类材料{{ riskInfo?.businessMaterials }}</p>
</template>
<p v-if="riskInfo?.supplementaryMaterials"
class="text">贷款申请-提供材料-补充材料{{ riskInfo?.supplementaryMaterials }}</p>
<p v-if="riskInfo?.runBatchObject"
class="text">系统跑批准入风控策略-跑批对象{{ riskInfo?.runBatchObject }}</p>
<p v-if="riskInfo?.accessStrategy"
class="text">系统跑批准入风控策略-准入策略{{ riskInfo?.accessStrategy }}</p>
<p v-if="riskInfo?.personalCreditScoringStrategies"
class="text">系统跑批准入风控策略-信用评分策略{{ riskInfo?.personalCreditScoringStrategies }}</p>
<p v-if="riskInfo?.riskDegreeStrategy"
class="text">系统跑批准入风控策略-风险度策略{{ riskInfo?.riskDegreeStrategy }}</p>
<p v-if="riskInfo?.interestRatePricingModel"
class="text">系统跑批准入风控策略-利率定价模型-个人额度模型{{ riskInfo?.interestRatePricingModel }}</p>
<p v-if="riskInfo?.individualInterestRateModel"
class="text">系统跑批准入风控策略-利率定价模型-个人利率模型</p>
<p v-if="riskInfo?.dueDiligenceMode"
class="text">尽职调查-尽调方式{{ riskInfo?.dueDiligenceMode }}</p>
<p v-if="riskInfo?.dueDiligenceContent"
class="text">尽职调查-尽调内容{{ riskInfo?.dueDiligenceContent }}</p>
<p v-if="riskInfo?.reviewContent"
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>
<p v-if="riskInfo?.supplementaryMaterials" class="text">贷款申请-提供材料-补充材料{{ riskInfo?.supplementaryMaterials }}</p>
<p v-if="riskInfo?.runBatchObject" class="text">系统跑批准入风控策略-跑批对象{{ riskInfo?.runBatchObject }}</p>
<p v-if="riskInfo?.accessStrategy" class="text">系统跑批准入风控策略-准入策略{{ riskInfo?.accessStrategy }}</p>
<p v-if="riskInfo?.personalCreditScoringStrategies" class="text">系统跑批准入风控策略-信用评分策略{{ riskInfo?.personalCreditScoringStrategies }}</p>
<p v-if="riskInfo?.riskDegreeStrategy" class="text">系统跑批准入风控策略-风险度策略{{ riskInfo?.riskDegreeStrategy }}</p>
<p v-if="riskInfo?.interestRatePricingModel" class="text">系统跑批准入风控策略-利率定价模型-个人额度模型{{ riskInfo?.interestRatePricingModel }}</p>
<p v-if="riskInfo?.individualInterestRateModel" class="text">系统跑批准入风控策略-利率定价模型-个人利率模型</p>
<p v-if="riskInfo?.dueDiligenceMode" class="text">尽职调查-尽调方式{{ riskInfo?.dueDiligenceMode }}</p>
<p v-if="riskInfo?.dueDiligenceContent" class="text">尽职调查-尽调内容{{ riskInfo?.dueDiligenceContent }}</p>
<p v-if="riskInfo?.reviewContent" 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 class="user m-4">
<h6 class="mb-4 text-lg font-semibold text-[#01305B]">产品经理</h6>
<div class="text-center">
<img src="@/assets/images/bankDetail/4.png"
alt=""
class="mx-auto" />
<img src="@/assets/images/bankDetail/4.png" alt="" class="mx-auto" />
<p class="mt-2 font-semibold text-[#114575]">{{ userName }}</p>
</div>
<p class="mt-2 text-[#114575]">财经学院 金融2班</p>

@ -5,77 +5,41 @@
<dl>
<dt>申购费率</dt>
<div class="vals">
<dd v-for="(item, i) in rates"
:key="i"
:class="{ active: params.subscriptionRate === item.id }"
@click="filterClick(item, 'subscriptionRate')">{{ item.name }}</dd>
<dd v-for="(item, i) in rates" :key="i" :class="{ active: params.subscriptionRate === item.id }" @click="filterClick(item, 'subscriptionRate')">{{ item.name }}</dd>
</div>
</dl>
<dl>
<dt>成立年限</dt>
<div class="vals">
<dd v-for="(item, i) in times"
:key="i"
:class="{ active: params.establishmentPeriod === item.name }"
@click="filterClick(item, 'establishmentPeriod')">{{ item.name }}</dd>
<dd v-for="(item, i) in times" :key="i" :class="{ active: params.establishmentPeriod === item.name }" @click="filterClick(item, 'establishmentPeriod')">
{{ item.name }}
</dd>
</div>
</dl>
<dl>
<dt>基金规模</dt>
<div class="vals">
<dd v-for="(item, i) in scales"
:key="i"
:class="{ active: params.fundraisingScale === item.name }"
@click="filterClick(item, 'fundraisingScale')">{{ item.name }}</dd>
<dd v-for="(item, i) in scales" :key="i" :class="{ active: params.fundraisingScale === item.name }" @click="filterClick(item, 'fundraisingScale')">{{ item.name }}</dd>
</div>
</dl>
</div>
<div class="block mt-3">
<div class="search mb-2">
<input type="text"
v-model="params.fundName"
placeholder="搜索"
maxlength="20" />
<img src="@/assets/images/search.png"
alt=""
class="icon" />
<input type="text" v-model="params.fundName" placeholder="搜索" maxlength="20" />
<img src="@/assets/images/search.png" alt="" class="icon" />
</div>
<el-table ref="table"
v-loading="loading"
:data="list">
<el-table-column prop="fundCode"
label="基金代码"
min-width="80"></el-table-column>
<el-table-column prop="fundName"
label="基金名称"
min-width="110"></el-table-column>
<el-table-column prop="dailyNetAssetValue"
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 ref="table" v-loading="loading" :data="list">
<el-table-column prop="fundCode" label="基金代码" min-width="80"></el-table-column>
<el-table-column prop="fundName" label="基金名称" min-width="110"></el-table-column>
<el-table-column prop="dailyNetAssetValue" 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"
label="操作"
width="100">
@ -85,16 +49,18 @@
@click="toDetail(row)">查看详情</el-button>
</template></el-table-column> -->
</el-table>
<el-pagination v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="getList()"
@current-change="getList()"
small
background
class="px-3 py-2 justify-end"></el-pagination>
<el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="getList()"
@current-change="getList()"
small
background
class="px-3 py-2 justify-end"
></el-pagination>
</div>
</div>
</template>

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

@ -1,34 +1,17 @@
<template>
<div>
<el-tabs v-model="curTab">
<el-tab-pane label="审批"
name="tab1">
<el-tab-pane label="审批" name="tab1">
<div class="h-[calc(100vh-170px)] pr-1 overflow-auto">
<info ref="infoRef"
@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-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" />
<info ref="infoRef" @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-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-form-item>
<el-form-item label="意见描述"
prop="opinionDescription">
<el-input type="textarea"
placeholder="审批意见500字以内。"
maxlength="500"
v-model="form.opinionDescription"></el-input>
<el-form-item label="意见描述" prop="opinionDescription">
<el-input type="textarea" placeholder="审批意见500字以内。" maxlength="500" v-model="form.opinionDescription"></el-input>
</el-form-item>
<div class="flex flex-col items-end">
<div class="mb-[18px] text-sm leading-[1.6]">
@ -37,16 +20,12 @@
</div>
<div class="inline-flex items-center mb-[18px] text-sm leading-[1.6]">
<span class="text-sm font-semibold">审批员</span>
<span v-if="signed"
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-if="signed" 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>
</div>
</div>
<div class="flex justify-end">
<div class="submit"
@click="submit(formRef)">审批</div>
<div class="submit" @click="submit(formRef)">审批</div>
</div>
</el-form>
</div>
@ -60,7 +39,6 @@ import { ref, computed, reactive, onMounted, watch } from 'vue';
import { ElMessage } from 'element-plus';
import type { FormInstance, FormRules } from 'element-plus';
import { useRouter, useRoute } from 'vue-router';
import Info from './Info.vue';
import { handleId, getIds, getNow, getUsername } from '@/utils/common';
import { examineAndApprove } from '@/api/bank';
import { getOperationTime } from '@/api/config';
@ -68,6 +46,7 @@ import { addOperation } from '@/api/judgment';
import dayjs from 'dayjs';
import Cookies from 'js-cookie';
import { productState, getStat } from '@/store/useProduct';
import Info from './Info.vue';
const emit = defineEmits(['getList']);
interface RuleForm {

@ -1,34 +1,24 @@
<template>
<div class="block card-list flex py-0">
<div class="left">
<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"
@click="toAdd">
<el-icon class="mr-1"
:size="16"
color="#006BFF">
<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"
@click="toAdd"
>
<el-icon class="mr-1" :size="16" color="#006BFF">
<Plus />
</el-icon>
新增产品
</div>
<div class="flex justify-end mb-4">
<img src="@/assets/images/fold.png"
alt=""
class="cursor-pointer"
@click="toList" />
<img src="@/assets/images/fold.png" alt="" class="cursor-pointer" @click="toList" />
</div>
<ul class="products">
<li v-for="(item, i) in list"
:key="i"
:class="{ active: item.id === id }"
@click="switchProduct(item)">
<el-popconfirm v-if="role == 41"
title="您确定删除吗?"
@confirm="handleDelete(item.id)">
<li v-for="(item, i) in list" :key="i" :class="{ active: item.id === id }" @click="switchProduct(item)">
<el-popconfirm v-if="role == 41" title="您确定删除吗?" @confirm="handleDelete(item.id)">
<template #reference>
<img src="@/assets/images/trash.png"
alt=""
class="del" />
<img src="@/assets/images/trash.png" alt="" class="del" />
</template>
</el-popconfirm>
@ -40,41 +30,31 @@
</ul>
</div>
<div class="right">
<!-- <component :is="currentSubApp"
@getList="getList"></component> -->
<config v-if="action === 'config'"
:key="actionKey"
@getList="getList"></config>
<config v-if="action === 'config'" :key="actionKey" @getList="getList"></config>
<detail v-if="action === 'detail'"></detail>
<add v-else-if="action === 'add'"
:key="actionKey"
@getList="getList"></add>
<approve v-else-if="action === 'approve'"
:key="actionKey"
@getList="getList"></approve>
<add v-else-if="action === 'add'" :key="actionKey" @getList="getList"></add>
<approve v-else-if="action === 'approve'" :key="actionKey" @getList="getList"></approve>
</div>
</div>
</template>
<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 { Plus } from '@element-plus/icons-vue';
import { bankingProductsList, batchDeletion } from '@/api/bank';
import { useRouter, useRoute } from 'vue-router';
import { getStatus } from '@/store/useProduct';
import { getIds } from '@/utils/common';
import Config from './Config.vue';
import Detail from './Detail.vue';
import Add from './Add.vue';
import Approve from './Approve.vue';
import { getIds } from '@/utils/common';
const router = useRouter();
const route = useRoute();
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 loading = ref<boolean>(false);
const productType = computed(() => route.query.type); // /
@ -102,9 +82,7 @@ const getList = async (refresh?: number) => {
loading.value = false;
}
};
onMounted(() => {
getList();
});
onMounted(getList);
watch(
route,

File diff suppressed because it is too large Load Diff

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

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

@ -1,143 +1,79 @@
<template>
<div class="block">
<div class="flex justify-between items-center mb-5">
<search v-model="params.keyWord"
@change="initList"></search>
<search v-model="params.keyWord" @change="initList"></search>
<div class="filter">
<el-checkbox-group v-if="params.roleId == 42"
class="mr-5"
v-model="productTypes">
<el-checkbox-group v-if="params.roleId == 42" class="mr-5" v-model="productTypes">
<el-checkbox :label="0">个人</el-checkbox>
<el-checkbox :label="1">企业</el-checkbox>
</el-checkbox-group>
<div class="select">
<el-select v-model="params.guarantyStyleId"
placeholder="担保方式"
size="large">
<el-option label="担保方式"
value="" />
<el-option v-for="item in guarantees"
:key="item.id"
:label="item.name"
:value="item.id" />
<el-select v-model="params.guarantyStyleId" placeholder="担保方式" size="large">
<el-option label="担保方式" value="" />
<el-option v-for="item in guarantees" :key="item.id" :label="item.name" :value="item.id" />
</el-select>
<img src="@/assets/images/7.png"
alt=""
class="icon" />
<img src="@/assets/images/7.png" alt="" class="icon" />
</div>
<div class="select">
<el-select v-model="params.status"
placeholder="产品进度"
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 v-model="params.status" placeholder="产品进度" 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>
<img src="@/assets/images/8.png"
alt=""
class="icon" />
<img src="@/assets/images/8.png" alt="" class="icon" />
</div>
<div v-if="params.roleId == 41"
class="add-btn"
@click="toAdd">
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
<div v-if="params.roleId == 41" class="add-btn" @click="toAdd">
<img src="@/assets/images/plus.png" alt="" class="icon" />
新增产品
</div>
<img src="@/assets/images/9.png"
alt=""
class="ml-4 cursor-pointer"
@click="toCardList" />
<img src="@/assets/images/9.png" alt="" class="ml-4 cursor-pointer" @click="toCardList" />
</div>
</div>
<el-table ref="table"
v-loading="loading"
:data="list"
@sort-change="handleSort">
<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">
<el-table ref="table" v-loading="loading" :data="list" @sort-change="handleSort">
<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 }">
{{ row.productType ? '企业' : '个人' }}
</template>
</el-table-column>
<el-table-column prop="guarantyStyle"
label="担保方式"
min-width="80"></el-table-column>
<el-table-column prop="loanCeiling"
label="最高额度/年利率/期限"
min-width="110">
<el-table-column prop="guarantyStyle" label="担保方式" min-width="80"></el-table-column>
<el-table-column prop="loanCeiling" label="最高额度/年利率/期限" min-width="110">
<template #default="{ row }">
{{ row.loanCeiling + '万元/' + row.maximumAnnualInterestRate + '%/' + row.maximumTermOfLoan + '个月' }}
</template>
</el-table-column>
<el-table-column prop="operationTime"
label="创建日期"
sortable="custom"
min-width="80"></el-table-column>
<el-table-column prop="status"
label="产品进度"
min-width="80">
<el-table-column prop="operationTime" label="创建日期" sortable="custom" min-width="80"></el-table-column>
<el-table-column prop="status" label="产品进度" min-width="80">
<template #default="{ row }">
{{ getStatus(row.status) }}
</template>
</el-table-column>
<el-table-column prop="id"
label="操作"
min-width="110">
<el-table-column prop="id" label="操作" min-width="110">
<template #default="{ row }">
<el-button v-if="row.showDetailsOrNot"
type="primary"
link
@click="toDetail(`/product/bank/detail`, row)"
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)">
<el-button v-if="row.showDetailsOrNot" type="primary" link @click="toDetail(`/product/bank/detail`, row)" 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>
<el-button type="primary"
link
size="small"
@click.stop="stop">删除</el-button>
<el-button type="primary" link size="small" @click.stop="stop">删除</el-button>
</template>
</el-popconfirm>
<el-button v-if="row.showApprovalOrNot"
type="primary"
link
size="small"
@click="toDetail(`/product/bank/approve`, row)">审批</el-button>
</template></el-table-column>
<el-button v-if="row.showApprovalOrNot" type="primary" link size="small" @click="toDetail(`/product/bank/approve`, row)">审批</el-button>
</template></el-table-column
>
</el-table>
<el-pagination v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="getList()"
@current-change="getList()"
small
background
class="px-3 py-2 justify-end"></el-pagination>
<el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="getList()"
@current-change="getList()"
small
background
class="px-3 py-2 justify-end"
></el-pagination>
</div>
</template>

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

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

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

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

@ -1,78 +1,47 @@
<template>
<div class="block">
<div class="flex justify-between items-center mb-5">
<search v-model="params.fundName"
@change="initList"></search>
<search v-model="params.fundName" @change="initList"></search>
<div class="filter">
<div class="add-btn"
@click="toAdd">
<img src="@/assets/images/plus.png"
alt=""
class="icon" />
<div class="add-btn" @click="toAdd">
<img src="@/assets/images/plus.png" alt="" class="icon" />
新增产品
</div>
<img src="@/assets/images/9.png"
alt=""
class="ml-4 cursor-pointer"
@click="toCardList" />
<img src="@/assets/images/9.png" alt="" class="ml-4 cursor-pointer" @click="toCardList" />
</div>
</div>
<el-table ref="table"
v-loading="loading"
:data="list"
@sort-change="handleSort">
<el-table-column prop="fundName"
label="基金名称"
min-width="150"></el-table-column>
<el-table-column prop="fundCode"
label="基金代码"
min-width="100"></el-table-column>
<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">
<el-table ref="table" v-loading="loading" :data="list" @sort-change="handleSort">
<el-table-column prop="fundName" label="基金名称" min-width="150"></el-table-column>
<el-table-column prop="fundCode" label="基金代码" min-width="100"></el-table-column>
<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 }">
<el-popconfirm title="您确定删除吗?"
@confirm.stop="handleDelete(row.id)">
<el-popconfirm title="您确定删除吗?" @confirm.stop="handleDelete(row.id)">
<template #reference>
<el-button type="primary"
link
size="small">删除</el-button>
<el-button type="primary" link size="small">删除</el-button>
</template>
</el-popconfirm>
<el-button type="primary"
link
@click="toDetail(`/product/fund/detail`, row.id)"
size="small">产品详情</el-button>
</template></el-table-column>
<el-button type="primary" link @click="toDetail(`/product/fund/detail`, row.id)" size="small">产品详情</el-button>
</template></el-table-column
>
</el-table>
<el-pagination v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="getList()"
@current-change="getList()"
small
background
class="px-3 py-2 justify-end"></el-pagination>
<el-pagination
v-model:currentPage="currentPage"
v-model:pageSize="pageSize"
:total="total"
:page-sizes="pageSizes"
:layout="pageLayout"
@size-change="getList()"
@current-change="getList()"
small
background
class="px-3 py-2 justify-end"
></el-pagination>
</div>
</template>

@ -1,37 +1,22 @@
<template>
<div>
<el-tabs v-model="curTab">
<el-tab-pane :label="id ? '产品要素' : '新增产品'"
name="tab1">
<el-form label-width="100px"
label-suffix=":"
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-tab-pane :label="id ? '产品要素' : '新增产品'" name="tab1">
<el-form label-width="100px" label-suffix="" 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 label="险种分类"
prop="insuranceType">
<el-select v-model="form.insuranceType"
placeholder="请选择">
<el-option v-for="item in config[0]?.recordChildren[1]?.subject?.itemList"
:key="item"
:label="item.options"
:value="item.itemId" />
<el-form-item label="险种分类" prop="insuranceType">
<el-select v-model="form.insuranceType" placeholder="请选择">
<el-option v-for="item in config[0]?.recordChildren[1]?.subject?.itemList" :key="item" :label="item.options" :value="item.itemId" />
</el-select>
</el-form-item>
<el-form-item v-if="form.insuranceType === 310"
label="承保年龄">
<el-form-item v-if="form.insuranceType === 310" label="承保年龄">
<div class="flex items-center">
<div class="num-inputs">
<el-input placeholder="最小年龄"
v-model.number="form.minimumAge"></el-input>
<el-input placeholder="最小年龄" v-model.number="form.minimumAge"></el-input>
<span class="split">-</span>
<el-input placeholder="最大年龄"
v-model.number="form.maximumAge"></el-input>
<el-input placeholder="最大年龄" v-model.number="form.maximumAge"></el-input>
<span class="unit">周岁</span>
</div>
</div>
@ -42,68 +27,50 @@
<p class="field-name w-[130px] mr-32">保险责任</p>
<p class="field-name">保额</p>
</div>
<div v-for="(item, i) in config[form.insuranceType === 310 ? 0 : 1]?.recordChildren[2]?.recordChildren"
:key="i"
class="flex items-center mb-2">
<div v-for="(item, i) in config[form.insuranceType === 310 ? 0 : 1]?.recordChildren[2]?.recordChildren" :key="i" class="flex items-center mb-2">
<div class="w-[130px] mr-32">
<el-checkbox :key="item.id"
v-model="item.check"
:label="item.name" />
<el-checkbox :key="item.id" v-model="item.check" :label="item.name" />
</div>
<div v-if="item.check">
<el-input placeholder="请输入"
v-model="item.sumInsured">
<el-input placeholder="请输入" v-model="item.sumInsured">
<template #append>{{ item.id === 764 || item.id === 765 ? '元' : '万' }}</template>
</el-input>
</div>
</div>
</div>
</el-form-item>
<el-form-item label="保费金额"
prop="minimumLoan">
<el-form-item label="保费金额" prop="minimumLoan">
<div>
<el-input placeholder="请输入"
v-model="form.premiumAmount">
<el-input placeholder="请输入" v-model="form.premiumAmount">
<template #append></template>
</el-input>
</div>
</el-form-item>
<el-form-item label="缴纳形式">
<el-radio :label="312"
v-model="form.formOfPayment">趸交</el-radio>
<el-radio :label="312" v-model="form.formOfPayment">趸交</el-radio>
</el-form-item>
<el-form-item label="保险期限">
<div class="flex">
<el-input class="mr-2"
placeholder="请输入"
v-model="form.insuranceDeadline"></el-input>
<el-select v-model="form.insuranceDeadlineUnit"
placeholder="请选择"
clearable>
<el-option v-for="item in units"
:key="item"
:label="item"
:value="item" />
<el-input class="mr-2" placeholder="请输入" v-model="form.insuranceDeadline"></el-input>
<el-select v-model="form.insuranceDeadlineUnit" placeholder="请选择" clearable>
<el-option v-for="item in units" :key="item" :label="item" :value="item" />
</el-select>
</div>
</el-form-item>
<el-form-item label="申请材料">
<el-checkbox-group v-model="form.applicationMaterial">
<el-checkbox v-for="(item, i) in config[form.insuranceType === 310 ? 0 : 1]?.recordChildren[6]?.subject?.itemList"
:key="i"
:label="item.itemId">{{ item.options }}</el-checkbox>
<el-checkbox v-for="(item, i) in config[form.insuranceType === 310 ? 0 : 1]?.recordChildren[6]?.subject?.itemList" :key="i" :label="item.itemId">{{
item.options
}}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<el-form-item label="责任免除">
<el-checkbox-group v-model="form.exemptionFromLiability">
<el-checkbox v-for="(item, i) in config[0]?.recordChildren[7]?.subject?.itemList"
:key="i"
:label="item.itemId">{{ item.options }}</el-checkbox>
<el-checkbox v-for="(item, i) in config[0]?.recordChildren[7]?.subject?.itemList" :key="i" :label="item.itemId">{{ item.options }}</el-checkbox>
</el-checkbox-group>
</el-form-item>
<div class="flex justify-end">
<div class="submit"
@click="submit">完成</div>
<div class="submit" @click="submit">完成</div>
</div>
</el-form>
</el-tab-pane>
@ -172,30 +139,30 @@ watch(
const addRecord = async (data: Record<string, any>) => {
const isAcci = data.insuranceType === 310; //
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)];
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));
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.maximumAge && rule.push(handleId(679, 218, data.maximumAge, `${preIds},678,679`, 3));
//
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));
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.formOfPayment && rule.push(handleId(297, 135, data.formOfPayment, preIds + ',297', 1));
data.premiumAmount && rule.push(handleId(296, 134, data.premiumAmount, `${preIds},296`, 3));
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 &&
rule.push(
handleId(
771,
235,
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,
),
);
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({
...getIds(),
@ -234,19 +201,19 @@ const submit = async () => {
if (!param.insuranceCoverageConfigList.length) return ElMessage.error('请至少输入一项保险额度');
if (isIllegalNum(param.premiumAmount)) {
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 (isIllegalNum(param.insuranceDeadline)) 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.exemptionFromLiability.length) return ElMessage.error('请至少选择一项责任免除');
param.applicationMaterial = param.applicationMaterial.join();
param.exemptionFromLiability = param.exemptionFromLiability.join();
const res = await addInsuranceProducts(param);
router.push(`/product/insurance/detail?id=` + res.message);
router.push(`/product/insurance/detail?id=${res.message}`);
addRecord(param);
ElMessage.success('提交成功!');
emit('getList');

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

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

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

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

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

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

@ -1,86 +1,63 @@
<template>
<!-- 企业额度模型 -->
<el-form label-width="80px"
class="form"
status-icon>
<el-form label-width="80px" class="form" status-icon>
<h6 class="step-name mb-2">{{ info[0]?.name }}</h6>
<el-form-item class="mb-1"
label="不超过">
<el-form-item class="mb-1" label="不超过">
<el-select v-model="form.firstMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
</el-select>
</el-form-item>
<el-form-item class="mb-1"
label="且"></el-form-item>
<el-form-item class="mb-1" label="且"></el-form-item>
<el-form-item label="不超过">
<el-select v-model="form.andFirst">
<el-option v-for="item in info[0]?.recordChildren[1]?.subject?.itemList"
:key="item"
:value="item.options" />
<el-option v-for="item in info[0]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
</el-select>
</el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[1]?.name }}</h6>
<el-form-item class="mb-1"
label="不超过">
<el-form-item class="mb-1" label="不超过">
<el-select v-model="form.secondMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
</el-select>
</el-form-item>
<el-form-item class="mb-1"
label="且"></el-form-item>
<el-form-item class="mb-1" label="且"></el-form-item>
<el-form-item label="不超过">
<el-select v-model="form.andSecond">
<el-option v-for="item in info[0]?.recordChildren[1]?.subject?.itemList"
:key="item"
:value="item.options" />
<el-option v-for="item in info[0]?.recordChildren[1]?.subject?.itemList" :key="item" :value="item.options" />
</el-select>
</el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[2]?.name }}</h6>
<el-form-item label="不超过">
<el-select v-model="form.thirdMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
</el-select>
</el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[3]?.name }}</h6>
<el-form-item label="不超过">
<el-select v-model="form.fourthMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
</el-select>
</el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[4]?.name }}</h6>
<el-form-item label="不超过">
<el-select v-model="form.fifthMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
</el-select>
</el-form-item>
<h6 class="step-name mt-4 mb-2">{{ info[5]?.name }}</h6>
<el-form-item label="不超过">
<el-select v-model="form.sixthMode">
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList"
:key="item"
:value="item.options" />
<el-option v-for="item in info[0]?.recordChildren[0]?.subject?.itemList" :key="item" :value="item.options" />
</el-select>
</el-form-item>
</el-form>
<div class="flex justify-end">
<div class="submit"
@click="submit">确认完成配置</div>
<div class="submit" @click="submit">确认完成配置</div>
</div>
</template>
@ -138,16 +115,16 @@ const getItemId = (name: string): number | string => {
};
//
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>> = [];
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.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.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.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.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.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.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.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));
await addOperation({
...getIds(),

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

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

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

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

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

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

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

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

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

@ -1,172 +1,87 @@
<template>
<el-form label-width="90px"
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
<el-form-item label="策略名称">
<div>
<el-input class="w-[320px]"
placeholder="请输入20以内字符"
maxlength="20"
clearable
v-model="strategyName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
<el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="strategyName" />
<p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
</div>
</el-form-item>
<el-form-item label="策略规则">
<el-table class="c-table"
:data="form"
max-height="calc(100vh - 230px)"
: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 prop="rule"
label="商采黑名单指标"
min-width="150">
</el-table-column>
<el-table-column label="进黑名单条件"
width="540">
<template #default="{ row,$index }">
<div v-if="$index < 4"
class="flex items-center">
<el-table class="c-table" :data="form" max-height="calc(100vh - 230px)" :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 prop="rule" label="商采黑名单指标" min-width="150"> </el-table-column>
<el-table-column label="进黑名单条件" width="540">
<template #default="{ row, $index }">
<div v-if="$index < 4" class="flex items-center">
<span class="whitespace-nowrap">{{ row.rule }}</span>
<div class="w-[95px] ">
<el-select class="mx-2"
clearable
v-model="row.symbol">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
<div class="w-[95px]">
<el-select class="mx-2" clearable v-model="row.symbol">
<el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
</el-select>
</div>
<el-input class="w-[80px]"
placeholder="请输入"
v-model="row.num"></el-input>
<el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
<span class="ml-2 whitespace-nowrap"></span>
</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"
class="flex items-center">
<span v-if="row.recordChildren"
class="whitespace-nowrap">{{ row?.recordChildren[0]?.recordChildren[0]?.name }}</span>
<div class="w-[95px] ">
<el-select class="mx-2"
clearable
v-model="row.symbol">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
<div v-else-if="$index === 14" class="flex items-center">
<span v-if="row.recordChildren" class="whitespace-nowrap">{{ row?.recordChildren[0]?.recordChildren[0]?.name }}</span>
<div class="w-[95px]">
<el-select class="mx-2" clearable v-model="row.symbol">
<el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
</el-select>
</div>
<el-input class="w-[80px]"
placeholder="请输入"
v-model="row.num"></el-input>
<el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
<span class="ml-2 whitespace-nowrap"></span>
<div class="w-[120px] ">
<el-select class="mx-2"
clearable
v-model="row.had">
<el-option v-for="item in house"
:key="item"
:label="item.name"
:value="item.name" />
<div class="w-[120px]">
<el-select class="mx-2" clearable v-model="row.had">
<el-option v-for="item in house" :key="item" :label="item.name" :value="item.name" />
</el-select>
</div>
<span class="ml-2 whitespace-nowrap"></span>
</div>
<div v-else-if="$index === 15"
class="flex items-center">
<el-input class="w-[80px]"
placeholder="请输入"
v-model="row.num"></el-input>
<div class="w-[95px] ">
<el-select class="mx-2"
clearable
v-model="row.symbol">
<el-option v-for="item in units"
:key="item"
:label="item.name"
:value="item.name" />
<div v-else-if="$index === 15" class="flex items-center">
<el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
<div class="w-[95px]">
<el-select class="mx-2" clearable v-model="row.symbol">
<el-option v-for="item in units" :key="item" :label="item.name" :value="item.name" />
</el-select>
</div>
<span class="ml-2 whitespace-nowrap">内申请次数</span>
<div class="w-[95px] ">
<el-select class="mx-2"
clearable
v-model="row.symbol1">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
<div class="w-[95px]">
<el-select class="mx-2" clearable v-model="row.symbol1">
<el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
</el-select>
</div>
<el-input class="w-[80px]"
placeholder="请输入"
v-model="row.num1"></el-input>
<el-input class="w-[80px]" placeholder="请输入" v-model="row.num1"></el-input>
<span class="ml-2 whitespace-nowrap"></span>
<div class="w-[120px] ">
<el-select class="mx-2"
clearable
v-model="row.had">
<el-option v-for="item in house"
:key="item"
:label="item.name"
:value="item.name" />
<div class="w-[120px]">
<el-select class="mx-2" clearable v-model="row.had">
<el-option v-for="item in house" :key="item" :label="item.name" :value="item.name" />
</el-select>
</div>
<span class="ml-2 whitespace-nowrap"></span>
</div>
<div v-else-if="$index === 18"
class="w-[95px] ">
<el-select v-if="row.recordChildren"
clearable
v-model="row.symbol">
<el-option v-for="item in row?.recordChildren[0]?.subject?.itemList"
:key="item"
:label="item.options"
:value="item.options" />
<div v-else-if="$index === 18" class="w-[95px]">
<el-select v-if="row.recordChildren" 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>
</div>
<div v-else-if="$index > 19 && $index < 28"
class="flex items-center">
<el-input class="w-[80px]"
placeholder="请输入"
v-model="row.num"></el-input>
<div class="w-[95px] ">
<el-select class="mx-2"
clearable
v-model="row.symbol">
<el-option v-for="item in units"
:key="item"
:label="item.name"
:value="item.name" />
<div v-else-if="$index > 19 && $index < 28" class="flex items-center">
<el-input class="w-[80px]" placeholder="请输入" v-model="row.num"></el-input>
<div class="w-[95px]">
<el-select class="mx-2" clearable v-model="row.symbol">
<el-option v-for="item in units" :key="item" :label="item.name" :value="item.name" />
</el-select>
</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">
<div class="w-[95px] ">
<el-select class="mx-2"
clearable
v-model="row.symbol1">
<el-option v-for="item in symbols"
:key="item"
:label="item.name"
:value="item.name" />
<div class="w-[95px]">
<el-select class="mx-2" clearable v-model="row.symbol1">
<el-option v-for="item in symbols" :key="item" :label="item.name" :value="item.name" />
</el-select>
</div>
<el-input class="w-[80px]"
placeholder="请输入"
v-model="row.num1"></el-input>
<el-input class="w-[80px]" placeholder="请输入" v-model="row.num1"></el-input>
<span class="ml-2 whitespace-nowrap"></span>
</template>
</div>
@ -174,17 +89,13 @@
</el-table-column>
</el-table>
</el-form-item>
<div v-if="!disabled"
class="flex justify-end mt-3">
<div class="dia-btn cancel"
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
<div v-if="!disabled" class="flex justify-end mt-3">
<div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn" @click="confirmSubmit">确定</div>
</div>
</el-form>
<Confirm v-model="syncVisible"
@submit="submit" />
<Confirm v-model="syncVisible" @submit="submit" />
</template>
<script setup lang="ts">
@ -266,9 +177,9 @@ const getConfig = async () => {
const result = [];
process.slice(1).map((e, i) => {
const cur = info.value.find((n) => n.stRecordId === e.id);
let num = getNum(cur?.ruleOne);
let symbol = getSymbol(cur?.ruleOne);
let had = getChinese(cur?.ruleOne);
const num = getNum(cur?.ruleOne);
const symbol = getSymbol(cur?.ruleOne);
const had = getChinese(cur?.ruleOne);
let temp = {
...getIds(),
name: e.name,
@ -396,22 +307,26 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 4,
colspan: 1,
};
} else if (rowIndex === 4) {
}
if (rowIndex === 4) {
return {
rowspan: 10,
colspan: 1,
};
} else if (rowIndex === 14 || rowIndex === 16) {
}
if (rowIndex === 14 || rowIndex === 16) {
return {
rowspan: 2,
colspan: 1,
};
} else if (rowIndex === 18) {
}
if (rowIndex === 18) {
return {
rowspan: 10,
colspan: 1,
};
} else if (spanRows.includes(rowIndex)) {
}
if (spanRows.includes(rowIndex)) {
return {
rowspan: 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 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].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].ruleFour && rule.push(handleId(327, 153, data[0].ruleFour, preIds + ',318,327', 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].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));
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;
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;
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));
data[2].ruleOne && rule.push(handleId(342, 158, data[2].ruleOne === '拒绝' ? 355 : 356, preIds + ',322,342', 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].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].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].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].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].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].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));
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;
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({
...getIds(),
@ -486,8 +401,8 @@ const submit = async (synchronizeUpdate?: number) => {
id: info.value.find((n) => n.stRecordId === 320)?.id,
stRecordId: 320,
...getIds(),
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,
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}`,
},
{
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,
ruleSix: form.value[24].num + form.value[24].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,
},
];

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

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

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

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

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

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

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

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

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

@ -1,80 +1,41 @@
<template>
<el-form label-width="90px"
label-suffix=":"
class="form"
:disabled="disabled"
v-loading="loading">
<el-form label-width="90px" label-suffix="" class="form" :disabled="disabled" v-loading="loading">
<el-form-item label="策略名称">
<div>
<el-input class="w-[320px]"
placeholder="请输入20以内字符"
maxlength="20"
clearable
v-model="form.scoreCardName" />
<p v-if="bankIds.length"
class="text-danger">不同步已关联产品请修改策略名称</p>
<el-input class="w-[320px]" placeholder="请输入20以内字符" maxlength="20" clearable v-model="form.scoreCardName" />
<p v-if="bankIds.length" class="text-danger">不同步已关联产品请修改策略名称</p>
</div>
</el-form-item>
<el-form-item label="策略规则">
<el-table class="c-table"
:data="list"
: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">
<el-table class="c-table" :data="list" :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 }">
<el-radio-group 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>
</template>
</el-table-column>
<el-table-column prop="name"
label="维度"
min-width="150"
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">
<el-table-column prop="name" label="维度" min-width="150" 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 }">
<el-select v-if="row.itemList"
clearable
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 v-if="row.itemList" clearable 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>
</template>
</el-table-column>
</el-table>
</el-form-item>
<el-form-item label="描述"
prop="description">
<el-input placeholder="请输入"
maxlength="100"
type="textarea"
v-model="form.description" />
<el-form-item label="描述" prop="description">
<el-input placeholder="请输入" maxlength="100" type="textarea" v-model="form.description" />
</el-form-item>
<div v-if="!disabled"
class="flex justify-end mt-3">
<div class="dia-btn cancel"
@click="emit('close')">取消</div>
<div class="dia-btn"
@click="confirmSubmit">确定</div>
<div v-if="!disabled" class="flex justify-end mt-3">
<div class="dia-btn cancel" @click="emit('close')">取消</div>
<div class="dia-btn" @click="confirmSubmit">确定</div>
</div>
</el-form>
<Confirm v-model="syncVisible"
@submit="submit" />
<Confirm v-model="syncVisible" @submit="submit" />
</template>
<script setup lang="ts">
@ -128,7 +89,7 @@ const getConfig = async () => {
name: e.name,
sub: n.name,
isChoose: cur?.isChoose || '',
score: cur ? cur?.dimensionIndexList[i - 1]?.score + '' : '',
score: cur ? `${cur?.dimensionIndexList[i - 1]?.score}` : '',
span: i === 1 ? 1 : 0,
parent: i === 1 ? '' : j,
itemList: n?.subject?.itemList || [],
@ -188,39 +149,41 @@ const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
rowspan: 5,
colspan: 1,
};
} else if (rowIndex === 5 || rowIndex === 11 || rowIndex === 39 || rowIndex === 53) {
}
if (rowIndex === 5 || rowIndex === 11 || rowIndex === 39 || rowIndex === 53) {
return {
rowspan: 2,
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 {
rowspan: 4,
colspan: 1,
};
} else if (rowIndex === 21 || rowIndex === 24 || rowIndex === 36) {
}
if (rowIndex === 21 || rowIndex === 24 || rowIndex === 36) {
return {
rowspan: 3,
colspan: 1,
};
} else {
return {
rowspan: 0,
colspan: 0,
};
}
return {
rowspan: 0,
colspan: 0,
};
}
};
//
const addRecord = async () => {
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)];
form.description && lcRule.push(handleId(516, 192, form.description, preIds + ',516', 3));
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));
list.value.forEach((e) => {
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({
...getIds(),

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

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

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

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

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

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

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

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

Loading…
Cancel
Save