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

修复管理和修复审批

parent e21e3df8
......@@ -84,3 +84,16 @@ export const saveTrackRecord = (data) => {
export const getTrackRecord = (params) => {
return request.get('/TrackRecord/page', params);
};
// 联络人修复申请
export const saveRepairRecord = (data) => {
return request.post('/RepairRecord/save', data);
};
// 联络人修复记录列表
export const getRepairRecord = (params) => {
return request.get('/RepairRecord/page', params);
};
// 修复记录批量审批
export const RepairRecordStatusByIds = (params) => {
return request.get('/RepairRecord/flowStatusByIds', params);
};
......@@ -11,3 +11,7 @@ export const getRolePage = (params) => {
export const deleteRoles = (ids) => {
return request.get('/role/batchDeleteByIds', { ids });
};
export const getDefualtRoles = (params) => {
return request.get('/role/getDefualtRoles', params);
};
<template>
<div class="table-box">
<ProTable :config="config" :data="tabledata" :showPagination="false" :showToolBar="true">
<ProTable :config="config" ref="caseLRef" :api="getRepairRecord">
<template #left_buttons>
<!-- <el-button type="primary">下载申请 </el-button> -->
<el-button type="primary">审批 </el-button>
<el-button
type="primary"
@click="changeStatus"
:disabled="!selectdList || selectdList.length > 1"
>审批
</el-button>
<!-- <el-button type="primary">下载 </el-button>
<el-button type="primary">批量修复上传 </el-button> -->
</template>
</ProTable>
<vxe-modal
v-model="showModal"
title="审批提示"
height="282"
width="450"
show-footer
esc-closable
>
<div class="w-full px-3 h-full overflow-auto flex-col flex mytable">
是否审批通过选中的数据?
</div>
<template #footer>
<el-button type="default" @click="showModal = false">取消</el-button>
<el-button type="danger" @click="submitForm('fail')">不通过</el-button>
<el-button type="primary" @click="submitForm('pass')">通过</el-button>
</template>
</vxe-modal>
</div>
</template>
<script setup name="systemLog" lang="jsx">
import { computed } from 'vue';
import { onMounted } from 'vue';
import { reactive, ref } from 'vue';
import { getRepairRecord, RepairRecordStatusByIds } from '@/api/property';
import { ElMessageBox, ElMessage, ElButton } from 'element-plus';
const tabledata = ref([]);
const config = computed(() => {
return {
columns: [
{ type: 'checkbox', width: 50 },
{ type: 'seq', width: 50 },
{
field: 'code',
title: '联系人姓名',
search: { el: 'input', props: { clearable: true } },
const showModal = ref(false);
const caseLRef = ref();
const flowStatusOpt = [
{ label: '待审核', value: 'pending' },
// { label: '审核中', value: 'in_review' },
{ label: '通过', value: 'pass' },
{ label: '未通过', value: 'fail' }
];
const selectdList = ref([]);
const onCheckboxChange = (row) => {
console.log('row', row);
selectdList.value = row.records;
};
const onCheckboxAll =(flag)=> {
if (flag.checked) {
selectdList.value = flag.records;
} else {
selectdList.value = [];
}
}
const changeStatus = async () => {
showModal.value = true;
};
const submitForm = async (type) => {
const ids = selectdList.value.map((v) => v.id).join(',');
await RepairRecordStatusByIds({
ids: ids,
flowStatus: type,
});
ElMessage.success({
message: '审核成功',
plain: true,
});
showModal.value = false;
query();
};
const config = reactive({
columns: [
{ type: 'checkbox', width: 50 },
{
field: 'borrower.name',
title: '借款人姓名',
showOverflow: 'tooltip',
width: 120,
// search: {
// el: 'input',
// key: 'name',
// props: { clearable: true },
// labelWidth: 95,
// },
},
{
field: 'borrower.idCard',
title: '借款人身份证',
showOverflow: 'tooltip',
width: 140,
// search: {
// el: 'input',
// props: { clearable: true },
// key: 'borrowerIdCard',
// labelWidth: 95,
// },
},
{
field: 'newName',
title: '联系人姓名',
showOverflow: 'tooltip',
width: 140,
search: {
el: 'input',
props: { clearable: true },
key: 'name',
labelWidth: 95,
},
},
{
field: 'oldPhone',
title: '修复前联系方式',
showOverflow: 'tooltip',
// width: 140,
search: {
el: 'input',
props: { clearable: true },
key: 'oldPhone',
labelWidth: 95,
},
{
field: 'code',
title: '与债权人关系',
search: { el: 'input', props: { clearable: true } },
},
{
field: 'newPhone',
title: '修复后联系方式',
showOverflow: 'tooltip',
// width: 140,
search: {
el: 'input',
props: { clearable: true },
key: 'newPhone',
labelWidth: 95,
},
{
field: 'code',
title: '号码类型',
search: { el: 'input', props: { clearable: true } },
},
{
field: 'kinship',
title: '与债权人关系',
showOverflow: 'tooltip',
// width: 140,
// search: {
// el: 'input',
// props: { clearable: true },
// key: 'newPhone',
// labelWidth: 95,
// },
},
{
field: 'flowStatus',
showOverflow: 'tooltip',
title: '审核状态',
width: 95,
enum: flowStatusOpt,
search: { el: 'select', props: { filterable: true }, labelWidth: 95 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.flowStatus
? flowStatusOpt.find((v) => v.value === row.flowStatus).label
: ''}
</>
);
},
},
],
};
}
],
onCheckboxChange: onCheckboxChange,
onCheckboxAll: onCheckboxAll
});
const query = () => caseLRef.value?.search();
onMounted(() => {
query();
});
tabledata.value = [
{ name: 'admin', code: 'admin', role: 'superadmin', num: 1 },
{ name: 'account1', code: 'account1', role: 'user', num: 1 },
{ name: 'account2', code: 'account2', role: 'user', num: 1 },
{ name: 'account3', code: 'account3', role: 'user', num: 1 },
];
</script>
......@@ -44,6 +44,7 @@
import { ElMessageBox, ElMessage } from 'element-plus';
import citydata from '../../../assets/citydata';
import { onMounted } from 'vue';
import {VxeTextEllipsis, VxeTooltip} from 'vxe-pc-ui'
const allocationModalRef = ref();
const caseLRef = ref();
const selectdList = ref([]);
......@@ -76,6 +77,11 @@
});
query();
};
const caseStatusOpt = [
{ label: '正常', value: 'normal' },
{ label: '撤案', value: 'withdraw' },
{ label: '留案', value: 'stay' },
];
const paramCallback = (param) => {
const obj = JSON.parse(JSON.stringify(param));
if (obj.arealist && obj.arealist.length > 0) {
......@@ -126,17 +132,15 @@
enum: citydata,
title: '所属区域',
showOverflow: 'tooltip',
width: 100,
width: 160,
fieldNames: { label: 'label', value: 'value' },
search: { el: 'cascader', props: { clearable: true, checkStrictly: true }, labelWidth: 78 },
slots: {
default: ({ row }) => {
return (
<div>
{row.manageOrg.province}
{row.manageOrg.city ? '-' + row.manageOrg.city : ''}
{row.manageOrg.district ? '-' + row.manageOrg.district : ''}
</div>
<VxeTooltip content={row.borrower.domicileProvince + (row.borrower.domicileCity ? '-' + row.borrower.domicileCity : '') + (row.borrower.area ? '-' + row.borrower.area : '')}>
<VxeTextEllipsis content={row.borrower.domicileProvince + (row.borrower.domicileCity ? '-' + row.borrower.domicileCity : '') + (row.borrower.area ? '-' + row.borrower.area : '')}></VxeTextEllipsis>
</VxeTooltip>
);
},
},
......@@ -278,6 +282,24 @@
title: '违约金',
width: 80,
},
{
field: 'caseStatus',
title: '案件状态',
showOverflow: 'tooltip',
width: 80,
enum: caseStatusOpt,
search: { el: 'select', props: { filterable: true }, labelWidth: 80 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.caseStatus ? caseStatusOpt.find((v) => v.value === row.caseStatus).label : ''}
</>
);
},
},
}
],
onCheckboxChange: onCheckboxChange,
onCheckboxAll: onCheckboxAll
......
......@@ -21,7 +21,7 @@
esc-closable
>
<div class="w-full px-3 h-full overflow-auto flex-col flex mytable">
数据中有留案案件,请选择回收方式
回收是只回收未留案的案件,强制回收就是所有状态案件都处理,请确认选择操作?
</div>
<template #footer>
<el-button type="default" @click="showModal = false">取消</el-button>
......@@ -36,6 +36,7 @@
import { getLoantotal, getLoanpage, back, fullBack } from '@/api/allcation';
import { reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import {VxeTextEllipsis, VxeTooltip} from 'vxe-pc-ui'
import citydata from '../../../assets/citydata';
import { onMounted } from 'vue';
const caseLRef = ref();
......@@ -53,7 +54,30 @@
}
});
};
const caseStatusOpt = [
{ label: '正常', value: 'normal' },
{ label: '撤案', value: 'withdraw' },
{ label: '留案', value: 'stay' },
];
const backCase = async () => {
// 勾选的情况
// if (selectdList.value && selectdList.value.length) {
// const arr = selectdList.value.filter(v => v.caseStatus === 'stay')
// if (arr.length > 0) {
// showModal.value = true
// } else {
// submitForm('withdraw')
// }
// } else {
// const param = {...curParam.value, caseStatus: 'stay'}
// getLoanpage(param).then(res=>{
// if(res.success && res.result && res.result.content && res.result.content.length) {
// showModal.value = true
// } else {
// submitForm('withdraw')
// }
// })
// }
showModal.value = true
};
const submitForm = async (type) => {
......@@ -117,6 +141,7 @@
selectdList.value = [];
}
}
console.log('citydatacitydata', citydata);
const config = reactive({
columns: [
......@@ -139,11 +164,9 @@
slots: {
default: ({ row }) => {
return (
<div>
{row.manageOrg.province}
{row.manageOrg.city ? '-' + row.manageOrg.city : ''}
{row.manageOrg.district ? '-' + row.manageOrg.district : ''}
</div>
<VxeTooltip content={row.borrower.domicileProvince + (row.borrower.domicileCity ? '-' + row.borrower.domicileCity : '') + (row.borrower.area ? '-' + row.borrower.area : '')}>
<VxeTextEllipsis content={row.borrower.domicileProvince + (row.borrower.domicileCity ? '-' + row.borrower.domicileCity : '') + (row.borrower.area ? '-' + row.borrower.area : '')}></VxeTextEllipsis>
</VxeTooltip>
);
},
},
......@@ -285,6 +308,24 @@
showOverflow: 'tooltip',
width: 80,
},
{
field: 'caseStatus',
title: '案件状态',
showOverflow: 'tooltip',
width: 80,
enum: caseStatusOpt,
search: { el: 'select', props: { filterable: true }, labelWidth: 80 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.caseStatus ? caseStatusOpt.find((v) => v.value === row.caseStatus).label : ''}
</>
);
},
},
}
],
onCheckboxChange: onCheckboxChange,
onCheckboxAll: onCheckboxAll
......
......@@ -3,8 +3,8 @@
v-model="showModal"
title="修复申请"
@hide="onHide"
height="582"
width="1003"
height="350"
width="800"
show-footer
esc-closable
>
......@@ -23,16 +23,16 @@
</el-form-item>
</el-col>
<el-col :span="10">
<el-form-item class="w-full" label="联系人姓名:" prop="name">
<el-input v-model="form.name" placeholder="请输入账号" />
<el-form-item class="w-full" label="联系人姓名:" prop="newName">
<el-input v-model="form.newName" placeholder="请输入联系人姓名" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-form-item class="w-full" label="号码类型:" prop="role"> 修复 </el-form-item>
</el-col>
<el-col :span="10">
<el-form-item class="w-full" label="与案人关系:" prop="relation">
<el-select v-model="form.relation" placeholder="请选择">
<el-form-item class="w-full" label="与案人关系:" prop="kinship">
<el-select v-model="form.kinship" placeholder="请选择关系">
<el-option
v-for="item in options"
:key="item.value"
......@@ -44,7 +44,7 @@
</el-col>
<el-col :span="12">
<el-form-item class="w-full" label="修复前联系号码:" prop="role" label-width="140px">
{{ currentDetail.people }}
{{ currentDetail?.borrower?.phone }}
</el-form-item>
</el-col>
</el-row>
......@@ -59,6 +59,9 @@
<script setup lang="jsx" name="allocationModal">
import { computed } from 'vue';
import { saveRepairRecord } from '@/api/property';
import { ElMessage } from 'element-plus';
import { reactive, ref } from 'vue';
const data = ref([]);
const mytransfer = ref();
......@@ -67,40 +70,49 @@
const showModal = ref(false);
const currentDetail = ref({ people: 0, case: 0, money: 0 });
const form = reactive({
name: '',
relation: '',
newName: '',
kinship: '',
});
const onHide = () => {
currentDetail.value = { people: 0, case: 0, money: 0 };
};
const openModal = (account) => {
console.log('currentDetail', currentDetail.value)
showModal.value = true;
currentDetail.value = { people: 333, case: 44, money: 1111 };
currentDetail.value = account;
};
const submitForm = () => {};
const submitForm = () => {
saveRepairRecord({
"borrower": currentDetail.value?.borrower,
"oldName": "",
"newName": form.newName,
"oldPhone": [],
"newPhone": [],
"kinship": form.kinship,
"flowStatus": "pending",
"status": "Y",
"tenantId": 0
}).then(res => {
console.log('sadas', res)
if (res.success) {
ElMessage.success({
message: '保存成功',
});
showModal.value = false;
}
})
};
const options = [
{
value: 'Option1',
label: 'Option1',
value: '本人',
label: '本人',
},
{
value: 'Option2',
label: 'Option2',
},
{
value: 'Option3',
label: 'Option3',
},
{
value: 'Option4',
label: 'Option4',
},
{
value: 'Option5',
label: 'Option5',
},
value: '非本人',
label: '非本人',
}
];
const config = computed(() => {
......
......@@ -21,7 +21,7 @@
esc-closable
>
<div class="w-full px-3 h-full overflow-auto flex-col flex mytable">
数据中有留案案件,请选择撤案方式
回收是只回收未留案的案件,强制回收就是所有状态案件都处理,请确认选择操作
</div>
<template #footer>
<el-button type="default" @click="showModal = false">取消</el-button>
......@@ -39,6 +39,7 @@
import { ElMessageBox, ElMessage } from 'element-plus';
import citydata from '../../../assets/citydata';
import { onMounted } from 'vue';
import {VxeTextEllipsis, VxeTooltip} from 'vxe-pc-ui'
const caseLRef = ref();
const selectdList = ref([]);
const curParam = ref({});
......@@ -54,9 +55,6 @@
}
});
};
const backCase = async () => {
showModal.value = true
};
const submitForm = async (type) => {
const ids = selectdList.value.map((v) => v.id).join(',');
let param = {
......@@ -106,6 +104,32 @@
// getStatisis(obj);
return obj;
};
const caseStatusOpt = [
{ label: '正常', value: 'normal' },
{ label: '撤案', value: 'withdraw' },
{ label: '留案', value: 'stay' },
];
const backCase = async () => {
// 勾选的情况
// if (selectdList.value && selectdList.value.length) {
// const arr = selectdList.value.filter(v => v.caseStatus === 'stay')
// if (arr.length > 0) {
// showModal.value = true
// } else {
// submitForm('withdraw')
// }
// } else {
// const param = {...curParam.value, caseStatus: 'stay'}
// getLoanpage(param).then(res=>{
// if(res.success && res.result && res.result.content && res.result.content.length) {
// showModal.value = true
// } else {
// submitForm('withdraw')
// }
// })
// }
showModal.value = true
};
const distributeStatusOpt = [
{ label: '未分派', value: 'undistributed' },
{ label: '分派到调解中心', value: 'tenant' },
......@@ -140,11 +164,9 @@
slots: {
default: ({ row }) => {
return (
<div>
{row.manageOrg.province}
{row.manageOrg.city ? '-' + row.manageOrg.city : ''}
{row.manageOrg.district ? '-' + row.manageOrg.district : ''}
</div>
<VxeTooltip content={row.borrower.domicileProvince + (row.borrower.domicileCity ? '-' + row.borrower.domicileCity : '') + (row.borrower.area ? '-' + row.borrower.area : '')}>
<VxeTextEllipsis content={row.borrower.domicileProvince + (row.borrower.domicileCity ? '-' + row.borrower.domicileCity : '') + (row.borrower.area ? '-' + row.borrower.area : '')}></VxeTextEllipsis>
</VxeTooltip>
);
},
},
......@@ -286,6 +308,24 @@
showOverflow: 'tooltip',
width: 80,
},
{
field: 'caseStatus',
title: '案件状态',
showOverflow: 'tooltip',
width: 80,
enum: caseStatusOpt,
search: { el: 'select', props: { filterable: true }, labelWidth: 80 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.caseStatus ? caseStatusOpt.find((v) => v.value === row.caseStatus).label : ''}
</>
);
},
},
}
],
onCheckboxChange: onCheckboxChange,
onCheckboxAll: onCheckboxAll
......
<template>
<div class="table-box">
<div class="card flex mb-2">
<div class="flex-1 pr-3">
<div class="mb-1">1、上传文件</div>
<div>
<el-upload
class="avatar-uploader"
ref="uploadRef"
:action="upload.url"
:disabled="upload.isUploading"
accept=".xls, .xlsx"
:limit="1"
:on-success="handleFileSuccess"
:on-remove="handleRemove"
:auto-upload="true"
:on-progress="uploadVideoProcess"
>
<el-button type="primary" plain :icon="Upload">上传文件</el-button>
</el-upload>
<!-- 进度条 -->
<!-- <el-progress v-if="progressFlag" :percentage="loadProgress" /> -->
<div class="mt-2 text-xs text-gray-400"> 仅支持1个文件上传,格式为xls和xlsx </div>
<div class="mt-1 text-blue-500 underline cursor-pointer" @click="downloadtemplate"
>下载模板</div
>
<div class="card flex mb-2" style="padding-top: 0">
<div class="flex-1">
<div class="mb-1 text-center step">
<div class="xuhao">1</div>
上传文件
<div class="jt"><el-icon size="60" color="#e3e3e3d9"><ArrowRight /></el-icon></div>
</div>
<div class="w-full flex items-center justify-center pt-5">
<div>
<el-upload
class="avatar-uploader"
ref="uploadRef"
:action="upload.url"
:disabled="upload.isUploading"
accept=".xls, .xlsx"
:limit="1"
:on-success="handleFileSuccess"
:on-remove="handleRemove"
:auto-upload="true"
:on-progress="uploadVideoProcess"
>
<el-button type="primary" plain :icon="Upload">上传文件</el-button>
</el-upload>
<!-- 进度条 -->
<!-- <el-progress v-if="progressFlag" :percentage="loadProgress" /> -->
<div class="mt-2 text-xs text-gray-400"> 仅支持1个文件上传,格式为xls和xlsx </div>
<div class="mt-1 text-blue-500 underline cursor-pointer" @click="downloadtemplate"
>下载模板</div
>
</div>
</div>
</div>
<div class="flex-1">
<div class="mb-1">2、检查数据</div>
<div>
<div class="flex items-center">
<el-button type="danger" @click="checkData" :disabled="!form.path">检查</el-button>
<span class="ml-2">
<div class="mb-1 text-center step">
<div class="xuhao">2</div>
检查数据
<div class="jt"><el-icon size="60" color="#e3e3e3d9"><ArrowRight /></el-icon></div>
</div>
<div class="w-full flex items-center justify-center pt-5">
<div>
<div class="flex items-center">
<el-button type="danger" @click="checkData" :disabled="!form.path">检查</el-button>
</div>
<div class="text-sm mt-2">
<span class="mr-2 text-gray-400">通过{{ checkObj?.result?.success || 0 }}</span>
<span class="text-gray-400">失败{{ checkObj?.result?.error || 0 }}</span>
</span>
</div>
<!-- 进度条 -->
<!-- <el-progress v-if="progressFlag" :percentage="loadProgress" /> -->
<div
class="mt-2 text-xs text-blue-500 underline cursor-pointer"
v-if="checkObj.check"
@click="openError"
>下载检查结果</div
>
<div v-else class="mt-2 text-xs text-red-500"> *检查文件后才可以提交 </div>
</div>
<!-- 进度条 -->
<!-- <el-progress v-if="progressFlag" :percentage="loadProgress" /> -->
<div
class="mt-2 text-xs text-blue-500 underline cursor-pointer"
v-if="checkObj.check"
@click="openError"
>下载检查结果</div
>
<div v-else class="mt-2 text-xs text-red-500"> *检查文件后才可以提交 </div>
</div>
</div>
<div class="flex-1 importwrapper">
<div class="mb-1 text-center">3、上传数据</div>
<div class="pr-4">
<el-form ref="formRef" inline :model="form" :rules="rules" label-width="85px">
<el-form-item class="w-full" label="导入编号:" prop="code">
<el-input v-model="form.code" placeholder="请输入" style="width: 100%" />
</el-form-item>
<!-- <el-form-item class="w-full" label="委案合同:" prop="contractNo">
<el-input v-model="form.contractNo" placeholder="请输入" style="width: 100%" />
</el-form-item> -->
<el-form-item class="w-full" label="折扣:" prop="discount">
<el-input v-model="form.discount" placeholder="请输入" style="width: 100%" />
</el-form-item>
</el-form>
<el-button
type="primary"
@click="submitData"
:disabled="!form.path || !checkObj.checksuccess"
>上传</el-button
>
<div class="mb-1 text-center step">
<div class="xuhao">3</div>
上传数据
</div>
<div class="w-full flex items-center justify-center pt-5">
<div class="px-7">
<el-form ref="formRef" inline :model="form" :rules="rules" label-width="85px">
<el-form-item class="w-full" label="导入编号:" prop="code">
<el-input v-model="form.code" placeholder="请输入" style="width: 100%" />
</el-form-item>
<!-- <el-form-item class="w-full" label="委案合同:" prop="contractNo">
<el-input v-model="form.contractNo" placeholder="请输入" style="width: 100%" />
</el-form-item> -->
<el-form-item class="w-full" label="折扣:" prop="discount">
<el-input v-model="form.discount" placeholder="请输入" style="width: 100%" />
</el-form-item>
</el-form>
<div class="flex justify-end">
<el-button
type="primary"
@click="submitData"
:disabled="!form.path || !checkObj.checksuccess"
>上传</el-button
>
</div>
</div>
</div>
</div>
</div>
......@@ -96,7 +116,7 @@
import { reactive, ref } from 'vue';
import { computed, onMounted } from 'vue';
import { ElButton, ElMessage } from 'element-plus';
import { Upload } from '@element-plus/icons-vue';
import { Upload,ArrowRight } from '@element-plus/icons-vue';
import { inject } from 'vue';
import { LoanSubmit, importLoanPage, checkLoanExcel} from '@/api/import';
......@@ -317,4 +337,29 @@
margin-bottom: 3px !important;
}
}
.xuhao {
background-image: url('./step.svg');
background-repeat:no-repeat;
background-size:100% 100%;
-moz-background-size:100% 100%;
width: 30px;
line-height: 30px;
margin-right: 5px;
height: 30px;
}
.step {
border-bottom: 1px solid #e3e3e3;
height: 45px;
display: flex;
position: relative;
width: 100%;
align-items: center;
justify-content: center;
line-height: 45px;
}
.jt {
position: absolute;
top: -7px;
right: 0;
}
</style>
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1739003172297" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="11330" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M512.164608 112a400.0256 400.0256 0 1 0 400.4352 400.0256A400.2048 400.2048 0 0 0 512.164608 112z m0 741.2224a341.1968 341.1968 0 1 1 341.5296-341.1968 341.376 341.376 0 0 1-341.5296 341.1968z" fill="#1296db" p-id="11331"></path><path d="M511.345408 1024A512 512 0 0 1 264.177408 64a5.888 5.888 0 1 1 5.6832 10.24A501.76 501.76 0 0 0 45.067008 691.2a499.6864 499.6864 0 0 0 645.888 287.4624 5.888 5.888 0 0 1 4.1984 10.9824A511.232 511.232 0 0 1 511.345408 1024z" fill="#1296db" p-id="11332"></path><path d="M781.425408 946.5856a5.8624 5.8624 0 0 1-3.1232-10.8544 499.9936 499.9936 0 0 0-444.8256-890.368 5.888 5.888 0 0 1-4.1984-10.9824 511.7696 511.7696 0 0 1 455.168 911.3088 5.8112 5.8112 0 0 1-3.0208 0.896z" fill="#1296db" p-id="11333"></path><path d="M311.998208 76.7232a23.5264 23.5264 0 1 1 23.5264-23.5264 23.552 23.552 0 0 1-23.5264 23.5264z m0-35.2768a11.7504 11.7504 0 1 0 11.7504 11.7504 11.776 11.776 0 0 0-11.7504-11.7504z" fill="#1296db" p-id="11334"></path><path d="M712.305408 994.3296a23.5264 23.5264 0 1 1 23.5264-23.5264 23.552 23.552 0 0 1-23.5264 23.5264z m0-35.2768a11.7504 11.7504 0 1 0 11.7504 11.7504 11.776 11.776 0 0 0-11.7504-11.7504z" fill="#1296db" p-id="11335"></path></svg>
\ No newline at end of file
<template>
<div class="card content-box">
<span class="text"> 修复管理 🍓🍇🍈🍉</span>
<div class="table-box">
<div class="table-inner">
<ProTable :config="config" ref="caseLRef" :api="getRepairRecord">
<!-- <ProTable :config="config" ref="caseLRef" :data="data"> -->
<!-- <template #table_top>
<div class="topgrp">
<div class="topbox">
<div class="topinner">
<p>统计值</p>
<p>111</p>
</div>
</div>
</div>
</template> -->
</ProTable>
</div>
</div>
</template>
<script setup name="systemLog"></script>
<script setup name="case-manage" lang="jsx">
import { useRouter } from 'vue-router';
import { reactive, ref } from 'vue';
import { getRepairRecord } from '@/api/property';
const caseLRef = ref();
import { onMounted } from 'vue';
const router = useRouter();
const onCellClick = (row) => {
router.push({
path: '/property/case-detail',
query: { id: row.id }, //这里不能直接写成 query: JSON.stringify(item)
});
};
const flowStatusOpt = [
{ label: '待审核', value: 'pending' },
// { label: '审核中', value: 'in_review' },
{ label: '通过', value: 'pass' },
{ label: '未通过', value: 'fail' }
];
const config = reactive({
columns: [
{
field: 'borrower.name',
title: '借款人姓名',
showOverflow: 'tooltip',
width: 120,
// search: {
// el: 'input',
// key: 'name',
// props: { clearable: true },
// labelWidth: 95,
// },
},
{
field: 'borrower.idCard',
title: '借款人身份证',
showOverflow: 'tooltip',
width: 140,
// search: {
// el: 'input',
// props: { clearable: true },
// key: 'borrowerIdCard',
// labelWidth: 95,
// },
},
{
field: 'newName',
title: '联系人姓名',
showOverflow: 'tooltip',
width: 140,
search: {
el: 'input',
props: { clearable: true },
key: 'name',
labelWidth: 95,
},
},
{
field: 'oldPhone',
title: '修复前联系方式',
showOverflow: 'tooltip',
// width: 140,
search: {
el: 'input',
props: { clearable: true },
key: 'oldPhone',
labelWidth: 95,
},
},
{
field: 'newPhone',
title: '修复后联系方式',
showOverflow: 'tooltip',
// width: 140,
search: {
el: 'input',
props: { clearable: true },
key: 'newPhone',
labelWidth: 95,
},
},
{
field: 'kinship',
title: '与债权人关系',
showOverflow: 'tooltip',
// width: 140,
// search: {
// el: 'input',
// props: { clearable: true },
// key: 'newPhone',
// labelWidth: 95,
// },
},
{
field: 'flowStatus',
showOverflow: 'tooltip',
title: '审核状态',
width: 95,
enum: flowStatusOpt,
search: { el: 'select', props: { filterable: true }, labelWidth: 95 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.flowStatus
? flowStatusOpt.find((v) => v.value === row.flowStatus).label
: ''}
</>
);
},
},
}
],
});
const query = () => caseLRef.value?.search();
onMounted(() => {
query();
});
</script>
<style lang="scss" scoped>
.table-inner {
width: 100%;
:deep(.topgrp) {
display: flex;
margin-bottom: 8px;
.topbox {
margin-right: 10px;
background: rgba(0, 0, 0, 0.02);
border-radius: 16px;
width: 146px;
height: 97px;
display: flex;
justify-content: center;
align-items: center;
font-size: 24px;
p:nth-child(1) {
font-size: 14px;
color: rgba(0, 0, 0, 0.45);
}
}
}
}
</style>
......@@ -24,6 +24,23 @@
<el-input v-model="form.nickName" placeholder="请输入昵称" />
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item class="w-full" label="角色" prop="roles">
<el-select
v-model="form.roles"
multiple
collapse-tags
placeholder="请选择角色"
>
<el-option
v-for="item in options"
:key="item.roleCode"
:label="item.roleName"
:value="item.roleCode"
/>
</el-select>
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item class="w-full" label="手机号" prop="phone">
<el-input v-model="form.phone" placeholder="请输入手机号" />
......@@ -51,6 +68,7 @@
import { computed } from 'vue';
import { ref } from 'vue';
import { saveUser } from '@/api/user';
import { getDefualtRoles } from '@/api/role';
import { ElMessage } from 'element-plus';
const emits = defineEmits(['success']);
......@@ -59,14 +77,30 @@
const loading = ref(false);
const form = ref({
username: '',
roles: [],
nickName: '',
password: '',
phone: '',
status: 'enable',
});
const options = ref([])
const validatePhone = (rule, value, callback) => {
const reg = /^1[3-9]\d{9}$/;
if (!value) {
callback(new Error('请输入手机号'));
} else if (!reg.test(value)) {
callback(new Error('请输入正确的手机号'));
} else {
callback();
}
}
const rules = ref({
username: { required: true, message: '请输入用户名称', trigger: 'blur' },
password: { required: true, message: '请输入密码', trigger: 'blur' },
phone: [
{ required: true, message: '请输入手机号', trigger: 'blur' },
{ validator: validatePhone, trigger: 'blur' }
],
});
const currentAccount = ref(null);
......@@ -94,6 +128,7 @@
const onHide = () => {
form.value = {
username: '',
roles: [],
nickName: '',
password: '',
phone: '',
......@@ -105,6 +140,9 @@
};
const openModal = (account) => {
account && (form.value = account);
getDefualtRoles().then(res => {
options.value = res.result
})
currentAccount.value = account;
showModal.value = true;
};
......
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