fix: 修复供应商管理弹窗交互问题并去掉 API Key 脱敏
- Dialog 设置 lazy={false} 修复首次打开编辑弹窗表单为空
- API Key 改为普通字段(前端去掉 password 类型,后端去掉掩码逻辑)
- 删除模型编辑弹窗中的统一模型 ID 字段
- 简化 ProviderService.Get 签名(去掉 maskKey 参数)
- 删除 domain 和 config 层的 MaskAPIKey() 方法
- 更新前后端测试(107 单元测试 + 16 E2E 全部通过)
- 同步 delta spec 到主 spec
This commit is contained in:
@@ -15,7 +15,7 @@ TBD - 提供供应商、模型配置和用量统计的前端管理界面
|
||||
- **WHEN** 加载供应商管理页面
|
||||
- **THEN** 前端 SHALL 使用 TDesign Table 显示所有已配置供应商
|
||||
- **THEN** 每个供应商 SHALL 显示 name、base_url 和 enabled 状态(使用 Tag 组件)
|
||||
- **THEN** API Key SHALL 被脱敏显示(掩码处理)
|
||||
- **THEN** API Key SHALL 显示完整值(不进行掩码处理)
|
||||
- **THEN** 表格 SHALL 支持展开行以显示关联模型
|
||||
|
||||
#### Scenario: 表格列宽约束
|
||||
@@ -23,7 +23,7 @@ TBD - 提供供应商、模型配置和用量统计的前端管理界面
|
||||
- **WHEN** 渲染供应商表格
|
||||
- **THEN** 名称列 SHALL 固定宽度 180px 并启用 ellipsis(超长文本显示省略号,hover 显示 Tooltip)
|
||||
- **THEN** Base URL 列 SHALL 不设固定宽度(浮动填充剩余空间)并启用 ellipsis + Tooltip
|
||||
- **THEN** API Key 列 SHALL 固定宽度 120px 并启用 ellipsis
|
||||
- **THEN** API Key 列 SHALL 不设固定宽度(浮动填充剩余空间)并启用 ellipsis + Tooltip
|
||||
- **THEN** 状态列 SHALL 固定宽度 80px
|
||||
- **THEN** 操作列 SHALL 固定宽度 160px
|
||||
|
||||
@@ -39,6 +39,7 @@ TBD - 提供供应商、模型配置和用量统计的前端管理界面
|
||||
- **THEN** 表单 SHALL 包含 id、name、api_key、base_url 字段,带校验规则
|
||||
- **THEN** Dialog SHALL 禁用蒙版点击关闭(closeOnOverlayClick={false})
|
||||
- **THEN** Dialog SHALL 禁用 ESC 键关闭(closeOnEscKeydown={false})
|
||||
- **THEN** Dialog SHALL 设置 lazy={false} 禁用懒加载
|
||||
- **WHEN** 用户提交包含有效数据的表单
|
||||
- **THEN** 前端 SHALL 通过 mutateAsync 调用创建 API
|
||||
- **THEN** 成功后 SHALL 关闭 Dialog 并刷新供应商列表
|
||||
@@ -48,8 +49,12 @@ TBD - 提供供应商、模型配置和用量统计的前端管理界面
|
||||
|
||||
- **WHEN** 用户点击供应商的"编辑"按钮
|
||||
- **THEN** 前端 SHALL 使用 TDesign Dialog + Form 显示预填充数据的表单
|
||||
- **THEN** API Key SHALL 回显当前值(完整值)
|
||||
- **THEN** API Key 输入框 SHALL 为普通文本输入(不使用 password 类型)
|
||||
- **THEN** API Key 字段 SHALL 始终为必填
|
||||
- **THEN** Dialog SHALL 禁用蒙版点击关闭(closeOnOverlayClick={false})
|
||||
- **THEN** Dialog SHALL 禁用 ESC 键关闭(closeOnEscKeydown={false})
|
||||
- **THEN** Dialog SHALL 设置 lazy={false} 禁用懒加载
|
||||
- **WHEN** 用户提交包含更新数据的表单
|
||||
- **THEN** 前端 SHALL 通过 mutateAsync 调用更新 API
|
||||
- **THEN** 成功后 SHALL 关闭 Dialog 并刷新供应商列表
|
||||
@@ -97,10 +102,10 @@ TBD - 提供供应商、模型配置和用量统计的前端管理界面
|
||||
|
||||
- **WHEN** 用户点击模型的"编辑"
|
||||
- **THEN** 前端 SHALL 显示编辑表单
|
||||
- **THEN** 编辑表单 SHALL 显示统一模型 ID(只读)
|
||||
- **THEN** ID 字段 SHALL 为禁用状态
|
||||
- **THEN** 编辑表单 SHALL NOT 包含统一模型 ID 字段
|
||||
- **THEN** Dialog SHALL 禁用蒙版点击关闭(closeOnOverlayClick={false})
|
||||
- **THEN** Dialog SHALL 禁用 ESC 键关闭(closeOnEscKeydown={false})
|
||||
- **THEN** Dialog SHALL 设置 lazy={false} 禁用懒加载
|
||||
- **WHEN** 用户提交表单
|
||||
- **THEN** 前端 SHALL 通过 mutateAsync 调用更新 API
|
||||
- **THEN** 成功后 SHALL 关闭 Dialog 并刷新模型列表
|
||||
@@ -135,24 +140,17 @@ TBD - 提供供应商、模型配置和用量统计的前端管理界面
|
||||
|
||||
### Requirement: 显示统一模型 ID
|
||||
|
||||
前端 SHALL 在所有显示模型的地方使用统一模型 ID。
|
||||
前端 SHALL 在所有显示模型的地方使用统一模型 ID。
|
||||
|
||||
#### Scenario: 模型表格显示统一 ID 列
|
||||
#### Scenario: 模型表格显示统一 ID 列
|
||||
|
||||
- **WHEN** 渲染模型表格
|
||||
- **THEN** 表格 SHALL 包含统一模型 ID 列
|
||||
- **THEN** 统一模型 ID 列 SHALL 显示 `provider_id/model_name` 格式
|
||||
- **THEN** 统一模型 ID 列 SHALL 启用 ellipsis(超长文本显示省略号,hover 显示 Tooltip)
|
||||
- **THEN** 统一模型 ID 列 SHALL 固定宽度 250px
|
||||
- **WHEN** 渲染模型表格
|
||||
- **THEN** 表格 SHALL 包含统一模型 ID 列
|
||||
- **THEN** 统一模型 ID 列 SHALL 显示 `provider_id/model_name` 格式
|
||||
- **THEN** 统一模型 ID 列 SHALL 启用 ellipsis(超长文本显示省略号,hover 显示 Tooltip)
|
||||
- **THEN** 统一模型 ID 列 SHALL 固定宽度 250px
|
||||
|
||||
#### Scenario: 编辑模型显示统一 ID
|
||||
|
||||
- **WHEN** 编辑模型表单
|
||||
- **THEN** 表单 SHALL 显示统一模型 ID 字段
|
||||
- **THEN** 统一模型 ID 字段 SHALL 为只读(disabled)
|
||||
- **THEN** 统一模型 ID 字段 SHALL 显示格式说明 "格式:provider_id/model_name"
|
||||
|
||||
#### Scenario: 统一模型 ID 降级显示
|
||||
#### Scenario: 统一模型 ID 降级显示
|
||||
|
||||
- **WHEN** 后端未返回 unified_id 字段
|
||||
- **THEN** 前端 SHALL 拼接 providerId 和 modelName 显示
|
||||
|
||||
Reference in New Issue
Block a user