Commit 2647b21f authored by 沈翠玲's avatar 沈翠玲

风控审核

parent 524a0269
...@@ -46,4 +46,8 @@ export const getcustomerReportPage = (params) => { ...@@ -46,4 +46,8 @@ export const getcustomerReportPage = (params) => {
// 客户报告风控审核列表 // 客户报告风控审核列表
export const getlegalPage = (params) => { export const getlegalPage = (params) => {
return request.get('/customerReport/legalPage', params); return request.get('/customerReport/legalPage', params);
};
// 审核风控
export const savecustomerReport = (data) => {
return request.post('/customerReport/save', data);
}; };
\ No newline at end of file
This diff is collapsed.
...@@ -11,7 +11,7 @@ import echarts, { ECOption } from "@/components/ECharts/config"; ...@@ -11,7 +11,7 @@ import echarts, { ECOption } from "@/components/ECharts/config";
import ECharts from "@/components/ECharts/index.vue"; import ECharts from "@/components/ECharts/index.vue";
import mapJson from "../assets/china.json"; import mapJson from "../assets/china.json";
// echarts.registerMap("china", mapJson as Parameters<typeof echarts.registerMap>[1]); echarts.registerMap("china", mapJson as Parameters<typeof echarts.registerMap>[1]);
// var geoCoordMap = { // var geoCoordMap = {
// 台湾: [121.5135, 25.0308], // 台湾: [121.5135, 25.0308],
...@@ -352,12 +352,15 @@ const option: ECOption = { ...@@ -352,12 +352,15 @@ const option: ECOption = {
bottom: 40, bottom: 40,
showLabel: !0, showLabel: !0,
text: ["高", "低"], text: ["高", "低"],
textStyle: {
color: '#fff'
},
pieces: [{ pieces: [{
gt: 200, gt: 200,
label: "1 - 9 人", label: "1 - 9 人",
color: "#8616fe" color: "#8616fe"
}, { }, {
gt: 100, gt: 0,
lt: 200, lt: 200,
label: "疑似", label: "疑似",
color: "#6b1dfd" color: "#6b1dfd"
...@@ -369,7 +372,7 @@ const option: ECOption = { ...@@ -369,7 +372,7 @@ const option: ECOption = {
}, },
geo: { geo: {
map: 'china', map: 'china',
show: true, show: false,
roam: false, roam: false,
label: { label: {
emphasis: { emphasis: {
...@@ -391,41 +394,32 @@ const option: ECOption = { ...@@ -391,41 +394,32 @@ const option: ECOption = {
type: "map", type: "map",
map: 'china', map: 'china',
aspectScale: 0.75, aspectScale: 0.75,
top: 100,
zoom:1.3, zoom:1.3,
label: { label: {
normal: { normal: {
formatter: function(para) { show: false,
return '{name|' + para.name + '}' fontSize: "14",
}, color: "rgba(0,0,0,0.7)"
rich: {
cnNum: {
fontSize: 11,
color: '#333333',
align: 'center',
},
name: {
fontSize: 11,
color: '#333333',
align: 'center',
lineHeight: 20,
},
},
//formatter: '{b}',
color: '#333333',
show: true
}, },
emphasis: { emphasis: {
show: true, show: true,
fontSize: "14",
color: "rgba(0,0,0,0.7)"
} }
}, },
itemStyle: { itemStyle: {
normal: { normal: {
areaColor: '#D9EEFF', areaColor: 'rgba(255,255,255,0.1)',
borderColor: '#fff', borderWidth: 2,
borderWidth: 1, //shadowColor: 'rgba(0, 0, 0, 0.2)',
borderColor: "rgba(255,255,255,0.3)"
}, },
emphasis: { emphasis: {
areaColor: '#FFAE00', areaColor: "#29f5fa",
// shadowOffsetX: 0,
// shadowOffsetY: 0,
// borderWidth: 0
} }
}, },
data: mapData data: mapData
......
...@@ -161,7 +161,7 @@ ...@@ -161,7 +161,7 @@
import { useDict } from '@/hooks/useDict'; import { useDict } from '@/hooks/useDict';
import { useRoute } from 'vue-router'; import { useRoute } from 'vue-router';
import { useRouter } from 'vue-router'; import { useRouter } from 'vue-router';
import { getByIdcustomerReport } from '@/api/customer'; import { getByIdcustomerReport, savecustomerReport } from '@/api/customer';
import { ref, reactive, onBeforeMount, computed } from 'vue'; import { ref, reactive, onBeforeMount, computed } from 'vue';
const { LoanStatus, Marriage, RiskType } = useDict("LoanStatus", "Marriage", "RiskType"); const { LoanStatus, Marriage, RiskType } = useDict("LoanStatus", "Marriage", "RiskType");
const form = ref({ const form = ref({
...@@ -184,15 +184,7 @@ const roleType = computed(() => { ...@@ -184,15 +184,7 @@ const roleType = computed(() => {
return 'legal' return 'legal'
} }
}); });
const submit = (type) => {
tabStore.removeTabs(route.fullPath).then(res => {
router.push({
path: '/infoGather/dangerReport'
});
});
}
const cancel = () => { const cancel = () => {
console.log('roleType', roleType)
if (roleType.value === 'view') { if (roleType.value === 'view') {
tabStore.removeTabs(route.fullPath).then(res => { tabStore.removeTabs(route.fullPath).then(res => {
router.push({ router.push({
...@@ -213,6 +205,20 @@ const cancel = () => { ...@@ -213,6 +205,20 @@ const cancel = () => {
}); });
} }
} }
const submit = (type) => {
const param = JSON.parse(JSON.stringify({...form.value}))
if (roleType.value === 'risk') {
param['riskControlStatus'] = type
} else {
param['legalAffairStatus'] = type
}
savecustomerReport(param).then(res => {
if(res.success) {
cancel()
}
})
}
const query = async (type) => { const query = async (type) => {
getByIdcustomerReport(route.query.id).then(res => { getByIdcustomerReport(route.query.id).then(res => {
if(res.success) { if(res.success) {
......
...@@ -36,18 +36,20 @@ ...@@ -36,18 +36,20 @@
const route = useRoute(); const route = useRoute();
const proTable = ref(null); const proTable = ref(null);
const paramObj = ref();
const selectdList = ref([]); const selectdList = ref([]);
const onCheckboxChange = (row) => { const onCheckboxChange = (row) => {
selectdList.value = row.records; selectdList.value = row.records;
}; };
const router = useRouter(); const router = useRouter();
const func = () => { const func = () => {
if (route.fullPath.includes('infoGather/dangerReport')) { if (route.fullPath.includes('infoGather/dangerReport')) {
return getcustomerReportPage return getcustomerReportPage(paramObj.value)
} else if (route.fullPath.includes('/business-approval/riskManager')) { } else if (route.fullPath.includes('/business-approval/riskManager')) {
return getriskPage return getriskPage(paramObj.value)
} else if (route.fullPath.includes('/business-approval/legalManager')) { } else if (route.fullPath.includes('/business-approval/legalManager')) {
return getlegalPage return getlegalPage(paramObj.value)
} }
} }
const activeName = ref('pending'); const activeName = ref('pending');
...@@ -58,6 +60,7 @@ ...@@ -58,6 +60,7 @@
if (obj['createTime'][1]) obj['createTimeEnd'] = obj['createTime'][1]; if (obj['createTime'][1]) obj['createTimeEnd'] = obj['createTime'][1];
delete obj['createTime']; delete obj['createTime'];
} }
paramObj.value = obj
return obj; return obj;
}; };
const onCheckboxAll = (flag) => { const onCheckboxAll = (flag) => {
...@@ -74,7 +77,6 @@ ...@@ -74,7 +77,6 @@
}); });
}; };
const onCellClick = ({ row, rowIndex }) => { const onCellClick = ({ row, rowIndex }) => {
if (route.fullPath.includes('infoGather/dangerReport')) { if (route.fullPath.includes('infoGather/dangerReport')) {
router.push({ router.push({
name: 'dangerReportDetail', name: 'dangerReportDetail',
...@@ -97,8 +99,9 @@ ...@@ -97,8 +99,9 @@
onCheckboxAll: onCheckboxAll, onCheckboxAll: onCheckboxAll,
onCellClick: onCellClick, onCellClick: onCellClick,
columns: [ columns: [
{ field: 'customer.name', title: '客户名称', search: { labelWidth: 85, el: 'input' } },
{ {
field: 'createTime', field: 'customer.createTime',
title: '创建日期', title: '创建日期',
search: { search: {
el: 'date-picker', el: 'date-picker',
...@@ -107,19 +110,63 @@ ...@@ -107,19 +110,63 @@
}, },
}, },
{ {
field: 'createBy', field: 'customer.inputUserName',
title: '创建人', title: '创建人',
search: { el: 'input',labelWidth: 85, props: { clearable: true } }, search: { el: 'input',labelWidth: 85, props: { clearable: true } },
}, },
{ field: 'name', title: '客户名称', search: { labelWidth: 85, el: 'input' } }, { field: 'customer.idCard', title: '身份证号', search: { labelWidth: 85, el: 'input' } },
{ field: 'name', title: '身份证号', search: { labelWidth: 85, el: 'input' } }, { field: 'customer.phone', title: '手机', search: { labelWidth: 85, el: 'input' } },
{ field: 'name', title: '手机', search: { labelWidth: 85, el: 'input' } }, { field: 'customer.email', title: '电子邮箱', search: { labelWidth: 85, el: 'input' } },
{ field: 'name', title: '电子邮箱', search: { labelWidth: 85, el: 'input' } }, { field: 'maxStagesNum', title: '信用卡数量', slots: {
{ field: 'maxStagesNum', title: '信用卡数量', search: { labelWidth: 85, el: 'input' } }, default: ({ row, rowIndex }) => {
{ field: 'maxStagesNum', title: '网贷&信用贷数量', search: { labelWidth: 85, el: 'input' } }, return (
{ field: 'remark', title: '欠款总额', search: { labelWidth: 85, el: 'input' } }, <>
{ field: 'remark', title: '备注', search: { labelWidth: 85, el: 'input' } }, {row.customer?.creditCard.length}
{ field: 'remark', title: '风控审核状态'}, </>
);
},
}, },
{ field: 'maxStagesNum', title: '网贷&信用贷数量', slots: {
default: ({ row, rowIndex }) => {
return (
<>
{row.customer?.lending.length}
</>
);
},
}, },
{ field: 'remark', title: '欠款总额', slots: {
default: ({ row, rowIndex }) => {
return (
<>
{[...row.customer?.creditCard, ...row.customer?.lending].reduce((pre, cur) => pre + Number(cur.debt),0)}
</>
);
},
}, },
{ field: 'legalAffairRemark', title: '备注', search: { labelWidth: 85, el: 'input' } },
{ field: 'riskControlStatus', slots: {
default: ({ row }) => {
return (
<>
{row.riskControlStatus
? FlowStatus.value?.find((v) => v.value === row.riskControlStatus)?.label
: ''}
</>
);
},
},title: '风控审核状态'},
{ field: 'legalAffairStatus', slots: {
default: ({ row }) => {
return (
<>
{row.legalAffairStatus
? FlowStatus.value?.find((v) => v.value === row.legalAffairStatus)?.label
: ''}
</>
);
},
},title: '法务审核状态'},
], ],
}); });
......
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
> >
<el-form ref="formRef" :model="form" :rules="rules" inline label-width="110px"> <el-form ref="formRef" :model="form" :rules="rules" inline label-width="110px">
<el-row :gutter="10"> <el-row :gutter="10">
<el-col :span="24"> <el-col :span="24">
<el-form-item class="w-full" label="调解中心名称" prop="name"> <el-form-item class="w-full" label="调解中心名称" prop="name">
<el-input v-model="form.name" placeholder="请输入调解中心名称" /> <el-input v-model="form.name" placeholder="请输入调解中心名称" />
...@@ -21,6 +22,18 @@ ...@@ -21,6 +22,18 @@
<el-input v-model="form.code" placeholder="调解中心编码" /> <el-input v-model="form.code" placeholder="调解中心编码" />
</el-form-item> </el-form-item>
</el-col> </el-col>
<el-col :span="24">
<el-form-item class="w-full" label="省份" prop="name">
<el-select v-model="form.province" placeholder="请选择">
<el-option
v-for="item in citydata"
:key="item.value"
:label="item.label"
:value="item.value"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24"> <el-col :span="24">
<el-form-item class="w-full" label="负责人" prop="adminUser"> <el-form-item class="w-full" label="负责人" prop="adminUser">
<el-input v-model="form.adminUser" placeholder="负责人" /> <el-input v-model="form.adminUser" placeholder="负责人" />
...@@ -53,6 +66,7 @@ ...@@ -53,6 +66,7 @@
import { ref, computed } from 'vue'; import { ref, computed } from 'vue';
import { saveTenant } from '@/api/tenant'; import { saveTenant } from '@/api/tenant';
import { ElMessage } from 'element-plus'; import { ElMessage } from 'element-plus';
import citydata from '../../../../assets/citydata';
const emits = defineEmits(['success']); const emits = defineEmits(['success']);
const currentTenant = ref(null); const currentTenant = ref(null);
...@@ -66,6 +80,7 @@ ...@@ -66,6 +80,7 @@
name: '', name: '',
code: '', code: '',
adminUser: '', adminUser: '',
province: '',
phone: '', phone: '',
status: 'enable', status: 'enable',
}); });
...@@ -109,6 +124,7 @@ ...@@ -109,6 +124,7 @@
const onHide = () => { const onHide = () => {
form.value = { form.value = {
name: '', name: '',
province: '',
code: '', code: '',
adminUser: '', adminUser: '',
phone: '', phone: '',
......
...@@ -19,6 +19,7 @@ ...@@ -19,6 +19,7 @@
import TenantFormModal from './components/TenantFormModal.vue'; import TenantFormModal from './components/TenantFormModal.vue';
import AllocationUserModal from './components/AllocationUserModal.vue'; import AllocationUserModal from './components/AllocationUserModal.vue';
import { ElMessageBox, ElMessage, ElButton, ElTag } from 'element-plus'; import { ElMessageBox, ElMessage, ElButton, ElTag } from 'element-plus';
import citydata from '../../../assets/citydata';
const proTable = ref(null); const proTable = ref(null);
const tenatModalRef = ref(null); const tenatModalRef = ref(null);
...@@ -28,6 +29,15 @@ ...@@ -28,6 +29,15 @@
{ type: 'checkbox', width: 60, fixed: 'left' }, { type: 'checkbox', width: 60, fixed: 'left' },
{ field: 'name', title: '调解中心名称', search: { el: 'input' } }, { field: 'name', title: '调解中心名称', search: { el: 'input' } },
{ field: 'code', title: '调解中心编码', search: { el: 'input' } }, { field: 'code', title: '调解中心编码', search: { el: 'input' } },
{
field: 'province',
enum: citydata,
showOverflow: 'tooltip',
title: '省份',
fieldNames: { label: 'label', value: 'value' },
showOverflow: 'tooltip',
// search: { el: 'select', props: { clearable: true } },
},
{ field: 'adminUser', title: '负责人' }, { field: 'adminUser', title: '负责人' },
{ field: 'phone', title: '负责人手机' }, { field: 'phone', title: '负责人手机' },
{ {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment