4.2 KiB
4.2 KiB
会会数字分身 · 用户资料与分身隔离落地说明
问题
用户登录成功后,发现页面显示"已有数字分身",且没有看到当前登录账号的头像/昵称;同时希望在创建数字分身时直接沿用当前会会账号的名称和头像。
根因
- 后端
GET /api/avatar全局返回所有分身,没有按用户隔离;且backend/main.py的seed()在数据库为空时会插入一个名为"我的数字分身"的种子记录。任何新登录用户都会看到它。 - 用户头像/昵称虽然已经在登录响应中返回并落库存入
users表,但仪表盘没有展示。 AvatarCreate.vue只预填了昵称到displayName,没有photoUrl字段,也没有头像预览。
改动
后端:分身按用户隔离
backend/models.pyAvatar新增owner_id字段(会会huihui_user_id),索引,默认空字符串。to_dict()暴露ownerId。
backend/database.py- 在
_try_add_columns中加入("avatars", "owner_id", "VARCHAR DEFAULT ''"),容器启动时自动给已有 SQLite 表加列。
- 在
backend/routers/avatars.py- 新增
_resolve_user()从Authorization: Bearer <app_token>解析当前用户。 GET /api/avatar仅返回owner_id == user.huihui_user_id的分身;无/无效 token 返回空列表。POST /api/avatar创建时写入当前用户的owner_id。
- 新增
前端:仪表盘展示用户资料头
src/views/AvatarManage.vue- 引入
useUserStore。 - 顶部新增用户资料头:圆形头像(
userStore.user.avatarUrl,无则 emoji 回退)+ 昵称 + 登录状态/手机号。 - 分身卡片优先显示真实头像
photoUrl,无则回退 emoji。
- 引入
前端:创建分身预填名称与头像
src/views/AvatarCreate.vue- 表单新增
photoUrl。 onMounted从avatarStore.userProfile || userStore.user预填name、displayName、photoUrl。- Step1 新增"分身头像"预览区与"已沿用你的会会头像"提示。
- 确认页显示用户头像(或 emoji 回退)。
- 提交时携带
photoUrl。 - 引导页"已有数字分身?"文案改为
v-if="avatarStore.avatars.length > 0",避免新用户被误导。
- 表单新增
Ardot 视觉稿
- 新建「会会数字分身-仪表盘与创建页」(
fileId: 706241841026616)。 - 包含两屏:
- 数字分身管理仪表盘(状态栏、橙头、用户资料头、Token 余额、分身卡片、工具入口)。
- 创建数字分身 Step1(头像预览、预填名称/显示名称、描述、下一步)。
- 沿用 Glass Sunset Warm 品牌色系(
#FFF6EC背景、#FF8C42主色、#4A2511文字)。
部署
- 前端:
./node_modules/.bin/vite build→rsync dist/→docker cp进avatar-test-frontend→ restart。 - 后端:
rsync models.py / database.py / routers/avatars.py→docker cp进avatar-test-backend→ restart;启动时自动迁移owner_id列。
验证结果(容器内实测)
| 检查项 | 结果 |
|---|---|
owner_id 列已迁移 |
✅ |
种子分身 owner_id='' |
✅ |
无 auth GET /api/avatar |
{data:[],total:0} ✅ |
登录用户 GET /api/avatar |
{data:[],total:0}(种子隐藏)✅ |
创建分身写入 ownerId + photoUrl |
✅ |
| 创建后本人列表只含 1 条 | ✅ |
| 删除后列表回归空 | ✅ |
用户现在体验
- 登录后进入
/#/(创建引导)或/#/avatar/manage(仪表盘),顶部会显示当前会会账号的头像和昵称。 - 新用户首次登录时,不会看到任何"已有"分身(列表为空)。
- 点"立即创建一个"进入创建流程,名称和头像已经自动预填了当前用户的会会昵称和头像。
- 创建成功后,仪表盘只显示用户自己创建的分身。
访问地址
测试环境(同网段/隧道可达):
- 创建引导页:
http://192.168.1.188:8099/#/ - 仪表盘:
http://192.168.1.188:8099/#/avatar/manage - 登录页:
http://192.168.1.188:8099/#/login/sms
后续可选
- 生产环境切到
99hui.com后可真正下发短信;当前fat-open预发环境建议继续用账号密码登录。 - 可在创建页支持用户上传/裁剪自定义头像,替代目前直接沿用会会头像的方案。