feat(canvas): 模型选择 - 支持彩色展示标签并优化目录与积分交互

This commit is contained in:
ddCat
2026-09-21 11:11:10 +08:00
parent d5ff22258e
commit b8eefdad70
31 changed files with 410 additions and 63 deletions

View File

@@ -259,6 +259,8 @@ schema v27 为 `channel_model_price_tiers` 和 `billing_orders` 添加 `cost_con
Schema 30 新增 `tools`,31 新增 `tool_favorites`;主分支已有 28(Agent 执行日志)、29(资源租约)编号和 checksum 不变。
Schema 32 为 `channel_models` 新增 `tags`(TEXT、NOT NULL、默认 `'[]'`),通过 JSON serializer 存储有序的 `{ text, color }` 数组。每个模型最多 5 个标签,文字去除首尾空白后为 1–12 字且不重复,颜色为 `purple/blue/green/gold/orange/pink`。标签仅用于展示,不影响价格、能力和路由。后端启动时执行增量迁移,已有模型默认无标签;回退应用可保留此新增列,若人工删除列会丢失标签配置,须先备份。
- `tools`:自增 `id`、类型 `type`、名称 `label/label_en`、描述/标签、`prompt`、预览 `cover/media_url/extra_info_json`、比例、`owner_id`、`source`、`enabled`、`visibility`、排序权重和时间。
- `tool_favorites`:`id`、`user_id`、`tool_id`、收藏时间;用户和工具联合唯一。删除自己的自定义工具时事务清理收藏,不删除预览文件。
- 启动幂等装载 87 个预设(风格 45、运镜 33、九宫格 9),不下载第三方媒体。显式 ID 与用户工具冲突时启动报错,不覆盖用户数据;PostgreSQL 同步自增序列。

View File

@@ -45,7 +45,9 @@ description: 信封、错误码与 OpenAPI
`GET /model-catalog` 固定返回 `source=system`,直接查询所有启用系统渠道下的渠道模型,目录数据在 `channels[].models[]`,`models` 固定为空数组。不受逻辑模型开关影响,不反查逻辑模型或供应线路。每项的 `modelKey` 是调用标识,`displayName` 是模型展示名,`icon` 是模型图标键,`channelLabel` 是可选的渠道展示名(默认空字符串)。后台渠道模型创建与更新请求使用相同的 `channelLabel` 字段;服务端去除首尾空白并限制为 80 字,空字符串表示使用所属渠道名称。
渠道模型创建、更新、管理列表、公开目录和会话模型价格信息均使用 `description` 表达模型描述。服务端去除首尾空白后限制为 500 字,允许空字符串清除描述;无管理员权限或超长内容拒绝保存。创作端二级选项在悬浮、聚焦或选中时展示该字段,长内容可悬浮查看完整文本;未填写的系统模型不按名称生成宣传文案。描述区域保留固定行高,悬浮不改变菜单项尺寸。
渠道模型创建、更新、管理列表、公开目录和会话模型价格信息均使用 `description` 表达模型描述。服务端去除首尾空白后限制为 500 字,允许空字符串清除描述;无管理员权限或超长内容拒绝保存。创作端二级选项常驻展示该字段,不依赖悬浮 Tooltip;未填写的系统模型不按名称生成宣传文案。
以上模型接口同时使用 `tags: [{ text, color }]` 传递有序展示标签,例如 `[{"text":"限时特价","color":"purple"},{"text":"官方1折","color":"gold"}]`。最多 5 个,文字去除首尾空白后为 1–12 字且不可重复;颜色仅接受 `purple`、`blue`、`green`、`gold`、`orange`、`pink`。创建/更新由管理员操作,非法标签拒绝整个保存;提交 `tags: []`(或省略字段)清空标签。用户模型选择器在对应二级渠道项中常驻展示,标签不参与路由、价格计算或权限判断。
创作端跨渠道按模型 `displayName` 分组为一级菜单,二级菜单使用每条模型的 `channelLabel`,例如 `MiniMax H3 → 秘塔(满血渠道)`。选中值继续使用 `channelId::modelKey`,报价和生成请求保留该渠道身份。展示字段不参与路由、权限及计费。系统渠道的“前台名称/前台显示别名”已移除,管理 API 不再接受或返回 `publicAlias`。

View File

@@ -5,6 +5,27 @@ description: 当前项目已实现功能的手工验证清单与未确认边界
# 待测试
## 系统渠道模型展示标签
- [ ] 在系统渠道的模型编辑中添加多个标签(如“限时特价”“官方1折”),选择不同颜色,保存并重新打开后文字、颜色及顺序保持一致;删除全部标签后前台不再显示。
- [ ] 最多 5 个标签,每个去除首尾空白后为 1–12 字;空白、重复、超长标签或无效颜色被拒绝,失败不覆盖原数据。
- [ ] 用户模型选择器的二级渠道行常驻显示对应标签;同名模型的不同渠道标签互不串用,长内容可换行,明暗主题可读,积分、报价和请求路由不受影响。
- [ ] 已有数据库升级至 schema 32 后,旧模型默认无标签,原模型标识、价格和能力配置不变。
- [ ] 后端启动迁移完成后正常通过版本检查,不再出现“数据库结构版本 32 高于程序支持的 31”;程序支持版本已同步为 32,并添加迁移计划版本一致性回归测试。
## 模型一级菜单选中状态
- [ ] 明暗主题下打开模型菜单,当前模型所属一级项保持高亮;进入二级菜单并切换左侧一级项,确认仅当前展开项及已选渠道高亮。悬浮其他行只显示手形鼠标,不变色、不位移;键盘导航仍保留焦点轮廓。
- [ ] 积分使用紧凑金黄色、浅底细边框的小圆角标签及 11px 金币图标,适配明暗主题;所有行价格右对齐,选中勾选不挤动价格,金额精度和计费单位保持不变。
- [ ] 每次打开模型菜单默认展开当前选中项所属二级目录;无有效选中项时显示一级目录。桌面双栏总宽度为 800px,一级栏宽度不变,增加的空间留给二级目录;窄屏不超出视口。
- [ ] 选择渠道后菜单保持打开,选中高亮及勾选立即更新,可连续切换;点击外部、再次点击触发器或按 Escape 仍可关闭,悬浮其他行不高亮。
## 社区技能文件包初始化
- 修复从 Markdown 正文推断技能元数据时,截断后额外追加 `...` 导致简介超过 500 字、后端启动中止的问题。名称、简介和版本的省略标记均计入长度上限,原始 `SKILL.md` 正文保持完整;不放宽文件包长度校验、不跳过失败技能。
- 补充完整种子启动链回归:原有 33 条 JSON 技能、新增 72 条社区技能、3 条 Go 内置技能,共 108 条,依次同步入库并生成文件包;重复初始化不产生重复版本、不丢失加入/收藏状态;技能广场可搜索 `freestyle-template-match`。
- [ ] 更新后端并重新启动,确认不再出现 `迁移技能 16000000000003 文件包失败`;在「技能库 → 技能广场」清空分类筛选后搜索 `freestyle-template-match`,查看详情并加入「我的技能」。本地临时数据库回归不代表实际部署已更新或浏览器验收通过。
## PR #554–#571 批量整合
- 合入除 #557 外的 17 个 PR;注册协议正文未确认,暂不引入空协议勾选、相关 API 或数据库版本变更。