Commit 0236dac3 authored by 沈翠玲's avatar 沈翠玲

客户信息

parent c50538c7
......@@ -9,5 +9,9 @@ export const saveCustomer = (data) => {
};
// 根据id获取客户详情
export const getgetByIdCustomer = (id) => {
return request.get('/customer/getById?id=', id);
return request.get('/customer/getById?id=' + id);
};
// 根据身份证号码获取客户信息
export const getDebtInfo = (id) => {
return request.get('/debt_info/getDebtInfo?idCard=' + id);
};
\ No newline at end of file
......@@ -428,5 +428,5 @@ body {
}
}
.el-radio {
margin-right: 8px !important;
margin-right: 5px !important;
}
\ No newline at end of file
......@@ -4,8 +4,8 @@ import { getAppEnvConfig } from '../env';
import { AxiosCanceler } from './axiosCancel';
import { stringify } from 'qs';
import router from '@/router';
import { LOGIN_URL } from '@/config';
import { useUserStore } from '@/stores/modules/user';
import { LOGIN_URL } from '@/config';
import { saveAs } from 'file-saver';
const envs = getAppEnvConfig();
const defaultConfig = {
......@@ -68,7 +68,9 @@ class RequestClient {
hideLoading()
const { data, config } = response;
axiosCanceler.removePending(config);
const userStore = useUserStore();
if (data.code === 500 && data.message.includes('token')) {
userStore.setToken('');
router.replace(LOGIN_URL);
ElMessage({
message: '登录失效,请重新登录',
......@@ -79,6 +81,7 @@ class RequestClient {
}
// 登录失效
if (data.code === 404) {
userStore.setToken('');
router.replace(LOGIN_URL);
ElMessage({
message: '登录失效,请重新登录',
......
......@@ -166,7 +166,7 @@
"repayPeriod": 0,
"lendingNum": 0,
"beOverduePeriod": 0,
"hasSue": "",
"hasSue": "N",
"repayDate": "",
"bankCard": "",
"payPassword": "",
......@@ -178,9 +178,9 @@
"liaisonPhone": "",
"bankPhone": "",
"collectionDesc": "",
"hasNegotiateCase": "",
"hasNegotiateCase": "N",
"liabilities": "",
"hasContinuousRepay": ""
"hasContinuousRepay": "N"
});
const submitForm = async () => {
if(!form.value.loanPlatform && form.value.loanPlatform!== 0) {
......@@ -250,7 +250,7 @@
"repayPeriod": 0,
"lendingNum": 0,
"beOverduePeriod": 0,
"hasSue": "",
"hasSue": "N",
"repayDate": "",
"bankCard": "",
"payPassword": "",
......@@ -262,9 +262,9 @@
"liaisonPhone": "",
"bankPhone": "",
"collectionDesc": "",
"hasNegotiateCase": "",
"hasNegotiateCase": "N",
"liabilities": "",
"hasContinuousRepay": ""
"hasContinuousRepay": "N"
}
}
currentRow.value = row
......@@ -296,9 +296,9 @@ td {
padding-left: 5px;
&.label {
text-align: center;
background: #f6f8ff;
background: rgb(222, 233, 244);
font-weight: bold;
color: #909399;
color: #000;
width: 175px;
}
}
......
......@@ -25,7 +25,7 @@
<td colspan="2"><el-input class="line-input" v-model="form.bank" placeholder="" :disabled="!showEdit"/></td>
<td class="label">开户时间</td>
<td colspan="2"><el-date-picker
v-model="form.issuanceDate" class="line-input" style="width: 100%"
v-model="form.issuanceDate" class="line-input"
:disabled="!showEdit"
format="YYYY-MM-DD"
value-format="YYYY-MM-DD"
......@@ -178,15 +178,15 @@
"sixDevUsedQuota": 0,
"debt": 0,
"beOverduePeriod": 0,
"hasNegotiate": "",
"hasStages": "",
"hasNegotiateCase": "",
"hasNegotiate": "N",
"hasStages": "N",
"hasNegotiateCase": "N",
"negotiateCase": "",
"queryPassword": "",
"payPassword": "",
"lastRepaymentDate": "",
"lastRepaymentAmount": 0,
"hasBigQuotaStages": "",
"hasBigQuotaStages": "N",
"bigQuotaType": "",
"bigQuotaStagesAmount": 0,
"bigQuotaStagesDate": "",
......@@ -277,15 +277,15 @@
"sixDevUsedQuota": 0,
"debt": 0,
"beOverduePeriod": 0,
"hasNegotiate": "",
"hasStages": "",
"hasNegotiateCase": "",
"hasNegotiate": "N",
"hasStages": "N",
"hasNegotiateCase": "N",
"negotiateCase": "",
"queryPassword": "",
"payPassword": "",
"lastRepaymentDate": "",
"lastRepaymentAmount": 0,
"hasBigQuotaStages": "",
"hasBigQuotaStages": "N",
"bigQuotaType": "",
"bigQuotaStagesAmount": 0,
"bigQuotaStagesDate": "",
......@@ -322,10 +322,9 @@ td {
padding-left: 5px;
&.label {
text-align: center;
background: #f6f8ff;
font-weight: bold;
background: rgb(222, 233, 244);
width: 175px;
color: #909399;
color: #000;
}
}
</style>
......@@ -39,13 +39,27 @@
</tr>
<tr>
<td class="label">身份证号</td>
<td colspan="2"><el-input class="line-input" v-model="form.idCard" placeholder="" /></td>
<td colspan="2">
<div class="flex items-center">
<el-input class="line-input" v-model="form.idCard" placeholder="">
</el-input>
<el-button :icon="Search" @click="handleQuery"></el-button>
</div>
</td>
<td class="label">属相</td>
<td colspan="2"><el-input class="line-input" v-model="form.zodiac" placeholder="" /></td>
</tr>
<tr>
<td class="label">婚姻状况</td>
<td colspan="2"><el-input class="line-input" v-model="form.marriage" placeholder="" /></td>
<td colspan="2">
<el-select v-model="form.marriage" class="line-input" placeholder="">
<el-option
:label="item.label"
v-for="(item, index) in Marriage" :key="index"
:value="item.value"
/>
</el-select>
</td>
<td class="label">电话</td>
<td colspan="2"><el-input class="line-input" v-model="form.phone" placeholder="" /></td>
</tr>
......@@ -176,7 +190,7 @@
</tr>
</tbody>
</table>
<p class="text-center my-3 py-1" style="background: rgb(209,215,236);">信用卡网贷状况统计*<span class=" text-xs text-red-600">(涉及金额部分单位为:元)</span></p>
<p class="text-center my-3 py-1" style="background: #bdd6ec;">信用卡网贷状况统计*<span class=" text-xs text-red-600">(涉及金额部分单位为:元)</span></p>
<div class="creditcard">
<!-- <ProTable
:config="cardConfig"
......@@ -285,17 +299,20 @@
</div>
</div>
</div>
<idCardModel ref="idCardModelRef"/>
</div>
</template>
<script setup name="Customer" lang="jsx">
import { Search } from '@element-plus/icons-vue';
import { useTabsStore } from '@/stores/modules/tabs';
import { ElButton, ElTag, ElMessage } from 'element-plus';
import Credit from './Credit.vue';
import { saveCustomer, getgetByIdCustomer } from '@/api/customer';
import { saveCustomer, getgetByIdCustomer, getDebtInfo } from '@/api/customer';
import { useRoute } from 'vue-router';
import { useRouter } from 'vue-router';
import { useUserStore } from '@/stores/modules/user';
import Creditcard from './Creditcard.vue';
import idCardModel from './idCardModel.vue';
import customerPrint from './customerPrint.vue';
import cardAndCredit from './cardAndCredit.vue';
import creditPrint from './creditPrint.vue';
......@@ -303,7 +320,8 @@
import { ref, computed, reactive, onBeforeMount } from 'vue';
import { useDict } from '@/hooks/useDict';
const userStore = useUserStore();
const { LoanStatus } = useDict("LoanStatus");
const { LoanStatus, Marriage } = useDict("LoanStatus", "Marriage");
const idCardModelRef = ref()
const printContent = ref({
id: 'customerStatic',
// preview: true, // 预览工具是否启用
......@@ -401,6 +419,24 @@ const pushCredit = (row, index) => {
CreditRef.value.openModal(row, index
);
};
const handleQuery = () => {
// idCardModelRef.value.openModal()
if (!form.value.idCard) {
ElMessage.warning({
message: '请填写身份证号',
plain: true,
});
return
}
getDebtInfo(form.value.idCard).then(res => {
if(res.result) {
form.value = res.result
cardConfig.data = res.result.creditCard
creditArr.value = res.result.lending
}
})
}
const changeCredit = (row, index, del) => {
if (del) {
const arr = JSON.parse(JSON.stringify(creditArr.value))
......@@ -467,6 +503,7 @@ onBeforeMount(async () => {
}
})
const cardConfig = reactive({
align: 'center',
minHeight: 250,
rowConfig: {
height: 40,
......@@ -554,7 +591,24 @@ const cardConfig = reactive({
},
},
showOverflow: 'tooltip',
}
},
{
field: 'operation',
title: '操作',
width: 100,
fixed: 'right',
slots: {
default({ row, rowIndex }) {
return (
<>
<ElButton type="primary" link onClick={() => changeCreditcard(row, rowIndex, true)}>
删除
</ElButton>
</>
);
},
},
},
],
data: [],
toolbarConfig: { enabled: false },
......@@ -625,6 +679,23 @@ const cardConfig = reactive({
);
},
},
},
{
field: 'operation',
title: '操作',
width: 100,
fixed: 'right',
slots: {
default({ row, rowIndex }) {
return (
<>
<ElButton type="primary" link onClick={() => changeCredit(row, rowIndex, true)}>
删除
</ElButton>
</>
);
},
},
}
],
toolbarConfig: { enabled: false },
......@@ -646,9 +717,8 @@ td {
padding-left: 5px;
&.label {
text-align: center;
background: #f6f8ff;
font-weight: bold;
color: #909399;
background: rgb(222, 233, 244);
color: #000;
}
}
.creditcard {
......@@ -667,9 +737,8 @@ td {
@media print {
.label {
text-align: center;
background: #f6f8ff;
font-weight: bold;
color: #909399;
background: rgb(222, 233, 244);
color: #000;
}
}
</style>
\ No newline at end of file
<template>
<tr>
<td colspan="10" style="background: #bdd6ec;color: #db0039;text-align:left">信用卡网贷状况统计*(涉及金额部分单位为:元)</td>
<td colspan="10" style="background: #bdd6ec;color: #db0039;text-align:left;-webkit-print-color-adjust: exact;">信用卡网贷状况统计*(涉及金额部分单位为:元)</td>
</tr>
<tr>
<td>信用卡数量</td>
......@@ -106,6 +106,8 @@ td {
background: #fff;
width: 150px;
line-height: 11px;
word-wrap:break-word;
word-break:break-all;
height: 40px;
font-size: 14px;
padding-left: 5px;
......
......@@ -116,6 +116,8 @@ td {
font-size: 14px;
padding-left: 5px;
color: #000;
word-wrap:break-word;
word-break:break-all;
-webkit-print-color-adjust: exact;
text-align: center;
&.label {
......
......@@ -115,6 +115,8 @@ td {
font-size: 14px;
padding-left: 5px;
color: #000;
word-wrap:break-word;
word-break:break-all;
-webkit-print-color-adjust: exact;
text-align: center;
&.label {
......
......@@ -30,7 +30,9 @@
<td>{{props.data.age}}</td>
<td colspan="2">{{props.data.idCard}}</td>
<td>{{props.data.zodiac}}</td>
<td colspan="2">{{props.data.marriage}}</td>
<td colspan="2">{{props.data.marriage
? Marriage?.find((v) => v.value === props.data.marriage)?.label
: ''}}</td>
<td colspan="2">{{props.data.phone}}</td>
</tr>
<tr>
......@@ -50,8 +52,8 @@
<td colspan="2">{{props.data.reserveAddress}}</td>
</tr>
<tr>
<td rowspan="2" class="label" colspan="2">起诉案件</td>
<td rowspan="2" class="label">案件类型</td>
<td rowspan="2" class="label" colspan="2">是否有起诉案件</td>
<td rowspan="2" class="label">案件描述</td>
<td rowspan="2" class="label">打卡收入</td>
<td rowspan="2" class="label">打卡银行</td>
<td colspan="3" class="label" ></td>
......@@ -64,7 +66,7 @@
<td class="label">市值</td>
</tr>
<tr>
<td colspan="2">{{props.data.sueCaseId}}</td>
<td colspan="2">{{props.data.sueCaseId == 'Y' ? '是' : '否'}}</td>
<td>{{props.data.caseType}}</td>
<td>{{props.data.checkInIncome}}</td>
<td>{{props.data.checkInBank}}</td>
......@@ -91,6 +93,8 @@
</tr>
</template>
<script setup lang="jsx" name="caseDetail">
import { useDict } from '@/hooks/useDict';
const { Marriage } = useDict("Marriage");
const props = defineProps({
data: Object
})
......@@ -107,10 +111,12 @@ td {
line-height: 11px;
height: 40px;
font-size: 14px;
text-align: center;
padding-left: 5px;
word-wrap:break-word;
word-break:break-all;
color: #000;
&.label {
text-align: center;
-webkit-print-color-adjust: exact;
background-color: rgb(222, 233, 244);
font-weight: 400 !important;
......
<template>
<vxe-modal
resize
v-model="showModal"
title="选择身份证"
@hide="onHide"
height="582"
width="1003"
show-footer
esc-closable
>
<ProTable
:config="config"
ref="ProTableRef"
:data="table"
:showPagination="false"
:showToolBar="false"
>
</ProTable>
<template #footer> </template>
</vxe-modal>
</template>
<script setup>
import { computed } from 'vue';
import { reactive, ref } from 'vue';
const showModal = ref(false);
const table = ref(undefined);
const ProTableRef = ref();
const config = reactive({
exportConfig: {},
toolbarConfig: { enabled: false },
columns: [
{ field: 'row', title: '行' },
{
field: 'value',
title: '错误值',
},
{
field: 'message',
title: '错误描述',
},
],
});
const onHide = () => {
table.value = null;
};
const openModal = () => {
showModal.value = true;
};
defineExpose({
openModal,
});
</script>
<style lang="scss" scoped></style>
\ No newline at end of file
......@@ -164,18 +164,18 @@
</el-radio-group></td>
<td colspan="3"><el-input v-model="form.roleDesc" placeholder="" type="textarea"/></td>
</tr>
<tr>
<tr class="yellow">
<td class="text-center">10</td>
<td colspan="10" class="text-center">信用卡*<span class=" text-red-500">(涉及金额部分单位为:元)</span></td>
</tr>
<tr>
<tr class="yellow">
<td class="text-center">信用卡数量</td>
<td colspan="10"><div class="flex items-center">
<el-input v-model="form.roleDesc" placeholder="" style="width: 200px"/>
</div></td>
</tr>
<tr>
<tr class="yellow">
<td class="text-center">序号</td>
<td class="text-center">发卡银行</td>
<td class="text-center">当前欠款金额</td>
......@@ -185,7 +185,7 @@
<td class="text-center">风控审核</td>
<td colspan="2" class="text-center">风控审核意见</td>
</tr>
<tr>
<tr class="yellow">
<td class="text-center">1</td>
<td class="text-center">中行</td>
<td class="text-center"></td>
......@@ -198,20 +198,20 @@
</el-radio-group></td>
<td class="text-center" colspan="2"><el-input v-model="form.roleDesc" placeholder="" type="textarea"/></td>
</tr>
<tr>
<tr class="yellow">
<td>信用卡欠款合计</td>
<td colspan="10"><el-input v-model="form.roleDesc" placeholder="" style="width: 200px"/></td>
</tr>
<tr>
<tr class="green">
<td class="text-center">11</td>
<td colspan="10" class="text-center">网贷*<span class=" text-red-500">(涉及金额部分单位为:元)</span></td>
</tr>
<tr>
<tr class="green">
<td class="text-center">信用贷、网贷机构数量</td>
<td colspan="10"><div class="flex items-center"><el-input v-model="form.roleDesc" placeholder="" style="width: 200px"/>
</div></td>
</tr>
<tr>
<tr class="green">
<td class="text-center">序号</td>
<td class="text-center">贷款机构</td>
<td class="text-center">审批额度</td>
......@@ -224,7 +224,7 @@
<td class="text-center">风控审核</td>
<td class="text-center">风控审核意见</td>
</tr>
<tr>
<tr class="green">
<td class="text-center"></td>
<td class="text-center"></td>
<td class="text-center"></td>
......@@ -240,7 +240,7 @@
</el-radio-group></td>
<td><el-input v-model="form.roleDesc" placeholder="" type="textarea"/></td>
</tr>
<tr>
<tr class="green">
<td>信用贷、网贷欠款合计</td>
<td colspan="10"><el-input v-model="form.roleDesc" placeholder="" style="width: 200px"/></td>
</tr>
......@@ -464,15 +464,26 @@ td {
padding-left: 5px;
&.label {
text-align: center;
background: #f6f8ff;
font-weight: bold;
color: #909399;
background: rgb(222, 233, 244);
color: #000;
}
&.header {
background: rgb(209,215,236);
background: #bdd6ec;
text-align: center;
}
}
tr {
&.yellow {
td {
background: #fff3cc7d;
}
}
&.green {
td {
background: #e1f1d985;
}
}
}
.creditcard {
:deep(.card) {
// background: #fff3cc;
......
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