Commit Graph
322 Commits
Author SHA1 Message Date
hh 826fc124e6 fix: 修复资产库批量删除 2026-07-13 16:10:46 +08:00
hh 0a5a565088 chore: 忽略本地 pnpm 存储 2026-07-13 14:33:19 +08:00
hh bd3b484fde fix: 修复商品批量删除与恢复 2026-07-13 14:31:26 +08:00
hh f803948143 fix: 商品详情视频项目卡片可打开并展示主图 2026-07-13 13:52:59 +08:00
hh 5d2b70c3a2 fix: 统一资产库条目统计 2026-07-13 13:16:09 +08:00
hh df9b8a2f1b chore: 开启模特三视图生成 2026-07-13 12:01:05 +08:00
hh 50068c0e79 fix: 规范模特三视图计费显示 2026-07-13 11:57:51 +08:00
hh b3687e9c0e docs: 同步中文提交规范 2026-07-13 11:24:23 +08:00
hh 6a37d2e9df feat: 接通模特三视图生成 2026-07-13 11:22:37 +08:00
hh fc0f0ca370 feat: 解耦角色与模特并完善模特库 2026-07-13 11:02:30 +08:00
hh 564215dc53 fix: 完善商品—模特库-视频项目-自由创作等删除先进垃圾桶及可恢复等流程 2026-07-10 15:06:07 +08:00
hh 3e52942547 fix: 修复换火山账号导致素材库操作失败问题 2026-07-09 17:54:05 +08:00
zycandClaude Opus 4.8 8c50096888 chore(env): 火山迁移到新账号 — 视频 ARK key + 素材库审核 AK/SK
- VOLCANO_ARK_API_KEY / VIDEO_ARK_API_KEY → 新账号 ark-2e6b8833(视频与素材库同账号,保 asset:// 人脸引用可解析)
- ASSETS_API_ACCESS_KEY/SECRET_KEY → 新账号 AKLTOTgz.../TTJZ...(Patrick 提供,已连通性实测)
- ASSETS_API_PROJECT_NAME int_dev_Airlabs → default(新账号已有 human 素材组所在项目)
- 图片/文本走 yunqi 中转站、TOS/TTS 独立账号,均不属本次迁移,未动

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-09 15:24:25 +08:00
hh 93e8ece9da feat: 自由创作任务素材组编辑优化 2026-07-09 15:05:32 +08:00
hh b1d5d25264 feat: 消费模块自定义金额充值调整为正整数 2026-07-09 14:18:46 +08:00
hh a82f90d0e0 fix: 修复自由创作首尾帧上传人脸图不通过问题 2026-07-09 11:39:54 +08:00
hh 5c9e62a165 fix: 视频项目-分镜脚本删除时回显一下修复 2026-07-08 16:21:18 +08:00
hh 4379aaf9cc docs: 更新模特库与我的演员数据流说明 2026-07-08 11:37:56 +08:00
hh 9ccd061205 docs: 记录当前版本模特库与演员数据流 2026-07-08 11:32:12 +08:00
hh ff723b4281 fix: 自由创作分类入库区分视频与图片展示 2026-07-07 18:39:01 +08:00
hh 45ff7838d8 feat: 视频脚本添加分镜最后一个按钮不隐藏-自带脚本移除上传文件 2026-07-07 14:07:17 +08:00
zycandClaude Fable 5 2fcd6d996c fix(deploy): migrate 跨 pod 串行化 + rescale 迁移幂等守卫(测试环境×10⁶事故复盘)
事故:连推 3 commit 触发 3 轮 rolling 部署,多个新 pod 并发跑 migrate 且崩溃重跑,
积分 ×10 rescale 被交错重放——ai.0025 执行 6 次(单价/任务计价 ×10⁶),accounts.0008
执行 2 次(限额 ×100),billing.0003/0004 从未完成(django_migrations 漏记录)。
测试库数据已按精确倍率手工修复并补记迁移记录(备份于本机)。

两层防复发:
1. docker-entrypoint 用 MySQL GET_LOCK('airshelf_migrate') 串行化 migrate,
   后到 pod 等锁,拿到时迁移已被记录 → 自然 no-op;
2. 三个 rescale 迁移加 airshelf_rescale_marker 幂等标记(与数据变更同事务提交):
   记录丢失/崩溃重跑时,标记在 → 跳过,不会重复 ×10。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-07 11:25:40 +08:00
zycandClaude Sonnet 5 d466bd60c6 feat(adminpanel): 任务监控「回收退款」手动兜底
新增 POST /api/admin/tasks/<id>/reap/:仅限卡在「已预留」超 10 分钟的僵尸任务(SUBMITTED/
POLLING 故意不许杀,视频合法耗时 5-10 分钟+,强杀会与轮询结算竞态),标失败 + 退还冻结积分,
与自动回收 _reap_stale_standalone_image_tasks 同款账务路径,幂等。

自动回收只在同团队下次提交时顺手触发,团队弃用某功能后冻结积分会永久躺着——这是给超管的
手动出口。序列化器加 reapable 字段(与端点闸同口径),任务监控行级「回收退款」按钮。
4 条测试(成功退款+审计/窗口内拒绝/非 RESERVED 拒绝/非超管 403)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 10:38:45 +08:00
zycandClaude Sonnet 5 299b2c9ecd feat(admin): 后台列表分页 + 积分显示格式化
9 张 admin 列表表格接服务端分页(共享 Pager 组件,10条/页,alwaysShow 单页也显示分页条);
积分数值统一 pts() 格式化(去除 DecimalField 序列化的多余小数位,整数不再显示 .0000)。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 10:16:40 +08:00
zycandClaude Sonnet 5 bf20de956c feat(billing): 计费商业化重构(积分制)+ 团队差异化调价
统一计价引擎 apps/billing/pricing.py:1积分=¥0.1,平台成本(¥)与用户价(积分)双记账,
视频按火山真实 usage.total_tokens 结算(true-up,终结¥1/段倒贴)+ 首发×1.5毛利系数。
Team.price_multiplier 差异化调价(jimeng同款):挂牌价×系数两步HALF_UP取整,视频类
按下单时的价格/汇率快照结算(中途改配不影响在途任务)。

BillingConfig 单例(汇率/毛利系数/预留buffer,admin可调即刻生效)。存量数据 ×10 rescale
迁移(RunPython+atomic,MySQL 迁移不可中断重跑)。开户赠送归零(DEFAULT_TRIAL_CREDITS=0,
商业决策)。audit_billing 加 I9(卖亏审计)。271 条测试 + tsc/build 全绿。

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-07 10:04:00 +08:00
hh c1420316c2 chore: 更新gitignore排除本地win一键启动bat脚本 2026-07-06 18:04:56 +08:00
halice 8b4dd535ae fix(ai): 允许删除自由创作失败任务 2026-07-06 17:19:46 +08:00
zycandClaude Fable 5 c5f7eb2acc feat(ai): 自由创作视频生成全量移植(/free-create)——Seedance 文/图生视频+按时长计费+人物素材库
后端:
- free_video.py: 提交/轮询/收藏/软删全链路,复用 AITask(新增 is_deleted/is_favorited, migration 0022)
- video_pricing.py: 按时长 token 计费(×1.10 buffer+clamp); video_errors.py 错误归一; media_probe.py 时长探测
- catalog/volcano: Seedance free-video 模型接入+seed(migration 0023)
- 素材库: FreeAssetGroup/FreeAsset(火山 Assets API 引用登记, migration 0009)+ 上传/轮询/删除接口
- settings: FREE_VIDEO_MAX_CONCURRENT 团队并发闸(默认3); CELERY_TASK_ALWAYS_EAGER 本地联调开关(生产恒关)
- 测试: test_free_video.py 新增; billing/products/projects tests 配套调整

前端:
- /free-create 页面+components/free-create/ 全套(输入栏/@mention 素材引用/生成卡/视频详情弹窗/素材库弹窗)
- api.ts/types.ts 扩展 free-video 与 free-assets 接口; 路由/侧边栏入口接入

bug/: 测试清单 (11)(12) 与截图归档

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-06 10:58:36 +08:00
maidong 94202e7bce ci: authenticate checkout clone for private repo 2026-07-06 10:02:59 +08:00
zycandClaude Fable 5 5ec69ad91f fix: YYX测试清单16条收口——资产库弹窗层级/批次多选删/商品筛选/模特卡单卡化/垃圾桶清空等
- 资产库:批次弹窗降层(under-confirm 990<999)修单图删除确认弹窗被压;编辑态批次卡多选批删;facets 新增 products 关联商品筛选(前后端,+2 测试);视频成品 tab 补搜索/排序/分页
- 平台套图工作台:「更多」气泡与 icon 左对齐+鼠标移出自动收起;模特卡改单卡(空态「+」占位,点卡进模特库单选回填)
- 工作台:删余额条,冻结/共计移至小标题行右侧(.dash-funds-mono)
- 模特库:点模特卡弹详情(形象图/标签/三视图+灯箱放大)
- 垃圾桶:新增「全部恢复」/「清空垃圾桶」(清空二次确认)
- 视频项目页:字重/阴影等轻量对齐设计规范
- api.assetFacets 返回体逐键兜底:旧后端缺 products 键会致资产库整页 undefined.find 白屏(前后端部署时序防护,浏览器已复现验证)

验证:tsc --noEmit / vite build / apps.assets 测试全过;暂存树已独立编译验证,不依赖工作区其余在途改动

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 18:03:26 +08:00
zycandClaude Fable 5 a048c32527 fix(ai): 图片创作重跑三连修——丢参考图/裂新批次/提示词矛盾
① 重跑丢参考图:「重跑这张/重跑整批」原来不带 refs → 后端收不到
reference_image_ids 落到纯文生图,出图与上传素材无关。现 GenBatch.refs
存 assetId(上传后回写;恢复批次由 tasks 接口新带的 id 还原),重跑原样带回。

② 重跑裂新聊天记录:enqueue 每次新铸 batch_id,后端没有「补进原批次」
概念,刷新/切对话后重跑图裂成新卡、原卡失败格还挂着。现生成接口收/回
batch_id(UUID 校验,非法兜底新铸),重跑沿用原批次并打 batch_append 标记;
前端批次卡存 backendBatchId(提交回调即落,整批全失败也不丢),重跑带回。
恢复分组时 rerun 任务不计入「应出张数」→ 补图成功后失败格自然收掉;
批次状态改按「有任务在跑」判定,已有好图+补图在途也能接续轮询。

③ 同批换装一半不换:带参考图模板「严格保留款式/不要换款」与用户要求
(如"生成现代服装的穿着")直接矛盾,模型每张随机听一边。改为只锁主体身份
(人物五官/发型/体型,商品品类/外形/Logo),用户明确要求改变的以用户要求
为最高优先级,未提及的才默认与参考图一致。

测试:apps 全量 214 过(需 --settings=airshelf.settings.test);
新增 test_rerun_with_batch_id_reuses_batch_and_marks_append。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:40:52 +08:00
zycandClaude Fable 5 dcc5d7fe50 fix(billing): 删任务/删项目级联吞 ACTIVE 预留致 reserved_balance 永久冻结(审计 I2)
- 根因: CreditReservation.task 是 OneToOneField(CASCADE), AITask.project 也是 CASCADE
  —— 删项目→级联删任务→ACTIVE 预留行被吞, 账户冻结份额永不归还(实测 4 账户漂移共 ¥42,
  且随删项目持续增长)
- 修法: billing/signals.py 挂 AITask pre_delete, 删除前先 release_credit 释放(级联同样
  触发, release 自带行锁+幂等); apps.py ready() 接线
- 回归测试 x3: 直删任务/删项目级联/已扣费不重复释放
- qa/repair_reserved_drift.py: 存量漂移回填脚本(dry-run 默认, --apply 落 RELEASE 流水),
  已对线上 4 账户执行并复验清零
- qa/function-audit/output: 本轮 18 页模拟点击审计报告(0 真死按钮 0 JS 报错)

验证: 后端测试 213/213 通过, django check 无警告
补齐 aab4d7e: 该提交带走了 signals.py 之外的测试轮改动, 信号挂载点与回归测试在本提交收口

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 13:07:09 +08:00
zycandClaude Fable 5 aab4d7ea4c fix: 测试清单遗留bug批量修复(15条:商品库/消费/团队/设置/消息中心/平台套图/资产库)
- R6 商品图删除不生效: 封面asset移交+绕开prefetch缓存, 前端封面缩图补删除入口
- R48 消息中心长文本与UI框错位: 胶囊单行省略+优先级标签禁压缩
- R70 账单流水筛选: 后端加ledger_type过滤, count随筛选变化, 切筛选重置页码
- R72 月限额改后不刷新: 团队页/消费页自取最新teamSettings, 两页同源
- R83/R86 平台套图提示词框加大+模型胶囊嵌入输入框(复用Pill组件)
- R96 未读角标: 修KeyTextTransform注解过滤触发MySQL 3141致接口500
- R100 工作台记录丢失: 新增GET /api/ai/tasks/workbench/ 同源恢复, 废除localStorage方案
- R104 卖点添加按钮移出输入框, 新建抽屉+编辑态统一
- R106 商品库宽屏锁5列, 10个/页铺满两行
- R108 资产删除改软删+单张删除+回收站二次确认; trash页商品/资产双分区+restore/purge端点
- R109 生成图自动入资产库(person演员立绘除外), 迁移0008存量回填, 移除全部加入资产库入口
- R65 无需改动(22268d6已修, 测旧部署所致)

验证: tsc/build/check/makemigrations --check 通过, 后端测试210/210, perf-probe PASS

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-02 11:30:06 +08:00
zycandClaude Opus 4.8 22268d608b fix: 测试清单一轮bug修复(商品库/视频项目/设置/消费/平台套图)
- 商品库编辑删图假成功+悬停无删除图标;商品三视图错显角色三视图
- 视频项目演员删除入口;角色三视图防呆;故事板审核失败原因透出
- 设置:管理团队死按钮/通知未接入项屏蔽/邮箱验证链路
- 消费:账单流水切换类型重置分页+独立总页数
- 资产库上传按钮隐藏;月限额两处对齐
- 平台套图:提示词框放大/选模型胶囊内嵌/未读任务角标/工作台记录持久化
- 新建商品独立添加卖点按钮;商品库超1920自适应

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 19:46:35 +08:00
zycandClaude Opus 4.8 b17a716c06 feat(ai): 生成失败落站内通知,正文带第三方 API 原始报错
故事板/视频之外,补齐 基础资产/商品三视图/图片创作 三条出图失败路径:
失败时落一条 priority=err 通知,正文 = 友好提示 + 第三方服务商 API 原始
报错(如 400 moderation_blocked),原始报错同存 metadata.api_error。
同任务 dedupe 去重,通知本身出错不影响主失败处理。

排查唐卡展故事板「随机失败」时发现:UI 显示的"胸罩/内衣"提示是写死的
误导文案,真因是 gpt-image-2 概率性 moderation_blocked,原始报错此前
只埋在 AITask.error_message 里用户看不到。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 16:05:47 +08:00
zycandClaude Opus 4.8 6a4374678e fix: 角色网格卡「重跑」也参考当前立绘(上轮只改了详情弹窗,漏了网格卡)(row42 续)
角色有两个重跑入口:详情弹窗 regenPortrait(上轮已传 ref)、网格卡「重跑」按钮(漏了)。
截图反馈点的正是网格卡那个,它直接 genBaseAsset 没传参考图 → 仍重抽随机人。
修:网格卡重跑 person 且有 adopted_asset 时传它作 reference → 后端 image_edit 保持人物一致。
seed 首次生成(无立绘)不传,正确。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 14:25:51 +08:00
zycandClaude Opus 4.8 438ec6aee0 fix(ai): 图片创作带参考图也改用 _FREE_VARIATIONS,堵住第2张广告文案
上一处只修了无参考图的裸文生图分支;带参考图走 build_free_reference_prompt,
index>0 仍复用套图 _COVER_VARIATIONS(含卖点文案/标题价签),致带参考图的
第2张同样凭空出广告文案。改为 _FREE_VARIATIONS 并显式禁止画面加文字。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 14:20:56 +08:00
zycandClaude Opus 4.8 186446e669 fix: 商品三视图回填改用 in_library:all 专拉,刷新真回显 (ZWQ#5 续3)
真根因(比标记更基础):商品库生成的三视图 in_library=False(工作台生成默认不入资产库),
而商品详情原回填读的是 assetsPage({product}) 默认只返 in_library=True 的结果 → 三视图被过滤掉、
压根不在前端数据里 → 回填永远看不到,刷新即「尚未生成」。

修:三视图面板单独拉一次 in_library:"all" 的商品资产(asset_type=image)做回填,
不影响 AI 素材 grid(仍只显已入库)。依赖 assetReload 重拉,生成后即时回显;
配合上一commit的 view=three_view 标记,刷新/跨模块都认得出。
注:存量旧三视图(标记前生成)无 view 标记仍认不出,需重新生成一次。

构建 tsc=0/build=0。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 14:09:34 +08:00
zycandClaude Opus 4.8 a020a3153a fix(ai): 图片创作自由模式改用 _FREE_VARIATIONS,第2张起不再凭空出广告文案
纯文生图同批多张时复用了套图的 _COVER_VARIATIONS,其中"卖点文案分区/
留出标题价签区"等指令让模型在第2张起自己画出护肤广告文案。自由模式
新建 _FREE_VARIATIONS(只换视角/景别/光线/机位),并显式禁止画面加任何
文字/卖点/标题/价签。套图 mode=cover 仍用 _COVER_VARIATIONS,不受影响。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:34:44 +08:00
zycandClaude Opus 4.8 4d2b9343b3 feat: 角色重跑参考当前立绘+提示词,保持人物一致 (row42)
原「重跑」立绘是纯文生图,每次重抽成另一个随机人。改为:角色已有当前立绘时,
重跑传该立绘作参考图 → 后端走 image_edit(参考立绘+提示词),保持同一人物相貌/发型/身份一致。

- generate_base_asset 新增 reference_asset_id;person 有参考图则 image_edit + build_person_portrait_prompt_refs
- run_base_asset_task image_edit size 按 kind 区分(person 立绘竖 1024x1536,商品三视图横)
- 全链路透传 reference_asset_id:pipeline.regenPortrait(传 viewPortraitAsset)→ genBaseAsset →
  onGenerateBaseAsset → api.generateBaseAsset → generate-base-asset 端点
场景重跑不受影响(仍文生图);需部署生效(后端)。

构建: tsc=0/build=0; py_compile OK; projects+assets 测试无新增回归(基线 4 fail 2 err)。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:20:47 +08:00
zycandClaude Opus 4.8 535e557728 fix: 「加入模特库」仅图片创作显示,模特上身图/平台套图隐藏 (row41 续)
气泡项加 mode === "image" 条件门控。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:20:47 +08:00
zycandClaude Opus 4.8 16219a4132 feat: 图片创作每张图加「加入模特库」按钮 (row41)
图片工作台单图「更多」气泡新增「加入模特库」(与「加入资产库」并列):
把该生成图复用为模特形象图建 Model 条目,加入后变「已加入模特库」禁用。

后端新增 POST /api/models/enroll-asset/(ModelLibraryViewSet.enroll_asset):
复用已有资产作 portrait_asset 建 Model,不重新上传/不二次扣费;同一资产幂等返回。
需部署生效(后端)。

构建: tsc --noEmit=0, npm run build=0; 后端 py_compile OK。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 13:11:50 +08:00
zycandClaude Opus 4.8 76d59d06fe fix: 视频项目第二步复用商品库已生成的三视图,不再「缺三视图」(ZWQ#5 续2)
商品库三视图走 standalone Asset、视频项目走项目级 BaseAssetGroup,两套存储不互通 →
商品库生成/采用的商品三视图,进视频项目第二步基础资产读不到、显示「缺三视图」。

修:项目详情 retrieve 时惰性单向同步(幂等,沿用 settle_video_completion 同款自愈模式)——
若商品已有 standalone 三视图(metadata.view=three_view + product_id)但项目商品组尚无采用资产,
就 seed 进项目商品 BaseAssetGroup(candidate+adopted)。已在项目内生成过的不覆盖。
依赖上一commit给商品库三视图打的 view=three_view 标记。

projects 测试:基线已有 4 失败 2 错误(环境 provider 未配),本改动无新增回归。需部署生效。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:47:07 +08:00
zycandClaude Opus 4.8 77759678a7 fix: 商品库生成的三视图打 view=three_view 标记,刷新不丢 (ZWQ#5 续)
真因:商品库点「AI生成三视图」走 reference_product 路径,产出资产 name=「图片创作」、
metadata 只有 mode/product_id —— 没有 view=three_view,也非 tri_view 类。导致:
①商品库详情三视图面板刷新后认不出(显示「尚未生成」、采用也丢);
②视频项目第二步基础资产读不到「商品已有三视图」。

修:reference_product 资产与视频项目基础资产阶段生成的商品三视图同款标记 ——
category=product_image + 名字含「商品三视图」+ metadata.view=three_view + product_id。
这样 products is_triview(排除 product_image 不误入角色区)、商品库前端回填(view===three_view)、
视频项目商品三视图判定都能认出。需部署生效;存量旧资产无标记不追溯。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:40:23 +08:00
zycandClaude Opus 4.8 c827191a36 fix: 账单流水 详情列截断 + 状态不换行 + 加跳页输入 (row39/row40)
- row39: 详情列文字过长撑得「状态·成功」换行 → 详情列 max-width+nowrap+省略号截断(hover title 看全)、状态列 white-space:nowrap
- row40: 账单流水分页器加「跳至第 N 页」输入框,回车或点「跳转」钳到 [1,总页数] 直达

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:19:39 +08:00
zycandClaude Opus 4.8 8f8bf3283a fix: 顶栏头像也显示真头像 (row29 续2)
上轮只改了侧栏/账户菜单/设置页,漏了顶栏右上角 .topbar-avatar(App.tsx 与 pipeline.tsx 各一处)。
改为有 avatar_url 显 <img> 否则首字;.topbar-avatar 已有 overflow:hidden + img 铺满规则,CSS 不动。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:16:38 +08:00
zycandClaude Opus 4.8 38881c3041 feat: 任务中心批次弹窗加「加入资产库」状态+单图/一键切换 (row38)
任务中心点已完成批次的弹窗里,每张生成图现在:
- 显示「已入库」绿标 + 入库态橙描边
- 右下角单图「加入资产库 / 取消」按钮(单图粒度,复用 Asset.in_library 真门控)
- 弹窗头部「一键全部加入资产库 / 全部移出」批量切换
乐观更新 batchImgs+assets,失败回滚;生成时已扣费,此口只控是否进资产库列表、不二次扣费。
弹窗 createPortal 到 body 不在 .image-workbench 作用域,故 .modal 作用域补一份 gen 网格/徽标/按钮样式。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:02:28 +08:00
zycandClaude Opus 4.8 291a8bf394 fix: 头像上传后前端不显示真头像 (row29 续)
真因:上传成功且 setUser 写入了 avatar_url,但前端任何头像位置都没渲染 avatar_url,
只显示姓氏首字占位 → 看着像「没更新」。根因:User 类型里压根没暴露 avatar_url 字段。

修:User 类型补 avatar_url;侧栏 .user、账户菜单 .shell-account-head、设置页 av-big
三处头像改为「有 avatar_url 显 <img>,空则回退首字」;.av/.av-big 加 overflow:hidden + img 铺满规则。
后端上传 200 + 直链公读已实测正常,此为纯前端显示修复。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 11:02:28 +08:00
zycandClaude Opus 4.8 b4e61ce627 fix: 消息中心收件箱副文案单行省略,不换行撑破对齐 (PMC-row19/UI-row2)
.msg-brief 从 -webkit-line-clamp:2 改为 1 + word-break:break-all:
长文案超出一行即省略号截断,修复 UI 反馈「文字太长换行后与 UI 框错位」。

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 10:32:23 +08:00
zycandClaude Opus 4.8 cb02907262 fix: 商品三视图回填只取商品三视图,排除角色三视图 (ZWQ row25+row28)
上一版回填用 category=tri_view||名字含三视图,把「角色/人物三视图」也捞进了商品三视图面板
→ 商品库点「AI生成三视图」显示的是该商品视频项目里的角色三视图,而非商品本身三视图(row28)。

修正:回填过滤排除任何 metadata.triview_of(角色三视图必有、指向其立绘)及 kind=person/scene,
只保留商品三视图(category=tri_view 且无 triview_of / view=three_view / 名字含「商品三视图」)。
这样既同步回填视频项目生成的商品三视图(row25),又不与角色三视图混(row28)。

后端商品三视图本就带 view=three_view+product_id(services.py 注释明说供商品库回填),纯前端修。
构建: tsc --noEmit=0, npm run build=0

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-30 10:24:10 +08:00