From a77edc2e36ef38540ec0fc0ac75a06b15f0ce43c Mon Sep 17 00:00:00 2001 From: AN <1983933789@qq.com> Date: Mon, 30 Jun 2025 22:37:29 +0800 Subject: [PATCH] =?UTF-8?q?feat(projects):=20=E6=96=B0=E5=A2=9E=20'?= =?UTF-8?q?=E6=88=91=E5=8F=91=E8=B5=B7=E7=9A=84'=20=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../custom/workflow/leave-edit/index.vue | 3 +- src/locales/langs/en-us.ts | 3 +- src/locales/langs/zh-cn.ts | 3 +- src/router/elegant/imports.ts | 1 + src/router/elegant/routes.ts | 9 + src/router/elegant/transform.ts | 3 +- src/service/api/workflow/instance.ts | 18 +- src/service/api/workflow/my-document.ts | 11 + src/typings/api/workflow.api.d.ts | 18 +- src/typings/elegant-router.d.ts | 2 + src/views/workflow/process-instance/index.vue | 32 +- .../modules/process-instance-search.vue | 4 +- .../process-instance-variable-drawer.vue | 4 +- .../workflow/task/all-task-waiting/index.vue | 8 +- src/views/workflow/task/my-document/index.vue | 317 ++++++++++++++++++ .../modules/my-document-search.vue | 57 ++++ 16 files changed, 454 insertions(+), 39 deletions(-) create mode 100644 src/service/api/workflow/my-document.ts create mode 100644 src/views/workflow/task/my-document/index.vue create mode 100644 src/views/workflow/task/my-document/modules/my-document-search.vue diff --git a/src/components/custom/workflow/leave-edit/index.vue b/src/components/custom/workflow/leave-edit/index.vue index ed6cbd2a..39829ef3 100644 --- a/src/components/custom/workflow/leave-edit/index.vue +++ b/src/components/custom/workflow/leave-edit/index.vue @@ -150,7 +150,7 @@ async function handleUpdateModelWhenEdit() { return; } - if (props.operateType === 'edit' || (props.operateType === 'detail' && props.rowData)) { + if (props.rowData) { Object.assign(model, props.rowData); Object.assign(modelDetail, props.rowData); } else { @@ -159,6 +159,7 @@ async function handleUpdateModelWhenEdit() { window.$message?.error(error.message); return; } + Object.assign(model, data); Object.assign(modelDetail, data); } } diff --git a/src/locales/langs/en-us.ts b/src/locales/langs/en-us.ts index e18b13e4..07739a08 100644 --- a/src/locales/langs/en-us.ts +++ b/src/locales/langs/en-us.ts @@ -241,7 +241,8 @@ const local: App.I18n.Schema = { 'workflow_process-instance': 'Process Instance', workflow_task: 'Task', 'workflow_task_all-task-waiting': 'All Task Waiting', - workflow_leave: 'Leave Apply' + workflow_leave: 'Leave Apply', + 'workflow_task_my-document': 'My Document' }, menu: { system_tenant: 'Tenant Management', diff --git a/src/locales/langs/zh-cn.ts b/src/locales/langs/zh-cn.ts index 4bfc4f41..ebf95720 100644 --- a/src/locales/langs/zh-cn.ts +++ b/src/locales/langs/zh-cn.ts @@ -241,7 +241,8 @@ const local: App.I18n.Schema = { 'workflow_process-instance': '流程实例', workflow_task: '任务', 'workflow_task_all-task-waiting': '待办任务', - workflow_leave: '请假申请' + workflow_leave: '请假申请', + 'workflow_task_my-document': '我发起的' }, menu: { system_tenant: '租户管理', diff --git a/src/router/elegant/imports.ts b/src/router/elegant/imports.ts index cc505183..a46cfce8 100644 --- a/src/router/elegant/imports.ts +++ b/src/router/elegant/imports.ts @@ -49,4 +49,5 @@ export const views: Record Promise import("@/views/workflow/process-definition/index.vue"), "workflow_process-instance": () => import("@/views/workflow/process-instance/index.vue"), "workflow_task_all-task-waiting": () => import("@/views/workflow/task/all-task-waiting/index.vue"), + "workflow_task_my-document": () => import("@/views/workflow/task/my-document/index.vue"), }; diff --git a/src/router/elegant/routes.ts b/src/router/elegant/routes.ts index 95b17516..2878d5a9 100644 --- a/src/router/elegant/routes.ts +++ b/src/router/elegant/routes.ts @@ -402,6 +402,15 @@ export const generatedRoutes: GeneratedRoute[] = [ title: 'workflow_task_all-task-waiting', i18nKey: 'route.workflow_task_all-task-waiting' } + }, + { + name: 'workflow_task_my-document', + path: '/workflow/task/my-document', + component: 'view.workflow_task_my-document', + meta: { + title: 'workflow_task_my-document', + i18nKey: 'route.workflow_task_my-document' + } } ] } diff --git a/src/router/elegant/transform.ts b/src/router/elegant/transform.ts index 8d2e3e19..56e259d6 100644 --- a/src/router/elegant/transform.ts +++ b/src/router/elegant/transform.ts @@ -206,7 +206,8 @@ const routeMap: RouteMap = { "workflow_process-definition": "/workflow/process-definition", "workflow_process-instance": "/workflow/process-instance", "workflow_task": "/workflow/task", - "workflow_task_all-task-waiting": "/workflow/task/all-task-waiting" + "workflow_task_all-task-waiting": "/workflow/task/all-task-waiting", + "workflow_task_my-document": "/workflow/task/my-document" }; /** diff --git a/src/service/api/workflow/instance.ts b/src/service/api/workflow/instance.ts index b7a83c61..26128a2f 100644 --- a/src/service/api/workflow/instance.ts +++ b/src/service/api/workflow/instance.ts @@ -1,8 +1,8 @@ import { request } from '@/service/request'; /** 查询正在运行的流程实例列表 */ -export function fetchGetRunningProcessInstanceList(params: Api.Workflow.ProcessInstanceSearchParams) { - return request({ +export function fetchGetRunningInstanceList(params: Api.Workflow.InstanceSearchParams) { + return request({ url: '/workflow/instance/pageByRunning', method: 'get', params @@ -10,8 +10,8 @@ export function fetchGetRunningProcessInstanceList(params: Api.Workflow.ProcessI } /** 查询已结束的流程实例列表 */ -export function fetchGetFinishedProcessInstanceList(params: Api.Workflow.ProcessInstanceSearchParams) { - return request({ +export function fetchGetFinishedInstanceList(params: Api.Workflow.InstanceSearchParams) { + return request({ url: '/workflow/instance/pageByFinish', method: 'get', params @@ -19,7 +19,7 @@ export function fetchGetFinishedProcessInstanceList(params: Api.Workflow.Process } /** 按照实例id删除流程实例 */ -export function fetchBatchDeleteProcessInstance(instanceIds: CommonType.IdType[]) { +export function fetchBatchDeleteInstance(instanceIds: CommonType.IdType[]) { return request({ url: `/workflow/instance/deleteByInstanceIds/${instanceIds.join(',')}`, method: 'delete' @@ -42,3 +42,11 @@ export function fetchGetFlowHisTaskList(businessId: CommonType.IdType) { method: 'get' }); } +/** 流程作废操作 */ +export function fetchCancelProcessApply(data: Api.Workflow.CancelProcessApplyParams) { + return request({ + url: '/workflow/instance/cancelProcessApply', + method: 'put', + data + }); +} diff --git a/src/service/api/workflow/my-document.ts b/src/service/api/workflow/my-document.ts new file mode 100644 index 00000000..d6c91dc4 --- /dev/null +++ b/src/service/api/workflow/my-document.ts @@ -0,0 +1,11 @@ +/** 我的待办 */ + +import { request } from '@/service/request'; + +export function fetchGetMyDocument(data: Api.Workflow.InstanceSearchParams) { + return request({ + url: '/workflow/instance/pageByCurrent', + method: 'get', + params: data + }); +} diff --git a/src/typings/api/workflow.api.d.ts b/src/typings/api/workflow.api.d.ts index 9bac1c48..1299e70a 100644 --- a/src/typings/api/workflow.api.d.ts +++ b/src/typings/api/workflow.api.d.ts @@ -141,7 +141,7 @@ declare namespace Api { type WorkflowActivityStatus = 0 | 1; /** 流程实例 */ - type ProcessInstance = Common.CommonRecord<{ + type Instance = Common.CommonRecord<{ /** 主键 */ id: CommonType.IdType; /** 租户编号 */ @@ -194,15 +194,15 @@ declare namespace Api { }>; /** 流程实例搜索参数 */ - type ProcessInstanceSearchParams = CommonType.RecordNullable< - Pick & + type InstanceSearchParams = CommonType.RecordNullable< + Pick & Api.Common.CommonSearchParams & { startUserId: CommonType.IdType; createByIds: CommonType.IdType[]; } >; /** 流程实例列表 */ - type ProcessInstanceList = Common.PaginatingQueryRecord; + type InstanceList = Common.PaginatingQueryRecord; /** 流程作废操作参数 */ type FlowInvalidOperateParams = CommonType.RecordNullable<{ @@ -212,6 +212,14 @@ declare namespace Api { comment: string; }>; + /** 流程撤销操作参数 */ + type CancelProcessApplyParams = CommonType.RecordNullable<{ + /** 主键 */ + businessId: CommonType.IdType; + /** 撤销原因 */ + message: string; + }>; + /** 启动流程操作参数 */ type StartWorkflowOperateParams = CommonType.RecordNullable<{ /** 流程定义ID */ @@ -225,7 +233,7 @@ declare namespace Api { /** 启动流程结果 */ type StartWorkflowResult = CommonType.RecordNullable<{ /** 流程实例ID */ - processInstanceId: CommonType.IdType; + instanceId: CommonType.IdType; /** 任务ID */ taskId: CommonType.IdType; }>; diff --git a/src/typings/elegant-router.d.ts b/src/typings/elegant-router.d.ts index c7f9591e..6bb66642 100644 --- a/src/typings/elegant-router.d.ts +++ b/src/typings/elegant-router.d.ts @@ -61,6 +61,7 @@ declare module "@elegant-router/types" { "workflow_process-instance": "/workflow/process-instance"; "workflow_task": "/workflow/task"; "workflow_task_all-task-waiting": "/workflow/task/all-task-waiting"; + "workflow_task_my-document": "/workflow/task/my-document"; }; /** @@ -160,6 +161,7 @@ declare module "@elegant-router/types" { | "workflow_process-definition" | "workflow_process-instance" | "workflow_task_all-task-waiting" + | "workflow_task_my-document" >; /** diff --git a/src/views/workflow/process-instance/index.vue b/src/views/workflow/process-instance/index.vue index 4dff1eea..98283b7f 100644 --- a/src/views/workflow/process-instance/index.vue +++ b/src/views/workflow/process-instance/index.vue @@ -5,10 +5,10 @@ import { useBoolean, useLoading } from '@sa/hooks'; import { workflowActivityStatusRecord } from '@/constants/workflow'; import { fetchGetCategoryTree } from '@/service/api/workflow/category'; import { - fetchBatchDeleteProcessInstance, + fetchBatchDeleteInstance, fetchFlowInvalidOperate, - fetchGetFinishedProcessInstanceList, - fetchGetRunningProcessInstanceList + fetchGetFinishedInstanceList, + fetchGetRunningInstanceList } from '@/service/api/workflow/instance'; import { useAppStore } from '@/store/modules/app'; import { useTable, useTableOperate } from '@/hooks/common/table'; @@ -17,8 +17,8 @@ import { loadDynamicComponent } from '@/utils/common'; import DictTag from '@/components/custom/dict-tag.vue'; import { $t } from '@/locales'; import ButtonIcon from '@/components/custom/button-icon.vue'; -import ProcessInstanceSearch from './modules/process-instance-search.vue'; -import ProcessInstanceVariableDrawer from './modules/process-instance-variable-drawer.vue'; +import InstanceSearch from './modules/process-instance-search.vue'; +import InstanceVariableDrawer from './modules/process-instance-variable-drawer.vue'; const dynamicComponent = shallowRef(); @@ -28,7 +28,7 @@ interface RunningStatusOption { } defineOptions({ - name: 'ProcessInstanceList' + name: 'InstanceList' }); useDict('wf_business_status'); @@ -61,7 +61,7 @@ function createDefaultModel(): CancelModel { } // 基础列 -const baseColumns = ref[]>([ +const baseColumns = ref[]>([ { type: 'selection', align: 'center', @@ -136,7 +136,7 @@ const baseColumns = ref[]>([ ]); // 完成列 -const finishColumns = ref[]>([ +const finishColumns = ref[]>([ { key: 'updateTime', title: '结束时间', @@ -146,7 +146,7 @@ const finishColumns = ref[]>([ ]); // 操作列 -const operateColumns = ref[]>([ +const operateColumns = ref[]>([ { key: 'operate', title: $t('common.operate'), @@ -226,7 +226,7 @@ const { resetSearchParams, updateApiFn } = useTable({ - apiFn: fetchGetRunningProcessInstanceList, + apiFn: fetchGetRunningInstanceList, apiParams: { pageNum: 1, pageSize: 10, @@ -245,7 +245,7 @@ const { const { checkedRowKeys, editingData, handleEdit, onBatchDeleted, onDeleted } = useTableOperate(data, getData); // 监听运行状态变化 watch(runningStatus, async () => { - const newApiFn = runningStatus.value ? fetchGetRunningProcessInstanceList : fetchGetFinishedProcessInstanceList; + const newApiFn = runningStatus.value ? fetchGetRunningInstanceList : fetchGetFinishedInstanceList; updateApiFn(newApiFn); await getDataByPage(); reloadColumns(); @@ -290,14 +290,14 @@ function handleResetSearch() { async function handleBatchDelete() { // request - const { error } = await fetchBatchDeleteProcessInstance(checkedRowKeys.value); + const { error } = await fetchBatchDeleteInstance(checkedRowKeys.value); if (error) return; onBatchDeleted(); } async function handleDelete(instanceId: CommonType.IdType) { // request - const { error } = await fetchBatchDeleteProcessInstance([instanceId]); + const { error } = await fetchBatchDeleteInstance([instanceId]); if (error) return; onDeleted(); } @@ -320,7 +320,7 @@ const modules = import.meta.glob('@/components/custom/workflow/**/*.vue'); const businessId = ref(); /** 流程预览,动态加载组件 */ -async function handlePreview(row: Api.Workflow.ProcessInstance) { +async function handlePreview(row: Api.Workflow.Instance) { businessId.value = row.businessId; const formPath = row.formPath; if (formPath) { @@ -364,7 +364,7 @@ async function handlePreview(row: Api.Workflow.ProcessInstance) {
- +