# 需求变更日志 (Changelog) > 按日期倒序记录每次需求变更。每条记录在开发完成、测试验收通过后归档。 --- ## 2026-06-04 — fix: 参考图 9 张上限改为「上传图 + 素材库引用图」合并去重计数 **状态**: ✅ 本地完成 | **验收**: `tsc -b` 0 报错 + 后端 syntax OK + vitest 相对基线 0 回归(inputBarStore.test.ts 7 个失败为改前既有的陈旧用例) ### 变更内容 旧逻辑:9 张上限只算直接上传图片,@ 素材库引用图片完全不计入(可 9 张上传 + 无限 @ 素材 → 超标)。 新逻辑:**上传图片 + 去重后的 @ 素材库引用图片 合计 ≤ 9,同一张素材图 @ 多次按 1 张计算**。视频(3)/音频(3)上限不变。 | 层 | 文件 | 改动 | |----|------|------| | 前端 | `web/src/lib/assetMentions.ts` | 抽出 `collectAssetMentionStats`,返回新增 `imageAssetIds: Set`(按 `assetId` 去重的素材图片集合)| | 前端 | `web/src/store/inputBar.ts` | `addReferences` / `_validateAndAddImages` 上传图校验并入 `imageAssetIds.size` 一起卡 9 张 | | 前端 | `web/src/components/PromptInput.tsx` | `insertAssetMention` 补 image 分支:已 @ 过的同一素材放行,否则 `上传图+去重素材图 >= 9` 拦截;新增 `MAX_TOTAL_IMAGES=9` | | 后端 | `backend/apps/generation/views.py` | 上限校验从循环前(仅算上传图、排除 asset://)移到循环后,改用最终 `image_n > 9` 判断——`seen_urls` 已对相同 URL(含重复 @ 同一素材)去重,`image_n` 即去重后图片总数 | ### 关键设计要点 - **后端天然去重**:`seen_urls` 早已跳过完全相同的 `asset://local-{id}` URL,故把上限检查挪到循环后用 `image_n` 判断,一处改动同时满足「合并计数 + 去重」。 - **重复 @ 同一素材放行**:前端按 `assetId` 判断,编辑器里已存在该素材时再次 @ 不增加去重计数、不拦截。 - 前后端文案统一:「最多 9 张图片(含素材库引用,同一素材按 1 张计算)」。 --- ## 2026-05-12 — v0.20.1: 7 批次小修复 + 中等功能(主管bug/封面帧/api_prompt/站内通知/团管重置密码/reEdit prompt/Safari 自适应根因) **状态**: ✅ 本地完成 | **验收**: vitest 71/162 基线 0 回归 + 3 套 smoke (25+8+11) 全过 + 后端 curl 验证 4 通知 endpoint 全过 + 团管重置 6 项权限矩阵全过 ### 变更内容 | # | 批次 | Commit | 关键改动 | |---|------|--------|----------| | A | 主管bug | `e86e3d4` | TeamsPage 主管 badge 加 onClick,后端早就支持 `is_team_admin=false` 同时清 `is_team_owner` | | B | 封面帧前端 | `72f351d` | admin/team/profile 三个 records view 回传 `thumbnail_url`,三处 `