Files
mp-10579/src/views/credit/creditJudgmentDebtor/index.vue
gxwebsoft c16b857505 refactor(credit): 更新搜索工具栏组件以支持动态模块配置
- 修改 CreditSearchToolbar 组件以接收 module 属性并传递给 RefreshCompanyIdButton
- 在所有信用相关页面中添加对应的 module 属性配置
- 优化组件代码格式化和导入语句
- 添加 reload 方法以在刷新 companyId 后保持搜索条件
- 修复图标组件标签闭合格式问题
2026-02-06 13:20:52 +08:00

408 lines
11 KiB
Vue
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<template>
<a-page-header :title="getPageTitle()" @back="() => $router.go(-1)">
<a-card :bordered="false" :body-style="{ padding: '16px' }">
<ele-pro-table
ref="tableRef"
row-key="id"
:columns="columns"
:datasource="datasource"
:customRow="customRow"
v-model:selection="selection"
tool-class="ele-toolbar-form"
class="sys-org-table"
>
<template #toolbar>
<a-space class="flex">
<search
@search="reload"
module="credit-judgment-debtor"
:selection="selection"
@add="openEdit"
@remove="removeBatch"
@batchMove="openMove"
@importData="openImport"
@exportData="exportData"
/>
<a-button type="dashed" class="ele-btn-icon" @click="openImport2">
<template #icon>
<CloudUploadOutlined />
</template>
<span class="text-red-500">导入历史被执行人</span>
</a-button>
</a-space>
</template>
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'companyName'">
{{ record.companyName || '-' }}
</template>
<template v-if="column.key === 'image'">
<a-image :src="record.image" :width="50" />
</template>
<template v-if="column.key === 'caseNumber'">
<template v-if="record.historyId">
<span class="text-red-500 font-bold">{{
record.caseNumber
}}</span>
</template>
<template v-else>
{{ record.caseNumber }}
</template>
</template>
<template v-if="column.key === 'name'">
<template v-if="record.url">
<a :href="record.url" target="_blank">{{ record.name }}</a>
</template>
<template v-else>
{{ record.name }}
</template>
</template>
<template v-if="column.key === 'dataStatus'">
<a-tag>
{{ record.dataStatus || (record.historyId ? '有效' : '') }}
</a-tag>
</template>
<template v-if="column.key === 'status'">
<a-tag v-if="record.status === 0" color="green">显示</a-tag>
<a-tag v-if="record.status === 1" color="red">隐藏</a-tag>
</template>
<template v-if="column.key === 'updateTime'">
<div>{{ record.updateTime }}</div>
</template>
<template v-if="column.key === 'action'">
<a-space>
<a @click="openEdit(record)">修改</a>
<a-divider type="vertical" />
<a-popconfirm
title="确定要删除此记录吗?"
@confirm="remove(record)"
>
<a class="ele-text-danger">删除</a>
</a-popconfirm>
</a-space>
</template>
</template>
</ele-pro-table>
</a-card>
<!-- 编辑弹窗 -->
<CreditJudgmentDebtorEdit
v-model:visible="showEdit"
:data="current"
@done="reload"
/>
<!-- 导入弹窗 -->
<CreditJudgmentDebtorImport v-model:visible="showImport" @done="reload" />
<!-- 历史被执行人导入弹窗 -->
<CreditJudgmentDebtorHistoryImport
v-model:visible="showImport2"
@done="reload"
/>
</a-page-header>
</template>
<script lang="ts" setup>
import { createVNode, ref } from 'vue';
import { message, Modal } from 'ant-design-vue';
import {
CloudUploadOutlined,
ExclamationCircleOutlined
} from '@ant-design/icons-vue';
import type { EleProTable } from 'ele-admin-pro';
import { toDateString } from 'ele-admin-pro';
import type {
DatasourceFunction,
ColumnItem
} from 'ele-admin-pro/es/ele-pro-table/types';
import Search from '@/views/credit/components/CreditSearchToolbar.vue';
import { exportCreditData } from '../utils/export';
import { getPageTitle } from '@/utils/common';
import CreditJudgmentDebtorEdit from './components/creditJudgmentDebtorEdit.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,
refreshCreditJudgmentDebtorCompanyId
} from '@/api/credit/creditJudgmentDebtor';
import type {
CreditJudgmentDebtor,
CreditJudgmentDebtorParam
} from '@/api/credit/creditJudgmentDebtor/model';
// 表格实例
const tableRef = ref<InstanceType<typeof EleProTable> | null>(null);
// 表格选中数据
const selection = ref<CreditJudgmentDebtor[]>([]);
// 当前编辑数据
const current = ref<CreditJudgmentDebtor | null>(null);
// 是否显示编辑弹窗
const showEdit = ref(false);
// 是否显示导入弹窗
const showImport = ref(false);
// 是否显示历史被执行人导入弹窗
const showImport2 = ref(false);
// 是否显示批量移动弹窗
const showMove = ref(false);
// 加载状态
const loading = ref(true);
// 搜索关键词
const searchText = ref('');
// 表格数据源
const datasource: DatasourceFunction = ({
page,
limit,
where = {},
orders,
filters
}) => {
const params: CreditJudgmentDebtorParam = { ...where };
if (filters) {
(params as any).status = filters.status;
}
if (!params.keywords && searchText.value) {
params.keywords = searchText.value;
}
return pageCreditJudgmentDebtor({
...params,
...(orders as any),
page,
limit
});
};
// 关键信息列
const columns = ref<ColumnItem[]>([
{
title: 'ID',
dataIndex: 'id',
key: 'id',
width: 80
},
{
title: '主体企业',
dataIndex: 'companyName',
key: 'companyName'
},
{
title: '案号',
dataIndex: 'caseNumber',
key: 'caseNumber'
},
{
title: '被执行人名称',
dataIndex: 'name',
key: 'name'
},
{
title: '证件号/组织机构代码',
dataIndex: 'code',
key: 'code'
},
{
title: '立案日期',
dataIndex: 'occurrenceTime',
key: 'occurrenceTime',
width: 120
},
{
title: '法院',
dataIndex: 'courtName',
key: 'courtName'
},
{
title: '执行标的(元)',
dataIndex: 'amount',
key: 'amount',
width: 120
},
{
title: '数据状态',
dataIndex: 'dataStatus',
key: 'dataStatus',
align: 'center',
width: 90
},
{
title: '操作人',
dataIndex: 'realName',
key: 'realName',
width: 90,
align: 'center'
},
{
title: '更新时间',
dataIndex: 'updateTime',
key: 'updateTime',
width: 180,
align: 'center',
ellipsis: true,
customRender: ({ text }) => toDateString(text, 'yyyy-MM-dd HH:mm:ss')
}
// {
// title: '操作',
// key: 'action',
// width: 160,
// fixed: 'right',
// align: 'center',
// hideInSetting: true
// }
]);
/* 搜索 */
const reload = (where?: CreditJudgmentDebtorParam) => {
if (where && Object.prototype.hasOwnProperty.call(where, 'keywords')) {
searchText.value = where.keywords ?? '';
}
const targetWhere = where ?? { keywords: searchText.value || undefined };
selection.value = [];
tableRef?.value?.reload({ where: targetWhere });
};
/* 打开编辑弹窗 */
const openEdit = (row?: CreditJudgmentDebtor) => {
current.value = row ?? null;
showEdit.value = true;
};
/* 打开批量移动弹窗 */
const openMove = () => {
showMove.value = true;
};
/* 打开导入弹窗 */
const openImport = () => {
showImport.value = true;
};
/* 打开历史被执行人导入弹窗 */
const openImport2 = () => {
showImport2.value = true;
};
/* 导出 */
const exportData = () => {
exportCreditData<CreditJudgmentDebtor>({
filename: '被执行人',
columns: [
{ title: 'ID', dataIndex: 'id' },
{ title: '案号', dataIndex: 'caseNumber' },
{ title: '被执行人名称', dataIndex: 'name' },
{ title: '证件号/组织机构代码', dataIndex: 'code' },
{ title: '立案日期', dataIndex: 'occurrenceTime' },
{ title: '执行标的(元)', dataIndex: 'amount' },
{ title: '法院', dataIndex: 'courtName' },
{ title: '数据状态', dataIndex: 'dataStatus' },
{
title: '创建时间',
dataIndex: 'createTime',
formatter: (record: CreditJudgmentDebtor) =>
record.createTime
? toDateString(record.createTime, 'yyyy-MM-dd HH:mm:ss')
: ''
}
],
fetchData: () =>
listCreditJudgmentDebtor({ keywords: searchText.value || undefined })
});
};
/* 删除单个 */
const remove = (row: CreditJudgmentDebtor) => {
const hide = message.loading('请求中..', 0);
removeCreditJudgmentDebtor(row.id)
.then((msg) => {
hide();
message.success(msg);
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
};
/* 批量删除 */
const removeBatch = () => {
if (!selection.value.length) {
message.error('请至少选择一条数据');
return;
}
Modal.confirm({
title: '提示',
content: '确定要删除选中的记录吗?',
icon: createVNode(ExclamationCircleOutlined),
maskClosable: true,
onOk: () => {
const hide = message.loading('请求中..', 0);
const ids = selection.value.map((d) => d.id);
return removeBatchCreditJudgmentDebtor(ids)
.then(() => {
hide();
message.success('删除成功');
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
}
});
};
/* 修正主体企业归属(按企业名称匹配回填 companyId */
const belongToCompany = () => {
Modal.confirm({
title: '提示',
content:
'将按被执行人名称匹配企业名称并回填 companyId默认仅更新 companyId 为0的数据确定要执行吗',
icon: createVNode(ExclamationCircleOutlined),
maskClosable: true,
onOk: () => {
const hide = message.loading('请求中..', 0);
return refreshCreditJudgmentDebtorCompanyId({ onlyNull: true })
.then((msg) => {
hide();
message.success(msg || '操作成功');
reload();
})
.catch((e) => {
hide();
message.error(e.message);
});
}
});
};
/* 查询 */
const query = () => {
loading.value = true;
};
/* 自定义行属性 */
const customRow = (record: CreditJudgmentDebtor) => {
return {
// 行点击事件
onClick: () => {
// console.log(record);
},
// 行双击事件
onDblclick: () => {
openEdit(record);
}
};
};
query();
</script>
<script lang="ts">
export default {
name: 'CreditJudgmentDebtor'
};
</script>
<style lang="less" scoped></style>