yxk-20260525-通用的审批历史表
This commit is contained in:
+113
@@ -0,0 +1,113 @@
|
|||||||
|
<template>
|
||||||
|
<div class="approval-history-pane">
|
||||||
|
<BasicTable @register="registerTable" />
|
||||||
|
</div>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
/**
|
||||||
|
* 审批历史组件 - 展示流程实例的审批历史记录
|
||||||
|
* 数据来源:task_approval_opinion 表
|
||||||
|
*/
|
||||||
|
import { BasicTable, useTable } from '/@/components/Table';
|
||||||
|
import type { BasicColumn } from '/@/components/Table';
|
||||||
|
import { onMounted, watch } from 'vue';
|
||||||
|
import { list as queryApprovalOpinionList } from '/@/views/taskApprovalOpinion/TaskApprovalOpinion.api';
|
||||||
|
|
||||||
|
const approvalHistoryColumns: BasicColumn[] = [
|
||||||
|
{ title: '办理时间', dataIndex: 'opTime', width: 170, align: 'center' },
|
||||||
|
{ title: '节点名称', dataIndex: 'taskName', width: 160, align: 'center' },
|
||||||
|
{
|
||||||
|
title: '办理人',
|
||||||
|
dataIndex: 'opUserName',
|
||||||
|
width: 120,
|
||||||
|
align: 'center',
|
||||||
|
customRender: ({ record }) => record.opUserName || record.opUserId || '-',
|
||||||
|
},
|
||||||
|
{ title: '操作类型', dataIndex: 'actionType', width: 120, align: 'center' },
|
||||||
|
{ title: '操作结果', dataIndex: 'actionResult', width: 180, align: 'center' },
|
||||||
|
{ title: '审批意见', dataIndex: 'opinion', align: 'left' },
|
||||||
|
];
|
||||||
|
|
||||||
|
export default {
|
||||||
|
name: 'TaskApprovalHistoryContent',
|
||||||
|
components: {
|
||||||
|
BasicTable,
|
||||||
|
},
|
||||||
|
props: {
|
||||||
|
formData: {
|
||||||
|
type: Object,
|
||||||
|
default: () => ({}),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
setup(props) {
|
||||||
|
const [registerTable, { reload }] = useTable({
|
||||||
|
title: '',
|
||||||
|
api: getApprovalHistoryList,
|
||||||
|
columns: approvalHistoryColumns,
|
||||||
|
rowKey: 'id',
|
||||||
|
bordered: true,
|
||||||
|
striped: true,
|
||||||
|
showIndexColumn: true,
|
||||||
|
showTableSetting: false,
|
||||||
|
useSearchForm: false,
|
||||||
|
canResize: false,
|
||||||
|
immediate: false,
|
||||||
|
pagination: {
|
||||||
|
pageSize: 10,
|
||||||
|
},
|
||||||
|
scroll: { x: 980 },
|
||||||
|
});
|
||||||
|
|
||||||
|
// 按流程实例查询审批历史,只查 task_approval_opinion 表
|
||||||
|
function getApprovalHistoryList(params) {
|
||||||
|
const processInstId =
|
||||||
|
props.formData?.procInsId ||
|
||||||
|
props.formData?.procInstId ||
|
||||||
|
props.formData?.processInstanceId;
|
||||||
|
if (!processInstId) {
|
||||||
|
return Promise.resolve({ records: [], total: 0 });
|
||||||
|
}
|
||||||
|
return queryApprovalOpinionList({
|
||||||
|
...params,
|
||||||
|
processInstId,
|
||||||
|
column: 'opTime',
|
||||||
|
order: 'desc',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 组件挂载时自动加载(解决 tab 懒加载场景下父组件 reload 调用时子组件未挂载的问题)
|
||||||
|
onMounted(() => {
|
||||||
|
const processInstId =
|
||||||
|
props.formData?.procInsId ||
|
||||||
|
props.formData?.procInstId ||
|
||||||
|
props.formData?.processInstanceId;
|
||||||
|
if (processInstId) {
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// 流程实例 ID 变化时自动刷新(如 Modal 重新打开传入新数据)
|
||||||
|
watch(
|
||||||
|
() => props.formData?.procInsId || props.formData?.procInstId || props.formData?.processInstanceId,
|
||||||
|
(newVal, oldVal) => {
|
||||||
|
if (newVal && newVal !== oldVal) {
|
||||||
|
reload();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return {
|
||||||
|
registerTable,
|
||||||
|
reload,
|
||||||
|
};
|
||||||
|
},
|
||||||
|
};
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<style lang="less" scoped>
|
||||||
|
.approval-history-pane {
|
||||||
|
height: 100%;
|
||||||
|
padding: 4px 0;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -24,6 +24,10 @@
|
|||||||
/>
|
/>
|
||||||
</a-tab-pane>
|
</a-tab-pane>
|
||||||
|
|
||||||
|
<a-tab-pane key="2">
|
||||||
|
<template #tab><span>审批历史</span> </template>
|
||||||
|
<TaskApprovalHistoryContent ref="approvalHistoryRef" :form-data="taskFormData" />
|
||||||
|
</a-tab-pane>
|
||||||
<!-- <a-tab-pane v-if="!isEmbeddedHandleForm" key="2">-->
|
<!-- <a-tab-pane v-if="!isEmbeddedHandleForm" key="2">-->
|
||||||
<!-- <template #tab> <user-outlined /><span>任务处理</span> </template>-->
|
<!-- <template #tab> <user-outlined /><span>任务处理</span> </template>-->
|
||||||
<!-- <task-handle-inner-content @success="handleSuccess" :form-data="taskFormData" :claim="claimStatus" @claimSuccess="claimSuccess"></task-handle-inner-content>-->
|
<!-- <task-handle-inner-content @success="handleSuccess" :form-data="taskFormData" :claim="claimStatus" @claimSuccess="claimSuccess"></task-handle-inner-content>-->
|
||||||
@@ -42,11 +46,12 @@
|
|||||||
* 处理页面
|
* 处理页面
|
||||||
*/
|
*/
|
||||||
import { BasicModal, useModalInner } from '/@/components/Modal';
|
import { BasicModal, useModalInner } from '/@/components/Modal';
|
||||||
import { ref , nextTick , computed } from 'vue';
|
import { ref , nextTick , computed, watch } from 'vue';
|
||||||
import { UserOutlined, PartitionOutlined, FileTextOutlined } from '@ant-design/icons-vue';
|
import { UserOutlined, PartitionOutlined, FileTextOutlined } from '@ant-design/icons-vue';
|
||||||
import TaskHandleInnerContent from '../content/TaskHandleInnerContent.vue';
|
import TaskHandleInnerContent from '../content/TaskHandleInnerContent.vue';
|
||||||
import TaskTraceContent from '../content/TaskTraceContent.vue';
|
import TaskTraceContent from '../content/TaskTraceContent.vue';
|
||||||
import BpmDynamicForm from '/@/views/super/bpm/process/components/BpmDynamicForm.vue';
|
import BpmDynamicForm from '/@/views/super/bpm/process/components/BpmDynamicForm.vue';
|
||||||
|
import TaskApprovalHistoryContent from '../content/TaskApprovalHistoryContent.vue';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: 'TaskHandleModal',
|
name: 'TaskHandleModal',
|
||||||
@@ -58,11 +63,12 @@
|
|||||||
TaskHandleInnerContent,
|
TaskHandleInnerContent,
|
||||||
TaskTraceContent,
|
TaskTraceContent,
|
||||||
BpmDynamicForm,
|
BpmDynamicForm,
|
||||||
|
TaskApprovalHistoryContent,
|
||||||
},
|
},
|
||||||
emits: ['success', 'register'],
|
emits: ['success', 'register'],
|
||||||
setup(_p, { emit }) {
|
setup(_p, { emit }) {
|
||||||
const title = ref('流程办理');
|
const title = ref('流程办理');
|
||||||
const taskFormData = ref({});
|
const taskFormData = ref<Recordable>({});
|
||||||
const taskFormUrl = ref('');
|
const taskFormUrl = ref('');
|
||||||
//是否需要签收
|
//是否需要签收
|
||||||
const claimStatus = ref(false);
|
const claimStatus = ref(false);
|
||||||
@@ -81,6 +87,7 @@
|
|||||||
|
|
||||||
const activeKey = ref('1');
|
const activeKey = ref('1');
|
||||||
const isEmbeddedHandleForm = computed(() => taskFormUrl.value?.includes('BgPartymatterBPMForm'));
|
const isEmbeddedHandleForm = computed(() => taskFormUrl.value?.includes('BgPartymatterBPMForm'));
|
||||||
|
const approvalHistoryRef = ref();
|
||||||
|
|
||||||
// desformView 父级滚动条,只有传了此参数才会突破内部弹窗
|
// desformView 父级滚动条,只有传了此参数才会突破内部弹窗
|
||||||
const modalRef = ref();
|
const modalRef = ref();
|
||||||
@@ -98,9 +105,18 @@
|
|||||||
claimStatus.value = false;
|
claimStatus.value = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
watch(activeKey, (key) => {
|
||||||
|
if (key === '2') {
|
||||||
|
nextTick(() => {
|
||||||
|
approvalHistoryRef.value?.reload();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
return {
|
return {
|
||||||
title,
|
title,
|
||||||
registerModal,
|
registerModal,
|
||||||
|
approvalHistoryRef,
|
||||||
activeKey,
|
activeKey,
|
||||||
taskFormData,
|
taskFormData,
|
||||||
taskFormUrl,
|
taskFormUrl,
|
||||||
|
|||||||
Reference in New Issue
Block a user