WholeProcessPlatform/frontend/src/views/shuJuTianBao/shengPiJiLu.vue

446 lines
12 KiB
Vue
Raw Normal View History

2026-04-24 17:46:41 +08:00
<template>
<div class="shengPiJiLu-page">
<!-- 搜索区域组件具体 props 需根据实际子组件调整 -->
<GuoYuSheShiShuJuTianBaoSearch @search-finish="handleSearchFinish" @reset="handleReset" />
<!-- 主表格 -->
<BasicTable ref="tableRef" :columns="columns" :list-url="queryPageList" :search-params="{}">
<!-- 使用 bodyCell 插槽自定义单元格渲染 -->
<template #bodyCell="{ column, record }">
<template v-if="column.key === 'action' || column.dataIndex === 'action'">
<div class="flex">
<a-button type="link" size="small" @click="handleShowApprovalLog(record)">审批详情</a-button>
<a-button type="link" size="small" @click="handleShowChangeLog(record)">变更详情</a-button>
</div>
</template>
<template v-if="column.dataIndex === 'bizType'">
{{ handName(record.bizType, yeWuType) }}
</template>
<template v-if="column.dataIndex === 'status'">
{{ handName(record.status, shenStatus) }}
</template>
</template>
</BasicTable>
<!-- 审批操作日志弹框 -->
<a-modal
v-model:open="approvalLogVisible"
title="审批操作日志"
width="1600px"
:footer="null"
destroy-on-close="false"
>
<div class="approval-log-modal-content">
<ApprovalLogSearch
:action-type-dict="actionTypeDict"
@search-finish="handleApprovalLogSearch"
@reset="handleApprovalLogReset"
/>
<BasicTable
ref="approvalLogTableRef"
:columns="approvalLogColumns"
:list-url="getApprovalLogList"
>
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'action'">
{{ handName(record.action, actionTypeDict) }}
</template>
</template>
</BasicTable>
</div>
</a-modal>
<!-- 数据变更记录弹框 -->
<a-modal
v-model:open="changeLogVisible"
title="数据变更记录"
width="1600px"
:footer="null"
destroy-on-close="false"
>
<div class="change-log-modal-content">
<ChangeLogSearch
:operation-type-dict="operationTypeDict"
@search-finish="handleChangeLogSearch"
@reset="handleChangeLogReset"
/>
<BasicTable
ref="changeLogTableRef"
:columns="changeLogColumns"
:list-url="getApprovalChangeLogList"
>
<template #bodyCell="{ column, record }">
<template v-if="column.dataIndex === 'operationType'">
{{ handName(record.operationType, operationTypeDict) }}
</template>
<template v-if="column.dataIndex === 'bizType'">
{{ handName(record.bizType, yeWuType) }}
</template>
<template v-if="column.dataIndex === 'changeJson'">
<pre style="max-height: 200px; overflow: auto; margin: 0;">{{ record.changeJson }}</pre>
</template>
</template>
</BasicTable>
</div>
</a-modal>
</div>
</template>
<script lang="ts" setup>
import { ref, reactive, onMounted } from 'vue';
import { queryPageList, getApprovalLogList, getApprovalChangeLogList } from '@/api/shengPiJiLu';
import BasicTable from "@/components/BasicTable/index.vue";
import GuoYuSheShiShuJuTianBaoSearch from "./shengPiJiLuSearch.vue";
import ApprovalLogSearch from "./approvalLogSearch.vue";
import ChangeLogSearch from "./changeLogSearch.vue";
import { getDictItemsByCode } from '@/api/dict';
let columns = ref([
{
title: '审批批次号',
dataIndex: 'approvalNo',
key: 'approvalNo',
2026-04-27 09:52:42 +08:00
width: 160,
2026-04-24 17:46:41 +08:00
fixed: 'left'
},
{
title: '业务类型',
dataIndex: 'bizType',
key: 'bizType',
2026-04-27 09:52:42 +08:00
width: 100,
align: 'center'
2026-04-24 17:46:41 +08:00
},
{
title: '数据条数',
dataIndex: 'dataCount',
key: 'dataCount',
width: 100,
align: 'center'
},
{
title: '提交人',
2026-04-27 11:57:26 +08:00
dataIndex: 'applyUserName',
key: 'applyUserName',
2026-04-27 09:52:42 +08:00
width: 120,
align: 'center'
2026-04-24 17:46:41 +08:00
},
{
title: '提交时间',
dataIndex: 'applyTime',
key: 'applyTime',
2026-04-27 09:52:42 +08:00
width: 160,
align: 'center'
2026-04-24 17:46:41 +08:00
},
{
title: '审批状态',
dataIndex: 'status',
key: 'status',
2026-04-27 09:52:42 +08:00
width: 80,
2026-04-24 17:46:41 +08:00
align: 'center',
},
{
title: '审批人',
2026-04-27 11:57:26 +08:00
dataIndex: 'approverName',
key: 'approverName',
width: 120,
align: 'center'
2026-04-24 17:46:41 +08:00
},
{
title: '审批时间',
dataIndex: 'approveTime',
key: 'approveTime',
2026-04-27 09:52:42 +08:00
width: 160,
2026-04-27 11:57:26 +08:00
align: 'center'
2026-04-24 17:46:41 +08:00
},
{
title: '审批备注',
dataIndex: 'remark',
key: 'remark',
ellipsis: true,
2026-04-27 09:52:42 +08:00
2026-04-24 17:46:41 +08:00
},
{
title: '操作',
key: 'action',
2026-04-27 09:52:42 +08:00
width: 160,
2026-04-24 17:46:41 +08:00
fixed: 'right',
align: 'center'
}
]);
const tableRef = ref()
const handleSearchFinish = (values: any) => {
console.log(values);
const filters = [
values.approvalNo && {
field: "approvalNo",
operator: "contains",
dataType: "string",
value: values.approvalNo,
},
values.status && {
field: "status",
operator: "eq",
dataType: "string",
value: values.status,
},
].filter(Boolean);
const filter = {
logic: "and",
filters: filters,
};
tableRef.value?.getList(filter);
};
const handleReset = (values) => {
handleSearchFinish(values);
};
// 审批操作日志弹框相关
const approvalLogVisible = ref(false);
const approvalLogTableRef = ref();
const approvalLogColumns = ref([
{
title: '操作类型',
dataIndex: 'action',
key: 'action',
width: 120,
align: 'center'
},
{
title: '操作人',
2026-04-27 11:57:26 +08:00
dataIndex: 'operatorName',
key: 'operatorName',
width: 150,
align: 'center'
2026-04-24 17:46:41 +08:00
},
{
title: '操作时间',
dataIndex: 'operateTime',
key: 'operateTime',
width: 180
2026-04-27 09:52:42 +08:00
},
{
title: '创建时间',
dataIndex: 'createdAt',
key: 'createdAt',
width: 180
2026-04-24 17:46:41 +08:00
},
{
title: '审批意见',
dataIndex: 'commentInfo',
key: 'commentInfo',
ellipsis: true,
},
2026-04-27 09:52:42 +08:00
2026-04-24 17:46:41 +08:00
]);
// 数据变更记录弹框相关
const changeLogVisible = ref(false);
const changeLogTableRef = ref();
const changeLogColumns = ref([
{
title: '业务类型',
dataIndex: 'bizType',
key: 'bizType',
width: 120,
align: 'center'
},
{
title: '操作类型',
dataIndex: 'operationType',
key: 'operationType',
width: 120,
align: 'center'
},
{
title: '操作人',
2026-04-27 11:57:26 +08:00
dataIndex: 'operatorName',
key: 'operatorName',
width: 150,
align: 'center'
2026-04-24 17:46:41 +08:00
},
{
title: '操作时间',
dataIndex: 'operateTime',
key: 'operateTime',
width: 180
},
{
title: '创建时间',
dataIndex: 'createdAt',
key: 'createdAt',
width: 180
2026-04-27 09:52:42 +08:00
},
{
title: '变更内容',
dataIndex: 'changeJson',
key: 'changeJson',
ellipsis: true
},
2026-04-24 17:46:41 +08:00
]);
const currentApprovalId = ref('');
const actionTypeDict = ref([]);
const operationTypeDict = ref([]);
// 显示审批操作日志弹框
const handleShowApprovalLog = (record: any) => {
currentApprovalId.value = record.id;
approvalLogVisible.value = true;
// 延迟调用,确保弹框和 BasicTable 组件完全渲染
setTimeout(() => {
const filter = {
logic: "and",
filters: [
{
field: "approvalId",
operator: "eq",
dataType: "string",
value: record.id,
}
]
};
approvalLogTableRef.value?.getList(filter);
}, 300);
};
// 审批日志搜索处理
const handleApprovalLogSearch = (values: any) => {
console.log('审批日志搜索:', values);
const filters = [
{
field: "approvalId",
operator: "eq",
dataType: "string",
value: currentApprovalId.value,
},
values.action && {
field: "action",
operator: "eq",
dataType: "string",
value: values.action,
},
].filter(Boolean);
const filter = {
logic: "and",
filters: filters,
};
approvalLogTableRef.value?.getList(filter);
};
// 审批日志重置处理
const handleApprovalLogReset = (values: any) => {
console.log('审批日志重置:', values);
handleApprovalLogSearch(values);
};
// 显示数据变更记录弹框
const handleShowChangeLog = (record: any) => {
currentApprovalId.value = record.id;
changeLogVisible.value = true;
// 延迟调用,确保弹框和 BasicTable 组件完全渲染
setTimeout(() => {
const filter = {
logic: "and",
filters: [
{
field: "approvalId",
operator: "eq",
dataType: "string",
value: record.id,
}
]
};
changeLogTableRef.value?.getList(filter);
}, 300);
};
// 变更日志搜索处理
const handleChangeLogSearch = (values: any) => {
console.log('变更日志搜索:', values);
const filters = [
{
field: "approvalId",
operator: "eq",
dataType: "string",
value: currentApprovalId.value,
},
values.operationType && {
field: "operationType",
operator: "eq",
dataType: "string",
value: values.operationType,
},
].filter(Boolean);
const filter = {
logic: "and",
filters: filters,
};
changeLogTableRef.value?.getList(filter);
};
// 变更日志重置处理
const handleChangeLogReset = (values: any) => {
console.log('变更日志重置:', values);
handleChangeLogSearch(values);
};
// 初始化
onMounted(() => {
dictNmae()
});
const shenStatus = ref([])
const yeWuType = ref([])
const dictNmae = () => {
getDictItemsByCode({ dictCode: 'shenStatus' }).then((res) => {
shenStatus.value = res.data;
});
getDictItemsByCode({ dictCode: 'yeWuType' }).then((res) => {
yeWuType.value = res.data;
});
// TODO: 待补充操作类型字典
getDictItemsByCode({ dictCode: 'caoType' }).then((res) => {
actionTypeDict.value = res.data;
});
getDictItemsByCode({ dictCode: 'caoTypeTwo' }).then((res) => {
operationTypeDict.value = res.data;
});
}
const handName = (val: any, arr: any) => {
let dictName1 = ''
arr.forEach((item: any) => {
if (item.itemCode == val) {
dictName1 = item.dictName
}
})
return dictName1
}
</script>
<style scoped lang="scss">
.shengPiJiLu-page {
width: 100%;
height: 100%;
background-color: #ffffff;
padding: 20px;
}
.approval-log-modal-content {
display: flex;
flex-direction: column;
gap: 16px;
}
.change-log-modal-content {
display: flex;
flex-direction: column;
gap: 16px;
}
</style>