贷后管理模型

V0.1
yujialong 1 year ago
parent 7e291e6722
commit 7e7c233b6b
  1. 2
      .env
  2. 8
      src/api/model.ts
  3. 3
      src/layout/components/AppSidebar/Menu.vue
  4. 15
      src/permission.ts
  5. 1
      src/router/index.ts
  6. 174
      src/views/product/afterLoan/1029.vue
  7. 190
      src/views/product/afterLoan/1030.vue
  8. 83
      src/views/product/afterLoan/CardList.vue
  9. 37
      src/views/product/fund/Add.vue
  10. 2
      src/views/product/strategy/150.vue
  11. 2
      src/views/product/strategy/151.vue
  12. 2
      src/views/product/strategy/152.vue

@ -2,7 +2,7 @@ VITE_APP_TITLE=金融产品设计及数字化营销沙盘
VITE_PORT=9520 VITE_PORT=9520
VITE_PROXY=http://192.168.31.125:8080 VITE_PROXY=http://192.168.31.125:8080
VITE_PUBLIC_PATH=./ 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=http://121.37.12.51
VITE_I18N_LOCALE=zh-cn VITE_I18N_LOCALE=zh-cn
VITE_I18N_FALLBACK_LOCALE=zh-cn VITE_I18N_FALLBACK_LOCALE=zh-cn

@ -62,3 +62,11 @@ export const personalCreditModelDetails = async (checkpointId: number, projectId
(await axios.post(`/product/quotaModel/personalCreditModelDetails?checkpointId=${checkpointId}&projectId=${projectId}`)).data; (await axios.post(`/product/quotaModel/personalCreditModelDetails?checkpointId=${checkpointId}&projectId=${projectId}`)).data;
export const personalCreditModelSaveOrUpdate = async (data: Record<string, any>): Promise<any> => export const personalCreditModelSaveOrUpdate = async (data: Record<string, any>): Promise<any> =>
(await axios.post(`/product/quotaModel/personalCreditModelSaveOrUpdate`, data)).data; (await axios.post(`/product/quotaModel/personalCreditModelSaveOrUpdate`, data)).data;
export const fiveLevelClassificationDetails = async (checkpointId: number, projectId: number): Promise<any> =>
(await axios.post(`/product/fiveLevelClassification/details?checkpointId=${checkpointId}&projectId=${projectId}`)).data;
export const fiveLevelClassificationSave = async (data: Record<string, any>): Promise<any> => (await axios.post(`/product/fiveLevelClassification/saveOrUpdate`, data)).data;
export const postLoanInspectionDetails = async (checkpointId: number, projectId: number): Promise<any> =>
(await axios.post(`/product/postLoanInspection/details?checkpointId=${checkpointId}&projectId=${projectId}`)).data;
export const postLoanInspectionSave = async (data: Record<string, any>): Promise<any> => (await axios.post(`/product/postLoanInspection/saveOrUpdate`, data)).data;

@ -55,7 +55,8 @@
alt="" /> alt="" />
<p class="text">利率定价模型</p> <p class="text">利率定价模型</p>
</li> </li>
<li> <li :class="{ active: active == 4 }"
@click="toPage('/product/afterLoan?&i=4&role=42')">
<img class="icon" <img class="icon"
src="@/assets/images/icon4.png" src="@/assets/images/icon4.png"
alt="" /> alt="" />

@ -10,20 +10,7 @@ NProgress.configure({ showSpinner: false }); // NProgress Configuration
const LOGIN_PATH = '/login'; const LOGIN_PATH = '/login';
router.beforeEach(async (to: RouteLocationNormalized) => { router.beforeEach(async (to: RouteLocationNormalized) => {
return true; NProgress.start();
const isLogin = getAccessToken() !== undefined;
// 不需要权限
if (!to.meta?.requiresPermission) {
// 已登录状态访问登录页面,跳转到首页
if (to.path === LOGIN_PATH && isLogin) return '/';
NProgress.start();
return true;
}
// 没有权限
if (!hasPermission(to.meta?.requiresPermission)) {
NProgress.done();
return '/403';
}
return true; return true;
}); });

@ -40,6 +40,7 @@ export const routes: Array<RouteRecordRaw> = [
{ path: 'interestRate/:action', component: () => import('@/views/product/interestRate/CardList.vue'), meta: { title: '利率定价模型' } }, { path: 'interestRate/:action', component: () => import('@/views/product/interestRate/CardList.vue'), meta: { title: '利率定价模型' } },
{ path: 'fund', component: () => import('@/views/product/fund/List.vue'), meta: { title: '基金产品' } }, { path: 'fund', component: () => import('@/views/product/fund/List.vue'), meta: { title: '基金产品' } },
{ path: 'fund/:action', component: () => import('@/views/product/fund/CardList.vue'), meta: { title: '基金产品' } }, { path: 'fund/:action', component: () => import('@/views/product/fund/CardList.vue'), meta: { title: '基金产品' } },
{ path: 'afterLoan', component: () => import('@/views/product/afterLoan/CardList.vue'), meta: { title: '贷后管理' } },
], ],
}, },
{ {

@ -0,0 +1,174 @@
<template>
<!-- 五级分类 -->
<el-table class="c-table"
:data="form"
:span-method="span"
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 class=""
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">
<template #default="{ row }">
<el-select class=""
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 class=""
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 class=""
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 class=""
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 class=""
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>
<div class="flex justify-end">
<div class="submit"
@click="submit">确认完成配置</div>
</div>
</template>
<script setup lang="ts">
import { ref, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
import { fiveLevelClassificationDetails, fiveLevelClassificationSave } from '@/api/model';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { handleId } from '@/utils/common';
import Cookies from 'js-cookie';
const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level');
const form = ref<Record<string, any>[]>([]);
const info = ref<Record<string, any>[]>([]);
//
const getConfig = async () => {
const { process } = await getProcessInformationBasedOnRoles(1029);
const result = [];
process.map((e, i) => {
const cur = info.value.length ? info.value[i] : {};
result.push({
checkpointId: levelId,
projectId,
recordName: e.name,
recordChildren: e.recordChildren,
ninetyDays: +(cur.ninetyDays || 676),
notOverdue: +(cur.notOverdue || 676),
oneHundredAndEightyDays: +(cur.oneHundredAndEightyDays || 676),
thirtyDays: +(cur.thirtyDays || 676),
threeHundredAndSixtyDays: +(cur.threeHundredAndSixtyDays || 676),
threeHundredAndSixtyDaysAbove: +(cur.threeHundredAndSixtyDaysAbove || 676),
id: cur.id || '',
stRecordId: e.id,
});
});
form.value = result;
};
//
const getDetail = async () => {
try {
const { data } = await fiveLevelClassificationDetails(levelId, projectId);
info.value = data;
getConfig();
} finally {
}
};
const fieldKeys = ['notOverdue', 'thirtyDays', 'ninetyDays', 'oneHundredAndEightyDays', 'threeHundredAndSixtyDays', 'threeHundredAndSixtyDaysAbove'];
//
const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${levelId},42,69,1029`; // 1id
const rule = [];
data.map((e) => {
e.recordChildren.forEach((n, i) => {
rule.push(handleId(n.id, n.subjectId, e[fieldKeys[i]], `${preIds},${e.stRecordId},${n.id}`, 1));
});
});
await addOperation({
checkpointId: levelId,
parentId: preIds,
lcJudgmentRuleReq: rule,
projectId,
});
};
//
const submit = async () => {
let param = JSON.parse(JSON.stringify(form.value));
const recordParam = JSON.parse(JSON.stringify(param));
param.map((e) => {
delete e.recordChildren;
});
await fiveLevelClassificationSave({ fiveLevelClassificationList: param });
addRecord(recordParam);
getDetail();
ElMessage.success('提交成功!');
};
onMounted(() => {
getDetail();
});
</script>
<style lang="scss" scoped>
@import url(../../../styles/form.scss);
</style>

@ -0,0 +1,190 @@
<template>
<!-- 贷后检查 -->
<el-table class="c-table"
:data="form"
:span-method="span"
border>
<el-table-column prop="name"
label="选用"
width="150"
align="center">
<template #default="{ row }">
<el-checkbox v-model="row.isChoose"></el-checkbox>
</template>
</el-table-column>
<el-table-column prop="recordName"
label="检查方式"
min-width="150"
align="center"></el-table-column>
<el-table-column label="检查对象"
min-width="250"
align="center">
<template #default="{ row }">
<el-select 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="200"
align="center">
<template #default="{ row, $index }">
<span v-if="$index === 4">点击后触发</span>
<div v-else
class="flex items-center">
<el-select 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>
</div>
</template>
</el-table-column>
<el-table-column label="检查内容"
min-width="200"
align="center">
<template #default="{ row }">
<el-checkbox v-model="row.governmentData">政务数据</el-checkbox>
<el-checkbox v-model="row.creditData">征信数据</el-checkbox>
</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, onMounted } from 'vue';
import { ElMessage } from 'element-plus';
import { postLoanInspectionDetails, postLoanInspectionSave } from '@/api/model';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import type { TableColumnCtx } from 'element-plus';
import { handleId } from '@/utils/common';
import Cookies from 'js-cookie';
const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level');
const form = ref<Record<string, any>[]>([]);
const info = ref<Record<string, any>[]>([]);
//
const getConfig = async () => {
const { process } = await getProcessInformationBasedOnRoles(1030);
const result = [];
process.map((e, i) => {
const cur = info.value.find((n) => n.stRecordId === e.id);
let temp = {
checkpointId: levelId,
projectId,
recordName: e.name,
recordChildren: e.recordChildren,
checkObject: 683,
checkTimeType: 689,
creditData: false,
governmentData: false,
isChoose: false,
timeDays: '',
stRecordId: e.id,
};
result.push(temp);
i === 1 && result.push(JSON.parse(JSON.stringify(temp)));
});
if (info.value.length) {
result.forEach((e, i) => {
result[i].checkObject = +info.value[i].checkObject;
result[i].checkTimeType = +info.value[i].checkTimeType;
result[i].creditData = !!info.value[i].creditData;
result[i].governmentData = !!info.value[i].governmentData;
result[i].isChoose = !!info.value[i].isChoose;
result[i].timeDays = info.value[i].timeDays;
result[i].id = info.value[i].id;
});
}
form.value = result;
};
//
const getDetail = async () => {
try {
const { data } = await postLoanInspectionDetails(levelId, projectId);
info.value = data;
getConfig();
} finally {
}
};
interface SpanMethodProps {
row: Record<string, any>;
column: TableColumnCtx<Record<string, any>>;
rowIndex: number;
columnIndex: number;
}
//
const span = ({ row, column, rowIndex, columnIndex }: SpanMethodProps) => {
if (columnIndex < 2) {
if (rowIndex === 1) {
return {
rowspan: 2,
colspan: 1,
};
} else if (rowIndex === 2) {
return {
rowspan: 0,
colspan: 0,
};
}
}
};
//
const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,69,1030`; // 1id
const rule = [];
data.forEach((e, i) => {
rule.push(handleId(1052, '', '', preIds + ',' + e.stRecordId + ',1052', ''), handleId(1053, 282, e.checkObject, preIds + ',' + e.stRecordId + ',1053', 1));
i !== 4 && 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.governmentData && rule.push(handleId(1058, '', '', preIds + ',' + e.stRecordId + ',1055,1058', ''));
e.creditData && rule.push(handleId(1058, '', '', preIds + ',' + e.stRecordId + ',1055,1058', ''));
});
await addOperation({
checkpointId: levelId,
parentId: preIds,
lcJudgmentRuleReq: rule,
projectId,
});
};
//
const submit = async () => {
let param = JSON.parse(JSON.stringify(form.value));
param.map((e, i) => {
e.creditData = +e.creditData;
e.governmentData = +e.governmentData;
e.isChoose = +e.isChoose;
});
const recordParam = JSON.parse(JSON.stringify(param));
param.map((e) => {
delete e.recordChildren;
});
await postLoanInspectionSave({ postLoanInspectionList: param });
addRecord(recordParam);
getDetail();
ElMessage.success('提交成功!');
};
onMounted(() => {
getDetail();
});
</script>
<style lang="scss" scoped>
@import url(../../../styles/form.scss);
</style>

@ -0,0 +1,83 @@
<template>
<div class="block"
style="padding-top: 0">
<div class="flex">
<div class="left w-[241px] min-w-[241px] pr-5 py-4">
<ul class="products">
<li v-for="(item, i) in list"
:key="i"
:class="{ active: item.id === id }"
@click="switchProduct(item.id)">
<h6>{{ item.name }}</h6>
<p class="type">{{ item.remark }}</p>
</li>
</ul>
</div>
<div class="right flex-1 px-5 pt-4">
<Com1 v-if="id == 1029" />
<Com2 v-else-if="id == 1030" />
</div>
</div>
</div>
</template>
<script setup lang="ts">
import { computed, onMounted, ref } from 'vue';
import type { TabsPaneContext } from 'element-plus';
import { getProcessInformationBasedOnRoles } from '@/api/judgment';
import { useRouter, useRoute } from 'vue-router';
import Cookies from 'js-cookie';
import Com1 from './1029.vue';
import Com2 from './1030.vue';
import Com3 from './935.vue';
import Com4 from './936.vue';
const router = useRouter();
const route = useRoute();
const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level');
const list = ref<Array<Record<string, any>>>([]);
const id = computed(() => +route.query.id);
//
const switchProduct = (productId: number | string) => {
router.push(`/product/afterLoan?i=4&role=42&id=${productId}`);
};
//
const getList = async (refresh?: number) => {
const { process } = await getProcessInformationBasedOnRoles(69);
// eslint-disable-next-line no-unused-expressions
!id.value && switchProduct(process[0].id);
list.value = process;
};
onMounted(() => {
getList();
});
</script>
<style lang="scss" scoped>
.left {
border-right: 1px solid #e9eff2;
}
.products {
@apply max-h-[calc(100vh-205px)] pr-1 overflow-auto;
li {
@apply relative p-5 pt-7 mb-5 rounded-[10px] cursor-pointer border border-solid border-[transparent] bg-[url('@/assets/images/10.png')] bg-[length:100%_100%] bg-no-repeat;
&.active {
@apply border-[#CAE0FF];
}
}
.del {
@apply absolute top-0 right-0;
}
h6 {
@apply text-[#14436b];
}
.type {
@apply my-3 text-sm text-[#333];
}
.des {
@apply text-sm text-[#8798a9];
}
}
</style>

@ -238,14 +238,16 @@
disabled disabled
v-model="form.buySellRatioList1[i - 1].input2"></el-input> v-model="form.buySellRatioList1[i - 1].input2"></el-input>
<el-input v-else <el-input v-else
class="w-[100px] mr-2" class="w-[100px] mr-[108px]"
placeholder="请输入" placeholder="请输入"
disabled disabled
v-model="item.input1"></el-input> v-model="item.input1"></el-input>
<el-select class="w-[100px]" <el-select v-if="i"
v-model="item.soldUnit1" class="w-[100px]"
placeholder="请选择"> v-model="form.buySellRatioList1[i - 1].soldUnit2"
placeholder="请选择"
disabled>
<el-option v-for="item in times" <el-option v-for="item in times"
:key="item" :key="item"
:value="item" /> :value="item" />
@ -312,13 +314,10 @@
import { ref, reactive, computed, watch, onMounted, defineEmits } from 'vue'; import { ref, reactive, computed, watch, onMounted, defineEmits } from 'vue';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import { Plus, Minus } from '@element-plus/icons-vue'; import { Plus, Minus } from '@element-plus/icons-vue';
import { insuranceProductDetails, addInsuranceProducts } from '@/api/insurance';
import { getAListOfAShares, saveFund } from '@/api/fund'; import { getAListOfAShares, saveFund } from '@/api/fund';
import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment'; import { getProcessInformationBasedOnRoles, addOperation } from '@/api/judgment';
import { useRouter, useRoute } from 'vue-router'; import { useRouter, useRoute } from 'vue-router';
import { handleId } from '@/utils/common'; import { handleId } from '@/utils/common';
import { getStatus } from '@/store/useProduct';
import Info from './Info.vue';
import Cookies from 'js-cookie'; import Cookies from 'js-cookie';
const emit = defineEmits(['getList']); const emit = defineEmits(['getList']);
@ -330,7 +329,6 @@ const projectId = +Cookies.get('sand-projectId');
const levelId = +Cookies.get('sand-level'); const levelId = +Cookies.get('sand-level');
const curTab = ref<string>('tab1'); const curTab = ref<string>('tab1');
const config = ref<any[]>([]); const config = ref<any[]>([]);
const info = ref<Record<string, any>>(null);
const units = ref<string[]>(['%', '元']); const units = ref<string[]>(['%', '元']);
const times = ref<string[]>(['分钟', '天', '小时', '月']); const times = ref<string[]>(['分钟', '天', '小时', '月']);
const loading = ref<boolean>(false); const loading = ref<boolean>(false);
@ -400,16 +398,6 @@ const getConfig = async () => {
const { process } = await getProcessInformationBasedOnRoles(1161); const { process } = await getProcessInformationBasedOnRoles(1161);
config.value = process; config.value = process;
}; };
//
const getDetail = async () => {
if (id.value) {
try {
const { data } = await insuranceProductDetails(id.value);
info.value = data;
} finally {
}
}
};
// //
const addStock = () => { const addStock = () => {
form.shareholdingAllocationsList.length < 10 form.shareholdingAllocationsList.length < 10
@ -468,16 +456,6 @@ 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);
}; };
watch(
() => route.query,
() => {
getDetail();
},
{
immediate: true,
},
);
const getId = (str: string): string | number => { const getId = (str: string): string | number => {
const result = config.value[5]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList?.find((e) => e.options === str); const result = config.value[5]?.recordChildren[0]?.recordChildren[1]?.subject?.itemList?.find((e) => e.options === str);
return result?.itemId || ''; return result?.itemId || '';
@ -567,8 +545,7 @@ const submit = async () => {
// //
param.buySellRatioList0.forEach((e, i) => { param.buySellRatioList0.forEach((e, i) => {
e.amountOrDuration = i ? param.buySellRatioList0[i - 1].input2 : e.input1; e.amountOrDuration = (i ? param.buySellRatioList0[i - 1].input2 : e.input1) + `${i !== param.buySellRatioList0.length - 1 ? '-' + e.input2 : ''}`;
if (i !== param.buySellRatioList0.length - 1) e.amountOrDuration += `-${e.input2}`;
}); });
param.buySellRatioList1.forEach((e, i) => { param.buySellRatioList1.forEach((e, i) => {
e.amountOrDuration = i ? param.buySellRatioList1[i - 1].input2 + param.buySellRatioList1[i - 1].soldUnit2 : e.input1; e.amountOrDuration = i ? param.buySellRatioList1[i - 1].input2 + param.buySellRatioList1[i - 1].soldUnit2 : e.input1;

@ -298,7 +298,7 @@ const submit = async () => {
// //
const addRecord = async (data: Record<string, any>) => { const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,150`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,67,147,150`; // 1id
const rule: Array<Record<string, any>> = []; const rule = [];
data.map((e, i) => { data.map((e, i) => {
const temp = []; const temp = [];

@ -202,7 +202,7 @@ const submit = async () => {
// //
const addRecord = async (data: Record<string, any>) => { const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,151`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,67,147,151`; // 1id
const rule: Array<Record<string, any>> = []; const rule = [];
data[1].ruleOne && rule.push(handleId(234, 81, data[1].ruleOne, preIds + ',204,234', 3)); data[1].ruleOne && rule.push(handleId(234, 81, data[1].ruleOne, preIds + ',204,234', 3));
data[27].ruleOne && rule.push(handleId(267, 114, data[27].ruleOne === '有' ? 306 : 305, preIds + ',230,267', 1)); data[27].ruleOne && rule.push(handleId(267, 114, data[27].ruleOne === '有' ? 306 : 305, preIds + ',230,267', 1));

@ -410,7 +410,7 @@ const submit = async () => {
// //
const addRecord = async (data: Record<string, any>) => { const addRecord = async (data: Record<string, any>) => {
const preIds = `1,${Cookies.get('sand-level')},42,67,147,152`; // 1id const preIds = `1,${Cookies.get('sand-level')},42,67,147,152`; // 1id
const rule: Array<Record<string, any>> = [ const rule = [
handleId(324, 150, data[0].ruleOne, preIds + ',318,324', 5), handleId(324, 150, data[0].ruleOne, preIds + ',318,324', 5),
handleId(325, 151, data[0].ruleTwo, preIds + ',318,325', 5), handleId(325, 151, data[0].ruleTwo, preIds + ',318,325', 5),
handleId(326, 152, data[0].ruleThree, preIds + ',318,326', 5), handleId(326, 152, data[0].ruleThree, preIds + ',318,326', 5),

Loading…
Cancel
Save