zhou zhou
1 天以前 592aadefa836da71e40043dc14d83a82ef602ca8
pages/home/index.vue
@@ -77,20 +77,59 @@
      }
   },
   onShow() {
      this.user = uni.getStorageSync('userData')
      this.user = this.getStorageUser()
   },
   mounted(){
      this.loadMenusAndPermissions()
   mounted() {
      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)
@@ -127,11 +166,10 @@
         }
      },
      // 获取权限(支持多角色)
      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 []