Commit 12dfdf1c authored by 沈翠玲's avatar 沈翠玲

优化界面

parent 85f4d2c0
......@@ -15,4 +15,3 @@ export const auditAudit = (params) => {
export const batchSave = (params) => {
return request.get('/TrackRecord/batchSave', params);
};
......@@ -83,4 +83,4 @@ export const saveTrackRecord = (data) => {
// 案件跟踪记录列表
export const getTrackRecord = (params) => {
return request.get('/TrackRecord/page', params);
};
\ No newline at end of file
};
......@@ -79,7 +79,7 @@
},
collapsedRows: {
type: Number,
default: 1,
default: 0.8,
},
data: {
type: Array,
......
......@@ -16,18 +16,24 @@
>
<el-form-item>
<template #label>
<el-space :size="4">
<span>{{ `${item.search?.label ?? item.title}` }}</span>
<el-tooltip
v-if="item.search?.tooltip"
effect="dark"
:content="item.search?.tooltip"
placement="top"
>
<i :class="'iconfont icon-yiwen'"></i>
</el-tooltip>
</el-space>
<span>&nbsp;:</span>
<div
:style="{
width: item.search.labelWidth ? `${item.search.labelWidth}px` : auto,
'text-align': 'right',
}"
>
<el-space :size="4">
<span>{{ `${item.search?.label ?? item.title}` }}</span>
<el-tooltip
v-if="item.search?.tooltip"
effect="dark"
:content="item.search?.tooltip"
placement="top"
>
<i :class="'iconfont icon-yiwen'"></i>
</el-tooltip>
</el-space>
</div>
</template>
<SearchFormItem :column="item" :search-param="searchParam" />
</el-form-item>
......
......@@ -37,8 +37,8 @@
};
const openModal = (tenants) => {
showModal.value = true
tenantList.value = tenants
showModal.value = true;
tenantList.value = tenants;
};
defineExpose({
openModal,
......
......@@ -7,24 +7,33 @@
</el-badge>
</template>
<!-- <el-tabs v-model="activeName"> -->
<!-- <el-tab-pane label="通知(5)" name="first"> -->
<div class="message-list">
<div class="message-item" v-for="(item, index) in msgList" :key="index" @click="clickMessage(item)">
<img :src="item.serviceType ==='tip' ? msg02 : msg01" alt="" class="message-icon" />
<div class="message-content">
<span class="message-title" :class="{' text-gray-400' : item.messageReads && item.messageReads.length}">{{item.title}}</span>
<span class="message-date">{{timeago(item.sendTime)}}</span>
</div>
</div>
<!-- <div class="message-item">
<!-- <el-tab-pane label="通知(5)" name="first"> -->
<div class="message-list">
<div
class="message-item"
v-for="(item, index) in msgList"
:key="index"
@click="clickMessage(item)"
>
<img :src="item.serviceType === 'tip' ? msg02 : msg01" alt="" class="message-icon" />
<div class="message-content">
<span
class="message-title"
:class="{ ' text-gray-400': item.messageReads && item.messageReads.length }"
>{{ item.title }}</span
>
<span class="message-date">{{ timeago(item.sendTime) }}</span>
</div>
</div>
<!-- <div class="message-item">
<img src="@/assets/images/msg02.png" alt="" class="message-icon" />
<div class="message-content">
<span class="message-title">一键三连 Geeker-Admin 💙</span>
<span class="message-date">一小时前</span>
</div>
</div> -->
</div>
<!-- </el-tab-pane>
</div>
<!-- </el-tab-pane>
<el-tab-pane label="消息(0)" name="second">
<div class="message-empty">
<img src="@/assets/images/notData.png" alt="notData" />
......@@ -39,20 +48,15 @@
</el-tab-pane>
</el-tabs> -->
</el-popover>
<el-popover
:visible="visible"
placement="bottom"
title="收到1条新消息"
:width="200"
>
<el-popover :visible="visible" placement="bottom" title="收到1条新消息" :width="200">
<template #reference>
<el-badge class="item">
<el-badge class="item">
<i :class="'iconfont icon-xiaoxi'" class="toolBar-icon" style="display: none"></i>
</el-badge>
</template>
<div>
{{socketStore.msg.title}}
</div>
<div>
{{ socketStore.msg.title }}
</div>
</el-popover>
</div>
</template>
......@@ -60,7 +64,7 @@
<script setup>
import { reactive, ref, watch } from 'vue';
import useSocketStore from '../../../../stores/modules/websocket';
import {useUserStore} from '../../../../stores/modules/user';
import { useUserStore } from '../../../../stores/modules/user';
import msg02 from '@/assets/images/msg02.png';
import msg01 from '@/assets/images/msg01.png';
import { computed, onMounted } from 'vue';
......@@ -71,100 +75,102 @@
const activeName = ref('first');
const msgList = ref([]);
const newMsgList = ref([]);
const visible = ref(false)
const visible = ref(false);
const socketStore = useSocketStore();
console.log('socketStore', socketStore)
console.log('socketStore', socketStore);
const query = () => {
pageMyMesage({
current: 1,
readStatus: 'read',
size: 100
size: 100,
}).then((res) => {
console.log('sadas', res)
if(res.success && res.result) {
msgList.value = res.result.content
console.log('sadas', res);
if (res.success && res.result) {
msgList.value = res.result.content;
}
});
}
watch(() => socketStore.msg, (newValue, oldValue) => {
if(newValue instanceof Array){
newMsgList.value.push(newValue)
visible.value = true
};
watch(
() => socketStore.msg,
(newValue, oldValue) => {
if (newValue instanceof Array) {
newMsgList.value.push(newValue);
visible.value = true;
}
query();
}
query()
});
);
import { getAppEnvConfig } from '@/utils/env';
const envs = getAppEnvConfig();
const { userInfo } = useUserStore();
if(!socketStore.ws && userInfo.id) {
if (!socketStore.ws && userInfo.id) {
let url = `ws://8.152.205.9:8080/websocket/${userInfo.id}`;
console.log('url', url)
console.log('url', url);
socketStore.connection(url);
}
if (socketStore.ws){
if (socketStore.ws) {
socketStore.sendMsg({ aa: 44 });
}
const clickMsg = () => {
visible.value = false
newMsgList.value = []
}
visible.value = false;
newMsgList.value = [];
};
const clickMessage = (item) => {
readMessage({
msgId: item.id
}).then(res => {
msgId: item.id,
}).then((res) => {
router.push({
path: '/workplace/todo'
path: '/workplace/todo',
});
query()
})
}
const timeago = (time) => {
query();
});
};
const timeago = (time) => {
const data = new Date(time);
const dateTimeStamp = data.getTime()
const minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示
const dateTimeStamp = data.getTime();
const minute = 1000 * 60; //把分,时,天,周,半个月,一个月用毫秒表示
const hour = minute * 60;
const day = hour * 24;
const week = day * 7;
const month = day * 30;
const year = month * 12;
const now = new Date().getTime(); //获取当前时间毫秒
const diffValue = now - dateTimeStamp;//时间差
let result = "";
const now = new Date().getTime(); //获取当前时间毫秒
const diffValue = now - dateTimeStamp; //时间差
let result = '';
if (diffValue < 0) {
result = "" + "未来";
result = '' + '未来';
}
const minC = diffValue / minute; //计算时间差的分,时,天,周,月
const minC = diffValue / minute; //计算时间差的分,时,天,周,月
const hourC = diffValue / hour;
const dayC = diffValue / day;
const weekC = diffValue / week;
const monthC = diffValue / month;
const yearC = diffValue / year;
if (yearC >= 1) {
result = " " + parseInt(yearC) + "年前"
result = ' ' + parseInt(yearC) + '年前';
} else if (monthC >= 1 && monthC < 12) {
result = " " + parseInt(monthC) + "月前"
result = ' ' + parseInt(monthC) + '月前';
} else if (weekC >= 1 && weekC < 5 && dayC > 6 && monthC < 1) {
result = " " + parseInt(weekC) + "周前"
result = ' ' + parseInt(weekC) + '周前';
} else if (dayC >= 1 && dayC <= 6) {
result = " " + parseInt(dayC) + "天前"
result = ' ' + parseInt(dayC) + '天前';
} else if (hourC >= 1 && hourC <= 23) {
result = " " + parseInt(hourC) + "小时前"
result = ' ' + parseInt(hourC) + '小时前';
} else if (minC >= 1 && minC <= 59) {
result = " " + parseInt(minC) + "分钟前"
result = ' ' + parseInt(minC) + '分钟前';
} else if (diffValue >= 0 && diffValue <= minute) {
result = "刚刚"
result = '刚刚';
}
console.log(result)
return result
}
console.log(result);
return result;
};
onMounted(() => {
query();
});
</script>
<style scoped lang="scss">
......
......@@ -14,4 +14,4 @@ body,
}
.vxe-modal--container {
max-height: 100vh;
}
\ No newline at end of file
}
......@@ -76,7 +76,9 @@
type="datetime"
/>
<div>
<el-button size="small" disabled @click="changeLastTime('tomorrow')">明天</el-button>
<el-button size="small" disabled @click="changeLastTime('tomorrow')"
>明天</el-button
>
<el-button size="small" disabled @click="changeLastTime('tomorrowDay')"
>后天</el-button
>
......@@ -219,7 +221,9 @@
<template #footer>
<div style="flex: auto">
<el-button @click="showModal = false">取消</el-button>
<el-button type="primary" @click="submitForm" v-if="props.mode === 'handle'">确定</el-button>
<el-button type="primary" @click="submitForm" v-if="props.mode === 'handle'"
>确定</el-button
>
<template v-else>
<el-button type="primary" @click="submitForm('pass')">通过</el-button>
<el-button type="danger" @click="submitForm('rejected')">拒绝</el-button>
......@@ -250,7 +254,7 @@
const dialogImageUrl = ref('');
const dialogVisible = ref(false);
const props = defineProps({
mode: String
mode: String,
});
const emits = defineEmits(['success']);
const tabObj = [
......@@ -448,17 +452,37 @@
const openModal = (info) => {
showModal.value = true;
currentInfo.value = info;
form.trackTime = info.trackTime
form.remark = info.remark
form.phoneResultStatus = info.phoneResultStatus
resuleObj.childrenlabel = info.followStatus
form.nextTime = info.nextTime
form.notes = info.notes ? info.notes.map(v => ({name: v.slice(v.lastIndexOf('/') + 1, v.length), url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + v})) : []
form.voices = info.voices ? info.voices.map(v => ({name: v.slice(v.lastIndexOf('/') + 1, v.length), url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + v})) : []
form.images = info.images ? info.images.map(v => ({name: v.slice(v.lastIndexOf('/') + 1, v.length), url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + v})) : []
form.others = info.others ? info.others.map(v => ({name: v.slice(v.lastIndexOf('/') + 1, v.length), url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + v})) : []
form.trackTime = info.trackTime;
form.remark = info.remark;
form.phoneResultStatus = info.phoneResultStatus;
resuleObj.childrenlabel = info.followStatus;
form.nextTime = info.nextTime;
form.notes = info.notes
? info.notes.map((v) => ({
name: v.slice(v.lastIndexOf('/') + 1, v.length),
url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + v,
}))
: [];
form.voices = info.voices
? info.voices.map((v) => ({
name: v.slice(v.lastIndexOf('/') + 1, v.length),
url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + v,
}))
: [];
form.images = info.images
? info.images.map((v) => ({
name: v.slice(v.lastIndexOf('/') + 1, v.length),
url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + v,
}))
: [];
form.others = info.others
? info.others.map((v) => ({
name: v.slice(v.lastIndexOf('/') + 1, v.length),
url: envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + v,
}))
: [];
tabledata.value = info.loans;
console.log('formform', form)
console.log('formform', form);
};
const submitForm = (type) => {
saveTrackRecord({
......
<template>
<div class="table-box">
<div>
<ProTable :config="config" ref="caseLRef" :api="getTrackRecord" :paramCallback="paramCallback">
<ProTable
:config="config"
ref="caseLRef"
:api="getTrackRecord"
:paramCallback="paramCallback"
>
<template #table_top>
<div>
<el-tabs
v-model="activeName"
type="card"
class="demo-tabs"
@tab-click="handleClick"
>
<el-tab-pane :label="item.label" :name="item.value" v-for="(item, index) in auditStatusOpt" :key="index"></el-tab-pane>
<el-tabs v-model="activeName" type="card" class="demo-tabs" @tab-click="handleClick">
<el-tab-pane
:label="item.label"
:name="item.value"
v-for="(item, index) in auditStatusOpt"
:key="index"
></el-tab-pane>
</el-tabs>
</div>
</template>
......@@ -35,15 +40,11 @@
import { inject } from 'vue';
import { computed } from 'vue';
import callDrawer from './components/callDrawer.vue';
import { ElMessageBox, ElMessage,ElButton } from 'element-plus';
import { ElMessageBox, ElMessage, ElButton } from 'element-plus';
import { onMounted } from 'vue';
import { getAppEnvConfig } from '@/utils/env';
import {
getTrackRecord
} from '@/api/property';
import {
batchSave
} from '@/api/audit';
import { getTrackRecord } from '@/api/property';
import { batchSave } from '@/api/audit';
const envs = getAppEnvConfig();
import { reactive, ref } from 'vue';
const downloadfile = inject('download');
......@@ -93,13 +94,13 @@
{ label: '未稽核', value: 'un_audit' },
{ label: '稽核中', value: 'audit' },
{ label: '已拒绝', value: 'rejected' },
{ label: '已完成', value: 'complete' }
{ label: '已完成', value: 'complete' },
];
const activeName = ref('un_audit')
const callMode = ref('')
const activeName = ref('un_audit');
const callMode = ref('');
const paramCallback = (param) => {
const obj = JSON.parse(JSON.stringify(param));
obj['auditStatus'] = activeName.value
obj['auditStatus'] = activeName.value;
if (obj['trackTime']) {
if (obj['trackTime'][0]) obj['trackTimeBegin'] = obj['trackTime'][0];
if (obj['trackTime'][1]) obj['trackTimeEnd'] = obj['trackTime'][1];
......@@ -117,14 +118,14 @@
return obj;
};
const callTelephone = (row, type) => {
callMode.value = type
callMode.value = type;
callDrawerRef.value.openModal(JSON.parse(JSON.stringify(row)));
};
const handleClick = () =>{
const handleClick = () => {
setTimeout(() => {
query()
query();
}, 300);
}
};
const config = computed(() => {
return {
columns: [
......@@ -134,14 +135,10 @@
field: 'caseId',
title: '案件ID',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
slots: {
default: ({ row }) => {
return (
<>
{row.loans.map(v => v.caseId).join(',')}
</>
);
return <>{row.loans.map((v) => v.caseId).join(',')}</>;
},
},
},
......@@ -151,7 +148,8 @@
width: 100,
search: {
el: 'date-picker',
props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' }
props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' },
labelWidth: 85,
},
},
{
......@@ -161,26 +159,44 @@
search: {
el: 'date-picker',
props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' },
labelWidth: 85,
},
},
{
field: 'guarantor.name',
title: '联系人姓名',
width: 110,
search: { el: 'input', props: { clearable: true }, key: 'guarantorName' },
search: { el: 'input', props: { clearable: true }, key: 'guarantorName', labelWidth: 85 },
},
{
field: 'guarantor.phone',
title: '联系人号码',
width: 110,
search: { el: 'input', props: { clearable: true }, key: 'guarantorPhone' },
search: {
el: 'input',
props: { clearable: true },
key: 'guarantorPhone',
labelWidth: 85,
},
labelWidth: 85,
},
{
field: 'followStatus',
title: '拨打跟进结果',
width: 120,
enum: followStatusOpt,
search: { el: 'select', props: { filterable: true, multiple: true}, span: 1, defaultValue: ['progress', 'pass_on', 'no_pass', 'Claims_unrelated_to_creditors', 'Claiming_not_to_be_myself'] },
search: {
el: 'select',
props: { filterable: true, multiple: true, 'collapse-tags': true },
labelWidth: 85,
defaultValue: [
'progress',
'pass_on',
'no_pass',
'Claims_unrelated_to_creditors',
'Claiming_not_to_be_myself',
],
},
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
......@@ -199,7 +215,7 @@
title: '拨打处置状态',
width: 120,
enum: phoneResultStatusOpt,
search: { el: 'select', props: { filterable: true }, span: 1 },
search: { el: 'select', props: { filterable: true }, labelWidth: 85 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
......@@ -233,7 +249,7 @@
field: 'remark',
title: '备注',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'voices',
......@@ -313,7 +329,7 @@
field: 'code',
title: '操作',
width: 80,
visible: (activeName.value === 'audit' || activeName.value === 'complete') ? true : false,
visible: activeName.value === 'audit' || activeName.value === 'complete' ? true : false,
slots: {
default: ({ row, rowIndex }) => {
if (activeName.value === 'audit') {
......@@ -323,7 +339,7 @@
处理
</ElButton>
</>
)
);
} else {
return (
<>
......@@ -331,14 +347,14 @@
审核
</ElButton>
</>
)
);
}
}
}
},
},
},
],
onCheckboxChange: onCheckboxChange
}
onCheckboxChange: onCheckboxChange,
};
});
const preview = (item, type) => {
const list = [];
......@@ -354,14 +370,14 @@
};
const audit = async (row) => {
const list = caseLRef.value.element.getCheckboxRecords();
if (!list.length) return
if (!list.length) return;
await ElMessageBox.confirm('是否确认发起稽核勾选项?', '提示', {
confirmButtonText: '确认',
cancelButtonText: '取消',
type: 'warning',
});
const ids = list.map((v) => v.id).join(',');
await batchSave({ids: ids});
await batchSave({ ids: ids });
ElMessage({
type: 'success',
......
......@@ -107,14 +107,14 @@
const config = reactive({
columns: [
{ type: 'checkbox', title: '', width: 40 },
{ field: 'caseId', title: '案件ID', search: { el: 'input' }, width: 80 },
{ field: 'caseId', title: '案件ID', search: { el: 'input', labelWidth: 85 }, width: 80 },
{
field: 'arealist',
enum: citydata,
title: '所属区域',
width: 80,
fieldNames: { label: 'label', value: 'value' },
search: { el: 'cascader', props: { clearable: true } },
search: { el: 'cascader', props: { clearable: true }, labelWidth: 85 },
slots: {
default: ({ row }) => {
return (
......@@ -131,20 +131,20 @@
field: 'loanPlatform.name',
title: '借款机构',
width: 100,
search: { el: 'input', props: { clearable: true }, key: 'payOrg' },
search: { el: 'input', props: { clearable: true }, key: 'payOrg', labelWidth: 85 },
},
{
field: 'manageOrg.orgName',
title: '资管公司',
width: 100,
search: { el: 'input', props: { clearable: true }, key: 'manageOrg' },
search: { el: 'input', props: { clearable: true }, key: 'manageOrg', labelWidth: 85 },
},
{
field: 'distributeStatus',
title: '分配状态',
width: 80,
enum: distributeStatusOpt,
search: { el: 'select', props: { filterable: true }, span: 1 },
search: { el: 'select', props: { filterable: true }, labelWidth: 85 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
......@@ -162,7 +162,7 @@
field: 'tenant.name',
title: '调解中心',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'discount',
......@@ -173,50 +173,58 @@
field: 'cpe.name',
title: 'CPE',
width: 60,
search: { el: 'input', props: { clearable: true }, key: 'cpeName' },
search: { el: 'input', props: { clearable: true }, key: 'cpeName', labelWidth: 85 },
},
{
field: 'tenantTime',
title: '分配中心日期',
width: 100,
search: { el: 'date-picker', props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' } },
search: {
el: 'date-picker',
props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' },
labelWidth: 85,
},
},
{
field: 'commissionAmount',
title: '债权总额',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'cpeDate',
title: '分配CPE日期',
width: 100,
search: { el: 'date-picker', props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' } },
search: {
el: 'date-picker',
props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' },
labelWidth: 85,
},
},
{
field: 'borrower.name',
title: '借款人姓名',
width: 100,
search: { el: 'input', key: 'borrowerName', props: { clearable: true } },
search: { el: 'input', key: 'borrowerName', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'sumRepayAmount',
title: '已还总额',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'borrower.idCard',
title: '身份证',
width: 120,
search: { el: 'input', props: { clearable: true }, key: 'idCard' },
search: { el: 'input', props: { clearable: true }, key: 'idCard', labelWidth: 85 },
},
{
field: 'borrower.phone',
key: 'borrowerPhone',
title: '手机',
width: 100,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'principalBalance',
......
......@@ -433,26 +433,28 @@
currentInfo.value = info;
currentDetail.value = detail;
console.log('currentInfo', currentInfo.value, currentDetail.value);
form.sum = 0
form.phoneResultStatus = ''
form.remark = ''
form.nextTime = null
form.trackTime = dayjs().format('YYYY-MM-DD HH:mm:ss')
form.images = []
form.notes = []
form.others = []
form.voices = []
resuleObj.label = '本人可联'
resuleObj.childrenlabel = null
form.sum = 0;
form.phoneResultStatus = '';
form.remark = '';
form.nextTime = null;
form.trackTime = dayjs().format('YYYY-MM-DD HH:mm:ss');
form.images = [];
form.notes = [];
form.others = [];
form.voices = [];
resuleObj.label = '本人可联';
resuleObj.childrenlabel = null;
tabledata.value = caselist;
};
const submitForm = () => {
if (!form.phoneResultStatus) return ElMessage.warning({
message: '跟进状态必选'
});
if (!resuleObj.childrenlabel) return ElMessage.warning({
message: '跟进结果必选'
});
if (!form.phoneResultStatus)
return ElMessage.warning({
message: '跟进状态必选',
});
if (!resuleObj.childrenlabel)
return ElMessage.warning({
message: '跟进结果必选',
});
saveTrackRecord({
loans: tabledata.value,
guarantor: currentInfo.value,
......
......@@ -17,7 +17,7 @@
<el-button type="primary" @click="reduce">减免申请</el-button>
<el-button type="primary" @click="split">分期申请</el-button>
</div>
<div class="detail-steps" style="display:none;">
<div class="detail-steps" style="display: none">
<el-steps :active="activeStep">
<el-step
:title="item.title"
......@@ -230,7 +230,7 @@
getByStages,
listByBorrower,
getRepayRecords,
getGuarantors
getGuarantors,
} from '@/api/property';
import { Picture, Download } from '@element-plus/icons-vue';
import { saveAudit } from '@/api/audit';
......@@ -481,7 +481,7 @@
}
},
},
}
},
],
toolbarConfig: { enabled: false },
});
......@@ -768,12 +768,10 @@
const audit = (row) => {
saveAudit({
trackRecord: {
id: row.id
}
}).then(res => {
})
}
id: row.id,
},
}).then((res) => {});
};
const reduceConfig = reactive({
columns: [
{
......@@ -887,10 +885,10 @@
onBeforeMount(async () => {
const id = JSON.parse(route.query.id);
const { result } = await getCredit(id);
console.log('result', result)
console.log('result', result);
detail.value = result;
if (14) {
getGuarantorsList(14)
getGuarantorsList(14);
getTrackRecordList(14);
listByBorrower(14).then((res) => {
if (res.result && res.result) {
......
<template>
<div class="card content-box">
<div class="table-box">
<div class="table-inner">
<ProTable :config="config" ref="caseLRef" :api="getCreditPage">
<!-- <ProTable :config="config" ref="caseLRef" :data="data"> -->
......@@ -73,18 +73,18 @@
];
const config = reactive({
columns: [
{ field: 'caseId', title: '案件ID', search: { el: 'input' }, width: 80 },
{ field: 'caseId', title: '案件ID', search: { el: 'input', labelWidth: 85 }, width: 80 },
{
field: 'loanPlatform.name',
title: '借款机构',
width: 100,
search: { el: 'input', props: { clearable: true }, key: 'payOrg' },
search: { el: 'input', props: { clearable: true }, key: 'payOrg', labelWidth: 85 },
},
{
field: 'manageOrg.orgName',
title: '资管公司',
width: 100,
search: { el: 'input', props: { clearable: true }, key: 'manageOrg' },
search: { el: 'input', props: { clearable: true }, key: 'manageOrg', labelWidth: 85 },
},
{
field: 'borrower.name',
......@@ -94,6 +94,7 @@
el: 'input',
key: 'borrowerName',
props: { clearable: true },
labelWidth: 85,
},
},
{
......@@ -104,6 +105,7 @@
el: 'input',
props: { clearable: true },
key: 'borrowerIdCard',
labelWidth: 85,
},
},
{
......@@ -114,6 +116,7 @@
el: 'input',
props: { clearable: true },
key: 'borrowerPhone',
labelWidth: 85,
},
},
{
......@@ -125,63 +128,67 @@
field: 'commissionAmount',
title: '委案金额',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'sumRepayAmount',
title: '累计还款金额',
width: 110,
search: { el: 'input', props: { clearable: true } },
width: 100,
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'sumReductionAmount',
title: '累计减免金额',
width: 110,
search: { el: 'input', props: { clearable: true } },
width: 100,
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'remainingAmount',
title: '剩余待还金额',
width: 110,
search: { el: 'input', props: { clearable: true } },
width: 100,
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'cpe.username',
title: 'CPE',
width: 80,
search: { el: 'input', props: { clearable: true }, key: 'cpeName' },
search: { el: 'input', props: { clearable: true }, key: 'cpeName', labelWidth: 85 },
},
{
field: 'cpeDate',
title: '分配CPE日期',
width: 110,
search: { el: 'date-picker', props: { type: 'date', valueFormat: 'YYYY-MM-DD' } },
width: 100,
search: {
el: 'date-picker',
props: { type: 'date', valueFormat: 'YYYY-MM-DD' },
labelWidth: 85,
},
},
{
field: 'principalBalance',
title: '本金余额',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'debitInterest',
title: '欠息额',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'commission',
title: '手续费',
width: 80,
search: { el: 'input', props: { clearable: true } },
search: { el: 'input', props: { clearable: true }, labelWidth: 85 },
},
{
field: 'followStatus',
title: '跟进结果',
width: 80,
enum: followStatusOpt,
search: { el: 'select', props: { filterable: true }, span: 1 },
search: { el: 'select', props: { filterable: true }, labelWidth: 85 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
......@@ -200,7 +207,7 @@
title: '跟进状态',
width: 80,
enum: phoneResultStatusOpt,
search: { el: 'select', props: { filterable: true }, span: 1 },
search: { el: 'select', props: { filterable: true }, labelWidth: 85 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
......@@ -219,15 +226,13 @@
title: '案件状态',
width: 80,
enum: caseStatusOpt,
search: { el: 'select', props: { filterable: true }, span: 1 },
search: { el: 'select', props: { filterable: true }, labelWidth: 85 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.caseStatus
? caseStatusOpt.find((v) => v.value === row.caseStatus).label
: ''}
{row.caseStatus ? caseStatusOpt.find((v) => v.value === row.caseStatus).label : ''}
</>
);
},
......
......@@ -46,7 +46,7 @@
>
</div>
</div>
<div class="flex-1 importwrapper">
<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">
......@@ -136,18 +136,18 @@
{
field: 'code',
title: '导入编号',
search: { el: 'input', span: 1.5, props: { clearable: true } },
search: { el: 'input', props: { clearable: true } },
},
{
field: 'contractNo',
title: '委案合同',
search: { el: 'input', span: 1.5, props: { clearable: true } },
search: { el: 'input', props: { clearable: true } },
},
{
field: 'code',
title: '资产类型',
enum: options,
search: { el: 'select', props: { filterable: true }, span: 1.5 },
search: { el: 'select', props: { filterable: true } },
fieldNames: { label: 'genderLabel', value: 'genderValue' },
},
{
......@@ -205,7 +205,6 @@
search: {
el: 'date-picker',
props: { type: 'daterange', valueFormat: 'YYYY-MM-DD' },
span: 1.5,
},
},
],
......@@ -290,10 +289,10 @@
uploadRef.value.clearFiles();
form.path = '';
query();
form['path'] = ''
form['code'] = ''
form['contractNo'] = ''
form['discount'] = ''
form['path'] = '';
form['code'] = '';
form['contractNo'] = '';
form['discount'] = '';
});
};
onMounted(() => {
......
......@@ -28,17 +28,15 @@
{ type: 'checkbox', width: 50 },
{ field: 'name', title: '调解中心名称', search: { el: 'input' } },
{ field: 'code', title: '调解中心编码', search: { el: 'input' } },
{ field: 'adminUser', title: '负责人'},
{ field: 'phone', title: '负责人手机'},
{ field: 'adminUser', title: '负责人' },
{ field: 'phone', title: '负责人手机' },
{
field: '',
title: '成员数量',
width: 80,
slots: {
default: ({ row }) => {
return (
<div>{row.users.length}</div>
);
return <div>{row.users.length}</div>;
},
},
},
......
<template>
<div class="table-box">
<ProTable ref="proTable" :config="config" :api="pageMyMesage">
</ProTable>
<ProTable ref="proTable" :config="config" :api="pageMyMesage"> </ProTable>
</div>
</template>
......@@ -13,22 +12,22 @@
import { pageMyMesage } from '@/api/message';
const statusOpt = [
{ label: '正常', value: 'normal' },
{ label: '已撤销', value: 'cancel' }
{ label: '已撤销', value: 'cancel' },
];
const messageTypeOpt = [
{ label: '通知', value: 'system' },
{ label: '任务消息', value: 'task' }
]
{ label: '任务消息', value: 'task' },
];
const sendTypeOpt = [
{ label: '群发', value: 'all' },
{ label: '指定用户发送', value: 'user' },
{ label: '指定角色发送', value: 'role' },
{ label: '指定调节中心发送', value: 'tentant' },
]
];
const serviceTypeOpt = [
{ label: '流程', value: 'bpm' },
{ label: '提示', value: 'tip' }
]
{ label: '提示', value: 'tip' },
];
const proTable = ref();
const socketStore = useSocketStore();
const config = reactive({
......@@ -44,7 +43,7 @@
field: 'sender.username',
title: '发送人名称',
width: 160,
search: { el: 'input', props: { clearable: true },key: 'senderName' },
search: { el: 'input', props: { clearable: true }, key: 'senderName' },
},
{
field: 'status',
......@@ -77,14 +76,14 @@
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.messageType
? messageTypeOpt.find((v) => v.value === row.messageType).label
: ''}
</>
);
},
return (
<>
{row.messageType
? messageTypeOpt.find((v) => v.value === row.messageType).label
: ''}
</>
);
},
},
},
{
......@@ -96,14 +95,10 @@
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.sendType
? sendTypeOpt.find((v) => v.value === row.sendType).label
: ''}
</>
);
},
return (
<>{row.sendType ? sendTypeOpt.find((v) => v.value === row.sendType).label : ''}</>
);
},
},
},
{
......@@ -115,22 +110,25 @@
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
return (
<>
{row.serviceType
? serviceTypeOpt.find((v) => v.value === row.serviceType).label
: ''}
</>
);
},
return (
<>
{row.serviceType
? serviceTypeOpt.find((v) => v.value === row.serviceType).label
: ''}
</>
);
},
},
}
},
],
});
const query = () => proTable.value?.search();
watch(() => socketStore.msg, (newValue, oldValue) => {
query()
});
watch(
() => socketStore.msg,
(newValue, oldValue) => {
query();
}
);
onMounted(() => {
query();
});
......
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