Procházet zdrojové kódy

:zap: 新增事务功能

smallchill před 7 roky
rodič
revize
b10d0e148a

+ 34 - 0
src/api/work/process.js

@@ -0,0 +1,34 @@
+import request from '@/router/axios';
+
+// =====================参数===========================
+
+export const historyFlowList = (current, size, params) => {
+  return request({
+    url: '/api/blade-flow/process/history-flow-list',
+    method: 'get',
+    params: {
+      ...params,
+      current,
+      size,
+    }
+  })
+}
+
+
+// =====================请假流程===========================
+
+export const leaveProcess = (data) => {
+  return request({
+    url: '/api/blade-desk/process/leave/start-process',
+    method: 'post',
+    data
+  })
+}
+
+export const leaveDetail = (params) => {
+  return request({
+    url: '/api/blade-desk/process/leave/detail',
+    method: 'get',
+    params
+  })
+}

+ 3 - 1
src/page/index/index.vue

@@ -74,7 +74,7 @@
       showCollapse() {
         this.$store.commit("SET_COLLAPSE");
       },
-      // 屏幕检测
+      // 初始化
       init() {
         this.$store.commit("SET_SCREEN", admin.getScreen());
         window.onresize = () => {
@@ -82,6 +82,8 @@
             this.$store.commit("SET_SCREEN", admin.getScreen());
           }, 0);
         };
+        this.$store.dispatch("FlowRoutes").then(() => {
+        });
       },
       // 刷新token
       refreshToken() {

+ 3 - 3
src/router/views/index.js

@@ -44,7 +44,7 @@ export default [{
   component: Layout,
   redirect: '/work/process/leave/form',
   children: [{
-    path: 'form',
+    path: 'form/:processDefinitionId',
     name: '请假流程',
     meta: {
       i18n: 'work'
@@ -52,7 +52,7 @@ export default [{
     component: () =>
       import( /* webpackChunkName: "views" */ '@/views/work/process/leave/form')
   }, {
-    path: 'handle',
+    path: 'handle/:taskId/:processInstanceId/:businessId',
     name: '处理请假流程',
     meta: {
       i18n: 'work'
@@ -60,7 +60,7 @@ export default [{
     component: () =>
       import( /* webpackChunkName: "views" */ '@/views/work/process/leave/handle')
   }, {
-    path: 'detail',
+    path: 'detail/:processInstanceId/:businessId',
     name: '请假流程详情',
     meta: {
       i18n: 'work'

+ 25 - 24
src/store/getters.js

@@ -1,26 +1,27 @@
 const getters = {
-    tag: state => state.tags.tag,
-    language: state => state.common.language,
-    website: state => state.common.website,
-    userInfo: state => state.user.userInfo,
-    colorName: state => state.common.colorName,
-    themeName: state => state.common.themeName,
-    isShade: state => state.common.isShade,
-    isCollapse: state => state.common.isCollapse,
-    keyCollapse: (state, getters) => getters.screen > 1 ? getters.isCollapse : false,
-    screen: state => state.common.screen,
-    isLock: state => state.common.isLock,
-    isFullScren: state => state.common.isFullScren,
-    lockPasswd: state => state.common.lockPasswd,
-    tagList: state => state.tags.tagList,
-    tagWel: state => state.tags.tagWel,
-    token: state => state.user.token,
-    roles: state => state.user.roles,
-    permission: state => state.user.permission,
-    menu: state => state.user.menu,
-    menuAll: state => state.user.menuAll,
-    logsList: state => state.logs.logsList,
-    logsLen: state => state.logs.logsList.length || 0,
-    logsFlag: (state, getters) => getters.logsLen === 0
+  tag: state => state.tags.tag,
+  language: state => state.common.language,
+  website: state => state.common.website,
+  userInfo: state => state.user.userInfo,
+  colorName: state => state.common.colorName,
+  themeName: state => state.common.themeName,
+  isShade: state => state.common.isShade,
+  isCollapse: state => state.common.isCollapse,
+  keyCollapse: (state, getters) => getters.screen > 1 ? getters.isCollapse : false,
+  screen: state => state.common.screen,
+  isLock: state => state.common.isLock,
+  isFullScren: state => state.common.isFullScren,
+  lockPasswd: state => state.common.lockPasswd,
+  tagList: state => state.tags.tagList,
+  tagWel: state => state.tags.tagWel,
+  token: state => state.user.token,
+  roles: state => state.user.roles,
+  permission: state => state.user.permission,
+  menu: state => state.user.menu,
+  menuAll: state => state.user.menuAll,
+  logsList: state => state.logs.logsList,
+  logsLen: state => state.logs.logsList.length || 0,
+  logsFlag: (state, getters) => getters.logsLen === 0,
+  flowRoutes: state => state.dict.flowRoutes,
 }
-export default getters
+export default getters

+ 10 - 8
src/store/index.js

@@ -4,17 +4,19 @@ import user from './modules/user'
 import common from './modules/common'
 import tags from './modules/tags'
 import logs from './modules/logs'
+import dict from './modules/dict'
 import getters from './getters'
 
 Vue.use(Vuex)
 const store = new Vuex.Store({
-    modules: {
-        user,
-        common,
-        logs,
-        tags
-    },
-    getters,
+  modules: {
+    user,
+    common,
+    logs,
+    tags,
+    dict
+  },
+  getters,
 })
 
-export default store
+export default store

+ 88 - 87
src/store/modules/common.js

@@ -1,94 +1,95 @@
 import {
-    setStore,
-    getStore,
-    removeStore
+  setStore,
+  getStore,
+  removeStore
 } from '@/util/store'
 import website from '@/config/website'
+
 const common = {
 
-    state: {
-        language: getStore({ name: 'language' }) || 'zh',
-        isCollapse: false,
-        isFullScren: false,
-        isShade: false,
-        screen: -1,
-        isLock: getStore({ name: 'isLock' }) || false,
-        showTag: true,
-        showDebug: true,
-        showCollapse: true,
-        showSearch: true,
-        showLock: true,
-        showFullScren: true,
-        showTheme: true,
-        showMenu: true,
-        showColor: true,
-        colorName: getStore({ name: 'colorName' }) || '#409EFF',
-        themeName: getStore({ name: 'themeName' }) || 'theme-default',
-        lockPasswd: getStore({ name: 'lockPasswd' }) || '',
-        website: website,
+  state: {
+    language: getStore({name: 'language'}) || 'zh',
+    isCollapse: false,
+    isFullScren: false,
+    isShade: false,
+    screen: -1,
+    isLock: getStore({name: 'isLock'}) || false,
+    showTag: true,
+    showDebug: true,
+    showCollapse: true,
+    showSearch: true,
+    showLock: true,
+    showFullScren: true,
+    showTheme: true,
+    showMenu: true,
+    showColor: true,
+    colorName: getStore({name: 'colorName'}) || '#409EFF',
+    themeName: getStore({name: 'themeName'}) || 'theme-default',
+    lockPasswd: getStore({name: 'lockPasswd'}) || '',
+    website: website,
+  },
+  mutations: {
+    SET_LANGUAGE: (state, language) => {
+      state.language = language
+      setStore({
+        name: 'language',
+        content: state.language
+      })
+    },
+    SET_SHADE: (state, active) => {
+      state.isShade = active;
+    },
+    SET_COLLAPSE: (state) => {
+      state.isCollapse = !state.isCollapse;
+    },
+    SET_FULLSCREN: (state) => {
+      state.isFullScren = !state.isFullScren;
+    },
+    SET_LOCK: (state) => {
+      state.isLock = true;
+      setStore({
+        name: 'isLock',
+        content: state.isLock,
+        type: 'session'
+      })
+    },
+    SET_SCREEN: (state, screen) => {
+      state.screen = screen;
+    },
+    SET_COLOR_NAME: (state, colorName) => {
+      state.colorName = colorName;
+      setStore({
+        name: 'colorName',
+        content: state.colorName,
+      })
+    },
+    SET_THEME_NAME: (state, themeName) => {
+      state.themeName = themeName;
+      setStore({
+        name: 'themeName',
+        content: state.themeName,
+      })
+    },
+    SET_LOCK_PASSWD: (state, lockPasswd) => {
+      state.lockPasswd = lockPasswd;
+      setStore({
+        name: 'lockPasswd',
+        content: state.lockPasswd,
+        type: 'session'
+      })
+    },
+    CLEAR_LOCK: (state) => {
+      state.isLock = false;
+      state.lockPasswd = '';
+      removeStore({
+        name: 'lockPasswd',
+        type: 'session'
+      });
+      removeStore({
+        name: 'isLock',
+        type: 'session'
+      });
     },
-    mutations: {
-        SET_LANGUAGE: (state, language) => {
-            state.language = language
-            setStore({
-                name: 'language',
-                content: state.language
-            })
-        },
-        SET_SHADE: (state, active) => {
-            state.isShade = active;
-        },
-        SET_COLLAPSE: (state) => {
-            state.isCollapse = !state.isCollapse;
-        },
-        SET_FULLSCREN: (state) => {
-            state.isFullScren = !state.isFullScren;
-        },
-        SET_LOCK: (state) => {
-            state.isLock = true;
-            setStore({
-                name: 'isLock',
-                content: state.isLock,
-                type: 'session'
-            })
-        },
-        SET_SCREEN: (state, screen) => {
-            state.screen = screen;
-        },
-        SET_COLOR_NAME: (state, colorName) => {
-            state.colorName = colorName;
-            setStore({
-                name: 'colorName',
-                content: state.colorName,
-            })
-        },
-        SET_THEME_NAME: (state, themeName) => {
-            state.themeName = themeName;
-            setStore({
-                name: 'themeName',
-                content: state.themeName,
-            })
-        },
-        SET_LOCK_PASSWD: (state, lockPasswd) => {
-            state.lockPasswd = lockPasswd;
-            setStore({
-                name: 'lockPasswd',
-                content: state.lockPasswd,
-                type: 'session'
-            })
-        },
-        CLEAR_LOCK: (state) => {
-            state.isLock = false;
-            state.lockPasswd = '';
-            removeStore({
-                name: 'lockPasswd',
-                type: 'session'
-            });
-            removeStore({
-                name: 'isLock',
-                type: 'session'
-            });
-        },
-    }
+  }
 }
-export default common
+export default common

+ 36 - 0
src/store/modules/dict.js

@@ -0,0 +1,36 @@
+import {getStore, setStore} from '@/util/store'
+
+import {getDictionary} from '@/api/system/dict'
+
+const dict = {
+  state: {
+    flowRoutes: getStore({name: 'flowRoutes'}) || {},
+  },
+  actions: {
+    //发送错误日志
+    FlowRoutes({commit}) {
+      return new Promise((resolve, reject) => {
+        getDictionary({code: 'flow'}).then(res => {
+          commit('SET_FLOW_ROUTES', res.data.data);
+          resolve();
+        }).catch(error => {
+          reject(error)
+        })
+      })
+    },
+  },
+  mutations: {
+    SET_FLOW_ROUTES: (state, data) => {
+      state.flowRoutes = data.map(item => {
+        return {
+          routeKey: `${item.code}_${item.dictKey}`,
+          routeValue: item.remark,
+        };
+      });
+      setStore({name: 'flowRoutes', content: state.flowRoutes, type: 'session'})
+    },
+  }
+
+};
+
+export default dict;

+ 35 - 35
src/store/modules/logs.js

@@ -1,42 +1,42 @@
-import { setStore, getStore } from '@/util/store'
-import { dateFormat } from '@/util/date'
-import { sendLogs } from '@/api/user'
+import {setStore, getStore} from '@/util/store'
+import {dateFormat} from '@/util/date'
+import {sendLogs} from '@/api/user'
+
 const logs = {
-    state: {
-        logsList: getStore({ name: 'logsList' }) || [],
+  state: {
+    logsList: getStore({name: 'logsList'}) || [],
+  },
+  actions: {
+    SendLogs({state, commit}) {
+      return new Promise((resolve, reject) => {
+        sendLogs(state.logsList).then(() => {
+          commit('CLEAR_LOGS');
+          resolve();
+        }).catch(error => {
+          reject(error)
+        })
+      })
     },
-    actions: {
-        //发送错误日志
-        SendLogs({ state, commit }) {
-            return new Promise((resolve, reject) => {
-                sendLogs(state.logsList).then(() => {
-                    commit('CLEAR_LOGS');
-                    resolve();
-                }).catch(error => {
-                    reject(error)
-                })
-            })
-        },
+  },
+  mutations: {
+    ADD_LOGS: (state, {type, message, stack, info}) => {
+      state.logsList.push(Object.assign({
+        url: window.location.href,
+        time: dateFormat(new Date())
+      }, {
+        type,
+        message,
+        stack,
+        info: info.toString()
+      }))
+      setStore({name: 'logsList', content: state.logsList})
     },
-    mutations: {
-        ADD_LOGS: (state, { type, message, stack, info }) => {
-            state.logsList.push(Object.assign({
-                url: window.location.href,
-                time: dateFormat(new Date())
-            }, {
-                    type,
-                    message,
-                    stack,
-                    info: info.toString()
-                }))
-            setStore({ name: 'logsList', content: state.logsList })
-        },
-        CLEAR_LOGS: (state) => {
-            state.logsList = [];
-            setStore({ name: 'logsList', content: state.logsList })
-        }
+    CLEAR_LOGS: (state) => {
+      state.logsList = [];
+      setStore({name: 'logsList', content: state.logsList})
     }
+  }
 
 };
 
-export default logs;
+export default logs;

+ 58 - 58
src/store/modules/tags.js

@@ -1,72 +1,72 @@
-import { setStore, getStore } from '@/util/store'
-import { diff } from '@/util/util'
+import {setStore, getStore} from '@/util/store'
+import {diff} from '@/util/util'
 import website from '@/config/website'
+
 const isFirstPage = website.isFirstPage;
 const tagWel = website.fistPage;
 const tagObj = {
-    label: '', //标题名称
-    value: '', //标题的路径
-    params: '', //标题的路径参数
-    query: '', //标题的参数
-    meta: {},//额外参数
-    group: [], //分组
+  label: '', //标题名称
+  value: '', //标题的路径
+  params: '', //标题的路径参数
+  query: '', //标题的参数
+  meta: {},//额外参数
+  group: [], //分组
 }
+
 //处理首个标签
 function setFistTag(list) {
-    if (list.length == 1) {
-        list[0].close = false;
-    } else {
-        list.forEach(ele => {
-            if (ele.value === tagWel.value && isFirstPage === false) {
-                ele.close = false
-            } else {
-                ele.close = true
-            }
-        })
-    }
+  if (list.length == 1) {
+    list[0].close = false;
+  } else {
+    list.forEach(ele => {
+      if (ele.value === tagWel.value && isFirstPage === false) {
+        ele.close = false
+      } else {
+        ele.close = true
+      }
+    })
+  }
 }
 
 
 const navs = {
-    state: {
-        tagList: getStore({ name: 'tagList' }) || [],
-        tag: getStore({ name: 'tag' }) || tagObj,
-        tagWel: tagWel
+  state: {
+    tagList: getStore({name: 'tagList'}) || [],
+    tag: getStore({name: 'tag'}) || tagObj,
+    tagWel: tagWel
+  },
+  actions: {},
+  mutations: {
+    ADD_TAG: (state, action) => {
+      state.tag = action;
+      setStore({name: 'tag', content: state.tag, type: 'session'})
+      if (state.tagList.some(ele => diff(ele, action))) return
+      state.tagList.push(action)
+      setFistTag(state.tagList);
+      setStore({name: 'tagList', content: state.tagList, type: 'session'})
     },
-    actions: {
-
+    DEL_TAG: (state, action) => {
+      state.tagList = state.tagList.filter(item => {
+        return !diff(item, action);
+      })
+      setFistTag(state.tagList);
+      setStore({name: 'tagList', content: state.tagList, type: 'session'})
+    },
+    DEL_ALL_TAG: (state) => {
+      state.tagList = [state.tagWel];
+      setStore({name: 'tagList', content: state.tagList, type: 'session'})
+    },
+    DEL_TAG_OTHER: (state) => {
+      state.tagList = state.tagList.filter(item => {
+        if (item.value === state.tag.value) {
+          return true;
+        } else if (!website.isFirstPage && item.value === website.fistPage.value) {
+          return true;
+        }
+      })
+      setFistTag(state.tagList);
+      setStore({name: 'tagList', content: state.tagList, type: 'session'})
     },
-    mutations: {
-        ADD_TAG: (state, action) => {
-            state.tag = action;
-            setStore({ name: 'tag', content: state.tag, type: 'session' })
-            if (state.tagList.some(ele => diff(ele, action))) return
-            state.tagList.push(action)
-            setFistTag(state.tagList);
-            setStore({ name: 'tagList', content: state.tagList, type: 'session' })
-        },
-        DEL_TAG: (state, action) => {
-            state.tagList = state.tagList.filter(item => {
-                return !diff(item, action);
-            })
-            setFistTag(state.tagList);
-            setStore({ name: 'tagList', content: state.tagList, type: 'session' })
-        },
-        DEL_ALL_TAG: (state) => {
-            state.tagList = [state.tagWel];
-            setStore({ name: 'tagList', content: state.tagList, type: 'session' })
-        },
-        DEL_TAG_OTHER: (state) => {
-            state.tagList = state.tagList.filter(item => {
-                if (item.value === state.tag.value) {
-                    return true;
-                } else if (!website.isFirstPage && item.value === website.fistPage.value) {
-                    return true;
-                }
-            })
-            setFistTag(state.tagList);
-            setStore({ name: 'tagList', content: state.tagList, type: 'session' })
-        },
-    }
+  }
 }
-export default navs
+export default navs

+ 1 - 1
src/store/modules/user.js

@@ -46,7 +46,7 @@ const user = {
       return new Promise((resolve) => {
         loginByUsername(userInfo.tenantCode, userInfo.username, userInfo.password, userInfo.type).then(res => {
           const data = res.data;
-          if(data.error_description) {
+          if (data.error_description) {
             Message({
               message: data.error_description,
               type: 'error'

+ 92 - 0
src/util/func.js

@@ -0,0 +1,92 @@
+/**
+ * 不为空
+ * @param val
+ * @returns {boolean}
+ */
+export function notEmpty(val) {
+  return !this.isEmpty(val);
+}
+
+/**
+ * 为空
+ * @param val
+ * @returns {boolean}
+ */
+export function isEmpty(val) {
+  if (
+    val === null ||
+    typeof val === 'undefined' ||
+    (typeof val === 'string' && val === '' && val !== 'undefined')
+  ) {
+    return true;
+  }
+  return false;
+}
+
+/**
+ * 强转int型
+ * @param val
+ * @param defaultValue
+ * @returns {number}
+ */
+export function toInt(val, defaultValue) {
+  if (this.isEmpty(val)) {
+    return defaultValue === undefined ? -1 : defaultValue;
+  }
+  const num = parseInt(val, 0);
+  return Number.isNaN(num) ? (defaultValue === undefined ? -1 : defaultValue) : num;
+}
+
+/**
+ * Json强转为Form类型
+ * @param obj
+ * @returns {FormData}
+ */
+export function toFormData(obj) {
+  const data = new FormData();
+  Object.keys(obj).forEach(key => {
+    data.append(key, Array.isArray(obj[key]) ? obj[key].join(',') : obj[key]);
+  });
+  return data;
+}
+
+/**
+ * date类转为字符串格式
+ * @param date
+ * @param format
+ * @returns {null}
+ */
+export function format(date, format = 'YYYY-MM-DD HH:mm:ss') {
+  return date ? date.format(format) : null;
+}
+
+/**
+ * 根据逗号联合
+ * @param arr
+ * @returns {string}
+ */
+export function join(arr) {
+  return arr ? arr.join(',') : '';
+}
+
+/**
+ * 根据逗号分隔
+ * @param str
+ * @returns {string}
+ */
+export function split(str) {
+  return str ? String(str).split(',') : '';
+}
+
+/**
+ * 根据key获取流程路由
+ * @param routes
+ * @param key
+ */
+export function getFlowRoute(routes, key) {
+  const data = routes.filter(d => {
+    return d.routeKey === key;
+  });
+  return data.length === 0 ? [] : data[0].routeValue;
+}
+

+ 4 - 3
src/views/work/claim.vue

@@ -61,8 +61,9 @@
 </template>
 
 <script>
-  import {claimList} from "@/api/work/work";
   import {mapGetters} from "vuex";
+  import {claimList} from "@/api/work/work";
+  import {getFlowRoute} from "@/util/func";
 
   export default {
     data() {
@@ -127,7 +128,7 @@
       };
     },
     computed: {
-      ...mapGetters(["permission"]),
+      ...mapGetters(["permission", "flowRoutes"]),
       ids() {
         let ids = [];
         this.selectionList.forEach(ele => {
@@ -150,7 +151,7 @@
 
       },
       handleDetail(row) {
-        this.$router.push({path: `/work/process/${this.routes[row.category]}/detail?processInstanceId=${row.processInstanceId}&businessId=${row.businessId}`});
+        this.$router.push({ path: `/work/process/${getFlowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}` });
       },
       handleImage(row) {
         this.flowUrl = `/api/blade-flow/process/diagram-view?processInstanceId=${row.processInstanceId}`;

+ 4 - 3
src/views/work/done.vue

@@ -54,8 +54,9 @@
 </template>
 
 <script>
-  import {doneList} from "@/api/work/work";
   import {mapGetters} from "vuex";
+  import {doneList} from "@/api/work/work";
+  import {getFlowRoute} from "@/util/func";
 
   export default {
     data() {
@@ -120,7 +121,7 @@
       };
     },
     computed: {
-      ...mapGetters(["permission"]),
+      ...mapGetters(["permission", "flowRoutes"]),
       ids() {
         let ids = [];
         this.selectionList.forEach(ele => {
@@ -140,7 +141,7 @@
         this.selectionList = list;
       },
       handleDetail(row) {
-        this.$router.push({path: `/work/process/${this.routes[row.category]}/detail?processInstanceId=${row.processInstanceId}&businessId=${row.businessId}`});
+        this.$router.push({ path: `/work/process/${getFlowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}` });
       },
       handleImage(row) {
         this.flowUrl = `/api/blade-flow/process/diagram-view?processInstanceId=${row.processInstanceId}`;

+ 23 - 8
src/views/work/process/leave/form.vue

@@ -5,16 +5,16 @@
 </template>
 
 <script>
+  import {leaveProcess} from "@/api/work/process";
+
   export default {
     data() {
       return {
-        form: {
-
-        },
+        form: {},
         option: {
-          group:[
+          group: [
             {
-              icon:'el-icon-info',
+              icon: 'el-icon-info',
               label: '请假基础信息',
               prop: 'group1',
               column: [
@@ -27,7 +27,7 @@
                     label: "account",
                     value: "id"
                   },
-                  span:24,
+                  span: 24,
                   rules: [
                     {
                       required: true,
@@ -40,6 +40,7 @@
                   label: '开始时间',
                   prop: 'startTime',
                   type: 'datetime',
+                  valueFormat: 'yyyy-MM-dd HH:mm:ss',
                   rules: [
                     {
                       required: true,
@@ -52,6 +53,7 @@
                   label: '结束时间',
                   prop: 'endTime',
                   type: 'datetime',
+                  valueFormat: 'yyyy-MM-dd HH:mm:ss',
                   rules: [
                     {
                       required: true,
@@ -64,7 +66,7 @@
                   label: '请假理由',
                   prop: 'reason',
                   type: 'textarea',
-                  span:24,
+                  span: 24,
                   rules: [
                     {
                       required: true,
@@ -81,7 +83,20 @@
     },
     methods: {
       handleSubmit() {
-        this.$message.success('当前数据' + JSON.stringify(this.form))
+        const params = {
+          processDefinitionId: this.$route.params.processDefinitionId,
+          ...this.form,
+        };
+        leaveProcess(params).then(resp => {
+          const data = resp.data;
+          if (data.success) {
+            this.$message.success(data.msg);
+            this.$router.$avueRouter.closeTag();
+            this.$router.push({path: `/work/start`});
+          } else {
+            this.$message.error(data.msg || '提交失败');
+          }
+        });
       }
     }
   }

+ 4 - 3
src/views/work/send.vue

@@ -58,8 +58,9 @@
 </template>
 
 <script>
-  import {sendList} from "@/api/work/work";
   import {mapGetters} from "vuex";
+  import {sendList} from "@/api/work/work";
+  import {getFlowRoute} from "@/util/func";
 
   export default {
     data() {
@@ -129,7 +130,7 @@
       };
     },
     computed: {
-      ...mapGetters(["permission"]),
+      ...mapGetters(["permission", "flowRoutes"]),
       ids() {
         let ids = [];
         this.selectionList.forEach(ele => {
@@ -149,7 +150,7 @@
         this.selectionList = list;
       },
       handleDetail(row) {
-        this.$router.push({path: `/work/process/${this.routes[row.category]}/detail?processInstanceId=${row.processInstanceId}&businessId=${row.businessId}`});
+        this.$router.push({ path: `/work/process/${getFlowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}` });
       },
       handleImage(row) {
         this.flowUrl = `/api/blade-flow/process/diagram-view?processInstanceId=${row.processInstanceId}`;

+ 5 - 7
src/views/work/start.vue

@@ -62,16 +62,13 @@
 </template>
 
 <script>
-  import {startList} from "@/api/work/work";
   import {mapGetters} from "vuex";
+  import {startList} from "@/api/work/work";
+  import {getFlowRoute} from "@/util/func";
 
   export default {
     data() {
       return {
-        routes: {
-          flow_1: 'leave',
-          flow_2: 'expense',
-        },
         form: {},
         selectionId: '',
         selectionList: [],
@@ -136,7 +133,7 @@
       };
     },
     computed: {
-      ...mapGetters(["permission"]),
+      ...mapGetters(["permission", "flowRoutes"]),
       ids() {
         let ids = [];
         this.selectionList.forEach(ele => {
@@ -156,7 +153,8 @@
         this.selectionList = list;
       },
       handleStart(row) {
-        this.$router.push({ path: `/work/process/${this.routes[row.category]}/form?id=${row.id}` });
+        console.log(this.flowRoutes)
+        this.$router.push({path: `/work/process/${getFlowRoute(this.flowRoutes, row.category)}/form/${row.id}`});
       },
       handleImage(row) {
         this.flowUrl = `/api/blade-flow/process/resource-view?processDefinitionId=${row.id}`;

+ 4 - 3
src/views/work/todo.vue

@@ -61,8 +61,9 @@
 </template>
 
 <script>
-  import {todoList} from "@/api/work/work";
   import {mapGetters} from "vuex";
+  import {todoList} from "@/api/work/work";
+  import {getFlowRoute} from "@/util/func";
 
   export default {
     data() {
@@ -127,7 +128,7 @@
       };
     },
     computed: {
-      ...mapGetters(["permission"]),
+      ...mapGetters(["permission", "flowRoutes"]),
       ids() {
         let ids = [];
         this.selectionList.forEach(ele => {
@@ -150,7 +151,7 @@
 
       },
       handleDetail(row) {
-        this.$router.push({ path: `/work/process/${this.routes[row.category]}/detail?processInstanceId=${row.processInstanceId}&businessId=${row.businessId}` });
+        this.$router.push({ path: `/work/process/${getFlowRoute(this.flowRoutes, row.category)}/detail/${row.processInstanceId}/${row.businessId}` });
       },
       handleImage(row) {
         this.flowUrl = `/api/blade-flow/process/diagram-view?processInstanceId=${row.processInstanceId}`;