|
|
@@ -158,6 +158,7 @@ import { updateAdminInfo } from '@/api/admin'
|
|
|
import { getMyInviteCode } from '@/api/guide'
|
|
|
import { getUnreadMessageCount } from '@/api/teacherMessage'
|
|
|
import { getEffectivePermissions, hasPermission, getRoleLabel } from '@/utils/permissions'
|
|
|
+import axios from 'axios'
|
|
|
|
|
|
export default {
|
|
|
data() {
|
|
|
@@ -421,6 +422,8 @@ export default {
|
|
|
if (hasPermission(this.effectivePerms, 'messages') && this.currentRole !== 'admin') {
|
|
|
this.fetchUnreadCount()
|
|
|
}
|
|
|
+ // 从后端加载菜单,失败则使用硬编码菜单
|
|
|
+ this.fetchMenu()
|
|
|
},
|
|
|
beforeDestroy() {
|
|
|
window.removeEventListener('resize', this.handleResize)
|
|
|
@@ -456,6 +459,38 @@ export default {
|
|
|
}
|
|
|
}
|
|
|
},
|
|
|
+ async fetchMenu() {
|
|
|
+ try {
|
|
|
+ var res = await axios.post('/api/admin/menu/tree')
|
|
|
+ if (res.data && res.data.code === 200 && res.data.data && res.data.data.length > 0) {
|
|
|
+ this.menuItems = this.buildMenuItems(res.data.data)
|
|
|
+ }
|
|
|
+ } catch (e) {
|
|
|
+ console.warn('菜单加载失败,使用本地菜单', e)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ buildMenuItems(nodes) {
|
|
|
+ var result = []
|
|
|
+ for (var i = 0; i < nodes.length; i++) {
|
|
|
+ var n = nodes[i]
|
|
|
+ var item = {}
|
|
|
+ if (n.path) {
|
|
|
+ item.path = n.path
|
|
|
+ item.label = n.name
|
|
|
+ item.icon = n.icon || 'el-icon-menu'
|
|
|
+ item.perm = n.perm || ''
|
|
|
+ } else {
|
|
|
+ item.title = n.name
|
|
|
+ item.icon = n.icon || 'el-icon-menu'
|
|
|
+ item.perm = n.perm || ''
|
|
|
+ }
|
|
|
+ if (n.children && n.children.length > 0) {
|
|
|
+ item.children = this.buildMenuItems(n.children)
|
|
|
+ }
|
|
|
+ result.push(item)
|
|
|
+ }
|
|
|
+ return result
|
|
|
+ },
|
|
|
handleProfileCommand(command) {
|
|
|
if (command === 'profile') {
|
|
|
this.loadAdminInfo()
|