菜单

组件路径:/src/layout/components/Sidebar

缓存路径:/src/store/modules/menu.js

权限混入:/src/utils/mixins/menuPermissionMixin.js

处理菜单多语言

menu.js中,选择完子系统后,根据子系统id获取菜单,再使用language.handleMenuLocal(menuList)添加多语言。

//第165行
var menuList = res.data.filter(menu => {
  return menu.redirect != '/welcome'
})
language.handleMenuLocal(menuList)
commit('SET_MENULIST', menuList)

处理权限

menu.js中,缓存菜单数据时,处理权限。注意,在退出登录时需要清空相应缓存。

//第55行
     state.permissions = Object.assign({ ...state.permissions }, hanleMenuPermissions(data))

menuPermissionMixin.js中,通过混入提供权限列表,获取相应权限数据和判断是否有权限的方法。

export default {
  computed: {
    ...mapGetters(['menuPermissions']),
    permissions() {
      return this.menuPermissions[this.$route.path] || []
    }
  },
  methods: {
    getPermission(code) {
      for (let index = 0; index < this.permissions.length; index++) {
        const permission = this.permissions[index]
        if (permission.code === code) {
          language.addLocals('name', [permission])
          return permission
        }
      }
      return null
    },
    hasPermission(code) {
      const permission = this.getPermission(code)
      if (permission) {
        return permission.permission
      } else {
        return false
      }
    }
  }
}

处理标签tag多语言

/src/layout/components/TagsView中的标签上的多语言需要特殊处理。

此标签原本的功能是从router中的meta获取title,它取到的数据都是基于路由,所以,将菜单多语言的key设置为页面路由全路径的md5,标签上通过这个来获取多语言文本。

    getTitle(tag) {
      var langKey = 'dyamic.' + md5(tag.fullPath)
      if (tag.path.indexOf('/iframe') === 0) {
        // 内嵌页面菜单名称处理
        langKey = 'dyamic.' + md5(window.atob(tag.query.src))
      }
      if (this.$t(langKey) == langKey) {
        //找不到多语言(例如开发菜单)时,使用route中配置的title
        let type = typeof tag.title
        if (type === 'object') {
          return tag.title[this.lang] || tag.title['en-US']
        }
        return tag.title
      } else {
        return this.$t(langKey)
      }
    }

此处还处理了内嵌页面,以及开发菜单时的状况

results matching ""

    No results matching ""