diff --git a/packages/hooks/src/use-table.ts b/packages/hooks/src/use-table.ts index 14d08c92..7c0bd095 100644 --- a/packages/hooks/src/use-table.ts +++ b/packages/hooks/src/use-table.ts @@ -64,7 +64,10 @@ export default function useHookTable(config: TableConfig< const { loading, startLoading, endLoading } = useLoading(); const { bool: empty, setBool: setEmpty } = useBoolean(); - const { apiFn, apiParams, transformer, immediate = true, getColumnChecks, getColumns } = config; + const { transformer, immediate = true, getColumnChecks, getColumns } = config; + + let currentApiFn = config.apiFn; + const apiParams = config.apiParams; const searchParams: NonNullable[0]> = reactive(jsonClone({ ...apiParams })); @@ -94,7 +97,7 @@ export default function useHookTable(config: TableConfig< const formattedParams = formatSearchParams(searchParams); - const response = await apiFn(formattedParams); + const response = await currentApiFn(formattedParams); const transformed = transformer(response as Awaited>); @@ -119,6 +122,10 @@ export default function useHookTable(config: TableConfig< return formattedParams; } + function updateApiFn(newApiFn: A) { + currentApiFn = newApiFn; + } + /** * update search params * @@ -148,6 +155,7 @@ export default function useHookTable(config: TableConfig< getData, searchParams, updateSearchParams, - resetSearchParams + resetSearchParams, + updateApiFn }; } diff --git a/src/constants/workflow.ts b/src/constants/workflow.ts index 234681be..05abae3d 100644 --- a/src/constants/workflow.ts +++ b/src/constants/workflow.ts @@ -8,3 +8,22 @@ export const workflowPublishStatusRecord: Record = { + 0: '开始节点', + 1: '中间节点', + 2: '结束节点', + 3: '互斥网关', + 4: '并行网关' +}; + +export const workflowNodeTypeOptions = transformRecordToOption(workflowNodeTypeRecord); + +/** activity status */ +export const workflowActivityStatusRecord: Record = { + 0: '挂起', + 1: '激活' +}; + +export const workflowActivityStatusOptions = transformRecordToOption(workflowActivityStatusRecord); diff --git a/src/hooks/common/table.ts b/src/hooks/common/table.ts index 6d465654..40e001be 100644 --- a/src/hooks/common/table.ts +++ b/src/hooks/common/table.ts @@ -32,7 +32,8 @@ export function useTable(config: NaiveUI.NaiveTabl getData, searchParams, updateSearchParams, - resetSearchParams + resetSearchParams, + updateApiFn } = useHookTable, TableColumn>>>({ apiFn, apiParams, @@ -212,7 +213,8 @@ export function useTable(config: NaiveUI.NaiveTabl getDataByPage, searchParams, updateSearchParams, - resetSearchParams + resetSearchParams, + updateApiFn }; } diff --git a/src/locales/langs/en-us.ts b/src/locales/langs/en-us.ts index 0e9fc22f..87df673f 100644 --- a/src/locales/langs/en-us.ts +++ b/src/locales/langs/en-us.ts @@ -218,7 +218,8 @@ const local: App.I18n.Schema = { exception_403: '403', exception_404: '404', exception_500: '500', - 'workflow_process-definition': 'Process Definition' + 'workflow_process-definition': 'Process Definition', + 'workflow_process-instance': 'Process Instance' }, page: { login: { diff --git a/src/locales/langs/zh-cn.ts b/src/locales/langs/zh-cn.ts index fe46e957..d7c78107 100644 --- a/src/locales/langs/zh-cn.ts +++ b/src/locales/langs/zh-cn.ts @@ -218,7 +218,8 @@ const local: App.I18n.Schema = { exception_403: '403', exception_404: '404', exception_500: '500', - 'workflow_process-definition': '流程定义' + 'workflow_process-definition': '流程定义', + 'workflow_process-instance': '流程实例' }, page: { login: { diff --git a/src/router/elegant/imports.ts b/src/router/elegant/imports.ts index e6206e98..fb83a8ba 100644 --- a/src/router/elegant/imports.ts +++ b/src/router/elegant/imports.ts @@ -45,4 +45,5 @@ export const views: Record Promise import("@/views/tool/gen/index.vue"), workflow_category: () => import("@/views/workflow/category/index.vue"), "workflow_process-definition": () => import("@/views/workflow/process-definition/index.vue"), + "workflow_process-instance": () => import("@/views/workflow/process-instance/index.vue"), }; diff --git a/src/router/elegant/routes.ts b/src/router/elegant/routes.ts index 85d79599..3472d9f6 100644 --- a/src/router/elegant/routes.ts +++ b/src/router/elegant/routes.ts @@ -358,6 +358,15 @@ export const generatedRoutes: GeneratedRoute[] = [ title: 'workflow_process-definition', i18nKey: 'route.workflow_process-definition' } + }, + { + name: 'workflow_process-instance', + path: '/workflow/process-instance', + component: 'view.workflow_process-instance', + meta: { + title: 'workflow_process-instance', + i18nKey: 'route.workflow_process-instance' + } } ] } diff --git a/src/router/elegant/transform.ts b/src/router/elegant/transform.ts index 4a54703c..2ef1d565 100644 --- a/src/router/elegant/transform.ts +++ b/src/router/elegant/transform.ts @@ -201,7 +201,8 @@ const routeMap: RouteMap = { "user-center": "/user-center", "workflow": "/workflow", "workflow_category": "/workflow/category", - "workflow_process-definition": "/workflow/process-definition" + "workflow_process-definition": "/workflow/process-definition", + "workflow_process-instance": "/workflow/process-instance" }; /** diff --git a/src/service/api/workflow/instance.ts b/src/service/api/workflow/instance.ts new file mode 100644 index 00000000..07f3e26c --- /dev/null +++ b/src/service/api/workflow/instance.ts @@ -0,0 +1,35 @@ +import { request } from '@/service/request'; + +/** 查询正在运行的流程实例列表 */ +export function fetchGetRunningProcessInstanceList(params: Api.Workflow.ProcessInstanceSearchParams) { + return request({ + url: '/workflow/instance/pageByRunning', + method: 'get', + params + }); +} + +/** 查询正在运行的流程实例列表 */ +export function fetchGetFinishProcessInstanceList(params: Api.Workflow.ProcessInstanceSearchParams) { + return request({ + url: '/workflow/instance/pageByFinish', + method: 'get', + params + }); +} +/** 查询已结束的流程实例列表 */ +export function fetchGetFinishedProcessInstanceList(params: Api.Workflow.ProcessInstanceSearchParams) { + return request({ + url: '/workflow/instance/pageByFinish', + method: 'get', + params + }); +} + +/** 按照实例id删除流程实例 */ +export function fetchBatchDeleteProcessInstance(instanceIds: CommonType.IdType[]) { + return request({ + url: `/workflow/deleteByInstanceIds/${instanceIds.join(',')}`, + method: 'delete' + }); +} diff --git a/src/typings/api/workflow.api.d.ts b/src/typings/api/workflow.api.d.ts index 781e52f4..73f50df5 100644 --- a/src/typings/api/workflow.api.d.ts +++ b/src/typings/api/workflow.api.d.ts @@ -86,5 +86,75 @@ declare namespace Api { /** definition list */ type DefinitionList = Api.Common.PaginatingQueryRecord; + + /** 节点类型 */ + type WorkflowNodeType = 0 | 1 | 2 | 3 | 4; + + /** 流程激活状态 */ + type WorkflowActivityStatus = 0 | 1; + + /** 流程实例 */ + type ProcessInstance = Common.CommonRecord<{ + /** 主键 */ + id: CommonType.IdType; + /** 租户编号 */ + tenantId: CommonType.IdType; + /** 分类ID */ + category: CommonType.IdType; + /** 分类名称 */ + categoryName: string; + /** 流程定义ID */ + definitionId: CommonType.IdType; + /** 流程定义名称 */ + flowName: string; + /** 流程定义编码 */ + flowCode: string; + /** 业务ID */ + businessId: CommonType.IdType; + /** 节点类型 */ + nodeType: WorkflowNodeType; + /** 节点编码 */ + nodeCode: string; + /** 节点名称 */ + nodeName: string; + /** 变量 */ + variable: string; + /** 流程状态 */ + flowStatus: string; + /** 流程状态名称 */ + flowStatusName: string; + /** 流程激活状态 */ + activityStatus: WorkflowActivityStatus; + /** 审批表单是否自定义 */ + formCustom: Api.Common.YesOrNoStatus; + /** 审批表单路径 */ + formPath: string; + /** 扩展字段 */ + ext: string; + /** 流程定义版本 */ + version: string; + /** 创建者 */ + createBy: string; + /** 创建者名称 */ + createByName: string; + /** 创建时间 */ + createTime: string; + + /** 更新时间 */ + updateTime: string; + /** 删除标志 */ + delFlag: number; + }>; + + /** 流程实例搜索参数 */ + type ProcessInstanceSearchParams = CommonType.RecordNullable< + Pick & + Api.Common.CommonSearchParams & { + startUserId: CommonType.IdType; + createByIds: CommonType.IdType[]; + } + >; + /** 流程实例列表 */ + type ProcessInstanceList = Common.PaginatingQueryRecord; } } diff --git a/src/typings/elegant-router.d.ts b/src/typings/elegant-router.d.ts index 58a4bd96..daca6040 100644 --- a/src/typings/elegant-router.d.ts +++ b/src/typings/elegant-router.d.ts @@ -56,6 +56,7 @@ declare module "@elegant-router/types" { "workflow": "/workflow"; "workflow_category": "/workflow/category"; "workflow_process-definition": "/workflow/process-definition"; + "workflow_process-instance": "/workflow/process-instance"; }; /** @@ -151,6 +152,7 @@ declare module "@elegant-router/types" { | "tool_gen" | "workflow_category" | "workflow_process-definition" + | "workflow_process-instance" >; /** diff --git a/src/views/workflow/process-definition/index.vue b/src/views/workflow/process-definition/index.vue index 5561b125..207a2109 100644 --- a/src/views/workflow/process-definition/index.vue +++ b/src/views/workflow/process-definition/index.vue @@ -258,7 +258,7 @@ function handleResetTreeData() { getTreeData(); } -const expandedKeys = ref([100]); +const expandedKeys = ref(['100']); const selectable = computed(() => { return !loading.value; diff --git a/src/views/workflow/process-instance/index.vue b/src/views/workflow/process-instance/index.vue new file mode 100644 index 00000000..35c08984 --- /dev/null +++ b/src/views/workflow/process-instance/index.vue @@ -0,0 +1,407 @@ + + + + + diff --git a/src/views/workflow/process-instance/modules/process-instance-search.vue b/src/views/workflow/process-instance/modules/process-instance-search.vue new file mode 100644 index 00000000..1593e0bf --- /dev/null +++ b/src/views/workflow/process-instance/modules/process-instance-search.vue @@ -0,0 +1,63 @@ + + +