From 930befb92274802ab32bc5a442b95b87a004af52 Mon Sep 17 00:00:00 2001
From: chen.lin <1442464845@qq.com>
Date: 星期二, 10 二月 2026 11:49:58 +0800
Subject: [PATCH] pda优化

---
 pages/login/login.vue |    4 +-
 pages/home/index.vue  |   62 +++++++++++++++++++++++++------
 2 files changed, 52 insertions(+), 14 deletions(-)

diff --git a/pages/home/index.vue b/pages/home/index.vue
index ff2647d..1ac7f7f 100644
--- a/pages/home/index.vue
+++ b/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锛坲serRoleIds 琚� @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 []
diff --git a/pages/login/login.vue b/pages/login/login.vue
index 3430788..3f031d6 100644
--- a/pages/login/login.vue
+++ b/pages/login/login.vue
@@ -295,8 +295,8 @@
 					this.loading = true;
 					this.loginButton = 'login.loging';					
 					uni.setStorageSync('token', data.accessToken);	
-					uni.setStorageSync('userData', data.user);				
-					if (this.remberPassword) {						
+					uni.setStorageSync('userData', data.user);		
+					if (this.remberPassword) {
 						uni.setStorageSync('user', this.user);
 					} else {
 						uni.removeStorageSync('user');

--
Gitblit v1.9.1