|
@@ -90,36 +90,52 @@ import LoginModal from '@/pages/components/LoginModal.vue';
|
|
|
import { getFileUrl } from '@/utils/file.js';
|
|
import { getFileUrl } from '@/utils/file.js';
|
|
|
import { useUserStore } from '@/store/user.js';
|
|
import { useUserStore } from '@/store/user.js';
|
|
|
import { go } from '@/utils/utils.js';
|
|
import { go } from '@/utils/utils.js';
|
|
|
-import { USER_INFO } from '@/settings/enums.js';
|
|
|
|
|
|
|
+import { GetUserInfo } from '@/api/dining.js';
|
|
|
|
|
|
|
|
const userStore = useUserStore();
|
|
const userStore = useUserStore();
|
|
|
const showLoginModal = ref(false);
|
|
const showLoginModal = ref(false);
|
|
|
-const userInfoSync = ref({});
|
|
|
|
|
|
|
+// 仅用接口返回的用户信息展示,不使用缓存
|
|
|
|
|
+const userInfoFromApi = ref({});
|
|
|
|
|
+
|
|
|
|
|
+// 将接口返回的用户信息转为页面展示字段(头像、昵称等)
|
|
|
|
|
+function normalizeUserInfoFromApi(raw) {
|
|
|
|
|
+ if (!raw || typeof raw !== 'object') return raw;
|
|
|
|
|
+ return {
|
|
|
|
|
+ ...raw,
|
|
|
|
|
+ avatarUrl: raw.avatarUrl ?? raw.avatar ?? raw.headImgUrl ?? raw.icon ?? '',
|
|
|
|
|
+ nickName: raw.nickName ?? raw.nickname ?? raw.name ?? raw.userName ?? ''
|
|
|
|
|
+ };
|
|
|
|
|
+}
|
|
|
|
|
|
|
|
-function syncUserFromStorage() {
|
|
|
|
|
|
|
+async function fetchAndSetUserInfo() {
|
|
|
try {
|
|
try {
|
|
|
- const raw = uni.getStorageSync(USER_INFO);
|
|
|
|
|
- userInfoSync.value = raw && typeof raw === 'object' ? raw : {};
|
|
|
|
|
|
|
+ const res = await GetUserInfo();
|
|
|
|
|
+ const data = res?.data ?? res ?? {};
|
|
|
|
|
+ const userData = data?.data ?? data;
|
|
|
|
|
+ if (userData && typeof userData === 'object') {
|
|
|
|
|
+ const normalized = normalizeUserInfoFromApi(userData);
|
|
|
|
|
+ userInfoFromApi.value = normalized;
|
|
|
|
|
+ userStore.setUserInfo({ ...userStore.getUserInfo, ...normalized });
|
|
|
|
|
+ } else {
|
|
|
|
|
+ userInfoFromApi.value = {};
|
|
|
|
|
+ }
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
|
- userInfoSync.value = {};
|
|
|
|
|
|
|
+ console.warn('个人中心获取用户信息失败:', e);
|
|
|
|
|
+ userInfoFromApi.value = {};
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
onShow(() => {
|
|
onShow(() => {
|
|
|
- syncUserFromStorage();
|
|
|
|
|
|
|
+ fetchAndSetUserInfo();
|
|
|
});
|
|
});
|
|
|
-syncUserFromStorage();
|
|
|
|
|
|
|
|
|
|
-// 展示用用户信息(优先 onShow 同步的 storage,保证登录后关弹窗能刷新)
|
|
|
|
|
-const displayUserInfo = computed(() => {
|
|
|
|
|
- const sync = userInfoSync.value;
|
|
|
|
|
- if (sync && typeof sync === 'object' && Object.keys(sync).length > 0) return sync;
|
|
|
|
|
- return userStore.getUserInfo || {};
|
|
|
|
|
-});
|
|
|
|
|
|
|
+// 展示用用户信息:仅来自接口,不使用缓存
|
|
|
|
|
+const displayUserInfo = computed(() => userInfoFromApi.value || {});
|
|
|
|
|
|
|
|
-// 头像:绑定缓存的 avatarUrl;本地/临时路径(如 127.0.0.1/tmp、wxfile://)会报 500,改用默认图
|
|
|
|
|
|
|
+// 头像:从接口获取并缓存后的用户信息中取 avatarUrl/avatar,无则默认图
|
|
|
const avatarDisplayUrl = computed(() => {
|
|
const avatarDisplayUrl = computed(() => {
|
|
|
- const url = (displayUserInfo.value?.avatarUrl ?? '').trim();
|
|
|
|
|
|
|
+ const info = displayUserInfo.value;
|
|
|
|
|
+ const url = (info?.avatarUrl ?? info?.avatar ?? '').trim();
|
|
|
if (!url) return getFileUrl('img/personal/userDemo.png');
|
|
if (!url) return getFileUrl('img/personal/userDemo.png');
|
|
|
const isLocalTemp = /127\.0\.0\.1|localhost|^\/tmp\/|wxfile:\/\/|^blob:/i.test(url);
|
|
const isLocalTemp = /127\.0\.0\.1|localhost|^\/tmp\/|wxfile:\/\/|^blob:/i.test(url);
|
|
|
if (isLocalTemp) return getFileUrl('img/personal/userDemo.png');
|
|
if (isLocalTemp) return getFileUrl('img/personal/userDemo.png');
|
|
@@ -127,9 +143,10 @@ const avatarDisplayUrl = computed(() => {
|
|
|
return getFileUrl(url);
|
|
return getFileUrl(url);
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
|
|
+// 昵称:从接口获取并缓存后的用户信息中取 nickName/nickname/name
|
|
|
const displayNickName = computed(() => {
|
|
const displayNickName = computed(() => {
|
|
|
const info = displayUserInfo.value;
|
|
const info = displayUserInfo.value;
|
|
|
- return info.nickName ?? info.nickname ?? info.name ?? '用户';
|
|
|
|
|
|
|
+ return info?.nickName ?? info?.nickname ?? info?.name ?? info?.userName ?? '用户';
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 处理登录点击
|
|
// 处理登录点击
|
|
@@ -149,9 +166,9 @@ const handleNavClick = (url) => {
|
|
|
go(url);
|
|
go(url);
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
-// 登录成功回调:立即从 storage 同步用户信息,保证头像/昵称马上更新
|
|
|
|
|
|
|
+// 登录成功回调:重新拉取用户信息接口,保证头像/昵称马上更新
|
|
|
const handleLoginSuccess = () => {
|
|
const handleLoginSuccess = () => {
|
|
|
- syncUserFromStorage();
|
|
|
|
|
|
|
+ fetchAndSetUserInfo();
|
|
|
};
|
|
};
|
|
|
|
|
|
|
|
// 取消登录回调
|
|
// 取消登录回调
|