Przeglądaj źródła

[update] bug-470,子系统输入改选择,页面跳转后侧边栏菜单未更新

cfort 2 lat temu
rodzic
commit
1eb71f8cc6

+ 38 - 40
src/layout/header-aside/components/mixin/menu.js

@@ -1,46 +1,44 @@
 import Utils from '@/utils/util'
 import Utils from '@/utils/util'
 
 
 export default {
 export default {
-  methods: {
-    /**
-     *  顶部菜单点击
-     * @param {*} index
-     * @param {*} indexPath
-     */
-    handleHeaderMenuSelect(index, indexPath) {
-      let name = null;
-      let icon = null;
-      for(let i in this.$store.getters.menus){
-         if(this.$store.getters.menus[i].id==index){
-           name = this.$store.getters.menus[i].title
-           icon =this.$store.getters.menus[i].icon
-         }
-      }
-      this.$router.push({path:"/blank",
-           query:{
-                name:name,
-                icon:icon
+    methods: {
+        /**
+         *  顶部菜单点击
+         * @param {*} index
+         * @param {*} indexPath
+         */
+        handleHeaderMenuSelect (index, indexPath) {
+            let name = null
+            let icon = null
+            for (const i in this.$store.getters.menus) {
+                if (this.$store.getters.menus[i].id === index) {
+                    name = this.$store.getters.menus[i].title
+                    icon = this.$store.getters.menus[i].icon
                 }
                 }
-      })
-      this.$emit('pageChange','change');
-    return this.$store.dispatch('ibps/menu/activeHeaderSet', { activeHeader: index,vm: this })
-    },
-    /**
-     * 其他菜单点击
-     * @param {*} index
-     * @param {*} indexPath
-     */
-    handleMenuSelect(index, indexPath) {
-      if (/^ibps-menu-empty-\d+$/.test(index) || index === undefined) {
-        this.$message.closeAll()
-        this.$message.warning('临时菜单')
-      } else if (/^https:\/\/|http:\/\//.test(index)) {
-        Utils.open(index)
-      } else {
-        this.$router.push({
-          path: index
-        })
-      }
+            }
+            this.$router.push({ path: '/blank', query: {
+                name: name,
+                icon: icon
+            }})
+            this.$emit('pageChange', 'change')
+            return this.$store.dispatch('ibps/menu/activeHeaderSet', { activeHeader: index, vm: this })
+        },
+        /**
+         * 其他菜单点击
+         * @param {*} index
+         * @param {*} indexPath
+         */
+        handleMenuSelect (index, indexPath) {
+            if (/^ibps-menu-empty-\d+$/.test(index) || index === undefined) {
+                this.$message.closeAll()
+                this.$message.warning('临时菜单')
+            } else if (/^https:\/\/|http:\/\//.test(index)) {
+                Utils.open(index)
+            } else {
+                this.$router.push({
+                    path: index
+                })
+            }
+        }
     }
     }
-  }
 }
 }

+ 254 - 257
src/store/modules/ibps/modules/menu.js

@@ -12,270 +12,267 @@ import Utils from '@/utils/util'
 //  * @param {Array} menu 原始的菜单数据
 //  * @param {Array} menu 原始的菜单数据
 //  */
 //  */
 // function supplementMenuPath (menu) {
 // function supplementMenuPath (menu) {
-//   return menu.map(e => ({
-//     ...e,
-//     path: e.path || uniqueId('ibps-menu-empty-'),
-//     ...e.children ? {
-//       children: supplementMenuPath(e.children)
-//     } : {}
-//   }))
+//     return menu.map(e => ({
+//         ...e,
+//         path: e.path || uniqueId('ibps-menu-empty-'),
+//         ...e.children ? {
+//             children: supplementMenuPath(e.children)
+//         } : {}
+//     }))
 // }
 // }
 
 
 export default {
 export default {
-  namespaced: true,
-  state: {
-    // 所有菜单
-    menus: [],
-    // 顶栏菜单
-    header: [],
-    // 侧栏菜单
-    aside: [],
-    // 激活的顶栏菜单
-    activeHeader: setting.menu.activeHeader,
-    // 侧边栏收缩
-    asideCollapse: setting.menu.asideCollapse,
-    // 侧边栏折叠动画
-    asideTransition: setting.menu.asideTransition,
-    // 动态路由
-    routers: [],
-    // 权限
-    permissions: {}
-  },
-  actions: {
-    /**
-     * 从后台获取菜单资源
-     * @param {*} param0
-     */
-    init({ state, commit, dispatch }, { systemId }) {
-      return new Promise(async(resolve, reject) => {
-        getMenuData({
-          systemId: systemId
-        }).then(async res => {
-          const data = res.data
-          if (Utils.isEmpty(data)) {
-            // await dispatch('ibps/system/set', null, { root: true })
-            await commit('menusSet', null)
-            await commit('addRouters', null)
-            await commit('headerSet', null)
-            await commit('permissionsSet', null)
-            return resolve()
-          }
-          // 初始化菜单
-          const menus = menuUtil.transformToTreeAndLevelFormat(data)
-          await commit('menusSet', menus)
-          // 构建一份路由表
-          await commit('addRouters', generateRoutes(menus))
-          // 设置顶部
-          await commit('headerSet', menuUtil.getHeaderMenus(menus))
-          // 权限设置
-          await commit('permissionsSet', menuUtil.getPermissions(data))
-
-          // 当前的顶部选中
-          await dispatch('activeHeaderSet', {})
-
-          resolve(menus)
-        }).catch((e) => {
-          reject(e)
-        })
-      })
-    },
-    menusSet({ state, dispatch }, menus) {
-      state.menus = menus || []
+    namespaced: true,
+    state: {
+        // 所有菜单
+        menus: [],
+        // 顶栏菜单
+        header: [],
+        // 侧栏菜单
+        aside: [],
+        // 激活的顶栏菜单
+        activeHeader: setting.menu.activeHeader,
+        // 侧边栏收缩
+        asideCollapse: setting.menu.asideCollapse,
+        // 侧边栏折叠动画
+        asideTransition: setting.menu.asideTransition,
+        // 动态路由
+        routers: [],
+        // 权限
+        permissions: {}
     },
     },
-    /**
-     *  设置激活顶部
-     * @param {*} context
-     * @param {*} activeHeader
-     */
-    activeHeaderSet({ state, dispatch, commit }, { activeHeader, vm }) {
-      return new Promise(async resolve => {
-        if (!activeHeader) {
-          // 如果没有从数据库读取 激活的头部
-          await dispatch('activeHeaderLoad', (state.header && state.header.length > 0) ? state.header[0].id : '1')
-        } else {
-          state.activeHeader = activeHeader
+    actions: {
+        /**
+         * 从后台获取菜单资源
+         * @param {*} param0
+         */
+        init ({ state, commit, dispatch }, { systemId }) {
+            return new Promise(async (resolve, reject) => {
+                getMenuData({
+                    systemId: systemId
+                }).then(async res => {
+                    const data = res.data
+                    if (Utils.isEmpty(data)) {
+                        // await dispatch('ibps/system/set', null, { root: true })
+                        await commit('menusSet', null)
+                        await commit('addRouters', null)
+                        await commit('headerSet', null)
+                        await commit('permissionsSet', null)
+                        return resolve()
+                    }
+                    // 初始化菜单
+                    const menus = menuUtil.transformToTreeAndLevelFormat(data)
+                    await commit('menusSet', menus)
+                    // 构建一份路由表
+                    await commit('addRouters', generateRoutes(menus))
+                    // 设置顶部
+                    await commit('headerSet', menuUtil.getHeaderMenus(menus))
+                    // 权限设置
+                    await commit('permissionsSet', menuUtil.getPermissions(data))
+                    // 当前的顶部选中
+                    await dispatch('activeHeaderSet', {})
+                    resolve(menus)
+                }).catch((e) => {
+                    reject(e)
+                })
+            })
+        },
+        menusSet ({ state, dispatch }, menus) {
+            state.menus = menus || []
+        },
+        /**
+         *  设置激活顶部
+         * @param {*} context
+         * @param {*} activeHeader
+         */
+        activeHeaderSet ({ state, dispatch, commit }, { activeHeader, vm }) {
+            return new Promise(async resolve => {
+                if (!activeHeader) {
+                    // 如果没有从数据库读取 激活的头部
+                    await dispatch('activeHeaderLoad', (state.header && state.header.length > 0) ? state.header[0].id : '1')
+                } else {
+                    state.activeHeader = activeHeader
+                }
+                // 持久化
+                await dispatch('ibps/db/set', {
+                    dbName: 'sys',
+                    path: 'menu.activeHeader',
+                    value: state.activeHeader,
+                    user: true
+                }, { root: true })
+                const asideMenus = menuUtil.getAsideMenus(state.menus, state.activeHeader) || []
+                if (asideMenus.length === 0 && vm) { //  判断有没有侧边
+                    state.header.forEach(h => {
+                        if (h.id === activeHeader && h.path) {
+                            vm.$router.push({
+                                path: h.path + '/index'
+                            })
+                        }
+                    })
+                }
+                // 设置侧边栏
+                await commit('asideSet', asideMenus)
+                resolve()
+            })
+        },
+        /**
+         * 加载激活顶部
+         * @param {*} context
+         * @param {*} defaultValue
+         */
+        activeHeaderLoad ({ state, dispatch }, defaultValue) {
+            return new Promise(async resolve => {
+                // store 赋值
+                state.activeHeader = await dispatch('ibps/db/get', {
+                    dbName: 'sys',
+                    path: 'menu.activeHeader',
+                    defaultValue: defaultValue,
+                    user: true
+                }, { root: true })
+                let valid = false
+                // 判断已激活的是否有效,否则取底部第一个
+                state.header.forEach(h => {
+                    if (h.id === state.activeHeader) {
+                        valid = true
+                        return false
+                    }
+                })
+                if (!valid && state.header && state.header.length > 0) {
+                    state.activeHeader = state.header[0].id
+                }
+                // end
+                resolve()
+            })
+        },
+        /**
+         * 设置侧边栏展开或者收缩
+         * @param {Object} context
+         * @param {Boolean} collapse is collapse
+         */
+        asideCollapseSet ({ state, dispatch }, collapse) {
+            return new Promise(async resolve => {
+                // store 赋值
+                state.asideCollapse = collapse
+                // 持久化
+                await dispatch('ibps/db/set', {
+                    dbName: 'sys',
+                    path: 'menu.asideCollapse',
+                    value: state.asideCollapse,
+                    user: true
+                }, { root: true })
+                // end
+                resolve()
+            })
+        },
+        /**
+         * 切换侧边栏展开和收缩
+         * @param {Object} context
+         */
+        asideCollapseToggle ({ state, dispatch }) {
+            return new Promise(async resolve => {
+                // store 赋值
+                state.asideCollapse = !state.asideCollapse
+                // 持久化
+                await dispatch('ibps/db/set', {
+                    dbName: 'sys',
+                    path: 'menu.asideCollapse',
+                    value: state.asideCollapse,
+                    user: true
+                }, { root: true })
+                // end
+                resolve()
+            })
+        },
+        /**
+         * 设置侧边栏折叠动画
+         * @param {Object} context
+         * @param {Boolean} transition is transition
+         */
+        async asideTransitionSet ({ state, dispatch }, transition) {
+            // store 赋值
+            state.asideTransition = transition
+            // 持久化
+            await dispatch('ibps/db/set', {
+                dbName: 'sys',
+                path: 'menu.asideTransition',
+                value: state.asideTransition,
+                user: true
+            }, { root: true })
+        },
+        /**
+         * 切换侧边栏折叠动画
+         * @param {Object} context
+         */
+        async asideTransitionToggle ({ state, dispatch }) {
+            // store 赋值
+            state.asideTransition = !state.asideTransition
+            // 持久化
+            await dispatch('ibps/db/set', {
+                dbName: 'sys',
+                path: 'menu.asideTransition',
+                value: state.asideTransition,
+                user: true
+            }, { root: true })
+        },
+        /**
+         * 持久化数据加载侧边栏设置
+         * @param {Object} context
+         */
+        async asideLoad ({ state, dispatch }) {
+            // store 赋值
+            const menu = await dispatch('ibps/db/get', {
+                dbName: 'sys',
+                path: 'menu',
+                defaultValue: setting.menu,
+                user: true
+            }, { root: true })
+            state.asideCollapse = menu.asideCollapse !== undefined ? menu.asideCollapse : setting.menu.asideCollapse
+            state.asideTransition = menu.asideTransition !== undefined ? menu.asideTransition : setting.menu.asideTransition
         }
         }
-        // 持久化
-        await dispatch('ibps/db/set', {
-          dbName: 'sys',
-          path: 'menu.activeHeader',
-          value: state.activeHeader,
-          user: true
-        }, { root: true })
-        const asideMenus = menuUtil.getAsideMenus(state.menus, state.activeHeader) || []
-        if (asideMenus.length === 0 && vm) { //  判断有没有侧边
-          state.header.forEach(h => {
-            if (h.id === activeHeader && h.path) {
-              vm.$router.push({
-                path: h.path + '/index'
-              })
-            }
-          })
-        }
-        // 设置侧边栏
-        await commit('asideSet', asideMenus)
-        resolve()
-      })
-    },
-    /**
-     * 加载激活顶部
-     * @param {*} context
-     * @param {*} defaultValue
-     */
-    activeHeaderLoad({ state, dispatch }, defaultValue) {
-      return new Promise(async resolve => {
-        // store 赋值
-        state.activeHeader = await dispatch('ibps/db/get', {
-          dbName: 'sys',
-          path: 'menu.activeHeader',
-          defaultValue: defaultValue,
-          user: true
-        }, { root: true })
-        let valid = false
-        // 判断已激活的是否有效,否则取底部第一个
-        state.header.forEach(h => {
-          if (h.id === state.activeHeader) {
-            valid = true
-            return false
-          }
-        })
-        if (!valid && state.header && state.header.length > 0) {
-          state.activeHeader = state.header[0].id
-        }
-        // end
-        resolve()
-      })
-    },
 
 
-    /**
-     * 设置侧边栏展开或者收缩
-     * @param {Object} context
-     * @param {Boolean} collapse is collapse
-     */
-    asideCollapseSet({ state, dispatch }, collapse) {
-      return new Promise(async resolve => {
-        // store 赋值
-        state.asideCollapse = collapse
-        // 持久化
-        await dispatch('ibps/db/set', {
-          dbName: 'sys',
-          path: 'menu.asideCollapse',
-          value: state.asideCollapse,
-          user: true
-        }, { root: true })
-        // end
-        resolve()
-      })
-    },
-    /**
-     * 切换侧边栏展开和收缩
-     * @param {Object} context
-     */
-    asideCollapseToggle({ state, dispatch }) {
-      return new Promise(async resolve => {
-        // store 赋值
-        state.asideCollapse = !state.asideCollapse
-        // 持久化
-        await dispatch('ibps/db/set', {
-          dbName: 'sys',
-          path: 'menu.asideCollapse',
-          value: state.asideCollapse,
-          user: true
-        }, { root: true })
-        // end
-        resolve()
-      })
-    },
-    /**
-     * 设置侧边栏折叠动画
-     * @param {Object} context
-     * @param {Boolean} transition is transition
-     */
-    async asideTransitionSet({ state, dispatch }, transition) {
-      // store 赋值
-      state.asideTransition = transition
-      // 持久化
-      await dispatch('ibps/db/set', {
-        dbName: 'sys',
-        path: 'menu.asideTransition',
-        value: state.asideTransition,
-        user: true
-      }, { root: true })
-    },
-    /**
-     * 切换侧边栏折叠动画
-     * @param {Object} context
-     */
-    async asideTransitionToggle({ state, dispatch }) {
-      // store 赋值
-      state.asideTransition = !state.asideTransition
-      // 持久化
-      await dispatch('ibps/db/set', {
-        dbName: 'sys',
-        path: 'menu.asideTransition',
-        value: state.asideTransition,
-        user: true
-      }, { root: true })
-    },
-    /**
-     * 持久化数据加载侧边栏设置
-     * @param {Object} context
-     */
-    async asideLoad({ state, dispatch }) {
-      // store 赋值
-      const menu = await dispatch('ibps/db/get', {
-        dbName: 'sys',
-        path: 'menu',
-        defaultValue: setting.menu,
-        user: true
-      }, { root: true })
-      state.asideCollapse = menu.asideCollapse !== undefined ? menu.asideCollapse : setting.menu.asideCollapse
-      state.asideTransition = menu.asideTransition !== undefined ? menu.asideTransition : setting.menu.asideTransition
-    }
-
-  },
-  mutations: {
-    /**
-     *  菜单设置
-     *  @param {Object} context
-     * @param {*} menus
-     */
-    menusSet(state, menus) {
-      state.menus = menus || []
-    },
-    /**
-     * 路由设置
-     * @param {*} state
-     * @param {*} routers
-     */
-    addRouters(state, routers) {
-      state.routers = routers || []
     },
     },
+    mutations: {
+        /**
+         *  菜单设置
+         *  @param {Object} context
+         * @param {*} menus
+         */
+        menusSet (state, menus) {
+            state.menus = menus || []
+        },
+        /**
+         * 路由设置
+         * @param {*} state
+         * @param {*} routers
+         */
+        addRouters (state, routers) {
+            state.routers = routers || []
+        },
 
 
-    /**
-     * 权限设置
-     * @param {*} state
-     * @param {*} permissions
-     */
-    permissionsSet(state, permissions) {
-      state.permissions = permissions
-    },
-    /**
-     * @description 设置顶栏菜单
-     * @param {Object} state vuex state
-     * @param {Array} menu menu setting
-     */
-    headerSet(state, menus) {
-      state.header = menus || []
-    },
-    /**
-     * @description 设置侧边栏菜单
-     * @param {Object} state vuex state
-     * @param {Object} asideMenus menu setting
-     */
-    asideSet(state, asideMenus) {
-      // 设置侧边栏菜单
-      state.aside = asideMenus
+        /**
+         * 权限设置
+         * @param {*} state
+         * @param {*} permissions
+         */
+        permissionsSet (state, permissions) {
+            state.permissions = permissions
+        },
+        /**
+         * @description 设置顶栏菜单
+         * @param {Object} state vuex state
+         * @param {Array} menu menu setting
+         */
+        headerSet (state, menus) {
+            state.header = menus || []
+        },
+        /**
+         * @description 设置侧边栏菜单
+         * @param {Object} state vuex state
+         * @param {Object} asideMenus menu setting
+         */
+        asideSet (state, asideMenus) {
+            // 设置侧边栏菜单
+            state.aside = asideMenus
+        }
     }
     }
-  }
 }
 }

+ 1 - 1
src/views/system/dashboard/components/workbench.js

@@ -121,7 +121,7 @@ export const listSearchForm = {
     guide: {
     guide: {
         forms: [
         forms: [
             { prop: 'range', label: '显示范围', labelWidth: 70, fieldType: 'select', options: rangeOption, value: 'aboutMe' },
             { prop: 'range', label: '显示范围', labelWidth: 70, fieldType: 'select', options: rangeOption, value: 'aboutMe' },
-            { prop: 'suo_shu_xi_tong_', label: '所属子系统', labelWidth: 85, fieldType: 'input' },
+            { prop: 'suo_shu_xi_tong_', label: '所属子系统', labelWidth: 85, fieldType: 'select', options: [] },
             { prop: 'gong_neng_mo_kuai', label: '所属功能模块', labelWidth: 90, fieldType: 'input' },
             { prop: 'gong_neng_mo_kuai', label: '所属功能模块', labelWidth: 90, fieldType: 'input' },
             { prop: 'role', label: '执行角色', labelWidth: 70, fieldType: 'select', options: [] },
             { prop: 'role', label: '执行角色', labelWidth: 70, fieldType: 'select', options: [] },
             { prop: 'biao_dan_ming_che', label: '记录表单', labelWidth: 70, fieldType: 'input' },
             { prop: 'biao_dan_ming_che', label: '记录表单', labelWidth: 70, fieldType: 'input' },

+ 21 - 5
src/views/system/dashboard/components/workbench.vue

@@ -127,8 +127,10 @@ export default {
     data () {
     data () {
         const { first = '', second = '' } = this.$store.getters.level || {}
         const { first = '', second = '' } = this.$store.getters.level || {}
         const level = second || first
         const level = second || first
-        const { userList = [], deptList = [], role = [] } = this.$store.getters || {}
+        const { userList = [], deptList = [], role = [], menus = [] } = this.$store.getters || {}
         const roleOption = role.map(i => ({ key: i.id, value: i.id, label: i.name }))
         const roleOption = role.map(i => ({ key: i.id, value: i.id, label: i.name }))
+        const sysOption = menus.map(i => ({ key: i.alias, value: i.title, label: i.title })).filter(i => !['xtgl', 'xnyz'].includes(i.key))
+        listSearchForm.guide.forms[1].options = sysOption
         listSearchForm.guide.forms[3].options = roleOption
         listSearchForm.guide.forms[3].options = roleOption
         const getGuide = ({ parameters, requestPage, sorts }) => {
         const getGuide = ({ parameters, requestPage, sorts }) => {
             // 获取查询角色信息
             // 获取查询角色信息
@@ -151,7 +153,7 @@ export default {
             }, '')
             }, '')
             params = params + aboutMeParams + roleParams
             params = params + aboutMeParams + roleParams
             // and di_dian_ = '${level}'
             // and di_dian_ = '${level}'
-            const sql = `select sn_ as sn, suo_shu_xi_tong_ as sysName, gong_neng_mo_kuai as module, biao_dan_ming_che as tableName, biao_dan_bian_hao as tableNo, tian_xie_shi_ji_ as timing, shi_wu_lei_xing_ as taskType, cheng_xu_wen_jian as fileName, bian_zhi_ren_ as creator, shen_he_ren_ as reviewer, shen_pi_ren_ as approver, ye_mian_lu_jing_ as path from t_bdbhpzb where sn_ + 0 > 0 ${params} order by sn_ + 0 asc`
+            const sql = `select sn_ as sn, suo_shu_xi_tong_ as sysName, gong_neng_mo_kuai as module, biao_dan_ming_che as tableName, biao_dan_bian_hao as tableNo, tian_xie_shi_ji_ as timing, shi_wu_lei_xing_ as taskType, cheng_xu_wen_jian as fileName, bian_zhi_ren_ as creator, shen_he_ren_ as reviewer, shen_pi_ren_ as approver, ye_mian_lu_jing_ as path, zi_yuan_lu_jing_ as res from t_bdbhpzb where sn_ + 0 > 0 ${params} order by sn_ + 0 asc`
             const { pageNo = 1, limit = 15 } = requestPage || {}
             const { pageNo = 1, limit = 15 } = requestPage || {}
             return new Promise((resolve, reject) => {
             return new Promise((resolve, reject) => {
                 this.$common.request('sql', sql).then(res => {
                 this.$common.request('sql', sql).then(res => {
@@ -181,6 +183,7 @@ export default {
             stateOption,
             stateOption,
             userList,
             userList,
             deptList,
             deptList,
+            menus,
             pkKey: 'id',
             pkKey: 'id',
             taskId: '', // 编辑dialog需要使用
             taskId: '', // 编辑dialog需要使用
             waiJian: '', // 编辑dialog需要使用
             waiJian: '', // 编辑dialog需要使用
@@ -398,10 +401,13 @@ export default {
         // 处理表格点击事件
         // 处理表格点击事件
         handleRowClick (data) {
         handleRowClick (data) {
             if (this.activeTab === 'guide') {
             if (this.activeTab === 'guide') {
-                const { path = '' } = data
-                if (path) {
-                    this.$router.push(path)
+                const { res = '' } = data
+                if (!res) {
+                    this.$message.warning('未配置资源菜单!')
+                    return
                 }
                 }
+                const path = '/' + this.findPagePath(res)
+                this.$router.push(path)
                 return
                 return
             }
             }
             if (this.activeTab === 'news') {
             if (this.activeTab === 'news') {
@@ -711,6 +717,16 @@ export default {
                 }
                 }
             })
             })
             return res[type].filter(i => i).join(',')
             return res[type].filter(i => i).join(',')
+        },
+        findPagePath (res) {
+            const resList = res.split('.')
+            const findAlias = (nodes, path) => {
+                const [currentId, ...rest] = path
+                const node = nodes.find(n => n.id === currentId)
+                return node && rest.length ? [node.alias, ...findAlias(node.children, rest)] : node && [node.alias]
+            }
+            this.$store.dispatch('ibps/menu/activeHeaderSet', { activeHeader: resList[0], vm: this })
+            return findAlias(this.menus, resList).join('/')
         }
         }
     }
     }
 }
 }