From c6bb01f7770d7a58ef00a21176903e4123a5f13b Mon Sep 17 00:00:00 2001 From: ivan Date: Sun, 22 Mar 2026 19:17:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E5=90=8D=E6=9B=B4=E6=94=B9=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/user.ts | 6 +++--- src/stores/user.ts | 11 +++++++++++ src/views/Profile.vue | 9 +++++---- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/api/user.ts b/src/api/user.ts index b29b548..5af2c8b 100644 --- a/src/api/user.ts +++ b/src/api/user.ts @@ -146,12 +146,12 @@ export async function setSelfHeaderImg( /** * PUT /user/setSelfUsername - * 修改自身用户名 - * Body: { username: string } + * 修改自身昵称 + * Body: { nickName: string } * 需鉴权(ApiKeyAuth) */ export interface ChangeSelfUsernameReq { - username: string + nickName: string } export async function setSelfUsername( diff --git a/src/stores/user.ts b/src/stores/user.ts index c3a5e41..0a003b0 100644 --- a/src/stores/user.ts +++ b/src/stores/user.ts @@ -60,6 +60,16 @@ export const useUserStore = defineStore('user', () => { const user = ref(stored?.user ?? null) const isLoggedIn = computed(() => !!token.value && !!user.value) + /** 显示用用户名:优先 nickName,其次 userName */ + const displayName = computed(() => { + const u = user.value + if (!u) return '' + const nick = (u.nickName ?? (u as Record).nickname) as string | undefined + if (typeof nick === 'string' && nick.trim()) return nick.trim() + const name = (u.userName ?? (u as Record).username) as string | undefined + if (typeof name === 'string' && name.trim()) return name.trim() + return '' + }) const avatarUrl = computed(() => { const img = user.value?.headerImg if (!img) return '' @@ -220,6 +230,7 @@ export const useUserStore = defineStore('user', () => { token, user, isLoggedIn, + displayName, avatarUrl, balance, setUser, diff --git a/src/views/Profile.vue b/src/views/Profile.vue index 73b89a8..44096c9 100644 --- a/src/views/Profile.vue +++ b/src/views/Profile.vue @@ -195,7 +195,8 @@ const userNameRaw = computed(() => { const v = rawUser.value.userName return typeof v === 'string' && v.trim() ? v.trim() : '' }) -const displayName = computed(() => userNameRaw.value || t('profile.defaultName')) +/** 显示用:统一取 nickName(userStore.displayName) */ +const displayName = computed(() => userStore.displayName || t('profile.defaultName')) const userIdText = computed(() => { const uid = rawUser.value.id ?? rawUser.value.ID if (uid == null || uid === '') return '--' @@ -262,7 +263,7 @@ async function copyWalletAddress() { function onEditProfile() { editNameDialogOpen.value = true - editingName.value = userNameRaw.value + editingName.value = userStore.displayName || userNameRaw.value nameError.value = null } @@ -311,7 +312,7 @@ async function saveName() { return } - const res = await setSelfUsername(authHeaders, { username: trimmed }) + const res = await setSelfUsername(authHeaders, { nickName: trimmed }) if (res.code !== 0 && res.code !== 200) { const errMsg = res.msg || t('profile.nameSaveFailed') nameError.value = errMsg @@ -319,7 +320,7 @@ async function saveName() { return } - // 接口成功后刷新用户信息,确保 userName/headerImg 等字段一致 + // 接口成功后刷新用户信息,确保 nickName/headerImg 等字段一致 await userStore.fetchUserInfo() toastStore.show(t('profile.nameSaved')) editNameDialogOpen.value = false