feat: complete huihui square avatar workflows

This commit is contained in:
stefanfeng
2026-07-24 14:04:21 +08:00
parent 2ef58a44b8
commit e3bda469bb
68 changed files with 8062 additions and 132 deletions

View File

@@ -0,0 +1,42 @@
# 创建分身未预填登录昵称 — 根因与修复
## 现象
登录成功后,进入「创建数字分身」,分身名称 / 显示名称没有默认填入当前登录用户的昵称;
而仪表盘(数字分身管理)却正常显示该昵称。两者读数不一致。
## 根因(前端取值优先级 bug
`AvatarCreate.vue``onMounted` 原逻辑:
```js
const profile = avatarStore.userProfile || userStore.user
const nick = profile?.nickname
```
- `avatarStore.userProfile` 是一个 **truthy 对象**(即使昵称为空字符串),会抢在真正含昵称的
`userStore.user`(登录会话 + localStorage 持久化)之前被选中。
- `src/main.ts` 在应用启动时执行 `setNativeProfile({ nickname: userStore.user.nickname || '' })`
当 localStorage 里是旧会话、昵称为空时,会把一个「空昵称对象」写进 `userProfile`
- 于是 `profile.nickname === ''`,创建页不预填;仪表盘直接读 `userStore.user` 所以照常显示。
DB 实证:`avatar-test` 容器内 `/app/avatar.db``users` 表确有真实昵称(如 `猜猜我是谁`)与真实头像
URL —— 数据本身没问题,纯前端取值优先级问题。
## 修复
文件:`digital-avatar-app/src/views/AvatarCreate.vue`
1. `onMounted` 改为 **优先 `userStore.user``avatarStore.userProfile` 仅作兜底**
```js
const real = userStore.user
const native = avatarStore.userProfile
const nick = real?.nickname || native?.nickname || ''
const avatar = real?.avatarUrl || native?.avatarUrl || ''
```
2. `userAvatarUrl` 计算属性同样改为优先 `userStore.user.avatarUrl`。
3. 兜底:本地两者皆空且已登录时,调用 `getCurrentUser()``GET /huihui/me`,读 DB 权威值)补拉真实昵称/头像。
## 部署与验证
- `./node_modules/.bin/vite build` → 新 chunk `AvatarCreate-CNMENOcc.js`
- 部署到测试环境 `geo-server``rsync dist/` → `docker cp` 进 `avatar-test-frontend:/usr/share/nginx/html/`
- 容器内清理旧 AvatarCreate 孤儿 chunk`Bw_iuiqc.js` 等多份历史残留)
- 验证:首页 HTTP 200线上 chunk 含 `displayName` 预填逻辑
## 经验
前端「当前用户资料」应统一以 `userStore.user`登录会话、localStorage 持久化)为权威源;
`avatarStore.userProfile`(原生壳注入 / 启动桥接)是可空、可被空值覆盖的派生源,绝不能放在 `||` 左侧优先。