菜单
组件路径:/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)
}
}
此处还处理了内嵌页面,以及开发菜单时的状况