| | |
| | | }
|
| | | },
|
| | | onShow() {
|
| | | this.user = uni.getStorageSync('userData')
|
| | | |
| | | this.user = this.getStorageUser()
|
| | | },
|
| | | mounted(){
|
| | | this.loadMenusAndPermissions()
|
| | | const user = this.getStorageUser()
|
| | | this.user = user
|
| | | this.loadMenusAndPermissions(user)
|
| | | },
|
| | | methods: {
|
| | | // 并行获取菜单和权限数据
|
| | | async loadMenusAndPermissions() {
|
| | | // 从 storage 拷贝为普通对象,避免 Vue 无法枚举导致 this.user 为空
|
| | | getStorageUser() {
|
| | | let raw = uni.getStorageSync('userData')
|
| | | if (raw == null) return {}
|
| | | if (typeof raw === 'string') {
|
| | | try {
|
| | | raw = JSON.parse(raw)
|
| | | } catch (e) {
|
| | | return {}
|
| | | }
|
| | | }
|
| | | if (typeof raw !== 'object') return {}
|
| | | const keys =
|
| | | Object.keys(raw).length > 0
|
| | | ? Object.keys(raw)
|
| | | : Object.getOwnPropertyNames(raw)
|
| | | if (keys.length === 0) {
|
| | | try {
|
| | | return JSON.parse(JSON.stringify(raw)) || {}
|
| | | } catch (e) {
|
| | | return {}
|
| | | }
|
| | | }
|
| | | const copy = {}
|
| | | for (const key of keys) {
|
| | | try {
|
| | | const val = raw[key]
|
| | | if (Array.isArray(val)) copy[key] = val.slice()
|
| | | else if (val != null && typeof val === 'object')
|
| | | copy[key] = JSON.parse(JSON.stringify(val))
|
| | | else copy[key] = val
|
| | | } catch (e) {
|
| | | copy[key] = raw[key]
|
| | | }
|
| | | }
|
| | | return copy
|
| | | },
|
| | | // 并行获取菜单和权限数据,传入 user 避免异步时 this.user 未就绪
|
| | | async loadMenusAndPermissions(user) {
|
| | | this.loading = true
|
| | | const u = user != null ? user : this.getStorageUser()
|
| | | try {
|
| | | const [menuRes, permRes] = await Promise.all([
|
| | | this.fetchMenuTree(),
|
| | | this.fetchPermissions()
|
| | | this.fetchPermissions(u)
|
| | | ])
|
| | | this.menuTree = menuRes
|
| | | this.permissionIds = new Set(permRes)
|
| | |
| | | }
|
| | | },
|
| | |
|
| | | // 获取权限(支持多角色)
|
| | | async fetchPermissions() {
|
| | | console.log('this.user:', this.user)
|
| | | const roleIds = this.user.userRoleIds || []
|
| | | console.log('roleIds:', roleIds)
|
| | | // 获取权限(支持多角色),使用传入的 user 避免 this.user 未就绪;后端登录返回 roleIds(userRoleIds 被 @JsonIgnore)
|
| | | async fetchPermissions(user) {
|
| | | const u = user != null ? user : this.user
|
| | | const roleIds = (u && (u.userRoleIds || u.roleIds)) ? (u.userRoleIds || u.roleIds) : []
|
| | | if (roleIds.length === 0) {
|
| | | console.warn('用户没有角色ID')
|
| | | return []
|