浏览代码

```
feat(user): 优化用户信息获取逻辑并同步更新头像

- 在 ToolBarRight.vue 中,使用 computed 属性响应式地获取用户信息,优先从 store 获取,若无则 fallback 到本地存储
- 在 InfoDialog.vue 中引入 userStore 并在用户信息更新后同步刷新本地存储与 store 数据
- 新增 localSet 工具方法用于更新本地用户信息缓存
- 头像更新后主动拉取最新商户信息并更新全局状态管理
```

zhuli 2 周之前
父节点
当前提交
da6d804cb1

+ 6 - 2
src/layouts/components/Header/ToolBarRight.vue

@@ -26,8 +26,12 @@ import Avatar from "./components/Avatar.vue";
 import { localGet } from "@/utils/index";
 
 const userStore = useUserStore();
-const username = computed(() => userStore.userInfo.name);
-const userInfo = localGet("geeker-user")?.userInfo || {};
+// 使用 computed 来获取响应式的用户信息,优先使用 store 中的数据,否则从本地存储获取
+const userInfo = computed(() => {
+  return userStore.userInfo && Object.keys(userStore.userInfo).length > 0
+    ? userStore.userInfo
+    : localGet("geeker-user")?.userInfo || {};
+});
 </script>
 
 <style scoped lang="scss">

+ 24 - 1
src/layouts/components/Header/components/InfoDialog.vue

@@ -47,14 +47,16 @@ import { ElMessage, type FormInstance, type UploadUserFile, UploadRequestOptions
 import { Plus } from "@element-plus/icons-vue";
 import { getMerchantByPhone, updateMerchantUserInfo } from "@/api/modules/homeEntry";
 import { uploadImg } from "@/api/modules/newLoginApi";
-import { localGet } from "@/utils/index";
+import { localGet, localSet } from "@/utils/index";
 import defaultAvatar from "@/assets/images/avatar.gif";
 import { head } from "lodash";
+import { useUserStore } from "@/stores/modules/user";
 
 const emit = defineEmits<{
   avatarUpdated: [avatarUrl?: string];
 }>();
 
+const userStore = useUserStore();
 const userInfo = localGet("geeker-user")?.userInfo || {};
 const dialogVisible = ref(false);
 
@@ -168,6 +170,27 @@ const getSaveUserInfo = async () => {
       const finalAvatarUrl = avatarUrl && avatarUrl.trim() !== "" ? avatarUrl : res.data?.headImg || "";
       console.log("保存成功,传递给父组件的头像URL:", finalAvatarUrl);
       emit("avatarUpdated", finalAvatarUrl);
+
+      // 更新本地存储和 userStore 中的用户信息
+      try {
+        const merchantRes: any = await getMerchantByPhone({ phone: userInfo.phone });
+        if (merchantRes && merchantRes.code == 200 && merchantRes.data) {
+          // 更新本地存储
+          const geekerUser = localGet("geeker-user");
+          if (geekerUser) {
+            geekerUser.userInfo = {
+              ...geekerUser.userInfo,
+              ...merchantRes.data
+            };
+            localSet("geeker-user", geekerUser);
+            // 更新 userStore
+            userStore.setUserInfo(geekerUser.userInfo);
+          }
+        }
+      } catch (error) {
+        console.error("获取更新后的用户信息失败:", error);
+      }
+
       // 刷新用户信息(用于更新对话框中的数据)
       getUserInfo();
     } else {