feat(*): 系统渠道与画布 - 支持多规格批量调价及 Agent 入口拖动
This commit is contained in:
@@ -20,6 +20,7 @@ description: 从产品功能快速定位主要代码入口
|
||||
| 视频 Token 报价与结算 | `web/src/pages/admin/components/channel-model-price-tier-fields.tsx`、`web/src/components/model-picker.tsx` | `lib/model-pricing.ts`、`services/api/logical-models.ts`;后端 `app/video_token_billing.go` 管像素与时长估算,`app/logical_model_quote.go` 复用准入与价格规则,`app/analytics.go` 提取可信用量,`repository/finance.go` 按订单快照退补差额 |
|
||||
| 任务中心 | `web/src/pages/tasks/` | `services/api/task-center.ts`、`services/api/task-text-stream.ts` |
|
||||
| 产品模型与渠道选择 | `web/src/components/model-picker.tsx`、`pages/admin/components/channel-model-editor.tsx` | `lib/model-picker-groups.ts` 只构建跨渠道展示分组;`lib/user-session.ts` 透传渠道展示名;`components/model-logo.tsx` 按需加载原色图标;后端 `app/channel_models.go` 校验写入,`app/model_catalog.go` 发布目录,schema v24 增加 `channel_label` |
|
||||
| 系统渠道规格利润率与批量调价 | `web/src/pages/admin/components/channel-model-manager.tsx`、`channel-model-reprice-dialog.tsx` | 弹窗按模型分组展示多规格、重新计算与逐项编辑;`channel-model-cost-summary.tsx` 展示价格,`channel-model-pricing.ts` 精确四舍五入并组装最终售价;后端 `handler/finance.go` 接收批量请求,`app/channel_model_pricing.go` 校验权限、最终价格及快照版本,`repository/channel_model_pricing.go` 事务保存及版本冲突检测 |
|
||||
| 我的素材 | `web/src/pages/assets/` | `stores/use-asset-store.ts`、`services/image-storage.ts` |
|
||||
| 技能库 | `web/src/pages/skills/` | `services/api/skills.ts`、`services/skill-runtime.ts`、`components/skills/skill-runtime-picker.tsx` |
|
||||
| 画布列表 | `web/src/pages/canvas/index.tsx` | `stores/canvas/use-canvas-store.ts` |
|
||||
|
||||
@@ -15,6 +15,32 @@ description: 信封、错误码与 OpenAPI
|
||||
|
||||
## 模型规格报价
|
||||
|
||||
### 管理员批量调价
|
||||
|
||||
`POST /admin/channels/:id/models/batch-reprice` 接收最终售价及原始价格版本,返回 `{ code: 0, data: { updated: number }, msg }`。仅管理员可调用;单批 1–100 个模型,空 ID、重复 ID 或不属于当前系统渠道的记录整批拒绝。请求结构如下(价格为整数微积分):
|
||||
|
||||
```json
|
||||
{
|
||||
"models": [{
|
||||
"modelId": "MODEL001",
|
||||
"priceVersion": 4,
|
||||
"priceTiers": [{
|
||||
"id": "TIER001",
|
||||
"priceVersion": 8,
|
||||
"prices": { "unitPriceMicrocredits": 1370000 }
|
||||
}]
|
||||
}]
|
||||
}
|
||||
```
|
||||
|
||||
弹窗一行一个模型,列为模型展示名、渠道展示名(上游模型 ID)、规格、成本价和销售价输入框;多个规格在模型行内纵向对齐。利润率沿用财务口径:`(销售价 − 成本价) / 销售价 × 100%`,并非成本加价率。目标利润率为 0–99.99%,最多两位小数;售价按 `成本价 / (1 − 目标利润率)` 计算,按所选 0–6 位积分小数四舍五入(默认 2 位)。成本 1 积分、目标 20%、保留 2 位时售价为 1.25 积分。修改比例或精度实时计算,也可点击「重新计算」按当前参数覆盖全部手动售价;随后允许逐规格手动修改,保存以最终输入值为准。舍入和手动修改可能使实际利润率偏离目标;售价为零时利润率显示 `—`。
|
||||
|
||||
每个模型必须提交全部已启用规格(模型本身可停用),且每个规格只提交当前计费方式需要的完整 `prices` 字段:按次/秒为 `unitPriceMicrocredits`;文本 Token 为 `inputTokenPriceMicrocredits`、`outputTokenPriceMicrocredits`、`cachedTokenPriceMicrocredits`;视频 Token 仅为 `outputTokenPriceMicrocredits`。缺失、多余、重复、停用规格、null、负数或非整数价格均拒绝。成本和售价配置必须已保存;成本及 Token 售价上限为 1,000,000 积分,按次/秒售价不得超出 JavaScript 安全整数微积分范围。
|
||||
|
||||
服务端校验最终售价和模型/规格版本,不重新计算覆盖手工价格。价格快照过期必须刷新后重试。所有模型与价格档在单事务中更新,增加价格版本、失效目录缓存;无效配置、归属错误、超限或并发版本冲突均不部分提交。不改变成本、规格、计费方式和启停状态;未启用规格保持原值。此接口不新增数据表或迁移,不追溯修改已下单的计费快照。
|
||||
|
||||
### 用户模型目录
|
||||
|
||||
`GET /model-catalog` 固定返回 `source=system`,直接查询所有启用系统渠道下的渠道模型,目录数据在 `channels[].models[]`,`models` 固定为空数组。不受逻辑模型开关影响,不反查逻辑模型或供应线路。每项的 `modelKey` 是调用标识,`displayName` 是模型展示名,`icon` 是模型图标键,`channelLabel` 是可选的渠道展示名(默认空字符串)。后台渠道模型创建与更新请求使用相同的 `channelLabel` 字段;服务端去除首尾空白并限制为 80 字,空字符串表示使用所属渠道名称。
|
||||
|
||||
渠道模型创建、更新、管理列表、公开目录和会话模型价格信息均使用 `description` 表达模型描述。服务端去除首尾空白后限制为 500 字,允许空字符串清除描述;无管理员权限或超长内容拒绝保存。创作端二级选项在悬浮、聚焦或选中时展示该字段,长内容可悬浮查看完整文本;未填写的系统模型不按名称生成宣传文案。描述区域保留固定行高,悬浮不改变菜单项尺寸。
|
||||
|
||||
@@ -132,6 +132,8 @@ description: 当前项目已实现的核心工作台能力与使用入口
|
||||
|
||||
渠道模型价格档支持管理员单独配置积分成本价;后台请求记录同时显示销售金额和成本金额。成本按下单快照计算,不追随之后改价;普通用户页面及接口不返回成本字段。
|
||||
|
||||
系统渠道模型列表按规格显示成本价 / 销售价及利润率;文本输入、输出、缓存 Token 分开呈现。勾选多个模型可统一调价:弹窗一行一个模型,展示模型名、渠道展示名(上游 ID)、规格、成本与可编辑售价,多规格在模型行内纵向对齐。输入目标利润率并选择保留 0–6 位小数(默认 2 位),按 `成本 / (1 − 利润率)` 四舍五入实时计算;也可点击「重新计算」覆盖手动值,再逐项修改。保存最终输入售价,服务端校验价格与版本并原子保存,不改变成本或启停状态。
|
||||
|
||||
后台系统渠道及渠道模型列表通过“设置排序”打开完整列表,支持拖动、上移和下移,点击“保存排序”统一生效;取消不会修改线上顺序。渠道行的“更多”菜单支持复制渠道,复制会生成独立的渠道、模型和价格档,并保留原连接配置与凭证。界面不显示内部排序数字,排序不受筛选及分页影响;并发修改会提示重新加载,避免覆盖其他管理员的调整。系统渠道模式下,用户端模型选择器沿用同一渠道及模型顺序。模型排序独立保存,不改变价格、能力版本或启用状态。
|
||||
|
||||
系统渠道可设置可选的前台别名;为空时显示渠道名,设置后公开目录和用户会话只返回别名,后台仍保留原名。别名最长 80 字,支持后台搜索。前台模型目录模式保留其独立配置。
|
||||
|
||||
@@ -5,10 +5,24 @@ description: 当前项目已实现功能的手工验证清单与未确认边界
|
||||
|
||||
# 待测试
|
||||
|
||||
## 画布 Agent 入口拖动
|
||||
|
||||
- [x] 右下角 Agent 图标支持鼠标和触屏拖动,使用指针捕获与 6px 阈值区分点击和拖动;拖动结束不打开面板,中断或失去捕获时结束手势,不传播到画布。
|
||||
- [x] 位置作为独立本机 UI 偏好保存,重新打开画布或收起面板后恢复;限制在可视范围,窗口缩小时自动回位。方向键移动 10px,Shift + 方向键移动 40px,保留键盘点击打开。
|
||||
- [x] 前端类型检查与 20 项专项/相邻测试通过,覆盖真实生产 hook 的点击、拖动、取消、丢失捕获、多指隔离、持久化和键盘/缩屏行为。
|
||||
- [ ] 本地浏览器访问跳转登录,未完成登录后真实画布验收;需验证鼠标/触屏拖动不带动画布、不误开面板、刷新恢复,以及明暗主题和窄屏边缘显示。专项测试不替代浏览器验收。
|
||||
|
||||
## 系统模型同页渠道与模型管理
|
||||
|
||||
- [x] 规格列更新为成本价 / 销售价 / 利润率,按次、按秒、文本输入/输出/缓存和视频 Token 分别展示;缺失配置、零售价利润率显示 `—`,亏损显示负利润率。
|
||||
- [x] 支持跨页多选最多 100 个模型统一调价。弹窗打开即展示模型,一行一个模型,列为模型展示名、渠道展示名(上游模型 ID)、规格、成本及售价输入框;多规格在模型行内纵向对齐,不拆成多个模型行,规格上游覆盖单独标注。
|
||||
- [x] 调价弹窗模型价格列表进一步压缩行高:上下留白 6px、行内文字间距 2px,常规尺寸售价输入框与利润率同排,扩大售价列并保持规格对齐。弹窗居中固定高度 900px(不超过视窗高度减 48px),列表填充剩余空间并内部滚动,短屏允许内容区滚动;紧凑效果与滚动仍待真实页面视觉验收。
|
||||
- [x] 目标利润率和 0–6 位小数(默认 2 位)实时重算,旁边增加「重新计算」按钮,按当前参数对所有规格精确四舍五入。重算覆盖手动值并明确提示;之后可逐项修改,提交最终输入售价。服务端强校验归属、成本、价格和模型/规格版本,事务保存,冲突整批回滚,不改成本或启停状态。
|
||||
- [x] 前端类型检查、69 项专项及相邻回归测试通过,包含真实表格组件渲染、多规格单模型行、输入框最终值、精度和手动价重算。后端调价与相邻成本/删除测试通过,覆盖真实 HTTP 登录/管理员权限、整数/null/零售价、最终手工售价保存、过期版本拒绝及并发冲突事务回滚。验证使用内存 SQLite,未进行 PostgreSQL 或浏览器验收。
|
||||
- [ ] 待登录后的真实页面验收:多选/跨页/切换渠道,修改比例/精度后实时计算,手动编辑后点击「重新计算」恢复所有规格价格,逐项编辑保存、成功刷新与错误保留;覆盖未配置成本、零成本、Token 多计费项、长名称、明暗主题、窄屏、表头与规格对齐及滚动。不操作现有环境真实价格数据。
|
||||
|
||||
- [x] 样式细化:渠道列表改为留白分组与中性选中描边,数量与启停状态分别呈现;模型头部说明成本口径,规格与成本分行,操作列固定在右侧,超过三个规格可展开查看。
|
||||
- [x] “规格价格”改为“规格成本价”,仅读取管理员接口已有的 `priceTiers[].costPricing`,不再显示用户售价。支持按次、按秒、文本输入/输出/缓存 Token 和视频 Token;未配置成本明确提示,显式零成本正常显示,异常或缺失数值显示 `—`。不修改后端、计费或用户售价。
|
||||
- [x] 规格成本读取管理员接口已有的 `priceTiers[].costPricing`,与销售价分开呈现;未配置成本明确提示,显式零成本正常显示,异常或缺失数值显示 `—`。
|
||||
- [x] 本轮 49 项专项与相邻回归测试、前端类型检查通过;新增成本摘要真实组件渲染测试,覆盖成本/售价隔离、零成本、缺失/异常值、Token 单位、规格选择器与展开内容。样式细化仍需在登录后的真实页面检查明暗主题、长名称、多规格行高、横向滚动与固定操作列。
|
||||
- [x] 系统渠道入口改为同页工作区:桌面左侧约 20% 展示渠道搜索、状态筛选、新增和排序,右侧约 80% 展示当前渠道信息与模型管理;移除模型管理的二级页面和返回入口,窄屏改为上下布局。
|
||||
- [x] 保留渠道编辑、复制、启停、删除及模型拉取、选择导入、编辑、排序和批量删除。新增或复制后自动选中渠道;切换渠道时隔离模型列表、筛选、勾选和编辑状态,渠道与模型加载失败显示重试入口。服务端仍使用原分页接口,左栏分批读取全部渠道,避免默认仅展示前 20 个。
|
||||
|
||||
Reference in New Issue
Block a user