配置风控及策略联调

master
yujialong 7 months ago
parent 331cf3e493
commit 4d2374a38d
  1. 2
      .env
  2. 9
      src/api/model.ts
  3. 102
      src/views/product/bank/Config.vue
  4. 8
      src/views/product/strategy/150/Detail.vue
  5. 10
      src/views/product/strategy/150/Index.vue
  6. 8
      src/views/product/strategy/151/Detail.vue
  7. 8
      src/views/product/strategy/151/Index.vue
  8. 8
      src/views/product/strategy/152/Detail.vue
  9. 10
      src/views/product/strategy/152/Index.vue
  10. 297
      src/views/product/strategy/153/Detail.vue
  11. 166
      src/views/product/strategy/153/Index.vue
  12. 408
      src/views/product/strategy/154.vue
  13. 432
      src/views/product/strategy/154/Detail.vue
  14. 166
      src/views/product/strategy/154/Index.vue
  15. 2
      src/views/product/strategy/CardList.vue

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

@ -17,9 +17,18 @@ export const accessStrategyGovernmentBlacklistSave = async (data: Record<string,
export const accessStrategyGovernmentBlacklistDel = async (data: Record<string, any>): Promise<any> =>
(await axios.post(`${host}/product/accessStrategyGovernmentBlacklist/delete`, data)).data;
export const accessStrategyEnterpriseBlacklist = async (data: Record<string, any>): Promise<any> =>
(
await axios.post(`${host}/product/accessStrategyEnterpriseBlacklist/list`, {
...getIds(),
...data,
})
).data;
export const accessStrategyEnterpriseBlacklistFind = async (): Promise<any> => (await axios.post(`/product/accessStrategyEnterpriseBlacklist/details`, getIds())).data;
export const accessStrategyEnterpriseBlacklistSave = async (data: Record<string, any>): Promise<any> =>
(await axios.post(`/product/accessStrategyEnterpriseBlacklist/saveOrUpdate`, data)).data;
export const accessStrategyEnterpriseBlacklistDel = async (data: Record<string, any>): Promise<any> =>
(await axios.post(`${host}/product/accessStrategyEnterpriseBlacklist/delete`, data)).data;
export const accessStrategyAntiFraudStrategyFind = async (): Promise<any> => (await axios.post(`/product/accessStrategyAntiFraudStrategy/details`, getIds())).data;
export const accessStrategyAntiFraudStrategySave = async (data: Record<string, any>): PromiaccessStrategyGovernmentBlacklistse<any> =>

@ -214,7 +214,7 @@
<div class="radio-wrap flex-col items-start mb-2">
<el-radio-group v-if="config.length"
v-model="form.runBatchObjectSelectedStatus">
<el-radio v-for="(item, i) in config[2]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList"
<el-radio v-for="(item, i) in whethers1"
:key="i"
:label="item.itemId">{{ item.options }}</el-radio>
</el-radio-group>
@ -240,28 +240,29 @@
<div class="radio-wrap">
<span class="label min-w-[130px]">{{ item.name }}</span>
<el-radio-group v-model="form.bankRiskControlAllocationTacticsList[i].tacticsSelectedStatus"
@change="getStrategy">
<el-radio v-for="(option, j) in item?.recordChildren[0]?.subject?.itemList"
@change="getAccess(i)">
<el-radio v-for="(option, j) in whethers1"
:key="j"
:label="option.itemId">{{ option.options }}</el-radio>
</el-radio-group>
</div>
<template v-if="form.bankRiskControlAllocationTacticsList[i].tacticsSelectedStatus === 803">
<template v-if="form.bankRiskControlAllocationTacticsList[i].tacticsSelectedStatus === 803 && item.blackList">
<el-select class="ml-5 mr-3"
v-model="form.bankRiskControlAllocationTacticsList[i].tacticsId"
placeholder="请选择">
<el-option v-for="(item, i) in govList"
placeholder="请选择"
clearable>
<el-option v-for="(option, i) in item?.blackList"
:key="i"
:label="item.strategyName"
:value="item.governmentId" />
:label="option.strategyName"
:value="option.strategyId" />
</el-select>
<img v-if="form.bankRiskControlAllocationTacticsList[i].tacticsId"
src="@/assets/svgs/preview.svg"
alt=""
class="cursor-pointer"
@click="preview(form.bankRiskControlAllocationTacticsList[i].tacticsId, '150')">
@click="preview(item, i)">
</template>
</div>
</div>
@ -601,8 +602,9 @@
size="100%"
custom-class="model-drawer">
<component :is="curPreview"
v-model:id="curPreviewId"
disabled />
v-model:row="curRow"
disabled
:key="curRow.strategyId" />
</el-drawer>
</div>
</template>
@ -613,7 +615,7 @@ import { ElMessage } from 'element-plus';
import type { TabsPaneContext, FormInstance } from 'element-plus';
import { findById, riskSave, riskUpdate, riskControlDetailsAreDisplayed } from '@/api/bank';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { listCredit, accessStrategyGovernmentBlacklistList } from '@/api/model';
import { listCredit, accessStrategyGovernmentBlacklistList, accessStrategyCreditBlacklist, accessStrategyBusinessBlacklist } from '@/api/model';
import { useRouter, useRoute } from 'vue-router';
import { handleId, getIds, getUsername } from '@/utils/common';
import Info from './Info.vue';
@ -698,10 +700,9 @@ const whethers1 = ref<Record<string, any>>([
const formRef = ref<FormInstance>();
const userName = ref<string>();
const curPreview = ref<string>('150');
const curPreviewId = ref<number>();
const curRow = ref<Record<string, any>>();
const strategyParams = { pageNum: 1, pageSize: 100, keyWord: '', ...getIds() };
const visible = ref<boolean>(false);
const govList = ref<Record<string, any>[]>([]);
let form = reactive<RuleForm>({
...getIds(),
provideMaterialSelectedStatus: '',
@ -754,10 +755,10 @@ let form = reactive<RuleForm>({
const dynamicComponentMap = {
'150': defineAsyncComponent(() => import('../strategy/150/Detail.vue')),
// '151': defineAsyncComponent(() => import('./151.vue')),
// '152': defineAsyncComponent(() => import('./152.vue')),
// '153': defineAsyncComponent(() => import('./153.vue')),
// '154': defineAsyncComponent(() => import('./154.vue')),
'151': defineAsyncComponent(() => import('../strategy/151/Detail.vue')),
'152': defineAsyncComponent(() => import('../strategy/152/Detail.vue')),
'153': defineAsyncComponent(() => import('../strategy/153/Detail.vue')),
'154': defineAsyncComponent(() => import('../strategy/154/Detail.vue')),
// '155': defineAsyncComponent(() => import('./155.vue')),
// '156': defineAsyncComponent(() => import('./156.vue')),
// '148': defineAsyncComponent(() => import('./Credit.vue')),
@ -774,12 +775,18 @@ for (const [name, asyncComponent] of Object.entries(dynamicComponentMap)) {
const tabChange = (tab: TabsPaneContext, event: Event) => {
console.log(tab, event);
};
//
const getStrategy = async () => {
try {
const { page } = await accessStrategyGovernmentBlacklistList({ pageNum: 1, pageSize: 1000, keyWord: '', ...getIds() });
govList.value = page.records;
} finally {
//
const getAccess = async (i: number) => {
const list = config.value[2].recordChildren[1].recordChildren;
if (!list[i].blackList) {
try {
let res;
if (!i) res = await accessStrategyGovernmentBlacklistList(strategyParams); //
if (i === 1) res = await accessStrategyCreditBlacklist(strategyParams); //
if (i === 2) res = await accessStrategyBusinessBlacklist(strategyParams); //
if (res) list[i].blackList = res.page.records;
} finally {
}
}
};
//
@ -844,8 +851,13 @@ const getConfig = async () => {
});
}
if (form.bankRiskControlAllocationTacticsList[0].tacticsSelectedStatus === 803) {
getStrategy();
//
const risk = form.bankRiskControlAllocationTacticsList;
if (risk) {
risk.map((e, i) => {
if (!e.tacticsId) e.tacticsId = '';
e.tacticsSelectedStatus === 803 && getAccess(i);
});
}
const { data } = await listCredit({
@ -1022,7 +1034,7 @@ const submit = async (formEl: FormInstance | undefined) => {
});
param.enterpriseQuotaModel = param.enterpriseQuotaModelSelectedStatus === 803 ? param.enterpriseQuotaModel.join() : '';
debugger;
param.supplementaryMaterials = param.supplementMaterialSelectedStatus === 797 ? param.supplementaryMaterials.join() : '';
if (param.contractSupplyMaterialsSelectedStatus !== 797) param.contractMaterials = '';
if (info.value.riskControlDetails) {
@ -1145,25 +1157,25 @@ const addRecord = async (data: Record<string, any>) => {
//
const list1 = data.bankRiskControlAllocationTacticsList;
list1[0].tacticsSelectedStatus && lcRule.push(handleId(1325, 327, list1[0].tacticsSelectedStatus, `${preIds},74,83,1318,1325`, 1));
list1[0].tacticsId && lcRule.push(handleId(1326, 331, govList.value.find((e) => e.governmentId === list1[0].tacticsId)?.strategyName, `${preIds},74,83,1318,1326`, 3));
list1[0].tacticsId && lcRule.push(handleId(1326, 331, list1[0].blackList.find((e) => e.strategyId === list1[0].tacticsId)?.strategyName || '', `${preIds},74,83,1318,1326`, 3));
list1[1].tacticsSelectedStatus && lcRule.push(handleId(1327, 327, list1[1].tacticsSelectedStatus, `${preIds},74,83,1319,1327`, 1));
list1[1].tacticsId && lcRule.push(handleId(1328, 332, govList.value.find((e) => e.governmentId === list1[1].tacticsId)?.strategyName, `${preIds},74,83,1319,1328`, 3));
list1[1].tacticsId && lcRule.push(handleId(1328, 332, list1[1].blackList.find((e) => e.strategyId === list1[1].tacticsId)?.strategyName || '', `${preIds},74,83,1319,1328`, 3));
list1[2].tacticsSelectedStatus && lcRule.push(handleId(1329, 327, list1[2].tacticsSelectedStatus, `${preIds},74,83,1320,1329`, 1));
list1[2].tacticsId && lcRule.push(handleId(1330, 333, govList.value.find((e) => e.governmentId === list1[2].tacticsId)?.strategyName, `${preIds},74,83,1320,1330`, 3));
list1[2].tacticsId && lcRule.push(handleId(1330, 333, list1[2].blackList.find((e) => e.strategyId === list1[2].tacticsId)?.strategyName || '', `${preIds},74,83,1320,1330`, 3));
list1[3].tacticsSelectedStatus && lcRule.push(handleId(1331, 327, list1[3].tacticsSelectedStatus, `${preIds},74,83,1321,1331`, 1));
list1[3].tacticsId && lcRule.push(handleId(1332, 334, govList.value.find((e) => e.governmentId === list1[3].tacticsId)?.strategyName, `${preIds},74,83,1321,1332`, 3));
list1[3].tacticsId && lcRule.push(handleId(1332, 334, list1[3].blackList.find((e) => e.strategyId === list1[3].tacticsId)?.strategyName || '', `${preIds},74,83,1321,1332`, 3));
list1[4].tacticsSelectedStatus && lcRule.push(handleId(1333, 327, list1[4].tacticsSelectedStatus, `${preIds},74,83,1322,1333`, 1));
list1[4].tacticsId && lcRule.push(handleId(1334, 335, govList.value.find((e) => e.governmentId === list1[4].tacticsId)?.strategyName, `${preIds},74,83,1322,1334`, 3));
list1[4].tacticsId && lcRule.push(handleId(1334, 335, list1[4].blackList.find((e) => e.strategyId === list1[4].tacticsId)?.strategyName || '', `${preIds},74,83,1322,1334`, 3));
list1[5].tacticsSelectedStatus && lcRule.push(handleId(1335, 327, list1[5].tacticsSelectedStatus, `${preIds},74,83,1323,1335`, 1));
list1[5].tacticsId && lcRule.push(handleId(1336, 336, govList.value.find((e) => e.governmentId === list1[5].tacticsId)?.strategyName, `${preIds},74,83,1323,1336`, 3));
list1[5].tacticsId && lcRule.push(handleId(1336, 336, list1[5].blackList.find((e) => e.strategyId === list1[5].tacticsId)?.strategyName || '', `${preIds},74,83,1323,1336`, 3));
list1[6].tacticsSelectedStatus && lcRule.push(handleId(1337, 327, list1[6].tacticsSelectedStatus, `${preIds},74,83,1324,1337`, 1));
list1[6].tacticsId && lcRule.push(handleId(1338, 337, govList.value.find((e) => e.governmentId === list1[6].tacticsId)?.strategyName, `${preIds},74,83,1324,1338`, 3));
list1[6].tacticsId && lcRule.push(handleId(1338, 337, list1[6].blackList.find((e) => e.strategyId === list1[6].tacticsId)?.strategyName || '', `${preIds},74,83,1324,1338`, 3));
//
const list2 = data.creditScoringStrategyList;
@ -1216,19 +1228,19 @@ const addRecord = async (data: Record<string, any>) => {
//
const list4 = data.bankRiskControlAllocationTacticsList;
list4[0].tacticsSelectedStatus && lcRule.push(handleId(1350, 327, list4[0].tacticsSelectedStatus, `${preIds},99,1345,1350`, 1));
list4[0].tacticsId && lcRule.push(handleId(1355, 339, govList.value.find((e) => e.governmentId === list4[0].tacticsId)?.strategyName, `${preIds},99,1345,1355`, 3));
// list4[0].tacticsId && lcRule.push(handleId(1355, 339, govList.value.find((e) => e.strategyId === list4[0].tacticsId)?.strategyName, `${preIds},99,1345,1355`, 3));
list4[1].tacticsSelectedStatus && lcRule.push(handleId(1351, 327, list4[1].tacticsSelectedStatus, `${preIds},99,1346,1351`, 1));
list4[1].tacticsId && lcRule.push(handleId(1356, 339, govList.value.find((e) => e.governmentId === list4[1].tacticsId)?.strategyName, `${preIds},99,1346,1356`, 3));
// list4[1].tacticsId && lcRule.push(handleId(1356, 339, govList.value.find((e) => e.strategyId === list4[1].tacticsId)?.strategyName, `${preIds},99,1346,1356`, 3));
list4[2].tacticsSelectedStatus && lcRule.push(handleId(1352, 327, list4[2].tacticsSelectedStatus, `${preIds},99,1347,1352`, 1));
list4[2].tacticsId && lcRule.push(handleId(1357, 339, govList.value.find((e) => e.governmentId === list4[2].tacticsId)?.strategyName, `${preIds},99,1347,1357`, 3));
// list4[2].tacticsId && lcRule.push(handleId(1357, 339, govList.value.find((e) => e.strategyId === list4[2].tacticsId)?.strategyName, `${preIds},99,1347,1357`, 3));
list4[3].tacticsSelectedStatus && lcRule.push(handleId(1353, 327, list4[3].tacticsSelectedStatus, `${preIds},99,1348,1353`, 1));
list4[3].tacticsId && lcRule.push(handleId(1358, 339, govList.value.find((e) => e.governmentId === list4[3].tacticsId)?.strategyName, `${preIds},99,1348,1358`, 3));
// list4[3].tacticsId && lcRule.push(handleId(1358, 339, govList.value.find((e) => e.strategyId === list4[3].tacticsId)?.strategyName, `${preIds},99,1348,1358`, 3));
list4[4].tacticsSelectedStatus && lcRule.push(handleId(1354, 327, list4[4].tacticsSelectedStatus, `${preIds},99,1349,1354`, 1));
list4[4].tacticsId && lcRule.push(handleId(1359, 339, govList.value.find((e) => e.governmentId === list4[4].tacticsId)?.strategyName, `${preIds},99,1349,1359`, 3));
// list4[4].tacticsId && lcRule.push(handleId(1359, 339, govList.value.find((e) => e.strategyId === list4[4].tacticsId)?.strategyName, `${preIds},99,1349,1359`, 3));
}
await addOperation({
@ -1238,9 +1250,13 @@ const addRecord = async (data: Record<string, any>) => {
});
};
//
const preview = (strategyId: number, type: string) => {
curPreviewId.value = strategyId;
curPreview.value = type;
const preview = (row: Record<string, any>, i: number) => {
const { tacticsId } = form.bankRiskControlAllocationTacticsList[i];
curRow.value = {
strategyId: tacticsId,
strategyName: row.blackList.find((e) => e.strategyId === tacticsId)?.strategyName,
};
curPreview.value = Object.keys(dynamicComponentMap)[i];
visible.value = true;
};
</script>

@ -168,7 +168,7 @@ const props = defineProps({
const emit = defineEmits(['clsoe']);
const form = ref<Record<string, any>[]>([]);
const { governmentId, strategyName } = toRefs(props.row);
const { strategyId, strategyName } = toRefs(props.row);
const info = ref<Record<string, any>[]>([]);
const symbols: Array<Record<string, any>> = [
{
@ -234,9 +234,9 @@ const getConfig = async () => {
//
const getDetail = async () => {
try {
if (governmentId.value) {
if (strategyId.value) {
const { data } = await accessStrategyGovernmentBlacklistFind({
governmentId: governmentId.value,
strategyId: strategyId.value,
});
info.value = data;
}
@ -369,7 +369,7 @@ const submit = async (synchronizeUpdate?: number) => {
});
await accessStrategyGovernmentBlacklistSave({
...getIds(),
governmentId: governmentId.value,
strategyId: strategyId.value,
strategyName: strategyName.value,
synchronizeUpdate,
governmentBlacklistList: param,

@ -53,7 +53,7 @@
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="您确定删除吗?"
@confirm.stop="handleDelete([row.governmentId])">
@confirm.stop="handleDelete([row.strategyId])">
<template #reference>
<el-button type="text"
size="small">删除</el-button>
@ -73,7 +73,7 @@
class="px-3 py-2 justify-end"></el-pagination>
<el-drawer v-model="visible"
:title="(isDetail ? '查看' : curRow.governmentId ? '编辑' : '新增') + '政务黑名单策略'"
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '政务黑名单策略'"
size="100%"
custom-class="model-drawer">
<Detail v-model:row="curRow"
@ -104,7 +104,7 @@ const list = ref<Record<string, any>[]>([]);
const loading = ref<boolean>(false);
const visible = ref<boolean>(false);
const curRow = ref<Record<string, any>>({
governmentId: '',
strategyId: '',
strategyName: '',
});
const isDetail = ref<boolean>(false);
@ -134,14 +134,14 @@ const handleSelectionChange = (val: Record<string, any>[]) => {
};
//
const delAll = async () => {
handleDelete(multipleSelection.value.map((e) => e.governmentId));
handleDelete(multipleSelection.value.map((e) => e.strategyId));
};
//
const toAdd = () => {
i.value++;
isDetail.value = false;
curRow.value = {
governmentId: '',
strategyId: '',
strategyName: '',
};
visible.value = true;

@ -155,7 +155,7 @@ const props = defineProps({
const emit = defineEmits(['clsoe']);
const form = ref<Record<string, any>[]>([]);
const { creditId, strategyName } = toRefs(props.row);
const { strategyId, strategyName } = toRefs(props.row);
const info = ref<Record<string, any>[]>([]);
const whethers: Record<string, any>[] = [
{
@ -217,9 +217,9 @@ const getConfig = async () => {
//
const getDetail = async () => {
try {
if (creditId.value) {
if (strategyId.value) {
const { data } = await accessStrategyCreditBlacklistFind({
creditId: creditId.value,
strategyId: strategyId.value,
});
info.value = data;
}
@ -281,7 +281,7 @@ const submit = async (synchronizeUpdate?: number) => {
});
await accessStrategyCreditBlacklistSave({
...getIds(),
creditId: creditId.value,
strategyId: strategyId.value,
strategyName: strategyName.value,
synchronizeUpdate,
creditBlacklistList: param,

@ -53,7 +53,7 @@
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="您确定删除吗?"
@confirm.stop="handleDelete([row.creditId])">
@confirm.stop="handleDelete([row.strategyId])">
<template #reference>
<el-button type="text"
size="small">删除</el-button>
@ -104,7 +104,7 @@ const list = ref<Record<string, any>[]>([]);
const loading = ref<boolean>(false);
const visible = ref<boolean>(false);
const curRow = ref<Record<string, any>>({
creditId: '',
strategyId: '',
strategyName: '',
});
const isDetail = ref<boolean>(false);
@ -134,14 +134,14 @@ const handleSelectionChange = (val: Record<string, any>[]) => {
};
//
const delAll = async () => {
handleDelete(multipleSelection.value.map((e) => e.creditId));
handleDelete(multipleSelection.value.map((e) => e.strategyId));
};
//
const toAdd = () => {
i.value++;
isDetail.value = false;
curRow.value = {
creditId: '',
strategyId: '',
strategyName: '',
};
visible.value = true;

@ -202,7 +202,7 @@ const props = defineProps({
const emit = defineEmits(['clsoe']);
const form = ref<Record<string, any>[]>([]);
const { businessId, strategyName } = toRefs(props.row);
const { strategyId, strategyName } = toRefs(props.row);
const info = ref<Record<string, any>[]>([]);
const spanRows = [1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 17, 19, 20, 21, 22, 23, 24, 25, 26, 27];
const symbols: Array<Record<string, any>> = [
@ -352,9 +352,9 @@ const getConfig = async () => {
//
const getDetail = async () => {
try {
if (businessId.value) {
if (strategyId.value) {
const { data } = await accessStrategyBusinessBlacklistFind({
businessId: businessId.value,
strategyId: strategyId.value,
});
info.value = data;
}
@ -485,7 +485,7 @@ const submit = async (synchronizeUpdate?: number) => {
];
await accessStrategyBusinessBlacklistSave({
...getIds(),
businessId: businessId.value,
strategyId: strategyId.value,
strategyName: strategyName.value,
synchronizeUpdate,
businessBlacklistList: param,

@ -53,7 +53,7 @@
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="您确定删除吗?"
@confirm.stop="handleDelete([row.businessId])">
@confirm.stop="handleDelete([row.strategyId])">
<template #reference>
<el-button type="text"
size="small">删除</el-button>
@ -73,7 +73,7 @@
class="px-3 py-2 justify-end"></el-pagination>
<el-drawer v-model="visible"
:title="(isDetail ? '查看' : curRow.businessId ? '编辑' : '新增') + '商采黑名单策略'"
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '商采黑名单策略'"
size="100%"
custom-class="model-drawer">
<Detail v-model:row="curRow"
@ -104,7 +104,7 @@ const list = ref<Record<string, any>[]>([]);
const loading = ref<boolean>(false);
const visible = ref<boolean>(false);
const curRow = ref<Record<string, any>>({
businessId: '',
strategyId: '',
strategyName: '',
});
const isDetail = ref<boolean>(false);
@ -134,14 +134,14 @@ const handleSelectionChange = (val: Record<string, any>[]) => {
};
//
const delAll = async () => {
handleDelete(multipleSelection.value.map((e) => e.businessId));
handleDelete(multipleSelection.value.map((e) => e.strategyId));
};
//
const toAdd = () => {
i.value++;
isDetail.value = false;
curRow.value = {
businessId: '',
strategyId: '',
strategyName: '',
};
visible.value = true;

@ -0,0 +1,297 @@
<template>
<el-form label-width="90px"
label-suffix=":"
class="form"
:disabled="disabled">
<el-form-item label="策略名称"
prop="fundName">
<el-input class="w-[320px]"
placeholder="请输入20以内字符"
maxlength="20"
clearable
v-model="strategyName"></el-input>
</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">
<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>
</template>
</el-table-column>
<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" />
</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" />
</el-select>
</div>
<span class="whitespace-nowrap">天以上进入黑名单</span>
</div>
</template>
</el-table-column>
<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-group>
</template>
</el-table-column>
<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" />
</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" />
</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" />
</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" />
</el-select>
</div>
<span class="whitespace-nowrap">后出黑名单</span>
</div>
</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="syncVisible = true">确定</div>
</div>
<Confirm v-model="syncVisible"
@submit="submit" />
</template>
<script setup lang="ts">
import { ref, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { accessStrategyInlineBlacklistFind, accessStrategyInlineBlacklistSave } from '@/api/model';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import type { TableColumnCtx } from 'element-plus';
import { useRoute } from 'vue-router';
import { handleId, getNum, getChinese, getIds } from '@/utils/common';
import Cookies from 'js-cookie';
const route = useRoute();
const form = ref<Record<string, any>[]>([]);
const info = ref<Record<string, any>[]>([]);
const nums: Array<number> = [1, 3, 5, 10, 20, 30, 40];
const units: Array<string> = ['年', '个月', '天'];
const whethers: Record<string, any>[] = [
{
id: 345,
name: '是',
},
{
id: 346,
name: '否',
},
];
//
const getConfig = async () => {
const { process } = await getProcessInformationBasedOnRoles(153);
const result = [];
process.map((e) => {
const cur = info.value.find((n) => n.stRecordId === e.id);
let temp = {
...getIds(),
name: e.name,
recordChildren: e.recordChildren,
enterBlacklist: cur?.enterBlacklist,
outBlacklist: cur?.outBlacklist,
enterRuleOne: cur?.enterRuleOne || '',
enterRuleTwo: cur?.enterRuleTwo || '',
num: getNum(cur?.outRuleOne) || '',
num1: getNum(cur?.outRuleTwo) || '',
symbol: getChinese(cur?.outRuleOne) || '',
symbol1: getChinese(cur?.outRuleTwo) || '',
stRecordId: e.id,
};
result.push(temp);
});
result.push({
name: '正常',
remark: '不存在未结清情况',
});
form.value = result;
};
//
const getDetail = async () => {
try {
const { data } = await accessStrategyInlineBlacklistFind();
info.value = data;
getConfig();
} finally {
}
};
watch(
() => route.query,
() => {
route.query.id === '153' && getDetail();
},
{
immediate: true,
},
);
interface SpanMethodProps {
row: Record<string, any>;
column: TableColumnCtx<Record<string, any>>;
rowIndex: number;
columnIndex: number;
}
//
const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
if (rowIndex === 4) {
if (columnIndex === 1) {
return {
rowspan: 1,
colspan: 4,
};
} else if (columnIndex > 1) {
return {
rowspan: 0,
colspan: 0,
};
}
}
};
//
const submit = async () => {
let 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;
e.outRuleOne = e.num + e.symbol;
e.outRuleTwo = e.num1 + e.symbol1;
});
param.map((e) => {
delete e.recordChildren;
});
await accessStrategyInlineBlacklistSave({ inlineBlacklistList: param });
addRecord(param);
getDetail();
ElMessage.success('提交成功!');
};
//
const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,153`; // 1id
const rule: Array<Record<string, any>> = [];
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));
});
await addOperation({
...getIds(),
parentId: preIds,
lcJudgmentRuleReq: rule,
});
};
</script>
<style lang="scss" scoped>
@import url(../../../styles/form.scss);
.c-table {
:deep(.el-input__inner) {
@apply px-2;
}
}
</style>

@ -0,0 +1,166 @@
<template>
<div class="block">
<div class="flex justify-between items-center mb-5">
<search v-model="keyWord"
@change="initList"></search>
<div class="filter">
<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">
<Delete />
</el-icon>
批量删除
</div>
</template>
</el-popconfirm>
<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" />
<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="text"
@click="toDetail(row, true)"
size="small">查看</el-button>
<el-button type="text"
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="您确定删除吗?"
@confirm.stop="handleDelete([row.businessId])">
<template #reference>
<el-button type="text"
size="small">删除</el-button>
</template>
</el-popconfirm>
</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-drawer v-model="visible"
:title="(isDetail ? '查看' : curRow.businessId ? '编辑' : '新增') + '商采黑名单策略'"
size="100%"
custom-class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref, watch, defineAsyncComponent } from 'vue';
import { ElMessage } from 'element-plus';
import { Delete } from '@element-plus/icons-vue';
import { pageSizes, pageLayout } from '@/utils/common';
import { accessStrategyBusinessBlacklist, accessStrategyBusinessBlacklistDel } from '@/api/model';
import Search from '@/components/Search.vue';
const Detail = defineAsyncComponent(() => import('./Detail.vue'));
const keyWord = ref<string>();
const currentPage = ref<number>(1);
const pageSize = ref<number>(10);
const total = ref<number>(0);
const table = ref<any>();
const multipleSelection = ref<Record<string, any>[]>([]);
const list = ref<Record<string, any>[]>([]);
const loading = ref<boolean>(false);
const visible = ref<boolean>(false);
const curRow = ref<Record<string, any>>({
businessId: '',
strategyName: '',
});
const isDetail = ref<boolean>(false);
const i = ref<number>(0);
//
const getList = async () => {
loading.value = true;
try {
const { page } = await accessStrategyBusinessBlacklist({ pageNum: currentPage.value, pageSize: pageSize.value, keyWord: keyWord.value });
list.value = page.records;
total.value = page.total;
} finally {
loading.value = false;
}
};
//
const initList = async () => {
currentPage.value = 1;
getList();
};
watch(keyWord, initList);
onMounted(getList);
//
const handleSelectionChange = (val: Record<string, any>[]) => {
multipleSelection.value = val;
};
//
const delAll = async () => {
handleDelete(multipleSelection.value.map((e) => e.businessId));
};
//
const toAdd = () => {
i.value++;
isDetail.value = false;
curRow.value = {
businessId: '',
strategyName: '',
};
visible.value = true;
};
//
const toDetail = async (row: Record<string, any>, detail: boolean = false) => {
i.value++;
isDetail.value = detail;
curRow.value = row;
visible.value = true;
};
//
const closeDrawer = (refresh?: number) => {
visible.value = false;
refresh && initList();
};
const handleDelete = async (ids: number[]) => {
await accessStrategyBusinessBlacklistDel({ ids });
getList();
ElMessage.success('删除成功!');
};
</script>

@ -1,408 +0,0 @@
<template>
<!-- 企业 -->
<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>
</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>
</div>
<span class="whitespace-nowrap ml-2"></span>
</template>
<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>
</div>
<span class="whitespace-nowrap ml-2">房产查封</span>
</template>
<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>
</div>
<span class="whitespace-nowrap ml-2">股权冻结</span>
</template>
<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>
</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>
</template>
<template v-else-if="$index === 5">
<div class="w-[95px]">
<el-select v-model="row.had"
clearable>
<el-option value="不是" />
<el-option value="是" />
</el-select>
</div>
<span class="whitespace-nowrap ml-2">被列为非正常户或注销户</span>
</template>
<template v-else-if="$index === 6">
<div class="w-[95px]">
<el-select v-model="row.had"
clearable>
<el-option value="不是" />
<el-option value="是" />
</el-select>
</div>
<span class="whitespace-nowrap ml-2">非正常户或注销户</span>
</template>
<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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</div>
<span class="whitespace-nowrap ml-2">内大股东股权占比>=50%变更</span>
</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>
</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>
</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-option value="不在" />
<el-option value="在" />
</el-select>
</div>
<span class="whitespace-nowrap ml-2">工商局或农专经营异常目录</span>
</template>
</div>
</template>
</el-table-column>
</el-table>
<div class="flex justify-end">
<div class="submit"
@click="submit">确认完成配置</div>
</div>
</template>
<script setup lang="ts">
import { ref, watch } from 'vue';
import { ElMessage } from 'element-plus';
import { accessStrategyEnterpriseBlacklistFind, accessStrategyEnterpriseBlacklistSave } from '@/api/model';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { useRouter, useRoute } from 'vue-router';
import { handleId, getNum, getSymbol, getChinese, getIds } from '@/utils/common';
import Cookies from 'js-cookie';
const router = useRouter();
const route = useRoute();
const form = ref<Record<string, any>[]>([]);
const info = ref<Record<string, any>[]>([]);
const symbols: Array<string> = ['>=', '<', '>', '==', '<='];
const nums: Array<number> = [1, 3, 5, 6, 16, 33, 40];
const units: Array<string> = ['年', '月', '天'];
const have: Array<string> = ['无', '有'];
//
const getConfig = async () => {
const { process } = await getProcessInformationBasedOnRoles(154);
const result = [];
process.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 = {
name: e.name,
subject: e.subject,
stRecordId: e.id,
symbol: symbol || '',
unit: had || '',
num: num || '',
had: (((i > 0 && i < 4) || i === 5 || i === 6 || i === 14) && cur?.rule) || '',
check: (i === 4 || i === 8) && cur ? cur?.rule.split(',') : [],
};
result.push(temp);
});
form.value = result;
};
//
const getDetail = async () => {
try {
const { data } = await accessStrategyEnterpriseBlacklistFind();
info.value = data;
getConfig();
} finally {
}
};
watch(
() => route.query,
() => {
route.query.id === '154' && getDetail();
},
{
immediate: true,
},
);
//
const submit = async () => {
let param = [];
form.value.map((e, i) => {
const temp = {
id: info.value.find((n) => n.stRecordId === e.stRecordId)?.id ?? '',
stRecordId: e.stRecordId,
...getIds(),
};
let rule;
if (!i || i === 13) {
rule = e.symbol + e.num;
} else if ((i > 0 && i < 4) || i === 5 || i === 6 || i === 14) {
rule = e.had;
} else if (i === 4 || i === 8) {
rule = e.check.join();
} else if (i === 7 || i === 9 || i === 10 || i === 11) {
rule = e.symbol + e.num + e.unit;
}
temp.rule = rule;
param.push(temp);
});
await accessStrategyEnterpriseBlacklistSave({ enterpriseBlacklistList: param });
addRecord(param);
getDetail();
ElMessage.success('提交成功!');
};
//
const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,154`; // 1id
const rule: Array<Record<string, any>> = [];
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));
} 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));
}
});
await addOperation({
...getIds(),
parentId: preIds,
lcJudgmentRuleReq: rule,
});
};
</script>
<style lang="scss" scoped>
@import url(../../../styles/form.scss);
.c-table {
:deep(.el-input__inner) {
@apply px-2;
}
}
</style>

@ -0,0 +1,432 @@
<template>
<el-form label-width="90px"
label-suffix=":"
class="form"
:disabled="disabled">
<el-form-item label="策略名称"
prop="fundName">
<el-input class="w-[320px]"
placeholder="请输入20以内字符"
maxlength="20"
clearable
v-model="strategyName"></el-input>
</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 }">
<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>
</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>
</div>
<span class="whitespace-nowrap ml-2"></span>
</template>
<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>
</div>
<span class="whitespace-nowrap ml-2">房产查封</span>
</template>
<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>
</div>
<span class="whitespace-nowrap ml-2">股权冻结</span>
</template>
<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>
</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>
</template>
<template v-else-if="$index === 5">
<div class="w-[95px]">
<el-select v-model="row.had"
clearable>
<el-option value="不是" />
<el-option value="是" />
</el-select>
</div>
<span class="whitespace-nowrap ml-2">被列为非正常户或注销户</span>
</template>
<template v-else-if="$index === 6">
<div class="w-[95px]">
<el-select v-model="row.had"
clearable>
<el-option value="不是" />
<el-option value="是" />
</el-select>
</div>
<span class="whitespace-nowrap ml-2">非正常户或注销户</span>
</template>
<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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</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>
</div>
<span class="whitespace-nowrap ml-2">内大股东股权占比>=50%变更</span>
</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>
</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>
</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-option value="不在" />
<el-option value="在" />
</el-select>
</div>
<span class="whitespace-nowrap ml-2">工商局或农专经营异常目录</span>
</template>
</div>
</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="syncVisible = true">确定</div>
</div>
<Confirm v-model="syncVisible"
@submit="submit" />
</template>
<script setup lang="ts">
import { ref, defineAsyncComponent, onMounted, toRefs } from 'vue';
import { ElMessage } from 'element-plus';
import { accessStrategyEnterpriseBlacklistFind, accessStrategyEnterpriseBlacklistSave } from '@/api/model';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { useRouter, useRoute } from 'vue-router';
import { handleId, getNum, getSymbol, getChinese, getIds } from '@/utils/common';
import Cookies from 'js-cookie';
const Confirm = defineAsyncComponent(() => import('@/components/StrategyConfirm.vue'));
const props = defineProps({
disabled: { type: Boolean, default: false },
row: { type: Object },
});
const emit = defineEmits(['clsoe']);
const form = ref<Record<string, any>[]>([]);
const { strategyId, strategyName } = toRefs(props.row);
const info = ref<Record<string, any>[]>([]);
const symbols: Array<string> = ['>=', '<', '>', '==', '<='];
const nums: Array<number> = [1, 3, 5, 6, 16, 33, 40];
const units: Array<string> = ['年', '月', '天'];
const have: Array<string> = ['无', '有'];
const syncVisible = ref<boolean>(false);
//
const getConfig = async () => {
const { process } = await getProcessInformationBasedOnRoles(154);
const result = [];
process.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 = {
name: e.name,
subject: e.subject,
stRecordId: e.id,
symbol: symbol || '',
unit: had || '',
num: num || '',
had: (((i > 0 && i < 4) || i === 5 || i === 6 || i === 14) && cur?.rule) || '',
check: (i === 4 || i === 8) && cur ? cur?.rule.split(',') : [],
};
result.push(temp);
});
form.value = result;
};
//
const getDetail = async () => {
try {
if (strategyId.value) {
const { data } = await accessStrategyEnterpriseBlacklistFind({
strategyId: strategyId.value,
});
info.value = data;
}
getConfig();
} finally {
}
};
onMounted(getDetail);
//
const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,154`; // 1id
const rule: Array<Record<string, any>> = [];
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));
} 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));
}
});
await addOperation({
...getIds(),
parentId: preIds,
lcJudgmentRuleReq: rule,
});
ElMessage.success('提交成功!');
syncVisible.value = false;
emit('close', 1);
};
//
const submit = async () => {
let param = [];
form.value.map((e, i) => {
const temp = {
id: info.value.find((n) => n.stRecordId === e.stRecordId)?.id ?? '',
stRecordId: e.stRecordId,
...getIds(),
};
let rule;
if (!i || i === 13) {
rule = e.symbol + e.num;
} else if ((i > 0 && i < 4) || i === 5 || i === 6 || i === 14) {
rule = e.had;
} else if (i === 4 || i === 8) {
rule = e.check.join();
} else if (i === 7 || i === 9 || i === 10 || i === 11) {
rule = e.symbol + e.num + e.unit;
}
temp.rule = rule;
param.push(temp);
});
await accessStrategyEnterpriseBlacklistSave({ enterpriseBlacklistList: param });
addRecord(param);
};
</script>
<style lang="scss" scoped>
@import url(../../../styles/form.scss);
.c-table {
:deep(.el-input__inner) {
@apply px-2;
}
}
</style>

@ -0,0 +1,166 @@
<template>
<div class="block">
<div class="flex justify-between items-center mb-5">
<search v-model="keyWord"
@change="initList"></search>
<div class="filter">
<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">
<Delete />
</el-icon>
批量删除
</div>
</template>
</el-popconfirm>
<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" />
<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="text"
@click="toDetail(row, true)"
size="small">查看</el-button>
<el-button type="text"
@click="toDetail(row)"
size="small">编辑</el-button>
<el-popconfirm title="您确定删除吗?"
@confirm.stop="handleDelete([row.strategyId])">
<template #reference>
<el-button type="text"
size="small">删除</el-button>
</template>
</el-popconfirm>
</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-drawer v-model="visible"
:title="(isDetail ? '查看' : curRow.strategyId ? '编辑' : '新增') + '商采黑名单策略'"
size="100%"
custom-class="model-drawer">
<Detail v-model:row="curRow"
:disabled="isDetail"
:key="i"
@close="closeDrawer" />
</el-drawer>
</div>
</template>
<script setup lang="ts">
import { onMounted, ref, watch, defineAsyncComponent } from 'vue';
import { ElMessage } from 'element-plus';
import { Delete } from '@element-plus/icons-vue';
import { pageSizes, pageLayout } from '@/utils/common';
import { accessStrategyEnterpriseBlacklist, accessStrategyEnterpriseBlacklistDel } from '@/api/model';
import Search from '@/components/Search.vue';
const Detail = defineAsyncComponent(() => import('./Detail.vue'));
const keyWord = ref<string>();
const currentPage = ref<number>(1);
const pageSize = ref<number>(10);
const total = ref<number>(0);
const table = ref<any>();
const multipleSelection = ref<Record<string, any>[]>([]);
const list = ref<Record<string, any>[]>([]);
const loading = ref<boolean>(false);
const visible = ref<boolean>(false);
const curRow = ref<Record<string, any>>({
strategyId: '',
strategyName: '',
});
const isDetail = ref<boolean>(false);
const i = ref<number>(0);
//
const getList = async () => {
loading.value = true;
try {
const { page } = await accessStrategyEnterpriseBlacklist({ pageNum: currentPage.value, pageSize: pageSize.value, keyWord: keyWord.value });
list.value = page.records;
total.value = page.total;
} finally {
loading.value = false;
}
};
//
const initList = async () => {
currentPage.value = 1;
getList();
};
watch(keyWord, initList);
onMounted(getList);
//
const handleSelectionChange = (val: Record<string, any>[]) => {
multipleSelection.value = val;
};
//
const delAll = async () => {
handleDelete(multipleSelection.value.map((e) => e.strategyId));
};
//
const toAdd = () => {
i.value++;
isDetail.value = false;
curRow.value = {
strategyId: '',
strategyName: '',
};
visible.value = true;
};
//
const toDetail = async (row: Record<string, any>, detail: boolean = false) => {
i.value++;
isDetail.value = detail;
curRow.value = row;
visible.value = true;
};
//
const closeDrawer = (refresh?: number) => {
visible.value = false;
refresh && initList();
};
const handleDelete = async (ids: number[]) => {
await accessStrategyEnterpriseBlacklistDel({ ids });
getList();
ElMessage.success('删除成功!');
};
</script>

@ -37,7 +37,7 @@ const dynamicComponentMap = {
'151': defineAsyncComponent(() => import('./151/Index.vue')),
'152': defineAsyncComponent(() => import('./152/Index.vue')),
'153': defineAsyncComponent(() => import('./153.vue')),
'154': defineAsyncComponent(() => import('./154.vue')),
'154': defineAsyncComponent(() => import('./154/Index.vue')),
'155': defineAsyncComponent(() => import('./155.vue')),
'156': defineAsyncComponent(() => import('./156.vue')),
'148': defineAsyncComponent(() => import('./Credit.vue')),

Loading…
Cancel
Save