refactor(credit): 简化被执行人列表组件实现
- 将表格行键从 rowKey 改为 id - 移除历史被执行人相关功能和导入按钮 - 统一编辑功能,移除区分来源的逻辑 - 移除历史被执行人相关的导入和编辑弹窗组件 - 简化数据获取逻辑,移除客户端合并和排序逻辑 - 移除来源标识字段和相关判断逻辑 - 统一删除操作,简化批量删除的实现
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
<a-card :bordered="false" :body-style="{ padding: '16px' }">
|
||||
<ele-pro-table
|
||||
ref="tableRef"
|
||||
row-key="rowKey"
|
||||
row-key="id"
|
||||
:columns="columns"
|
||||
:datasource="datasource"
|
||||
:customRow="customRow"
|
||||
@@ -26,7 +26,7 @@
|
||||
<template #icon>
|
||||
<CloudUploadOutlined />
|
||||
</template>
|
||||
<span class="text-red-500">导入历史被执行人</span>
|
||||
<span class="text-red-500">导入被执行人</span>
|
||||
</a-button>
|
||||
</a-space>
|
||||
</template>
|
||||
@@ -63,12 +63,7 @@
|
||||
</template>
|
||||
<template v-if="column.key === 'action'">
|
||||
<a-space>
|
||||
<a
|
||||
@click="
|
||||
record.__source === 'B' ? openEdit2(record) : openEdit(record)
|
||||
"
|
||||
>修改</a
|
||||
>
|
||||
<a @click="openEdit(record)">修改</a>
|
||||
<a-divider type="vertical" />
|
||||
<a-popconfirm
|
||||
title="确定要删除此记录吗?"
|
||||
@@ -90,25 +85,13 @@
|
||||
/>
|
||||
<!-- 导入弹窗 -->
|
||||
<CreditJudgmentDebtorImport v-model:visible="showImport" @done="reload" />
|
||||
<!-- 历史被执行人导入弹窗 -->
|
||||
<CreditJudgmentDebtorHistoryImport
|
||||
v-model:visible="showImport2"
|
||||
@done="reload"
|
||||
/>
|
||||
<!-- 编辑弹窗 -->
|
||||
<CreditJudgmentDebtorHistoryEdit
|
||||
v-model:visible="showEdit2"
|
||||
:data="current"
|
||||
@done="reload"
|
||||
/>
|
||||
</a-page-header>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { createVNode, ref } from 'vue';
|
||||
import { message, Modal } from 'ant-design-vue';
|
||||
import { CloudUploadOutlined } from '@ant-design/icons-vue';
|
||||
import { ExclamationCircleOutlined } from '@ant-design/icons-vue';
|
||||
import { ExclamationCircleOutlined,CloudUploadOutlined } from '@ant-design/icons-vue';
|
||||
import type { EleProTable } from 'ele-admin-pro';
|
||||
import { toDateString } from 'ele-admin-pro';
|
||||
import type {
|
||||
@@ -119,49 +102,29 @@
|
||||
import { exportCreditData } from '../utils/export';
|
||||
import { getPageTitle } from '@/utils/common';
|
||||
import CreditJudgmentDebtorEdit from './components/creditJudgmentDebtorEdit.vue';
|
||||
import CreditJudgmentDebtorHistoryEdit from '@/views/credit/creditJudgmentDebtorHistory/components/creditJudgmentDebtorHistoryEdit.vue';
|
||||
import CreditJudgmentDebtorImport from './components/credit-judgment-debtor-import.vue';
|
||||
import CreditJudgmentDebtorHistoryImport from './components/credit-judgment-debtor-history-import.vue';
|
||||
import {
|
||||
pageCreditJudgmentDebtor,
|
||||
listCreditJudgmentDebtor,
|
||||
removeCreditJudgmentDebtor,
|
||||
removeBatchCreditJudgmentDebtor
|
||||
} from '@/api/credit/creditJudgmentDebtor';
|
||||
import {
|
||||
listCreditJudgmentDebtorHistory,
|
||||
removeCreditJudgmentDebtorHistory,
|
||||
removeBatchCreditJudgmentDebtorHistory
|
||||
} from '@/api/credit/creditJudgmentDebtorHistory';
|
||||
import type {
|
||||
CreditJudgmentDebtor,
|
||||
CreditJudgmentDebtorParam
|
||||
} from '@/api/credit/creditJudgmentDebtor/model';
|
||||
import type { CreditJudgmentDebtorHistory } from '@/api/credit/creditJudgmentDebtorHistory/model';
|
||||
|
||||
// 表格实例
|
||||
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
|
||||
|
||||
type CreditJudgmentDebtorTableRecord =
|
||||
| (CreditJudgmentDebtor & { rowKey: string; __source: 'A' })
|
||||
| (CreditJudgmentDebtorHistory & {
|
||||
rowKey: string;
|
||||
__source: 'B';
|
||||
// For red提示 + dblclick open history edit
|
||||
historyId: number;
|
||||
});
|
||||
|
||||
// 表格选中数据
|
||||
const selection = ref<CreditJudgmentDebtorTableRecord[]>([]);
|
||||
const selection = ref<CreditJudgmentDebtor[]>([]);
|
||||
// 当前编辑数据
|
||||
const current = ref<CreditJudgmentDebtorTableRecord | null>(null);
|
||||
const current = ref<CreditJudgmentDebtor | null>(null);
|
||||
// 是否显示编辑弹窗
|
||||
const showEdit = ref(false);
|
||||
// 是否显示编辑弹窗2
|
||||
const showEdit2 = ref(false);
|
||||
// 是否显示导入弹窗
|
||||
const showImport = ref(false);
|
||||
// 是否显示历史被执行人导入弹窗
|
||||
const showImport2 = ref(false);
|
||||
// 是否显示批量移动弹窗
|
||||
const showMove = ref(false);
|
||||
// 加载状态
|
||||
@@ -169,63 +132,6 @@
|
||||
// 搜索关键词
|
||||
const searchText = ref('');
|
||||
|
||||
const normalizeCaseNumber = (caseNumber?: string) =>
|
||||
(caseNumber ?? '').trim();
|
||||
|
||||
const mergeByCaseNumber = (
|
||||
aList: CreditJudgmentDebtor[],
|
||||
bList: CreditJudgmentDebtorHistory[]
|
||||
): CreditJudgmentDebtorTableRecord[] => {
|
||||
const map = new Map<string, CreditJudgmentDebtorTableRecord>();
|
||||
|
||||
aList.forEach((a, idx) => {
|
||||
const key = normalizeCaseNumber(a.caseNumber) || `__A__${a.id ?? idx}`;
|
||||
map.set(key, {
|
||||
...(a as any),
|
||||
rowKey: `A-${a.id ?? key}`,
|
||||
__source: 'A'
|
||||
});
|
||||
});
|
||||
|
||||
// B overrides A when caseNumber duplicates
|
||||
bList.forEach((b, idx) => {
|
||||
const key = normalizeCaseNumber(b.caseNumber) || `__B__${b.id ?? idx}`;
|
||||
map.set(key, {
|
||||
...(b as any),
|
||||
rowKey: `B-${b.id ?? key}`,
|
||||
__source: 'B',
|
||||
historyId: b.id as number
|
||||
});
|
||||
});
|
||||
|
||||
return Array.from(map.values());
|
||||
};
|
||||
|
||||
const sortList = (
|
||||
list: CreditJudgmentDebtorTableRecord[],
|
||||
orders?: Record<string, any>
|
||||
) => {
|
||||
const sortField = orders?.sort;
|
||||
const sortOrder: string | undefined = orders?.order;
|
||||
if (!sortField || !sortOrder) {
|
||||
return list;
|
||||
}
|
||||
const desc = String(sortOrder).toLowerCase().startsWith('desc');
|
||||
return [...list].sort((a: any, b: any) => {
|
||||
const av = a?.[sortField];
|
||||
const bv = b?.[sortField];
|
||||
if (av == null && bv == null) return 0;
|
||||
if (av == null) return desc ? 1 : -1;
|
||||
if (bv == null) return desc ? -1 : 1;
|
||||
if (typeof av === 'number' && typeof bv === 'number') {
|
||||
return desc ? bv - av : av - bv;
|
||||
}
|
||||
const as = String(av);
|
||||
const bs = String(bv);
|
||||
return desc ? bs.localeCompare(as) : as.localeCompare(bs);
|
||||
});
|
||||
};
|
||||
|
||||
// 表格数据源
|
||||
const datasource: DatasourceFunction = ({
|
||||
page,
|
||||
@@ -241,20 +147,11 @@
|
||||
if (!params.keywords && searchText.value) {
|
||||
params.keywords = searchText.value;
|
||||
}
|
||||
|
||||
// Client-side merge A+B by caseNumber, with B override.
|
||||
return Promise.all([
|
||||
listCreditJudgmentDebtor(params),
|
||||
listCreditJudgmentDebtorHistory(params as any)
|
||||
]).then(([aList, bList]) => {
|
||||
const merged = sortList(mergeByCaseNumber(aList, bList), orders as any);
|
||||
const currentPage = page ?? 1;
|
||||
const pageSize = limit ?? 20;
|
||||
const start = (currentPage - 1) * pageSize;
|
||||
return {
|
||||
list: merged.slice(start, start + pageSize),
|
||||
count: merged.length
|
||||
};
|
||||
return pageCreditJudgmentDebtor({
|
||||
...params,
|
||||
...(orders as any),
|
||||
page,
|
||||
limit
|
||||
});
|
||||
};
|
||||
|
||||
@@ -318,7 +215,7 @@
|
||||
align: 'center',
|
||||
ellipsis: true,
|
||||
customRender: ({ text }) => toDateString(text, 'yyyy-MM-dd HH:mm:ss')
|
||||
},
|
||||
}
|
||||
// {
|
||||
// title: '操作',
|
||||
// key: 'action',
|
||||
@@ -340,7 +237,7 @@
|
||||
};
|
||||
|
||||
/* 打开编辑弹窗 */
|
||||
const openEdit = (row?: CreditJudgmentDebtorTableRecord) => {
|
||||
const openEdit = (row?: CreditJudgmentDebtor) => {
|
||||
current.value = row ?? null;
|
||||
showEdit.value = true;
|
||||
};
|
||||
@@ -355,17 +252,6 @@
|
||||
showImport.value = true;
|
||||
};
|
||||
|
||||
/* 打开历史被执行人导入弹窗 */
|
||||
const openImport2 = () => {
|
||||
showImport2.value = true;
|
||||
};
|
||||
|
||||
/* 打开编辑弹窗 */
|
||||
const openEdit2 = (row?: CreditJudgmentDebtorTableRecord) => {
|
||||
current.value = row ?? null;
|
||||
showEdit2.value = true;
|
||||
};
|
||||
|
||||
/* 导出 */
|
||||
const exportData = () => {
|
||||
exportCreditData<CreditJudgmentDebtor>({
|
||||
@@ -389,23 +275,14 @@
|
||||
}
|
||||
],
|
||||
fetchData: () =>
|
||||
Promise.all([
|
||||
listCreditJudgmentDebtor({ keywords: searchText.value || undefined }),
|
||||
listCreditJudgmentDebtorHistory({
|
||||
keywords: searchText.value || undefined
|
||||
} as any)
|
||||
]).then(([aList, bList]) => mergeByCaseNumber(aList, bList) as any)
|
||||
listCreditJudgmentDebtor({ keywords: searchText.value || undefined })
|
||||
});
|
||||
};
|
||||
|
||||
/* 删除单个 */
|
||||
const remove = (row: CreditJudgmentDebtorTableRecord) => {
|
||||
const remove = (row: CreditJudgmentDebtor) => {
|
||||
const hide = message.loading('请求中..', 0);
|
||||
const isHistory = (row as any).__source === 'B';
|
||||
const removeFn = isHistory
|
||||
? removeCreditJudgmentDebtorHistory
|
||||
: removeCreditJudgmentDebtor;
|
||||
removeFn((row as any).id)
|
||||
removeCreditJudgmentDebtor(row.id)
|
||||
.then((msg) => {
|
||||
hide();
|
||||
message.success(msg);
|
||||
@@ -430,23 +307,8 @@
|
||||
maskClosable: true,
|
||||
onOk: () => {
|
||||
const hide = message.loading('请求中..', 0);
|
||||
const aIds: (number | undefined)[] = [];
|
||||
const bIds: (number | undefined)[] = [];
|
||||
selection.value.forEach((d: any) => {
|
||||
if (d.__source === 'B') {
|
||||
bIds.push(d.id);
|
||||
} else {
|
||||
aIds.push(d.id);
|
||||
}
|
||||
});
|
||||
return Promise.all([
|
||||
aIds.length
|
||||
? removeBatchCreditJudgmentDebtor(aIds)
|
||||
: Promise.resolve(''),
|
||||
bIds.length
|
||||
? removeBatchCreditJudgmentDebtorHistory(bIds)
|
||||
: Promise.resolve('')
|
||||
])
|
||||
const ids = selection.value.map((d) => d.id);
|
||||
return removeBatchCreditJudgmentDebtor(ids)
|
||||
.then(() => {
|
||||
hide();
|
||||
message.success('删除成功');
|
||||
@@ -466,7 +328,7 @@
|
||||
};
|
||||
|
||||
/* 自定义行属性 */
|
||||
const customRow = (record: CreditJudgmentDebtorTableRecord) => {
|
||||
const customRow = (record: CreditJudgmentDebtor) => {
|
||||
return {
|
||||
// 行点击事件
|
||||
onClick: () => {
|
||||
@@ -474,11 +336,7 @@
|
||||
},
|
||||
// 行双击事件
|
||||
onDblclick: () => {
|
||||
if ((record as any).__source !== 'B') {
|
||||
openEdit(record);
|
||||
} else {
|
||||
openEdit2(record);
|
||||
}
|
||||
}
|
||||
};
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user