From e354db74a7e57be88215ddba2ea11d3cbc944321 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期四, 06 六月 2024 11:00:23 +0800
Subject: [PATCH] !121 ♥️发布 2.2.0-BETA 公测版本 Merge pull request !121 from 疯狂的狮子Li/dev

---
 src/components/Process/submitVerify.vue       |  187 ++++++++++++----------
 src/views/index.vue                           |    1 
 src/api/workflow/leave/types.ts               |    4 
 src/api/workflow/processInstance/index.ts     |   36 ++--
 src/bpmn/panel/property/TaskListener.vue      |    4 
 src/types/global.d.ts                         |    2 
 src/api/workflow/workflowCommon/index.ts      |   48 +++---
 src/bpmn/panel/property/ExecutionListener.vue |    4 
 vite.config.ts                                |    1 
 src/views/workflow/processInstance/index.vue  |   13 +
 src/views/workflow/leave/leaveEdit.vue        |   26 --
 src/components/Process/approvalRecord.vue     |    6 
 src/bpmn/panel/GatewayPanel.vue               |    4 
 src/router/index.ts                           |    6 
 src/bpmn/hooks/usePanel.ts                    |    2 
 src/bpmn/index.vue                            |    2 
 src/bpmn/panel/ParticipantPanel.vue           |    4 
 src/views/workflow/leave/index.vue            |   36 +--
 src/views/workflow/task/myDocument.vue        |   26 +--
 src/bpmn/panel/index.vue                      |    2 
 src/bpmn/hooks/useParseElement.ts             |    2 
 src/views/system/oss/index.vue                |    2 
 src/bpmn/panel/TaskPanel.vue                  |    4 
 src/bpmn/panel/property/ListenerParam.vue     |    2 
 src/api/workflow/leave/index.ts               |   10 
 src/components/BpmnView/index.vue             |    7 
 /dev/null                                     |    3 
 src/bpmn/panel/ProcessPanel.vue               |    4 
 src/bpmn/panel/SequenceFlowPanel.vue          |    4 
 src/store/modules/modeler.ts                  |    2 
 package.json                                  |   12 -
 .env.production                               |    2 
 src/bpmn/panel/SubProcessPanel.vue            |    4 
 src/bpmn/panel/StartEndPanel.vue              |    4 
 34 files changed, 224 insertions(+), 252 deletions(-)

diff --git a/.env.production b/.env.production
index 2700ee0..9188c63 100644
--- a/.env.production
+++ b/.env.production
@@ -11,7 +11,7 @@
 VITE_APP_MONITRO_ADMIN = '/admin/applications'
 
 # SnailJob 鎺у埗鍙板湴鍧�
-VITE_APP_SNAILJOB_ADMIN = 'http://localhost:8800/snail-job'
+VITE_APP_SNAILJOB_ADMIN = '/snail-job'
 
 # 鐢熶骇鐜
 VITE_APP_BASE_API = '/prod-api'
diff --git a/package.json b/package.json
index 5154ed0..3557360 100644
--- a/package.json
+++ b/package.json
@@ -20,15 +20,12 @@
   "dependencies": {
     "@element-plus/icons-vue": "2.3.1",
     "@highlightjs/vue-plugin": "2.1.0",
-    "@lezer/common": "1.2.1",
     "@vueup/vue-quill": "1.2.0",
     "@vueuse/core": "10.9.0",
     "animate.css": "4.1.1",
     "await-to-js": "3.0.0",
     "axios": "1.6.8",
     "bpmn-js": "16.4.0",
-    "camunda-bpmn-js-behaviors": "1.2.2",
-    "camunda-bpmn-moddle": "7.0.1",
     "crypto-js": "4.2.0",
     "diagram-js": "12.3.0",
     "didi": "9.0.2",
@@ -40,21 +37,15 @@
     "image-conversion": "^2.1.1",
     "js-cookie": "3.0.5",
     "jsencrypt": "3.3.2",
-    "moddle": "6.2.3",
     "nprogress": "0.2.0",
-    "path-browserify": "1.0.1",
-    "path-to-regexp": "6.2.1",
     "pinia": "2.1.7",
-    "preact": "10.19.7",
     "screenfull": "6.0.2",
-    "vform3-builds": "3.0.10",
     "vue": "3.4.25",
     "vue-cropper": "1.1.1",
     "vue-i18n": "9.10.2",
     "vue-router": "4.3.2",
     "vue-types": "5.1.1",
-    "vxe-table": "4.5.22",
-    "zeebe-bpmn-moddle": "1.0.0"
+    "vxe-table": "4.5.22"
   },
   "devDependencies": {
     "@iconify/json": "2.2.201",
@@ -64,7 +55,6 @@
     "@types/js-cookie": "3.0.6",
     "@types/node": "18.18.2",
     "@types/nprogress": "0.2.3",
-    "@types/path-browserify": "1.0.2",
     "@typescript-eslint/eslint-plugin": "7.3.1",
     "@typescript-eslint/parser": "7.3.1",
     "@unocss/preset-attributify": "0.58.6",
diff --git a/src/api/workflow/leave/index.ts b/src/api/workflow/leave/index.ts
index 36c6fdf..4e6f363 100644
--- a/src/api/workflow/leave/index.ts
+++ b/src/api/workflow/leave/index.ts
@@ -10,7 +10,7 @@
 
 export const listLeave = (query?: LeaveQuery): AxiosPromise<LeaveVO[]> => {
   return request({
-    url: '/demo/leave/list',
+    url: '/workflow/leave/list',
     method: 'get',
     params: query
   });
@@ -22,7 +22,7 @@
  */
 export const getLeave = (id: string | number): AxiosPromise<LeaveVO> => {
   return request({
-    url: '/demo/leave/' + id,
+    url: '/workflow/leave/' + id,
     method: 'get'
   });
 };
@@ -33,7 +33,7 @@
  */
 export const addLeave = (data: LeaveForm): AxiosPromise<LeaveVO> => {
   return request({
-    url: '/demo/leave',
+    url: '/workflow/leave',
     method: 'post',
     data: data
   });
@@ -45,7 +45,7 @@
  */
 export const updateLeave = (data: LeaveForm): AxiosPromise<LeaveVO> => {
   return request({
-    url: '/demo/leave',
+    url: '/workflow/leave',
     method: 'put',
     data: data
   });
@@ -57,7 +57,7 @@
  */
 export const delLeave = (id: string | number | Array<string | number>) => {
   return request({
-    url: '/demo/leave/' + id,
+    url: '/workflow/leave/' + id,
     method: 'delete'
   });
 };
diff --git a/src/api/workflow/leave/types.ts b/src/api/workflow/leave/types.ts
index b093546..a44d35d 100644
--- a/src/api/workflow/leave/types.ts
+++ b/src/api/workflow/leave/types.ts
@@ -5,7 +5,7 @@
   endDate: string;
   leaveDays: number;
   remark: string;
-  processInstanceVo: any;
+  status?: string;
 }
 
 export interface LeaveForm extends BaseEntity {
@@ -15,7 +15,7 @@
   endDate?: string;
   leaveDays?: number;
   remark?: string;
-  processInstanceVo?: any;
+  status?: string;
 }
 
 export interface LeaveQuery extends PageQuery {
diff --git a/src/api/workflow/processInstance/index.ts b/src/api/workflow/processInstance/index.ts
index 80f122f..b949b51 100644
--- a/src/api/workflow/processInstance/index.ts
+++ b/src/api/workflow/processInstance/index.ts
@@ -29,33 +29,33 @@
 };
 
 /**
- * 閫氳繃娴佺▼瀹炰緥id鑾峰彇鍘嗗彶娴佺▼鍥�
+ * 閫氳繃涓氬姟id鑾峰彇鍘嗗彶娴佺▼鍥�
  */
-export const getHistoryImage = (processInstanceId: string) => {
+export const getHistoryImage = (businessKey: string) => {
   return request({
-    url: `/workflow/processInstance/getHistoryImage/${processInstanceId}` + '?t' + Math.random(),
+    url: `/workflow/processInstance/getHistoryImage/${businessKey}` + '?t' + Math.random(),
     method: 'get'
   });
 };
 
 /**
- * 閫氳繃娴佺▼瀹炰緥id鑾峰彇鍘嗗彶娴佺▼鍥捐繍琛屼腑锛屽巻鍙茬瓑鑺傜偣
+ * 閫氳繃涓氬姟id鑾峰彇鍘嗗彶娴佺▼鍥捐繍琛屼腑锛屽巻鍙茬瓑鑺傜偣
  */
-export const getHistoryList = (instanceId: string): AxiosPromise<Record<string, any>> => {
+export const getHistoryList = (businessKey: string): AxiosPromise<Record<string, any>> => {
   return request({
-    url: `/workflow/processInstance/getHistoryList/${instanceId}` + '?t' + Math.random(),
+    url: `/workflow/processInstance/getHistoryList/${businessKey}` + '?t' + Math.random(),
     method: 'get'
   });
 };
 
 /**
  * 鑾峰彇瀹℃壒璁板綍
- * @param processInstanceId 娴佺▼瀹炰緥id
+ * @param businessKey 涓氬姟id
  * @returns
  */
-export const getHistoryRecord = (processInstanceId: string) => {
+export const getHistoryRecord = (businessKey: string) => {
   return request({
-    url: `/workflow/processInstance/getHistoryRecord/${processInstanceId}`,
+    url: `/workflow/processInstance/getHistoryRecord/${businessKey}`,
     method: 'get'
   });
 };
@@ -75,24 +75,24 @@
 
 /**
  * 杩愯涓殑瀹炰緥 鍒犻櫎绋嬪疄渚嬶紝鍒犻櫎鍘嗗彶璁板綍锛屽垹闄や笟鍔′笌娴佺▼鍏宠仈淇℃伅
- * @param processInstanceId 娴佺▼瀹炰緥id
+ * @param businessKey 涓氬姟id
  * @returns
  */
-export const deleteRunAndHisInstance = (processInstanceId: string | string[]) => {
+export const deleteRunAndHisInstance = (businessKey: string | string[]) => {
   return request({
-    url: `/workflow/processInstance/deleteRunAndHisInstance/${processInstanceId}`,
+    url: `/workflow/processInstance/deleteRunAndHisInstance/${businessKey}`,
     method: 'delete'
   });
 };
 
 /**
  * 宸插畬鎴愮殑瀹炰緥 鍒犻櫎绋嬪疄渚嬶紝鍒犻櫎鍘嗗彶璁板綍锛屽垹闄や笟鍔′笌娴佺▼鍏宠仈淇℃伅
- * @param processInstanceId 娴佺▼瀹炰緥id
+ * @param businessKey 涓氬姟id
  * @returns
  */
-export const deleteFinishAndHisInstance = (processInstanceId: string | string[]) => {
+export const deleteFinishAndHisInstance = (businessKey: string | string[]) => {
   return request({
-    url: `/workflow/processInstance/deleteFinishAndHisInstance/${processInstanceId}`,
+    url: `/workflow/processInstance/deleteFinishAndHisInstance/${businessKey}`,
     method: 'delete'
   });
 };
@@ -112,12 +112,12 @@
 
 /**
  * 鎾ら攢娴佺▼
- * @param processInstanceId 娴佺▼瀹炰緥id
+ * @param businessKey 涓氬姟id
  * @returns
  */
-export const cancelProcessApply = (processInstanceId: string) => {
+export const cancelProcessApply = (businessKey: string) => {
   return request({
-    url: `/workflow/processInstance/cancelProcessApply/${processInstanceId}`,
+    url: `/workflow/processInstance/cancelProcessApply/${businessKey}`,
     method: 'post'
   });
 };
diff --git a/src/api/workflow/workflowCommon/index.ts b/src/api/workflow/workflowCommon/index.ts
index a90216a..63ce318 100644
--- a/src/api/workflow/workflowCommon/index.ts
+++ b/src/api/workflow/workflowCommon/index.ts
@@ -1,29 +1,29 @@
 import { RouterJumpVo } from '@/api/workflow/workflowCommon/types';
 
 export default {
-    routerJump(routerJumpVo: RouterJumpVo,proxy){
-        if (routerJumpVo.wfNodeConfigVo && routerJumpVo.wfNodeConfigVo.formType === 'static' && routerJumpVo.wfNodeConfigVo.wfFormManageVo) {
-            proxy.$tab.closePage(proxy.$route);
-            proxy.$router.push({
-                path: `${routerJumpVo.wfNodeConfigVo.wfFormManageVo.router}`,
-                query: {
-                    id: routerJumpVo.businessKey,
-                    type: routerJumpVo.type,
-                    taskId: routerJumpVo.taskId
-                }
-            });
-        } else if (routerJumpVo.wfNodeConfigVo && routerJumpVo.wfNodeConfigVo.formType === 'dynamic' && routerJumpVo.wfNodeConfigVo.wfFormManageVo) {
-            proxy.$tab.closePage(proxy.$route);
-            proxy.$router.push({
-                path: `${routerJumpVo.wfNodeConfigVo.wfFormManageVo.router}`,
-                query: {
-                    id: routerJumpVo.businessKey,
-                    type: routerJumpVo.type,
-                    taskId: routerJumpVo.taskId
-                }
-            });
-        }else {
-            proxy?.$modal.msgError('璇峰埌妯″瀷閰嶇疆鑿滃崟锛�');
+  routerJump(routerJumpVo: RouterJumpVo, proxy) {
+    if (routerJumpVo.wfNodeConfigVo && routerJumpVo.wfNodeConfigVo.formType === 'static' && routerJumpVo.wfNodeConfigVo.wfFormManageVo) {
+      proxy.$tab.closePage(proxy.$route);
+      proxy.$router.push({
+        path: `${routerJumpVo.wfNodeConfigVo.wfFormManageVo.router}`,
+        query: {
+          id: routerJumpVo.businessKey,
+          type: routerJumpVo.type,
+          taskId: routerJumpVo.taskId
         }
+      });
+    } else if (routerJumpVo.wfNodeConfigVo && routerJumpVo.wfNodeConfigVo.formType === 'dynamic' && routerJumpVo.wfNodeConfigVo.wfFormManageVo) {
+      proxy.$tab.closePage(proxy.$route);
+      proxy.$router.push({
+        path: `${routerJumpVo.wfNodeConfigVo.wfFormManageVo.router}`,
+        query: {
+          id: routerJumpVo.businessKey,
+          type: routerJumpVo.type,
+          taskId: routerJumpVo.taskId
+        }
+      });
+    } else {
+      proxy?.$modal.msgError('璇峰埌妯″瀷閰嶇疆鑿滃崟锛�');
     }
-}
\ No newline at end of file
+  }
+};
diff --git a/src/bpmn/hooks/usePanel.ts b/src/bpmn/hooks/usePanel.ts
index d92b7d7..ace579b 100644
--- a/src/bpmn/hooks/usePanel.ts
+++ b/src/bpmn/hooks/usePanel.ts
@@ -1,5 +1,5 @@
 import showConfig from '../assets/showConfig';
-import { ModdleElement } from 'bpmn';
+import type { ModdleElement } from 'bpmn';
 import useModelerStore from '@/store/modules/modeler';
 import { MultiInstanceTypeEnum } from '@/enums/bpmn/IndexEnums';
 interface Options {
diff --git a/src/bpmn/hooks/useParseElement.ts b/src/bpmn/hooks/useParseElement.ts
index a5a255d..e1a6054 100644
--- a/src/bpmn/hooks/useParseElement.ts
+++ b/src/bpmn/hooks/useParseElement.ts
@@ -1,4 +1,4 @@
-import { ModdleElement } from 'bpmn';
+import type { ModdleElement } from 'bpmn';
 
 interface Options {
   element: ModdleElement;
diff --git a/src/bpmn/index.vue b/src/bpmn/index.vue
index 924a838..15437c8 100644
--- a/src/bpmn/index.vue
+++ b/src/bpmn/index.vue
@@ -90,7 +90,7 @@
 import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-codes.css';
 import 'bpmn-js/dist/assets/bpmn-font/css/bpmn-embedded.css';
 import './assets/style/index.scss';
-import { Canvas, Modeler } from 'bpmn';
+import type { Canvas, Modeler } from 'bpmn';
 import PropertyPanel from './panel/index.vue';
 import BpmnModeler from 'bpmn-js/lib/Modeler.js';
 import defaultXML from './assets/defaultXML';
diff --git a/src/bpmn/panel/GatewayPanel.vue b/src/bpmn/panel/GatewayPanel.vue
index 5931539..20cc134 100644
--- a/src/bpmn/panel/GatewayPanel.vue
+++ b/src/bpmn/panel/GatewayPanel.vue
@@ -41,8 +41,8 @@
 <script setup lang="ts">
 import useParseElement from '../hooks/useParseElement';
 import usePanel from '../hooks/usePanel';
-import { Modeler, ModdleElement } from 'bpmn';
-import { GatewayPanel } from 'bpmnDesign';
+import type { Modeler, ModdleElement } from 'bpmn';
+import type { GatewayPanel } from 'bpmnDesign';
 import ExecutionListener from './property/ExecutionListener.vue';
 
 interface PropType {
diff --git a/src/bpmn/panel/ParticipantPanel.vue b/src/bpmn/panel/ParticipantPanel.vue
index cca28bd..b1d42e6 100644
--- a/src/bpmn/panel/ParticipantPanel.vue
+++ b/src/bpmn/panel/ParticipantPanel.vue
@@ -42,8 +42,8 @@
 import useParseElement from '../hooks/useParseElement';
 import usePanel from '../hooks/usePanel';
 import ExecutionListener from './property/ExecutionListener.vue';
-import { ModdleElement } from 'bpmn';
-import { ParticipantPanel } from 'bpmnDesign';
+import type { ModdleElement } from 'bpmn';
+import type { ParticipantPanel } from 'bpmnDesign';
 
 interface PropType {
   element: ModdleElement;
diff --git a/src/bpmn/panel/ProcessPanel.vue b/src/bpmn/panel/ProcessPanel.vue
index 7d9a359..9e118e2 100644
--- a/src/bpmn/panel/ProcessPanel.vue
+++ b/src/bpmn/panel/ProcessPanel.vue
@@ -43,8 +43,8 @@
 import ExecutionListener from './property/ExecutionListener.vue';
 import useParseElement from '../hooks/useParseElement';
 import usePanel from '../hooks/usePanel';
-import { Modeler, ModdleElement } from 'bpmn';
-import { ProcessPanel } from 'bpmnDesign';
+import type { Modeler, ModdleElement } from 'bpmn';
+import type { ProcessPanel } from 'bpmnDesign';
 
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 
diff --git a/src/bpmn/panel/SequenceFlowPanel.vue b/src/bpmn/panel/SequenceFlowPanel.vue
index fd8ad3c..eac8227 100644
--- a/src/bpmn/panel/SequenceFlowPanel.vue
+++ b/src/bpmn/panel/SequenceFlowPanel.vue
@@ -49,8 +49,8 @@
 import useModelerStore from '@/store/modules/modeler';
 import usePanel from '../hooks/usePanel';
 import ExecutionListener from './property/ExecutionListener.vue';
-import { Modeler, ModdleElement } from 'bpmn';
-import { SequenceFlowPanel } from 'bpmnDesign';
+import type { Modeler, ModdleElement } from 'bpmn';
+import type { SequenceFlowPanel } from 'bpmnDesign';
 
 interface PropType {
   element: ModdleElement;
diff --git a/src/bpmn/panel/StartEndPanel.vue b/src/bpmn/panel/StartEndPanel.vue
index d43ed80..bde1212 100644
--- a/src/bpmn/panel/StartEndPanel.vue
+++ b/src/bpmn/panel/StartEndPanel.vue
@@ -42,8 +42,8 @@
 import ExecutionListener from './property/ExecutionListener.vue';
 import useParseElement from '../hooks/useParseElement';
 import usePanel from '../hooks/usePanel';
-import { Modeler, ModdleElement } from 'bpmn';
-import { StartEndPanel } from 'bpmnDesign';
+import type { Modeler, ModdleElement } from 'bpmn';
+import type { StartEndPanel } from 'bpmnDesign';
 
 interface PropType {
   element: ModdleElement;
diff --git a/src/bpmn/panel/SubProcessPanel.vue b/src/bpmn/panel/SubProcessPanel.vue
index e0cedcb..3490fff 100644
--- a/src/bpmn/panel/SubProcessPanel.vue
+++ b/src/bpmn/panel/SubProcessPanel.vue
@@ -111,8 +111,8 @@
 import ExecutionListener from './property/ExecutionListener.vue';
 import useParseElement from '../hooks/useParseElement';
 import usePanel from '../hooks/usePanel';
-import { ModdleElement } from 'bpmn';
-import { SubProcessPanel } from 'bpmnDesign';
+import type { ModdleElement } from 'bpmn';
+import type { SubProcessPanel } from 'bpmnDesign';
 import { MultiInstanceTypeEnum } from '@/enums/bpmn/IndexEnums';
 
 interface PropType {
diff --git a/src/bpmn/panel/TaskPanel.vue b/src/bpmn/panel/TaskPanel.vue
index bc037ee..358fba9 100644
--- a/src/bpmn/panel/TaskPanel.vue
+++ b/src/bpmn/panel/TaskPanel.vue
@@ -243,8 +243,8 @@
 import ExecutionListener from './property/ExecutionListener.vue';
 import TaskListener from './property/TaskListener.vue';
 import DueDate from './property/DueDate.vue';
-import { ModdleElement } from 'bpmn';
-import { TaskPanel } from 'bpmnDesign';
+import type { ModdleElement } from 'bpmn';
+import type { TaskPanel } from 'bpmnDesign';
 import { AllocationTypeEnum, MultiInstanceTypeEnum, SpecifyDescEnum } from '@/enums/bpmn/IndexEnums';
 import { UserVO } from '@/api/system/user/types';
 import { RoleVO } from '@/api/system/role/types';
diff --git a/src/bpmn/panel/index.vue b/src/bpmn/panel/index.vue
index eecb0cb..445571a 100644
--- a/src/bpmn/panel/index.vue
+++ b/src/bpmn/panel/index.vue
@@ -13,7 +13,7 @@
 import SequenceFlowPanel from './SequenceFlowPanel.vue';
 import ParticipantPanel from './ParticipantPanel.vue';
 import SubProcessPanel from './SubProcessPanel.vue';
-import { Modeler, ModdleElement } from 'bpmn';
+import type { Modeler, ModdleElement } from 'bpmn';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
 interface propsType {
   modeler: Modeler;
diff --git a/src/bpmn/panel/property/ExecutionListener.vue b/src/bpmn/panel/property/ExecutionListener.vue
index 7620cf3..3c584cb 100644
--- a/src/bpmn/panel/property/ExecutionListener.vue
+++ b/src/bpmn/panel/property/ExecutionListener.vue
@@ -90,8 +90,8 @@
 <script setup lang="ts">
 import ListenerParam from './ListenerParam.vue';
 import { VxeTableEvents, VxeTableInstance, VxeTablePropTypes } from 'vxe-table';
-import { ExecutionListenerVO } from 'bpmnDesign';
-import { Moddle, Modeler, ModdleElement } from 'bpmn';
+import type { ExecutionListenerVO } from 'bpmnDesign';
+import type { Moddle, Modeler, ModdleElement } from 'bpmn';
 
 import usePanel from '../../hooks/usePanel';
 import useDialog from '@/hooks/useDialog';
diff --git a/src/bpmn/panel/property/ListenerParam.vue b/src/bpmn/panel/property/ListenerParam.vue
index 334249b..21c6de1 100644
--- a/src/bpmn/panel/property/ListenerParam.vue
+++ b/src/bpmn/panel/property/ListenerParam.vue
@@ -47,7 +47,7 @@
 
 <script setup lang="ts">
 import { VXETable, VxeTableInstance, VxeTablePropTypes } from 'vxe-table';
-import { ParamVO } from 'bpmnDesign';
+import type { ParamVO } from 'bpmnDesign';
 import useDialog from '@/hooks/useDialog';
 
 interface PropType {
diff --git a/src/bpmn/panel/property/TaskListener.vue b/src/bpmn/panel/property/TaskListener.vue
index db774e4..9a32c47 100644
--- a/src/bpmn/panel/property/TaskListener.vue
+++ b/src/bpmn/panel/property/TaskListener.vue
@@ -91,8 +91,8 @@
 <script setup lang="ts">
 import ListenerParam from './ListenerParam.vue';
 import { VxeTableEvents, VxeTableInstance, VxeTablePropTypes } from 'vxe-table';
-import { TaskListenerVO } from 'bpmnDesign';
-import { ModdleElement } from 'bpmn';
+import type { TaskListenerVO } from 'bpmnDesign';
+import type { ModdleElement } from 'bpmn';
 
 import usePanel from '../../hooks/usePanel';
 import useDialog from '@/hooks/useDialog';
diff --git a/src/components/BpmnView/index.vue b/src/components/BpmnView/index.vue
index a79f084..c5e0c7b 100644
--- a/src/components/BpmnView/index.vue
+++ b/src/components/BpmnView/index.vue
@@ -37,7 +37,7 @@
 import MoveCanvasModule from 'diagram-js/lib/navigation/movecanvas';
 import ZoomScrollModule from 'diagram-js/lib/navigation/zoomscroll';
 import { ModuleDeclaration } from 'didi';
-import { Canvas, ModdleElement } from 'bpmn';
+import type { Canvas, ModdleElement } from 'bpmn';
 import EventBus from 'diagram-js/lib/core/EventBus';
 import Overlays from 'diagram-js/lib/features/overlays/Overlays';
 import processApi from '@/api/workflow/processInstance/index';
@@ -51,7 +51,7 @@
 const bpmnVisible = ref(true);
 const historyList = ref([]);
 
-const init = (instanceId) => {
+const init = (businessKey) => {
   loading.value = true;
   bpmnVisible.value = true;
   nextTick(async () => {
@@ -67,7 +67,7 @@
         MoveCanvasModule
       ] as ModuleDeclaration[]
     });
-    const resp = await processApi.getHistoryList(instanceId);
+    const resp = await processApi.getHistoryList(businessKey);
     xml.value = resp.data.xml;
     taskList.value = resp.data.taskList;
     historyList.value = resp.data.historyList;
@@ -133,6 +133,7 @@
                     <p>寮�濮嬫椂闂达細${data.startTime || ''}</p>
                     <p>缁撴潫鏃堕棿锛�${data.endTime || ''}</p>
                     <p>瀹℃壒鑰楁椂锛�${data.runDuration || ''}</p>
+                    <p>娴佺▼鐗堟湰锛歷${data.version || ''}</p>
                    </div>`
   });
 };
diff --git a/src/components/Process/approvalRecord.vue b/src/components/Process/approvalRecord.vue
index cbce87a..37667ca 100644
--- a/src/components/Process/approvalRecord.vue
+++ b/src/components/Process/approvalRecord.vue
@@ -67,17 +67,17 @@
 const bpmnViewRef = ref<BpmnView>();
 
 //鍒濆鍖栨煡璇㈠鎵硅褰�
-const init = async (instanceId: string) => {
+const init = async (businessKey: string) => {
   visible.value = true;
   loading.value = true;
   tabActiveName.value = 'bpmn';
   historyList.value = [];
-  processApi.getHistoryRecord(instanceId).then((resp) => {
+  processApi.getHistoryRecord(businessKey).then((resp) => {
     historyList.value = resp.data;
     loading.value = false;
   });
   await nextTick(() => {
-    bpmnViewRef.value.init(instanceId);
+    bpmnViewRef.value.init(businessKey);
   });
 };
 
diff --git a/src/components/Process/submitVerify.vue b/src/components/Process/submitVerify.vue
index d71b855..bcbc657 100644
--- a/src/components/Process/submitVerify.vue
+++ b/src/components/Process/submitVerify.vue
@@ -8,29 +8,43 @@
           <el-checkbox label="3" name="type">鐭俊</el-checkbox>
         </el-checkbox-group>
       </el-form-item>
-      <el-form-item label="闄勪欢" v-if="task.businessStatus === 'waiting'">
-        <fileUpload v-model="form.fileId" :fileType="['doc', 'xls', 'ppt', 'txt', 'pdf', 'xlsx', 'docx', 'zip']" :fileSize="'20'"/>
+      <el-form-item v-if="task.businessStatus === 'waiting'" label="闄勪欢">
+        <fileUpload v-model="form.fileId" :file-type="['doc', 'xls', 'ppt', 'txt', 'pdf', 'xlsx', 'docx', 'zip']" :file-size="'20'" />
       </el-form-item>
       <el-form-item label="鎶勯��">
-        <el-button type="primary" @click="openUserSelectCopy" icon="Plus" circle />
-          <el-tag v-for="user in selectCopyUserList" :key="user.userId" closable style="margin: 2px" @close="handleCopyCloseTag(user)">
-            {{ user.userName }}
-          </el-tag>
+        <el-button type="primary" icon="Plus" circle @click="openUserSelectCopy" />
+        <el-tag v-for="user in selectCopyUserList" :key="user.userId" closable style="margin: 2px" @close="handleCopyCloseTag(user)">
+          {{ user.userName }}
+        </el-tag>
       </el-form-item>
-      <el-form-item label="瀹℃壒鎰忚" v-if="task.businessStatus === 'waiting'">
+      <el-form-item v-if="task.businessStatus === 'waiting'" label="瀹℃壒鎰忚">
         <el-input v-model="form.message" type="textarea" resize="none" />
       </el-form-item>
     </el-form>
     <template #footer>
       <span class="dialog-footer">
-        <el-button v-loading="buttonLoading" type="primary" @click="handleCompleteTask"> 鎻愪氦 </el-button>
-        <el-button v-if="task.businessStatus === 'waiting'" v-loading="buttonLoading" type="primary" @click="openDelegateTask"> 濮旀墭 </el-button>
-        <el-button v-if="task.businessStatus === 'waiting'" v-loading="buttonLoading" type="primary" @click="openTransferTask"> 杞姙 </el-button>
-        <el-button v-if="task.businessStatus === 'waiting' && task.multiInstance" v-loading="buttonLoading" type="primary" @click="addMultiInstanceUser"> 鍔犵 </el-button>
-        <el-button v-if="task.businessStatus === 'waiting' && task.multiInstance" v-loading="buttonLoading" type="primary" @click="deleteMultiInstanceUser"> 鍑忕 </el-button>
-        <el-button v-if="task.businessStatus === 'waiting'" v-loading="buttonLoading" type="danger" @click="handleTerminationTask"> 缁堟 </el-button>
-        <el-button v-if="task.businessStatus === 'waiting'" v-loading="buttonLoading" type="danger" @click="handleBackProcessOpen"> 閫�鍥� </el-button>
-        <el-button v-loading="buttonLoading" @click="cancel">鍙栨秷</el-button>
+        <el-button :disabled="buttonDisabled" type="primary" @click="handleCompleteTask"> 鎻愪氦 </el-button>
+        <el-button v-if="task.businessStatus === 'waiting'" :disabled="buttonDisabled" type="primary" @click="openDelegateTask"> 濮旀墭 </el-button>
+        <el-button v-if="task.businessStatus === 'waiting'" :disabled="buttonDisabled" type="primary" @click="openTransferTask"> 杞姙 </el-button>
+        <el-button
+          v-if="task.businessStatus === 'waiting' && task.multiInstance"
+          :disabled="buttonDisabled"
+          type="primary"
+          @click="addMultiInstanceUser"
+        >
+          鍔犵
+        </el-button>
+        <el-button
+          v-if="task.businessStatus === 'waiting' && task.multiInstance"
+          :disabled="buttonDisabled"
+          type="primary"
+          @click="deleteMultiInstanceUser"
+        >
+          鍑忕
+        </el-button>
+        <el-button v-if="task.businessStatus === 'waiting'" :disabled="buttonDisabled" type="danger" @click="handleTerminationTask"> 缁堟 </el-button>
+        <el-button v-if="task.businessStatus === 'waiting'" :disabled="buttonDisabled" type="danger" @click="handleBackProcessOpen"> 閫�鍥� </el-button>
+        <el-button :disabled="buttonDisabled" @click="cancel">鍙栨秷</el-button>
       </span>
     </template>
     <!-- 鎶勯�� -->
@@ -40,19 +54,14 @@
     <!-- 濮旀墭 -->
     <UserSelect ref="delegateTaskRef" :multiple="false" @confirm-call-back="handleDelegateTask"></UserSelect>
     <!-- 鍔犵缁勪欢 -->
-    <multiInstanceUser ref="multiInstanceUserRef" :title="title" @submit-callback='closeDialog' />
+    <multiInstanceUser ref="multiInstanceUserRef" :title="title" @submit-callback="closeDialog" />
 
     <!-- 椹冲洖寮�濮� -->
     <el-dialog v-model="backVisible" draggable title="椹冲洖" width="40%" :close-on-click-modal="false">
-      <el-form v-loading="backLoading" :model="backForm" label-width="120px" v-if="task.businessStatus === 'waiting'">
+      <el-form v-if="task.businessStatus === 'waiting'" v-loading="backLoading" :model="backForm" label-width="120px">
         <el-form-item label="椹冲洖鑺傜偣">
-          <el-select clearable placeholder="璇烽�夋嫨" v-model="backForm.targetActivityId" style="width: 300px">
-            <el-option
-              v-for="item in taskNodeList"
-              :key="item.nodeId"
-              :label="item.nodeName"
-              :value="item.nodeId"
-            />
+          <el-select v-model="backForm.targetActivityId" clearable placeholder="璇烽�夋嫨" style="width: 300px">
+            <el-option v-for="item in taskNodeList" :key="item.nodeId" :label="item.nodeName" :value="item.nodeId" />
           </el-select>
         </el-form-item>
         <el-form-item label="娑堟伅鎻愰啋">
@@ -67,9 +76,9 @@
         </el-form-item>
       </el-form>
       <template #footer>
-        <div class="dialog-footer" style="float: right;padding-bottom: 20px;">
-          <el-button type="primary" v-loading="backLoading" @click="handleBackProcess">纭</el-button>
-          <el-button v-loading="backLoading" @click="backVisible = false">鍙栨秷</el-button>
+        <div class="dialog-footer" style="float: right; padding-bottom: 20px">
+          <el-button :disabled="backButtonDisabled" type="primary" @click="handleBackProcess">纭</el-button>
+          <el-button :disabled="backButtonDisabled" @click="backVisible = false">鍙栨秷</el-button>
         </div>
       </template>
     </el-dialog>
@@ -81,7 +90,7 @@
 import { ref } from 'vue';
 import { ComponentInternalInstance } from 'vue';
 import { ElForm } from 'element-plus';
-import { completeTask, backProcess, getTaskById,transferTask,terminationTask,getTaskNodeList,delegateTask } from '@/api/workflow/task';
+import { completeTask, backProcess, getTaskById, transferTask, terminationTask, getTaskNodeList, delegateTask } from '@/api/workflow/task';
 import UserSelect from '@/components/UserSelect';
 import MultiInstanceUser from '@/components/Process/multiInstanceUser.vue';
 const { proxy } = getCurrentInstance() as ComponentInternalInstance;
@@ -91,7 +100,7 @@
 const transferTaskRef = ref<InstanceType<typeof UserSelect>>();
 const delegateTaskRef = ref<InstanceType<typeof UserSelect>>();
 
-  //鍔犵缁勪欢
+//鍔犵缁勪欢
 const multiInstanceUserRef = ref<InstanceType<typeof MultiInstanceUser>>();
 
 const props = defineProps({
@@ -103,7 +112,7 @@
 //閬僵灞�
 const loading = ref(true);
 //鎸夐挳
-const buttonLoading = ref(true);
+const buttonDisabled = ref(true);
 //浠诲姟id
 const taskId = ref<string>('');
 //鎶勯�佷汉
@@ -113,6 +122,7 @@
 // 椹冲洖鏄惁鏄剧ず
 const backVisible = ref(false);
 const backLoading = ref(true);
+const backButtonDisabled = ref(true);
 // 鍙┏鍥炲緱浠诲姟鑺傜偣
 const taskNodeList = ref([]);
 //浠诲姟
@@ -166,23 +176,23 @@
   messageType: ['1']
 });
 const closeDialog = () => {
-  dialog.visible = false
-}
+  dialog.visible = false;
+};
 //鎵撳紑寮圭獥
 const openDialog = (id?: string) => {
-  selectCopyUserIds.value = undefined
-  selectCopyUserList.value = []
-  form.value.fileId = undefined
+  selectCopyUserIds.value = undefined;
+  selectCopyUserList.value = [];
+  form.value.fileId = undefined;
   taskId.value = id;
   form.value.message = undefined;
   dialog.visible = true;
   loading.value = true;
-  buttonLoading.value = true;
+  buttonDisabled.value = true;
   nextTick(() => {
     getTaskById(taskId.value).then((response) => {
       task.value = response.data;
       loading.value = false;
-      buttonLoading.value = false;
+      buttonDisabled.value = false;
     });
   });
 };
@@ -194,58 +204,62 @@
 const handleCompleteTask = async () => {
   form.value.taskId = taskId.value;
   form.value.taskVariables = props.taskVariables;
-  if(selectCopyUserList && selectCopyUserList.value.length > 0){
-    let wfCopyList = []
-    selectCopyUserList.value.forEach( e=> {
+  if (selectCopyUserList.value && selectCopyUserList.value.length > 0) {
+    let wfCopyList = [];
+    selectCopyUserList.value.forEach((e) => {
       let copyUser = {
         userId: e.userId,
         userName: e.nickName
-      }
-      wfCopyList.push(copyUser)
-    })
-    form.value.wfCopyList = wfCopyList
+      };
+      wfCopyList.push(copyUser);
+    });
+    form.value.wfCopyList = wfCopyList;
   }
   await proxy?.$modal.confirm('鏄惁纭鎻愪氦锛�');
   loading.value = true;
-  buttonLoading.value = true;
+  buttonDisabled.value = true;
   try {
     await completeTask(form.value);
     dialog.visible = false;
     emits('submitCallback');
     proxy?.$modal.msgSuccess('鎿嶄綔鎴愬姛');
   } finally {
-    loading.value = false
-    buttonLoading.value = false
+    loading.value = false;
+    buttonDisabled.value = false;
   }
 };
 
 /** 椹冲洖寮圭獥鎵撳紑 */
 const handleBackProcessOpen = async () => {
-  backForm.value = {}
-  backForm.value.messageType = ['1']
-  backVisible.value = true
-  backLoading.value = true
-  let data = await getTaskNodeList(task.value.processInstanceId)
-  taskNodeList.value = data.data
-  backLoading.value = false
-  backForm.value.targetActivityId = taskNodeList.value[0].nodeId
-}
+  backForm.value = {};
+  backForm.value.messageType = ['1'];
+  backVisible.value = true;
+  backLoading.value = true;
+  backButtonDisabled.value = true;
+  let data = await getTaskNodeList(task.value.processInstanceId);
+  taskNodeList.value = data.data;
+  backLoading.value = false;
+  backButtonDisabled.value = false;
+  backForm.value.targetActivityId = taskNodeList.value[0].nodeId;
+};
 /** 椹冲洖娴佺▼ */
 const handleBackProcess = async () => {
   backForm.value.taskId = taskId.value;
   await proxy?.$modal.confirm('鏄惁纭椹冲洖鍒扮敵璇蜂汉锛�');
   loading.value = true;
   backLoading.value = true;
+  backButtonDisabled.value = true;
   await backProcess(backForm.value).finally(() => (loading.value = false));
   dialog.visible = false;
-  backLoading.value = false
+  backLoading.value = false;
+  backButtonDisabled.value = false;
   emits('submitCallback');
   proxy?.$modal.msgSuccess('鎿嶄綔鎴愬姛');
 };
 //鍙栨秷
 const cancel = async () => {
   dialog.visible = false;
-  buttonLoading.value = false;
+  buttonDisabled.value = false;
   emits('cancelCallback');
 };
 //鎵撳紑鎶勯�佷汉鍛�
@@ -254,11 +268,11 @@
 };
 //纭鎶勯�佷汉鍛�
 const userSelectCopyCallBack = (data: UserVO[]) => {
-  if(data && data.length > 0){
-    selectCopyUserList.value = data
+  if (data && data.length > 0) {
+    selectCopyUserList.value = data;
     selectCopyUserIds.value = selectCopyUserList.value.map((item) => item.userId).join(',');
   }
-}
+};
 //鍒犻櫎鎶勯�佷汉鍛�
 const handleCopyCloseTag = (user: UserVO) => {
   const userId = user.userId;
@@ -286,63 +300,62 @@
   transferTaskRef.value.open();
 };
 //杞姙
-const handleTransferTask  = async (data) => {
-  if(data && data.length > 0){
+const handleTransferTask = async (data) => {
+  if (data && data.length > 0) {
     let params = {
       taskId: taskId.value,
       userId: data[0].userId,
       comment: form.value.message
-    }
+    };
     await proxy?.$modal.confirm('鏄惁纭鎻愪氦锛�');
     loading.value = true;
-    buttonLoading.value = true;
+    buttonDisabled.value = true;
     await transferTask(params).finally(() => (loading.value = false));
     dialog.visible = false;
     emits('submitCallback');
     proxy?.$modal.msgSuccess('鎿嶄綔鎴愬姛');
-  }else{
+  } else {
     proxy?.$modal.msgWarning('璇烽�夋嫨鐢ㄦ埛锛�');
   }
-}
+};
 
 //鎵撳紑濮旀墭
 const openDelegateTask = () => {
   delegateTaskRef.value.open();
 };
 //濮旀墭
-const handleDelegateTask  = async (data) => {
-  if(data && data.length > 0){
+const handleDelegateTask = async (data) => {
+  if (data && data.length > 0) {
     let params = {
       taskId: taskId.value,
       userId: data[0].userId,
       nickName: data[0].nickName
-    }
+    };
     await proxy?.$modal.confirm('鏄惁纭鎻愪氦锛�');
     loading.value = true;
-    buttonLoading.value = true;
+    buttonDisabled.value = true;
     await delegateTask(params).finally(() => (loading.value = false));
     dialog.visible = false;
     emits('submitCallback');
     proxy?.$modal.msgSuccess('鎿嶄綔鎴愬姛');
-  }else{
+  } else {
     proxy?.$modal.msgWarning('璇烽�夋嫨鐢ㄦ埛锛�');
   }
-}
+};
 //缁堟浠诲姟
-const handleTerminationTask  = async (data) => {
-    let params = {
-      taskId: taskId.value,
-      comment: form.value.message
-    }
-    await proxy?.$modal.confirm('鏄惁纭缁堟锛�');
-    loading.value = true;
-    buttonLoading.value = true;
-    await terminationTask(params).finally(() => (loading.value = false));
-    dialog.visible = false;
-    emits('submitCallback');
-    proxy?.$modal.msgSuccess('鎿嶄綔鎴愬姛');
-  
-}
+const handleTerminationTask = async (data) => {
+  let params = {
+    taskId: taskId.value,
+    comment: form.value.message
+  };
+  await proxy?.$modal.confirm('鏄惁纭缁堟锛�');
+  loading.value = true;
+  buttonDisabled.value = true;
+  await terminationTask(params).finally(() => (loading.value = false));
+  dialog.visible = false;
+  emits('submitCallback');
+  proxy?.$modal.msgSuccess('鎿嶄綔鎴愬姛');
+};
 
 /**
  * 瀵瑰鏆撮湶瀛愮粍浠舵柟娉�
diff --git a/src/router/index.ts b/src/router/index.ts
index 2343685..438708f 100644
--- a/src/router/index.ts
+++ b/src/router/index.ts
@@ -164,16 +164,16 @@
     ]
   },
   {
-    path: '/demo/leaveEdit',
+    path: '/workflow/leaveEdit',
     component: Layout,
     hidden: true,
-    permissions: ['demo:leave:edit'],
+    permissions: ['workflow:leave:edit'],
     children: [
       {
         path: 'index',
         component: () => import('@/views/workflow/leave/leaveEdit.vue'),
         name: 'leaveEdit',
-        meta: { title: '璇峰亣鐢宠', activeMenu: '/demo/leave', noCache: true }
+        meta: { title: '璇峰亣鐢宠', activeMenu: '/workflow/leave', noCache: true }
       }
     ]
   }
diff --git a/src/store/modules/modeler.ts b/src/store/modules/modeler.ts
index 7b19c1a..204f450 100644
--- a/src/store/modules/modeler.ts
+++ b/src/store/modules/modeler.ts
@@ -1,4 +1,4 @@
-import { Modeler, Modeling, Canvas, ElementRegistry, Moddle, BpmnFactory } from 'bpmn';
+import type { Modeler, Modeling, Canvas, ElementRegistry, Moddle, BpmnFactory } from 'bpmn';
 
 type ModelerStore = {
   modeler: Modeler | undefined;
diff --git a/src/types/global.d.ts b/src/types/global.d.ts
index 17476a3..229e181 100644
--- a/src/types/global.d.ts
+++ b/src/types/global.d.ts
@@ -4,8 +4,6 @@
 declare global {
   /** vue Instance */
   declare type ComponentInternalInstance = ComponentInstance;
-  /**vue */
-  declare type PropType<T> = VuePropType<T>;
 
   /**
    * 鐣岄潰瀛楁闅愯棌灞炴��
diff --git a/src/views/index.vue b/src/views/index.vue
index 249a41b..e02c9fe 100644
--- a/src/views/index.vue
+++ b/src/views/index.vue
@@ -68,7 +68,6 @@
           * RPC杩滅▼璋冪敤 Apache Dubbo 鍘熺敓鎬佷娇鐢ㄤ綋楠屻�侀珮鎬ц兘<br />
           * 鍒嗗竷寮忛檺娴佺啍鏂� Alibaba Sentinel 鏃犱镜鍏ャ�侀珮鎵╁睍<br />
           * 鍒嗗竷寮忎簨鍔� Alibaba Seata 鏃犱镜鍏ャ�侀珮鎵╁睍 鏀寔 鍥涚妯″紡<br />
-          * 鍒嗗竷寮忔秷鎭槦鍒� Spring Cloud Stream 闂ㄩ潰妗嗘灦鍏煎鍚勭MQ闆嗘垚<br />
           * 鍒嗗竷寮忔秷鎭槦鍒� Apache Kafka 楂樻�ц兘楂橀�熷害<br />
           * 鍒嗗竷寮忔秷鎭槦鍒� Apache RocketMQ 楂樺彲鐢ㄥ姛鑳藉鏍�<br />
           * 鍒嗗竷寮忔秷鎭槦鍒� RabbitMQ 鏀寔鍚勭鎵╁睍鎻掍欢鍔熻兘澶氭牱鎬�<br />
diff --git a/src/views/system/oss/index.vue b/src/views/system/oss/index.vue
index a2f1f1b..2e50582 100644
--- a/src/views/system/oss/index.vue
+++ b/src/views/system/oss/index.vue
@@ -304,7 +304,7 @@
 const handleDownload = (row: OssVO) => {
   proxy?.$download.oss(row.ossId);
 };
-/** 鐢ㄦ埛鐘舵�佷慨鏀�  */
+/** 棰勮寮�鍏虫寜閽�  */
 const handlePreviewListResource = async (preview: boolean) => {
   let text = preview ? '鍚敤' : '鍋滅敤';
   try {
diff --git a/src/views/tool/build/index.vue b/src/views/tool/build/index.vue
deleted file mode 100644
index ef0c079..0000000
--- a/src/views/tool/build/index.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-<template>
-  <div>琛ㄥ崟鏋勫缓(鐢变簬姝ゅ姛鑳界殑寮�婧愮粍浠朵笉鏀寔 VUE3+TS 鏁呮殏鏃舵棤娉曚娇鐢�) <svg-icon icon-class="build" /></div>
-</template>
diff --git a/src/views/workflow/leave/index.vue b/src/views/workflow/leave/index.vue
index 23d5442..d9c50c4 100644
--- a/src/views/workflow/leave/index.vue
+++ b/src/views/workflow/leave/index.vue
@@ -22,10 +22,10 @@
       <template #header>
         <el-row :gutter="10" class="mb8">
           <el-col :span="1.5">
-            <el-button v-hasPermi="['demo:leave:add']" type="primary" plain icon="Plus" @click="handleAdd">鏂板</el-button>
+            <el-button v-hasPermi="['workflow:leave:add']" type="primary" plain icon="Plus" @click="handleAdd">鏂板</el-button>
           </el-col>
           <el-col :span="1.5">
-            <el-button v-hasPermi="['demo:leave:export']" type="warning" plain icon="Download" @click="handleExport">瀵煎嚭</el-button>
+            <el-button v-hasPermi="['workflow:leave:export']" type="warning" plain icon="Download" @click="handleExport">瀵煎嚭</el-button>
           </el-col>
           <right-toolbar v-model:showSearch="showSearch" @query-table="getList"></right-toolbar>
         </el-row>
@@ -53,18 +53,14 @@
         <el-table-column label="璇峰亣鍘熷洜" align="center" prop="remark" />
         <el-table-column align="center" label="娴佺▼鐘舵��" min-width="70">
           <template #default="scope">
-            <dict-tag :options="wf_business_status" :value="scope.row.processInstanceVo.businessStatus"></dict-tag>
+            <dict-tag :options="wf_business_status" :value="scope.row.status"></dict-tag>
           </template>
         </el-table-column>
         <el-table-column label="鎿嶄綔" align="center" class-name="small-padding fixed-width">
           <template #default="scope">
             <el-button
-              v-if="
-                scope.row.processInstanceVo.businessStatus === 'draft' ||
-                scope.row.processInstanceVo.businessStatus === 'cancel' ||
-                scope.row.processInstanceVo.businessStatus === 'back'
-              "
-              v-hasPermi="['demo:leave:edit']"
+              v-if="scope.row.status === 'draft' || scope.row.status === 'cancel' || scope.row.status === 'back'"
+              v-hasPermi="['workflow:leave:edit']"
               size="small"
               link
               type="primary"
@@ -73,12 +69,8 @@
               >淇敼</el-button
             >
             <el-button
-              v-if="
-                scope.row.processInstanceVo.businessStatus === 'draft' ||
-                scope.row.processInstanceVo.businessStatus === 'cancel' ||
-                scope.row.processInstanceVo.businessStatus === 'back'
-              "
-              v-hasPermi="['demo:leave:remove']"
+              v-if="scope.row.status === 'draft' || scope.row.status === 'cancel' || scope.row.status === 'back'"
+              v-hasPermi="['workflow:leave:remove']"
               size="small"
               link
               type="primary"
@@ -88,12 +80,12 @@
             >
             <el-button link type="primary" size="small" icon="View" @click="handleView(scope.row)">鏌ョ湅</el-button>
             <el-button
-              v-if="scope.row.processInstanceVo.businessStatus === 'waiting'"
+              v-if="scope.row.status === 'waiting'"
               link
               size="small"
               type="primary"
               icon="Notification"
-              @click="handleCancelProcessApply(scope.row.processInstanceVo.id)"
+              @click="handleCancelProcessApply(scope.row.id)"
               >鎾ら攢</el-button
             >
           </template>
@@ -184,9 +176,9 @@
 /** 鏂板鎸夐挳鎿嶄綔 */
 const handleAdd = () => {
   proxy.$tab.closePage(proxy.$route);
-  proxy.$router.push(`/demo/leaveEdit/index/add/add`);
+  proxy.$router.push(`/workflow/leaveEdit/index/add/add`);
   proxy.$router.push({
-    path: `/demo/leaveEdit/index`,
+    path: `/workflow/leaveEdit/index`,
     query: {
       type: 'add'
     }
@@ -197,7 +189,7 @@
 const handleUpdate = (row?: LeaveVO) => {
   proxy.$tab.closePage(proxy.$route);
   proxy.$router.push({
-    path: `/demo/leaveEdit/index`,
+    path: `/workflow/leaveEdit/index`,
     query: {
       id: row.id,
       type: 'update'
@@ -209,7 +201,7 @@
 const handleView = (row?: LeaveVO) => {
   proxy.$tab.closePage(proxy.$route);
   proxy.$router.push({
-    path: `/demo/leaveEdit/index`,
+    path: `/workflow/leaveEdit/index`,
     query: {
       id: row.id,
       type: 'view'
@@ -229,7 +221,7 @@
 /** 瀵煎嚭鎸夐挳鎿嶄綔 */
 const handleExport = () => {
   proxy?.download(
-    'demo/leave/export',
+    'workflow/leave/export',
     {
       ...queryParams.value
     },
diff --git a/src/views/workflow/leave/leaveEdit.vue b/src/views/workflow/leave/leaveEdit.vue
index e978ad8..d6210f0 100644
--- a/src/views/workflow/leave/leaveEdit.vue
+++ b/src/views/workflow/leave/leaveEdit.vue
@@ -6,12 +6,7 @@
           <el-button
             v-if="
               routeParams.type === 'add' ||
-              (routeParams.type === 'update' &&
-                form.processInstanceVo &&
-                form.processInstanceVo.businessStatus &&
-                (form.processInstanceVo.businessStatus === 'draft' ||
-                  form.processInstanceVo.businessStatus === 'cancel' ||
-                  form.processInstanceVo.businessStatus === 'back'))
+              (routeParams.type === 'update' && form.status && (form.status === 'draft' || form.status === 'cancel' || form.status === 'back'))
             "
             :loading="buttonLoading"
             type="info"
@@ -21,11 +16,7 @@
           <el-button
             v-if="
               routeParams.type === 'add' ||
-              (routeParams.type === 'update' &&
-                form.processInstanceVo &&
-                (form.processInstanceVo.businessStatus === 'draft' ||
-                  form.processInstanceVo.businessStatus === 'cancel' ||
-                  form.processInstanceVo.businessStatus === 'back'))
+              (routeParams.type === 'update' && form.status && (form.status === 'draft' || form.status === 'cancel' || form.status === 'back'))
             "
             :loading="buttonLoading"
             type="primary"
@@ -33,13 +24,13 @@
             >鎻� 浜�</el-button
           >
           <el-button
-            v-if="routeParams.type === 'approval' && form.processInstanceVo && form.processInstanceVo.businessStatus === 'waiting'"
+            v-if="routeParams.type === 'approval' && form.status && form.status === 'waiting'"
             :loading="buttonLoading"
             type="primary"
             @click="approvalVerifyOpen"
             >瀹℃壒</el-button
           >
-          <el-button v-if="processInstanceId" type="primary" @click="handleApprovalRecord">娴佺▼杩涘害</el-button>
+          <el-button v-if="form.status !== 'draft'" type="primary" @click="handleApprovalRecord">娴佺▼杩涘害</el-button>
         </div>
         <div>
           <el-button style="float: right" @click="goBack()">杩斿洖</el-button>
@@ -91,8 +82,6 @@
 const buttonLoading = ref(false);
 const loading = ref(true);
 const leaveTime = ref<Array<string>>([]);
-//娴佺▼瀹炰緥id
-const processInstanceId = ref('');
 //璺敱鍙傛暟
 const routeParams = ref<Record<string, any>>({});
 const options = [
@@ -134,7 +123,7 @@
   endDate: undefined,
   leaveDays: undefined,
   remark: undefined,
-  processInstanceVo: {}
+  status: undefined
 };
 const data = reactive<PageData<LeaveForm, LeaveQuery>>({
   form: { ...initFormData },
@@ -177,9 +166,6 @@
     leaveTime.value = [];
     leaveTime.value.push(form.value.startDate);
     leaveTime.value.push(form.value.endDate);
-    if (form.value.processInstanceVo) {
-      processInstanceId.value = form.value.processInstanceVo.id;
-    }
     loading.value = false;
     buttonLoading.value = false;
   });
@@ -243,7 +229,7 @@
 };
 //瀹℃壒璁板綍
 const handleApprovalRecord = () => {
-  approvalRecordRef.value.init(processInstanceId.value);
+  approvalRecordRef.value.init(form.value.id);
 };
 //鎻愪氦鍥炶皟
 const submitCallback = async () => {
diff --git a/src/views/workflow/processInstance/index.vue b/src/views/workflow/processInstance/index.vue
index 4f994af..7c60880 100644
--- a/src/views/workflow/processInstance/index.vue
+++ b/src/views/workflow/processInstance/index.vue
@@ -167,6 +167,8 @@
 const loading = ref(true);
 // 閫変腑鏁扮粍
 const ids = ref<Array<any>>([]);
+// 閫変腑涓氬姟id鏁扮粍
+const businessKeys = ref<Array<any>>([]);
 // 闈炲崟涓鐢�
 const single = ref(true);
 // 闈炲涓鐢�
@@ -257,6 +259,7 @@
 // 澶氶�夋閫変腑鏁版嵁
 const handleSelectionChange = (selection: ProcessInstanceVO[]) => {
   ids.value = selection.map((item: any) => item.id);
+  businessKeys.value = selection.map((item: any) => item.businessKey);
   single.value = selection.length !== 1;
   multiple.value = !selection.length;
 };
@@ -281,14 +284,14 @@
 
 /** 鍒犻櫎鎸夐挳鎿嶄綔 */
 const handleDelete = async (row: any) => {
-  const id = row.id || ids.value;
-  await proxy?.$modal.confirm('鏄惁纭鍒犻櫎id涓恒��' + id + '銆戠殑鏁版嵁椤癸紵');
+  const businessKey = row.businessKey || businessKeys.value;
+  await proxy?.$modal.confirm('鏄惁纭鍒犻櫎涓氬姟id涓恒��' + businessKey + '銆戠殑鏁版嵁椤癸紵');
   loading.value = true;
   if ('running' === tab.value) {
-    await deleteRunAndHisInstance(id).finally(() => (loading.value = false));
+    await deleteRunAndHisInstance(businessKey).finally(() => (loading.value = false));
     getProcessInstanceRunningList();
   } else {
-    await deleteFinishAndHisInstance(id).finally(() => (loading.value = false));
+    await deleteFinishAndHisInstance(businessKey).finally(() => (loading.value = false));
     getProcessInstanceFinishList();
   }
   proxy?.$modal.msgSuccess('鍒犻櫎鎴愬姛');
@@ -308,7 +311,7 @@
   loading.value = true;
   if ('running' === tab.value) {
     let param = {
-      processInstanceId: row.id,
+      businessKey: row.businessKey,
       deleteReason: deleteReason.value
     };
     await deleteRunInstance(param).finally(() => (loading.value = false));
diff --git a/src/views/workflow/task/myDocument.vue b/src/views/workflow/task/myDocument.vue
index e8592f8..1bf5bbf 100644
--- a/src/views/workflow/task/myDocument.vue
+++ b/src/views/workflow/task/myDocument.vue
@@ -75,20 +75,20 @@
                   content="淇敼"
                   placement="top"
                 >
-                  <el-button v-hasPermi="['demo:leave:edit']" link type="primary" icon="Edit" @click="handleOpen(scope.row, 'update')"></el-button>
+                  <el-button link type="primary" icon="Edit" @click="handleOpen(scope.row, 'update')"></el-button>
                 </el-tooltip>
                 <el-tooltip
                   v-if="scope.row.businessStatus === 'draft' || scope.row.businessStatus === 'cancel' || scope.row.businessStatus === 'back'"
                   content="鍒犻櫎"
                   placement="top"
                 >
-                  <el-button v-hasPermi="['demo:leave:remove']" link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button>
+                  <el-button link type="primary" icon="Delete" @click="handleDelete(scope.row)"></el-button>
                 </el-tooltip>
                 <el-tooltip placement="top" content="鏌ョ湅">
                   <el-button link type="primary" icon="View" @click="handleOpen(scope.row, 'view')"></el-button>
                 </el-tooltip>
                 <el-tooltip v-if="scope.row.businessStatus === 'waiting'" content="鎾ら攢" placement="top">
-                  <el-button link type="primary" icon="Notification" @click="handleCancelProcessApply(scope.row.id)"></el-button>
+                  <el-button link type="primary" icon="Notification" @click="handleCancelProcessApply(scope.row.businessKey)"></el-button>
                 </el-tooltip>
               </template>
             </el-table-column>
@@ -123,7 +123,7 @@
 // 閬僵灞�
 const loading = ref(true);
 // 閫変腑鏁扮粍
-const ids = ref<Array<any>>([]);
+const businessKeys = ref<Array<any>>([]);
 // 闈炲崟涓鐢�
 const single = ref(true);
 // 闈炲涓鐢�
@@ -190,12 +190,6 @@
   categoryOptions.value.push(data);
 };
 
-//瀹℃壒璁板綍
-const handleApprovalRecord = (processInstanceId: string) => {
-  if (approvalRecordRef.value) {
-    approvalRecordRef.value.init(processInstanceId);
-  }
-};
 /** 鎼滅储鎸夐挳鎿嶄綔 */
 const handleQuery = () => {
   getList();
@@ -210,7 +204,7 @@
 };
 // 澶氶�夋閫変腑鏁版嵁
 const handleSelectionChange = (selection: ProcessInstanceVO[]) => {
-  ids.value = selection.map((item: any) => item.id);
+  businessKeys.value = selection.map((item: any) => item.businessKey);
   single.value = selection.length !== 1;
   multiple.value = !selection.length;
 };
@@ -226,22 +220,22 @@
 
 /** 鍒犻櫎鎸夐挳鎿嶄綔 */
 const handleDelete = async (row: ProcessInstanceVO) => {
-  const id = row.id || ids.value;
-  await proxy?.$modal.confirm('鏄惁纭鍒犻櫎id涓恒��' + id + '銆戠殑鏁版嵁椤癸紵');
+  const businessKey = row.businessKey || businessKeys.value;
+  await proxy?.$modal.confirm('鏄惁纭鍒犻櫎涓氬姟id涓恒��' + businessKey + '銆戠殑鏁版嵁椤癸紵');
   loading.value = true;
   if ('running' === tab.value) {
-    await deleteRunAndHisInstance(id).finally(() => (loading.value = false));
+    await deleteRunAndHisInstance(businessKey).finally(() => (loading.value = false));
     getList();
   }
   proxy?.$modal.msgSuccess('鍒犻櫎鎴愬姛');
 };
 
 /** 鎾ら攢鎸夐挳鎿嶄綔 */
-const handleCancelProcessApply = async (processInstanceId: string) => {
+const handleCancelProcessApply = async (businessKey: string) => {
   await proxy?.$modal.confirm('鏄惁纭鎾ら攢褰撳墠鍗曟嵁锛�');
   loading.value = true;
   if ('running' === tab.value) {
-    await cancelProcessApply(processInstanceId).finally(() => (loading.value = false));
+    await cancelProcessApply(businessKey).finally(() => (loading.value = false));
     getList();
   }
   proxy?.$modal.msgSuccess('鎾ら攢鎴愬姛');
diff --git a/vite.config.ts b/vite.config.ts
index eea111e..f8b1200 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -61,7 +61,6 @@
         'pinia',
         'axios',
         '@vueuse/core',
-        'path-to-regexp',
         'echarts',
         'vue-i18n',
         '@vueup/vue-quill',

--
Gitblit v1.9.3