Commit d93d2ff5 authored by 沈翠玲's avatar 沈翠玲

资产分配

parent d1f4abc8
<template>
<div class="card content-box">
<div class="mb-5 w-full">
<template v-if="isEdit">
<el-button type="default" @click="showModal = false">取消</el-button>
<el-button :loading="loading" type="primary" @click="submitForm">保存</el-button>
</template>
<el-button type="primary" @click="isEdit = true">修改</el-button>
</div>
<div class="w-full">
<el-form ref="formRef" :model="form" :rules="rules" inline>
<el-row :gutter="20">
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="发卡银行" prop="roleName">
<el-input v-model="form.roleName" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="开户时间" prop="roleCode">
<el-input v-model="form.roleCode" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="卡号" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="卡片状态" prop="status">
<el-radio-group v-model="form.status">
<el-radio value="enable">正常</el-radio>
<el-radio value="disable">逾期</el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="授信额度" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="已用额度" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="近6个月平均使用额度" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="当前欠款金额" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="逾期期数" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="逾期后是否有过协商" prop="status">
<el-radio-group v-model="form.status">
<el-radio value="enable"></el-radio>
<el-radio value="disable"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="有无分期" prop="status">
<el-radio-group v-model="form.status">
<el-radio value="enable"></el-radio>
<el-radio value="disable"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="有无协商方案" prop="status">
<el-radio-group v-model="form.status">
<el-radio value="enable"></el-radio>
<el-radio value="disable"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="查询密码" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="最后一次还款时间:" prop="name">
<el-date-picker
v-model="form.trackTime"
class="w-full"
format="YYYY-MM-DD HH:mm:ss"
value-format="YYYY-MM-DD HH:mm:ss"
type="datetime"
/>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="支付密码" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="最后一次还款金额" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="是否有大额专项分期额度" prop="status">
<el-radio-group v-model="form.status">
<el-radio value="enable"></el-radio>
<el-radio value="disable"></el-radio>
</el-radio-group>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="大额专项分期借款种类:" prop="status">
<el-select v-model="form.status">
<el-option label="启用" value="enable" />
<el-option label="禁用" value="disable" />
</el-select>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="大额专项分期额度" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="大额专项分期开立日期:" prop="name">
<el-date-picker
v-model="form.trackTime"
class="w-full"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="date"
/>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="大额专项分期到期日期:" prop="name">
<el-date-picker
v-model="form.trackTime"
class="w-full"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
type="datetime"
/>
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="大额专项分期已还期数" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="银行预留手机号码" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="银行预留家庭地址" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="银行预留紧急联系人姓名" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
<el-col :xs="8" :sm="8" :md="8" :lg="8" :xl="6">
<el-form-item class="w-full" label="银行预留紧急联系人电话" prop="roleDesc">
<el-input v-model="form.roleDesc" placeholder="请输入" />
</el-form-item>
</el-col>
</el-row>
</el-form>
</div>
</div>
</template>
<script setup name="credit">
import { ref, computed } from 'vue';
import { ElMessage } from 'element-plus';
const isEdit = ref(false);
const currentRole = ref(null);
const formRef = ref(null);
const form = ref({
roleName: '',
roleCode: '',
roleDesc: '',
});
const rules = ref({
roleName: { required: true, message: '请输入角色名称', trigger: 'blur' },
roleCode: { required: true, message: '请输入角色编码', trigger: 'blur' },
});
const loading = ref(false);
const submitForm = async () => {
try {
await formRef.value.validate();
loading.value = true;
// await saveRole(form.value);
ElMessage({
type: 'success',
message: isEdit.value ? '修改成功!' : '新建成功!',
plain: true,
});
} catch {}
loading.value = false;
};
</script>
<template>
<div class="card content-box">
<span class="text"> 客户信息统计表(待完善) 🍓🍇🍈🍉</span>
</div>
</template>
<script setup name="dictManage"></script>
<template>
<div class="table-box">
<ProTable ref="proTable" :config="config" :api="getPlatformPage" :paramCallback="paramCallback">
<template #left_buttons>
<!-- <el-button type="primary" :disabled="!selectdList || selectdList.length < 1" @click="pushCreditcard">新建信用卡</el-button> -->
<el-button type="primary" @click="pushCredit">新建信用卡</el-button>
<el-button
type="primary"
:disabled="!selectdList || selectdList.length < 1"
@click="pushCreditcard"
>新建网贷&信用贷</el-button
>
<el-button type="primary">发起风控审核</el-button>
</template>
</ProTable>
</div>
</template>
<script setup lang="jsx" name="platformManage">
import { ref, reactive, onMounted } from 'vue';
import { Plus, Delete, Edit, Setting } from '@element-plus/icons-vue';
import { getPlatformPage, deletePlatforms } from '@/api/platform';
import { ElMessageBox, ElMessage, ElButton, ElTag } from 'element-plus';
import { useRouter } from 'vue-router';
const proTable = ref(null);
const selectdList = ref([]);
const onCheckboxChange = (row) => {
selectdList.value = row.records;
};
const router = useRouter();
const paramCallback = (param) => {
const obj = JSON.parse(JSON.stringify(param));
if (obj['createTime']) {
if (obj['createTime'][0]) obj['createTimeBegin'] = obj['createTime'][0];
if (obj['createTime'][1]) obj['createTimeEnd'] = obj['createTime'][1];
delete obj['createTime'];
}
return obj;
};
const pushCreditcard = () => {
router.push({
path: '/infoGather/customerGather/Creditcard',
query: { id: 44 }, //这里不能直接写成 query: JSON.stringify(item)
});
};
const pushCredit = () => {
router.push({
path: '/infoGather/customerGather/Credit',
query: { id: 44 }, //这里不能直接写成 query: JSON.stringify(item)
});
};
const config = reactive({
onCheckboxChange: onCheckboxChange,
columns: [
{ type: 'checkbox', width: 50 },
{ field: 'id', title: '客户ID' },
{
field: 'createTime',
title: '创建日期',
search: {
el: 'date-picker',
props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' },
span: 1.5,
},
},
{
field: 'createBy',
title: '创建人',
search: { el: 'input', span: 1, props: { clearable: true } },
},
{ field: 'name', title: '客户名称', search: { el: 'input' } },
{ field: 'name', title: '身份证号', search: { el: 'input' } },
{ field: 'name', title: '手机', search: { el: 'input' } },
{ field: 'name', title: '电子邮箱', search: { el: 'input' } },
{ field: 'maxStagesNum', title: '预留工作单位', search: { el: 'input' } },
{ field: 'maxStagesNum', title: '预留家庭地址', search: { el: 'input' } },
{ field: 'remark', title: '备注', search: { el: 'input' } },
],
});
const query = () => proTable.value?.search();
onMounted(() => {
query();
});
</script>
<template>
<div class="card content-box">
<span class="text"> 客户信息统计表(待完善) 🍓🍇🍈🍉</span>
</div>
</template>
<script setup name="dictManage"></script>
<template>
<div class="card content-box">
<span class="text"> 风控审核报告(待完善) 🍓🍇🍈🍉</span>
</div>
</template>
<script setup name="dictManage"></script>
......@@ -9,49 +9,14 @@
esc-closable
>
<div class="allocation-wrap">
<div class="top">
<div class="number-box">
<div class="number-left">
<div class="icon-wrapper">
<el-icon><UserFilled size="850" /></el-icon>
</div>
</div>
<div class="number-right">
<p>待分配客户数量</p>
<p>{{ statisis.unCustomerNum }}</p>
</div>
</div>
<div class="number-box">
<div class="number-left">
<div class="icon-wrapper">
<el-icon><List /></el-icon>
</div>
</div>
<div class="number-right">
<p>待分配案件数量</p>
<p>{{ statisis.unCaseNum }}</p>
</div>
</div>
<div class="number-box">
<div class="number-left">
<div class="icon-wrapper">
<el-icon><UserFilled size="850" /></el-icon>
</div>
</div>
<div class="number-right">
<p>待分配金额</p>
<p>{{ statisis.unAmount }}</p>
</div>
</div>
</div>
<div class="Content">
<template v-if="!step">
<div style="margin-top: 10px; margin-bottom: 10px">
<el-radio-group v-model="radio" @change="changeRadio">
<el-radio :value="0">分配到调解中心</el-radio>
<el-radio :value="1">分配到CPE</el-radio>
</el-radio-group>
</div>
<div style="margin-top: 10px; margin-bottom: 10px">
<el-radio-group v-model="radio" @change="changeRadio">
<el-radio :value="0">分配到调解中心</el-radio>
<el-radio :value="1">分配到CPE</el-radio>
</el-radio-group>
</div>
<template v-if="radio === 0 || radio === 1">
<div class="mainContent">
<div class="tree-wrapper">
<el-tree :data="data" :props="defaultProps" @node-click="handleNodeClick" />
......@@ -65,8 +30,43 @@
/> -->
</div>
</template>
<template v-else>
<p>分配方案</p>
<div class="top" v-if="radio === 0 || (radio === 1 && currentTenant.id)">
<div class="number-box">
<div class="number-left">
<div class="icon-wrapper">
<el-icon><UserFilled size="850" /></el-icon>
</div>
</div>
<div class="number-right">
<p>待分配客户数量</p>
<p>{{ statisis.unCustomerNum }}</p>
</div>
</div>
<div class="number-box">
<div class="number-left">
<div class="icon-wrapper">
<el-icon><List /></el-icon>
</div>
</div>
<div class="number-right">
<p>待分配案件数量</p>
<p>{{ statisis.unCaseNum }}</p>
</div>
</div>
<div class="number-box">
<div class="number-left">
<div class="icon-wrapper">
<el-icon><UserFilled size="850" /></el-icon>
</div>
</div>
<div class="number-right">
<p>待分配金额</p>
<p>{{ statisis.unAmount }}</p>
</div>
</div>
</div>
<template v-if="radio === 1 && currentTenant.id">
<p class="my-2">分配方案</p>
<div class="idea-box">
<div class="left-idea">
<div class="idea-btn">
......@@ -99,10 +99,10 @@
</div>
</div>
<template #footer>
<el-button @click="backform" v-if="step" style="float: left">上一步</el-button>
<el-button type="default" @click="showModal = false">取消</el-button>
<el-button type="primary" @click="submitForm" v-if="step || radio === 0">确认提交</el-button>
<el-button type="primary" @click="submitForm" v-else>下一步</el-button>
<el-button type="primary" @click="submitForm" :disabled="!currentTenant.id"
>确认提交</el-button
>
</template>
</vxe-modal>
</template>
......@@ -130,17 +130,21 @@
const currentInfo = ref({});
const currentTenant = ref({});
const statisis = ref({});
const currentAllBtn = ref('BORROWER');
const currentAllBtn = ref();
const editRowIndex = ref(-1);
const radio = ref(0);
const pageParams = ref({});
const radio = ref(null);
const step = ref(0);
const onHide = () => {
currentInfo.value = {};
};
const getStatisis = (params) => {
getLoanDistribute(params).then((res) => {
const getStatisis = (params, id) => {
const p = JSON.parse(JSON.stringify(params));
if (id) {
p['tenentId'] = id;
}
getLoanDistribute(p).then((res) => {
if (res.success) {
statisis.value = res.result;
}
......@@ -186,16 +190,17 @@
});
};
const changeRadio = () => {
// radio.value === 1 && chooseIdea('BORROWER')
radio.value === 0 && getStatisis(pageParams.value);
currentTenant.value = {};
};
const openModal = (info, param) => {
showModal.value = true;
currentInfo.value = info;
console.log('currentInfo.value', currentInfo.value);
getStatisis(param);
pageParams.value = param;
getTree();
step.value = 0;
radio.value = 0;
currentTenant.value = {};
editRowIndex.value = -1;
};
const backform = () => {
......@@ -222,7 +227,16 @@
changeDistributeCpe({
records: tabledata.value,
distributeType: currentAllBtn.value,
}).then((res) => {});
}).then((res) => {
if (res.success) {
ElMessage.success({
message: '分配成功',
plain: true,
});
showModal.value = false;
emits('success');
}
});
} else {
distributeLoan(currentTenant.value.id, {
caseId: currentInfo.value.caseId,
......@@ -255,13 +269,23 @@
});
}
} else {
chooseIdea('BORROWER');
// chooseIdea('BORROWER');
step.value = 1;
}
};
const handleNodeClick = (data) => {
console.log('data11111', data);
currentTenant.value = data;
if (radio.value === 0) {
} else {
getStatisis(pageParams.value, data.id);
tabledata.value = data.users.map((v) => ({
cpe: v,
borrowerNum: null,
caseNum: null,
amount: null,
}));
}
};
const resetAllocation = () => {
......@@ -398,7 +422,8 @@
border: 1px solid #f1f1f1;
height: 50px;
display: flex;
margin-left: 10px;
margin-right: 10px;
margin-top: 10px;
}
.icon-wrapper {
width: 40px;
......
......@@ -4,16 +4,16 @@
<ProTable :config="config" ref="caseLRef" :api="getLoanpage" :paramCallback="paramCallback">
<template #table_top>
<div class="flex">
<div class="mr-2"
>未分配案件数:<span class="text-blue-500 mr-1">{{ statisis.caseNum }}</span
<div class="mr-4"
>未分配案件数:<span class="text-blue-500">{{ statisis.caseNum }}</span
></div
>
<div class="mr-2"
>未分配CPE数:<span class="text-blue-500 mr-1">{{ statisis.cpeNum }}</span
<div class="mr-4"
>未分配CPE数:<span class="text-blue-500">{{ statisis.cpeNum }}</span
></div
>
<div class="mr-2"
>未分配总金额数:<span class="text-blue-500 mr-1">{{ statisis.amount }}</span
<div class="mr-4"
>未分配总金额数:<span class="text-blue-500">{{ statisis.amount }}</span
></div
>
</div>
......@@ -89,6 +89,16 @@
obj['district'] = obj.arealist.length > 2 ? obj.arealist[2] : null;
delete obj['arealist'];
}
if (obj['cpeDate']) {
if (obj['cpeDate'][0]) obj['cpeDateBegin'] = obj['cpeDate'][0];
if (obj['cpeDate'][1]) obj['cpeDateEnd'] = obj['cpeDate'][1];
delete obj['cpeDate'];
}
if (obj['tenantTime']) {
if (obj['tenantTime'][0]) obj['tenantTimeBegin'] = obj['tenantTime'][0];
if (obj['tenantTime'][1]) obj['tenantTimeEnd'] = obj['tenantTime'][1];
delete obj['tenantTime'];
}
curParam.value = obj;
getStatisis(obj);
return obj;
......@@ -101,12 +111,13 @@
console.log('citydatacitydata', citydata);
const config = reactive({
columns: [
{ type: 'checkbox', title: '', width: '40px' },
{ field: 'caseId', title: '案件ID/案件号', search: { el: 'input' } },
{ type: 'checkbox', title: '', width: 40 },
{ field: 'caseId', title: '案件ID', search: { el: 'input' }, width: 80 },
{
field: 'arealist',
enum: citydata,
title: '所属区域',
width: 80,
fieldNames: { label: 'label', value: 'value' },
search: { el: 'cascader', props: { clearable: true } },
slots: {
......@@ -124,11 +135,13 @@
{
field: 'payOrg',
title: '借款机构',
width: 80,
search: { el: 'input', props: { clearable: true } },
},
{
field: 'distributeStatus',
title: '分配状态',
width: 80,
enum: distributeStatusOpt,
search: { el: 'select', props: { filterable: true }, span: 1 },
fieldNames: { label: 'label', value: 'value' },
......@@ -147,65 +160,78 @@
{
field: 'tenant.name',
title: '调解中心',
width: 80,
search: { el: 'input', props: { clearable: true } },
},
{
field: 'manageOrg.orgName',
title: '资管公司',
width: 80,
search: { el: 'input', props: { clearable: true } },
},
{
field: 'cpe.name',
title: 'CPE',
width: 60,
search: { el: 'input', props: { clearable: true }, key: 'cpeName' },
},
{
field: 'tenantTime',
title: '分配中心日期',
width: 100,
search: { el: 'date-picker', props: { type: 'date', valueFormat: 'YYYY-MM-DD' } },
},
{
field: 'commissionAmount',
title: '债权总额',
width: 80,
search: { el: 'input', props: { clearable: true } },
},
{
field: 'cpeDate',
title: '分配CPE日期',
width: 100,
search: { el: 'date-picker', props: { type: 'date', valueFormat: 'YYYY-MM-DD' } },
},
{
field: 'borrower.name',
title: '借款人姓名',
width: 100,
search: { el: 'input', key: 'borrowerName', props: { clearable: true } },
},
{
field: 'sumRepayAmount',
title: '已还总额',
width: 80,
search: { el: 'input', props: { clearable: true } },
},
{
field: 'borrower.idCard',
title: '身份证',
width: 120,
search: { el: 'input', props: { clearable: true }, key: 'idCard' },
},
{
field: 'borrower.phone',
key: 'borrowerPhone',
title: '手机',
width: 100,
search: { el: 'input', props: { clearable: true } },
},
{
field: 'principalBalance',
title: '剩余本金',
width: 80,
},
{
field: 'remaininginterest',
title: '剩余利息',
width: 80,
},
{
field: 'commission',
title: '违约金',
width: 80,
},
],
onCheckboxChange: onCheckboxChange,
......
......@@ -55,8 +55,8 @@ export default defineConfig(({ command, mode }) => {
port: VITE_PORT,
proxy: {
'/api': {
target: 'http://192.168.31.128:8080',
// target: 'http://8.152.205.9:8080',
// target: 'http://192.168.31.128:8080',
target: 'http://8.152.205.9:8080',
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, ''),
},
......
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