chen.lin
昨天 930befb92274802ab32bc5a442b95b87a004af52
pda优化
2个文件已修改
60 ■■■■ 已修改文件
pages/home/index.vue 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pages/login/login.vue 补丁 | 查看 | 原始文档 | blame | 历史
pages/home/index.vue
@@ -77,20 +77,59 @@
        }
    },
    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)
@@ -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 []
pages/login/login.vue