Commit 809357e7 authored by 沈翠玲's avatar 沈翠玲

页面优化

parent 7e8f80c0
<?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="1740191286370" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1538" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M815.104 69.632q27.648 25.6 44.032 42.496t25.088 28.672 10.752 19.968 2.048 14.336l0 16.384-151.552 0q-10.24 0-17.92-7.68t-12.8-17.92-7.68-20.992-2.56-16.896l0-126.976 3.072 0q8.192 0 16.896 2.56t19.968 9.728 28.16 20.48 42.496 35.84zM640 129.024q0 20.48 6.144 42.496t19.456 40.96 33.792 31.232 48.128 12.288l149.504 0 0 577.536q0 29.696-11.776 53.248t-31.232 39.936-43.008 25.6-46.08 9.216l-503.808 0q-19.456 0-42.496-11.264t-43.008-29.696-33.28-41.984-13.312-49.152l0-696.32q0-21.504 9.728-44.544t26.624-42.496 38.4-32.256 45.056-12.8l391.168 0 0 128zM704.512 768q26.624 0 45.056-18.944t18.432-45.568-18.432-45.056-45.056-18.432l-384 0q-26.624 0-45.056 18.432t-18.432 45.056 18.432 45.568 45.056 18.944l384 0zM768 448.512q0-26.624-18.432-45.568t-45.056-18.944l-384 0q-26.624 0-45.056 18.944t-18.432 45.568 18.432 45.056 45.056 18.432l384 0q26.624 0 45.056-18.432t18.432-45.056z" p-id="1539"></path></svg>
\ No newline at end of file
<?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="1740041986415" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="40801" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M522.666667 761.6c27.733333 0 41.6-11.733333 41.6-46.933333v-48c0-3.2 3.2-5.333333 6.4-5.333334h64c28.8 0 43.733333-23.466667 43.733333-39.466666s-14.933333-39.466667-43.733333-39.466667h-64c-3.2 0-6.4-2.133333-6.4-5.333333v-26.666667c0-3.2 3.2-5.333333 6.4-5.333333h64c28.8 0 43.733333-23.466667 43.733333-39.466667s-14.933333-39.466667-43.733333-39.466667h-28.8c-5.333333 0-7.466667-4.266667-5.333334-8.533333l53.333334-68.266667c5.333333-7.466667 9.6-13.866667 12.8-19.2 2.133333-3.2 3.2-6.4 3.2-10.666666 1.066667-9.6-2.133333-20.266667-11.733334-26.666667-6.4-4.266667-13.866667-6.4-23.466666-6.4-7.466667 0-13.866667 1.066667-19.2 3.2-5.333333 2.133333-9.6 5.333333-12.8 9.6-3.2 3.2-7.466667 8.533333-10.666667 13.866667-4.266667 5.333333-7.466667 10.666667-10.666667 14.933333L526.933333 437.333333c-2.133333 3.2-8.533333 3.2-10.666666 0l-64-74.666666c-8.533333-11.733333-16-20.266667-22.4-25.6-6.4-5.333333-14.933333-8.533333-25.6-8.533334s-19.2 3.2-25.6 8.533334c-6.4 5.333333-9.6 12.8-9.6 21.333333 0 5.333333 1.066667 9.6 3.2 13.866667 2.133333 4.266667 7.466667 10.666667 14.933333 20.266666l56.533333 66.133334c3.2 3.2 0 8.533333-5.333333 8.533333h-27.733333c-29.866667 0-44.8 23.466667-44.8 39.466667s14.933333 39.466667 44.8 39.466666h64c3.2 0 6.4 2.133333 6.4 5.333334v26.666666c0 3.2-3.2 5.333333-6.4 5.333334h-64c-29.866667 0-44.8 23.466667-44.8 39.466666s14.933333 39.466667 44.8 39.466667h64c3.2 0 6.4 2.133333 6.4 5.333333V714.666667c-1.066667 35.2 13.866667 46.933333 41.6 46.933333z" fill="#234ca3" p-id="40802"></path><path d="M512 86.4c-70.4 0-138.666667 17.066667-200.533333 50.133333L289.066667 96c-8.533333-17.066667-33.066667-14.933333-39.466667 3.2l-65.066667 132.266667c-3.2 9.6 2.133333 21.333333 12.8 24.533333l149.333334 24.533333c18.133333 6.4 34.133333-12.8 25.6-29.866666L352 212.266667c49.066667-26.666667 103.466667-40.533333 160-40.533334 187.733333 0 341.333333 153.6 341.333333 341.333334s-153.6 341.333333-341.333333 341.333333-341.333333-153.6-341.333333-341.333333c0-21.333333 2.133333-42.666667 5.333333-62.933334 4.266667-23.466667-10.666667-45.866667-34.133333-50.133333-23.466667-4.266667-45.866667 10.666667-50.133334 34.133333-4.266667 25.6-6.4 52.266667-6.4 78.933334 0 235.733333 190.933333 426.666667 426.666667 426.666666s426.666667-190.933333 426.666667-426.666666-190.933333-426.666667-426.666667-426.666667z" fill="#234ca3" p-id="40803"></path></svg>
\ No newline at end of file
......@@ -186,7 +186,6 @@
if (props.config.onCheckboxAll) {
props.config.onCheckboxAll({checked: false, records: []})
}
emit('search', totalParam.value);
};
const _reset = () => {
......
......@@ -140,10 +140,12 @@
<script setup name="systemLog" lang="jsx">
import splitDrawer from './components/splitDrawer.vue';
import { computed } from 'vue';
import { inject } from 'vue';
import { reactive, ref } from 'vue';
import { getByStagesPage, byStagesflowStatusByIds } from '@/api/property';
import { onMounted } from 'vue';
import { ElMessageBox, ElMessage, ElButton } from 'element-plus';
import { Download } from '@element-plus/icons-vue';
import { getTenantPage } from '@/api/tenant';
import { useDict } from '@/hooks/useDict';
import { getAppEnvConfig } from '@/utils/env';
......@@ -151,6 +153,7 @@
const srcList = ref([]);
const RefImage = ref(false);
const { PhoneResultStatus, ReduceType, FlowStatus, FollowStatus, CaseStatus } = useDict("PhoneResultStatus","ReduceType", "FlowStatus", "FollowStatus", "CaseStatus");
const downloadfile = inject('download');
const ProTableRef = ref();
const showModal = ref(false);
......@@ -159,6 +162,10 @@
console.log('row', row);
selectdList.value = row.records;
};
const download = (item) => {
const name = item.slice(item.lastIndexOf('/') + 1, item.length);
downloadfile('/sys/static/' + item, {}, name);
};
const splitDrawerRef = ref();
const onCheckboxAll = (flag) => {
if (flag.checked) {
......@@ -372,11 +379,11 @@
if (row.images && row.images.length > 0) {
return (
<>
<div className="flex justify-center">
<ElButton onClick={() => preview(row, 'images')} link type="primary">
查看
</ElButton>
</div>
{row.images.map((item, index) => (
<el-icon>
<Download onClick={() => download(item)} />
</el-icon>
))}
</>
);
}
......
......@@ -118,14 +118,16 @@
import { reactive, ref } from 'vue';
import { getReducePage, flowStatusByIds } from '@/api/property';
import { onMounted } from 'vue';
import { inject } from 'vue';
import { ElMessageBox, ElMessage, ElButton } from 'element-plus';
import { getTenantPage } from '@/api/tenant';
import { useDict } from '@/hooks/useDict';
import { Download } from '@element-plus/icons-vue';
import { getAppEnvConfig } from '@/utils/env';
const envs = getAppEnvConfig();
const { PhoneResultStatus, ReduceType, FlowStatus, FollowStatus, CaseStatus } = useDict("PhoneResultStatus","ReduceType", "FlowStatus", "FollowStatus", "CaseStatus");
const downloadfile = inject('download');
const ProTableRef = ref();
const showModal = ref(false);
const srcList = ref([]);
......@@ -135,6 +137,10 @@
console.log('row', row);
selectdList.value = row.records;
};
const download = (item) => {
const name = item.slice(item.lastIndexOf('/') + 1, item.length);
downloadfile('/sys/static/' + item, {}, name);
};
const onCheckboxAll = (flag) => {
if (flag.checked) {
selectdList.value = flag.records;
......@@ -273,11 +279,11 @@
if (row.images && row.images.length > 0) {
return (
<>
<div className="flex justify-center">
<ElButton onClick={() => preview(row, 'images')} link type="primary">
查看
</ElButton>
</div>
{row.images.map((item, index) => (
<el-icon>
<Download onClick={() => download(item)} />
</el-icon>
))}
</>
);
}
......
......@@ -23,6 +23,7 @@
ref="caseLRef"
:api="getTrackRecord"
:selectdList="selectdList"
:dataCallback="dataCallback"
:paramCallback="paramCallback"
>
<!-- 表格 header 按钮 -->
......@@ -144,6 +145,9 @@
// obj['others'] = 'Y'
return obj;
};
const dataCallback = (data) => {
console.log('data', data)
}
const callTelephone = (row, type) => {
callMode.value = type;
callDrawerRef.value.openModal(JSON.parse(JSON.stringify(row)));
......@@ -483,7 +487,10 @@
});
query();
};
const query = () => caseLRef.value?.search();
const query = () => {
caseLRef.value?.search()
tabs.value
};
onMounted(() => {
query();
......
......@@ -381,7 +381,7 @@
showOverflow: 'tooltip',
width: 80,
enum: CaseStatus,
// search: { el: 'select', props: { filterable: true }, labelWidth: 90 },
search: { el: 'select', props: { filterable: true }, labelWidth: 105 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
......
......@@ -2,6 +2,46 @@
<div class="table-box">
<div>
<ProTable :config="config" ref="caseLRef" :api="getLoanpage" :paramCallback="paramCallback" :selectdList="selectdList">
<template #table_top>
<div class="style-lable" style="width: 100%">
<div class="item_warp" style="width: 19%">
<div class="img_warp">
<img src="@/assets/images/caselist.svg" />
</div>
<div class="title_warp">
<div class="items">在派案件数量</div>
<div class="item items1">{{statisis.caseNum}}</div>
</div>
</div>
<div class="item_warp" style="width: 19%">
<div class="img_warp">
<img src="@/assets/images/userlist.svg" />
</div>
<div class="title_warp">
<div class="items">在派案人人数</div>
<div class="item items1">{{statisis.cpeNum}}</div>
</div>
</div>
<div class="item_warp" style="width: 19%">
<div class="img_warp">
<img src="@/assets/images/money.svg" />
</div>
<div class="title_warp">
<div class="items">在派委案金额</div>
<div class="item items1">{{statisis.amount}}</div>
</div>
</div>
<div class="item_warp" style="width: 19%">
<div class="img_warp">
<img src="@/assets/images/tocrash.svg" />
</div>
<div class="title_warp">
<div class="items">待还金额</div>
<div class="item items1">{{statisis.amount}}</div>
</div>
</div>
</div>
</template>
<!-- 表格 header 按钮 -->
<template #left_buttons>
<div class="flex rounded w-full h-11 items-center pl-2 btn-grp mb-1">
......@@ -27,12 +67,47 @@
resize
v-model="showModal"
title="提示"
height="242"
width="450"
height="342"
width="560"
show-footer
esc-closable
>
<div class="w-full px-3 h-full overflow-auto flex-col flex mytable">
<div class="top">
<div class="number-box">
<div class="number-left">
<div class="icon-wrapper">
<img src="@/assets/images/userlist.svg" />
</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">
<img src="@/assets/images/caselist.svg" />
</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">
<img src="@/assets/images/money.svg" />
</div>
</div>
<div class="number-right">
<p>预计收回金额</p>
<p>¥{{ statisis.unAmount }}</p>
</div>
</div>
</div>
<div class="w-full px-3 mt-3 overflow-auto flex-col flex mytable">
⚠️回收处理后可重新分派<br />
回收:只回收未留案的案件<br />
强制回收:所有案件都会回收,留案案件会被强制回收<br />
......@@ -47,7 +122,7 @@
</template>
<script setup name="case-allocation" lang="jsx">
import { getLoantotal, getLoanpage, back, fullBack } from '@/api/allcation';
import { getLoantotal, getLoanpage, getLoanDistribute, back, fullBack } from '@/api/allcation';
import { reactive, ref } from 'vue';
import { ElMessageBox, ElMessage } from 'element-plus';
import { VxeTextEllipsis, VxeTooltip } from 'vxe-pc-ui';
......@@ -80,6 +155,7 @@
selectdList.value = row.records;
};
const statisis = ref({});
const statisis1 = ref({});
const getStatisis = (params) => {
getLoantotal(params).then((res) => {
if (res.success) {
......@@ -87,6 +163,19 @@
}
});
};
const getStatisis1 = (params, id) => {
const p = JSON.parse(JSON.stringify(params));
if (id) {
p['tenantId'] = id;
}
delete p['current'];
delete p['size'];
getLoanDistribute(p).then((res) => {
if (res.success) {
statisis1.value = res.result;
}
});
};
const backCase = async () => {
if (dataValue.value === '对选中项操作' && (!selectdList.value || !selectdList.value.length)) {
return ElMessage.warning({
......@@ -94,6 +183,13 @@
plain: true,
});
}
let p = {}
if (dataValue.value === '对选中项操作') {
p['loanIds'] = selectdList.value.map((v) => v.id);
} else {
p = curParam.value;
}
getStatisis1(p);
showModal.value = true;
};
const submitForm = async (type) => {
......@@ -144,7 +240,7 @@
delete obj['tenantTime'];
}
curParam.value = obj;
// getStatisis(obj);
getStatisis(obj);
return obj;
};
const onCheckboxAll = (flag) => {
......@@ -372,7 +468,7 @@
showOverflow: 'tooltip',
width: 80,
enum: CaseStatus,
// search: { el: 'select', props: { filterable: true }, labelWidth: 90 },
search: { el: 'select', props: { filterable: true }, labelWidth: 105 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
......@@ -539,3 +635,33 @@
query();
});
</script>
<style lang="scss" scoped>
.top {
display: flex;
.number-box {
font-size: 15px;
width: 235px;
padding: 5px 0 5px 15px;
border: 1px solid rgba(0, 0, 0, 0.1);
height: 50px;
display: flex;
margin-right: 10px;
margin-top: 10px;
}
.icon-wrapper {
width: 40px;
height: 40px;
text-align: center;
line-height: 40px;
color: #bbc3ca;
margin-right: 10px;
font-size: 37px;
}
}
.number-right {
p:nth-child(1) {
color: #aaa;
font-size: 13px;
}
}
</style>
\ No newline at end of file
......@@ -60,7 +60,7 @@
>
<el-row>
<el-col :span="24">
<el-form-item class="w-full" label="跟进时间:" prop="name">
<el-form-item class="w-full" label="跟进时间:" prop="trackTime">
<el-date-picker
v-model="form.trackTime"
class="w-full"
......@@ -97,6 +97,7 @@
class="w-full"
style="display: block"
label="跟进结果:"
required
prop="name"
label-position="top"
>
......@@ -121,7 +122,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item class="w-full" style="display: block" label="跟进状态:" prop="code">
<el-form-item class="w-full" style="display: block" label="跟进状态:" prop="code" required>
<el-button
size="small"
style="margin-left: 0"
......@@ -136,7 +137,7 @@
</el-form-item>
</el-col>
<el-col :span="24">
<el-form-item class="w-full" label="跟进备注:" prop="code" style="display: block">
<el-form-item class="w-full" label="跟进备注:" prop="remark" style="display: block">
<el-input
v-model="form.remark"
class="w-full"
......@@ -261,6 +262,10 @@
const props = defineProps({
mergerCase: String,
});
const rules = ref({
trackTime: { required: true, message: '请选择跟进时间', trigger: 'blur' },
remark: { required: true, message: '请输入跟进备注', trigger: 'blur' }
});
const tabObj = [
{
label: '本人可联',
......
......@@ -51,6 +51,7 @@
:action="url"
:headers="{timeout:180000}"
list-type="picture-card"
v-model:file-list="form.images"
ref="mypictureRef"
class="mypicture"
:on-preview="handlePictureCardPreview"
......@@ -61,6 +62,32 @@
<el-icon><Plus /></el-icon>
<div>附件</div>
</div>
<template #file="{ file }">
<img
class="el-upload-list__item-thumbnail"
:src="updataIf(file) ? getImageUrl() :file.url"
alt=""
>
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-delete"
>
<el-icon @click="handleRemove1(file)">
<Delete />
</el-icon>
</span>
<span
class="el-upload-list__item-preview"
>
<el-icon v-if="updataIf(file)" @click="download(file.response.message)">
<Download />
</el-icon>
<el-icon v-else @click="handlePictureCardPreview(file)">
<ZoomIn />
</el-icon>
</span>
</span>
</template>
</el-upload>
</el-form-item>
</el-col>
......@@ -99,11 +126,13 @@
import { reactive, ref } from 'vue';
import { saveReduce } from '@/api/property';
import { ElMessage } from 'element-plus';
import { Download, ZoomIn } from '@element-plus/icons-vue';
import { onMounted } from 'vue';
import { watch } from 'vue';
import Decimal from 'decimal.js';
import { getAppEnvConfig } from '@/utils/env';
import { useDict } from '@/hooks/useDict';
import { inject } from 'vue';
const envs = getAppEnvConfig();
const { PhoneResultStatus, ReduceType, FlowStatus, FollowStatus, AuditStatus, CaseStatus } = useDict("PhoneResultStatus","ReduceType", "FlowStatus", "FollowStatus","AuditStatus", "CaseStatus");
const emits = defineEmits(['success']);
......@@ -114,6 +143,7 @@
const mypictureRef = ref();
const dialogImageUrl = ref('');
const dialogVisible = ref(false);
const downloadfile = inject('download');
const form = reactive({
totalReduceAmount: 0,
totalNumber: '',
......@@ -144,16 +174,40 @@
dialogImageUrl.value = uploadFile.url;
dialogVisible.value = true;
};
const handleRemove1 = (uploadFile, uploadFiles) => {
// 判断文件类型,图片预览,文件下载
const updataIf = (e) => {
console.log('eeee', e)
if (e.fileName) {
if (e.fileName.split('.')[1] === 'png' || e.fileName.split('.')[1] === 'jpeg' || e.fileName.split('.')[1] === 'jpg') {
return false
} else {
return true
}
} else {
if (e.name.split('.')[1] === 'png' || e.name.split('.')[1] === 'jpeg' || e.name.split('.')[1] === 'jpg') {
return false
} else {
return true
}
}
}
const handleRemove1 = (uploadFile) => {
const index = form.images.findIndex((v) => v.name === uploadFile.name);
form.images.splice(index, 1);
};
const download = (item) => {
const name = item.slice(item.lastIndexOf('/') + 1, item.length);
downloadfile('/sys/static/' + item, {}, name);
};
const handleFileSuccess1 = (response, file, fileList) => {
form.images.push({
url: response.message,
name: file.name,
});
if (file.uid) {
const item = form.images.find((v) => v.uid === file.uid);
item.url = envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + response.message;
}
};
const getImageUrl = () => {
return new URL(`@/assets/images/file.svg`, import.meta.url).href;
}
const onCheckboxAll = (flag) => {
if (flag.checked) {
selectdList.value = flag.records;
......@@ -299,12 +353,16 @@
list.forEach((item) => {
delete item.payAmount;
});
let images = form.images.map((v) => v.url)
images = images.map((v) => {
return v.replace(envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/', '');
});
const params = {
borrower: currentDetail.value.borrower,
askForStatus: 'Pending',
flowStatus: 'pending',
...form,
images: form.images.map((v) => v.url)?.length > 0 ? form.images.map((v) => v.url) : null,
images: images.length > 0 ? images : null,
reduceRecords: list,
};
console.log('sadas', params);
......
......@@ -99,6 +99,7 @@
:action="url"
:headers="{timeout:180000}"
list-type="picture-card"
v-model:file-list="form.images"
ref="mypictureRef"
class="mypicture"
:on-preview="handlePictureCardPreview"
......@@ -109,6 +110,32 @@
<el-icon><Plus /></el-icon>
<div>附件</div>
</div>
<template #file="{ file }">
<img
class="el-upload-list__item-thumbnail"
:src="updataIf(file) ? getImageUrl() :file.url"
alt=""
>
<span class="el-upload-list__item-actions">
<span
class="el-upload-list__item-delete"
>
<el-icon @click="handleRemove1(file)">
<Delete />
</el-icon>
</span>
<span
class="el-upload-list__item-preview"
>
<el-icon v-if="updataIf(file)" @click="download(file.response.message)">
<Download />
</el-icon>
<el-icon v-else @click="handlePictureCardPreview(file)">
<ZoomIn />
</el-icon>
</span>
</span>
</template>
</el-upload>
</el-form-item>
</el-col>
......@@ -155,8 +182,10 @@
import { savebyStages } from '@/api/property';
import { getByIdPlatforms } from '@/api/platform';
import { getAppEnvConfig } from '@/utils/env';
import { Download, ZoomIn, Delete } from '@element-plus/icons-vue';
import Decimal from 'decimal.js';
import { useDict } from '@/hooks/useDict';
import { inject } from 'vue';
const { PhoneResultStatus, RepayStatus, FlowStatus, FollowStatus, AuditStatus, CaseStatus } = useDict("PhoneResultStatus","RepayStatus", "FlowStatus", "FollowStatus","AuditStatus", "CaseStatus");
const envs = getAppEnvConfig();
const url = envs.VITE_GLOB_API_URL_PREFIX + '/sys/upload';
......@@ -168,6 +197,7 @@
const splitdata = ref([]);
const dialogImageUrl = ref('');
const dialogVisible = ref(false);
const downloadfile = inject('download');
const form = reactive({
remainingAmount: 0,
images: [],
......@@ -185,7 +215,29 @@
const onHide = (done) => {
done();
};
const download = (item) => {
const name = item.slice(item.lastIndexOf('/') + 1, item.length);
downloadfile('/sys/static/' + item, {}, name);
};
const getImageUrl = () => {
return new URL(`@/assets/images/file.svg`, import.meta.url).href;
}
const updataIf = (e) => {
console.log('eeee', e)
if (e.fileName) {
if (e.fileName.split('.')[1] === 'png' || e.fileName.split('.')[1] === 'jpeg' || e.fileName.split('.')[1] === 'jpg') {
return false
} else {
return true
}
} else {
if (e.name.split('.')[1] === 'png' || e.name.split('.')[1] === 'jpeg' || e.name.split('.')[1] === 'jpg') {
return false
} else {
return true
}
}
}
const editOrConfirm = () => {
if (editFirst.value) {
if (!splitdata.value[0].applyAmount || isNaN(Number(splitdata.value[0].applyAmount)))
......@@ -228,12 +280,13 @@
editFirst.value = !editFirst.value;
};
const handleFileSuccess1 = (response, file, fileList) => {
form.images.push({
url: response.message,
name: file.name,
});
if (file.uid) {
const item = form.images.find((v) => v.uid === file.uid);
item.url = envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/' + response.message;
}
};
const handleRemove1 = (uploadFile, uploadFiles) => {
console.log('uploadFile', uploadFile)
const index = form.images.findIndex((v) => v.name === uploadFile.name);
form.images.splice(index, 1);
};
......@@ -463,10 +516,14 @@
message: '分期金额要大于借款平台的分期最低金额',
plain: true,
});
let images = form.images.map((v) => v.url)
images = images.map((v) => {
return v.replace(envs.VITE_GLOB_API_URL_PREFIX + '/sys/static/', '');
});
const params = {
...currentDetail.value,
...form,
images: form.images.map((v) => v.url)?.length > 0 ? form.images.map((v) => v.url) : null,
images: images.length > 0 ? images : null,
byStagesRecords: splitdata.value,
loans: selectdList.value,
flowStatus: 'pending',
......
......@@ -1083,11 +1083,11 @@
if (row.images && row.images.length > 0) {
return (
<>
<div className="flex justify-center">
<ElButton onClick={() => preview(row, 'images')} link type="primary">
查看
</ElButton>
</div>
{row.images.map((item, index) => (
<el-icon>
<Download onClick={() => download(item)} />
</el-icon>
))}
</>
);
}
......@@ -1276,11 +1276,11 @@
if (row.images && row.images.length > 0) {
return (
<>
<div className="flex justify-center">
<ElButton onClick={() => preview(row, 'images')} link type="primary">
查看
</ElButton>
</div>
{row.images.map((item, index) => (
<el-icon>
<Download onClick={() => download(item)} />
</el-icon>
))}
</>
);
}
......
......@@ -2,6 +2,46 @@
<div class="table-box">
<div>
<ProTable :config="config" ref="caseLRef" :api="getLoanpage" :paramCallback="paramCallback" :selectdList="selectdList">
<template #table_top>
<div class="style-lable" style="width: 100%">
<div class="item_warp" style="width: 19%">
<div class="img_warp">
<img src="@/assets/images/caselist.svg" />
</div>
<div class="title_warp">
<div class="items">在派案件数量</div>
<div class="item items1">{{statisis.caseNum}}</div>
</div>
</div>
<div class="item_warp" style="width: 19%">
<div class="img_warp">
<img src="@/assets/images/userlist.svg" />
</div>
<div class="title_warp">
<div class="items">在派案人人数</div>
<div class="item items1">{{statisis.cpeNum}}</div>
</div>
</div>
<div class="item_warp" style="width: 19%">
<div class="img_warp">
<img src="@/assets/images/money.svg" />
</div>
<div class="title_warp">
<div class="items">在派委案金额</div>
<div class="item items1">{{statisis.amount}}</div>
</div>
</div>
<div class="item_warp" style="width: 19%">
<div class="img_warp">
<img src="@/assets/images/tocrash.svg" />
</div>
<div class="title_warp">
<div class="items">待还金额</div>
<div class="item items1">{{statisis.amount}}</div>
</div>
</div>
</div>
</template>
<!-- 表格 header 按钮 -->
<template #left_buttons>
<div class="flex rounded w-full h-11 items-center pl-2 btn-grp mb-1">
......@@ -135,7 +175,7 @@
delete obj['tenantTime'];
}
curParam.value = obj;
// getStatisis(obj);
getStatisis(obj);
return obj;
};
const backCase = async () => {
......@@ -371,7 +411,7 @@
showOverflow: 'tooltip',
width: 80,
enum: CaseStatus,
// search: { el: 'select', props: { filterable: true }, labelWidth: 90 },
search: { el: 'select', props: { filterable: true }, labelWidth: 105 },
fieldNames: { label: 'label', value: 'value' },
slots: {
default: ({ row }) => {
......
......@@ -24,7 +24,7 @@
:auto-upload="true"
:on-progress="uploadVideoProcess"
>
<el-button type="primary" plain :icon="Upload">上传文件</el-button>
<el-button type="primary" plain :icon="Upload" :loading="upload.isUploading">上传文件</el-button>
</el-upload>
<!-- 进度条 -->
<!-- <el-progress v-if="progressFlag" :percentage="loadProgress" /> -->
......@@ -46,7 +46,7 @@
<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>
<el-button type="danger" @click="checkData" :disabled="!form.path" :loading="checkObj.checkloading">检查</el-button>
</div>
<div class="text-sm mt-2">
<span class="mr-2 text-gray-400">通过{{ checkObj?.result?.success || 0 }}</span>
......@@ -107,6 +107,7 @@
<el-button
type="primary"
@click="submitData"
:loading="checkObj.submitloading"
:disabled="!form.path || !checkObj.checksuccess"
>上传</el-button
>
......@@ -183,6 +184,8 @@
const uploadRef = ref();
const isFold = ref(true);
const checkObj = reactive({
submitloading: false,
checkloading: false,
check: false,
checksuccess: false,
result: {
......@@ -331,6 +334,7 @@
downloadfile('/LoanExcel/downloadTemplate', {}, '模版.xls');
};
const checkData = () => {
checkObj.checkloading = true
checkLoanExcel({
fileUrl: form.path,
}).then((res) => {
......@@ -343,6 +347,9 @@
checkObj.result.loanErrors = res.result.loanErrors;
checkObj.check = true;
}
checkObj.checkloading = false
}).catch(e => {
checkObj.checkloading = false
});
};
......@@ -383,6 +390,7 @@
message: '分期最大期数必填',
plain: true,
});
checkObj.submitloading = true
// if (!form.minAmount) return ElMessage.warning({
// message: '最低分期金额必填',
// plain: true,
......@@ -409,8 +417,11 @@
form['minAmount'] = '';
form['mergerCase'] = 'N';
form['discount'] = '';
checkObj.submitloading = false
});
} catch {}
} catch {
checkObj.submitloading = false
}
};
onMounted(() => {
formRef.value.clearValidate();
......
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