This commit is contained in:
26
openspec/changes/add-system-config-management/design.md
Normal file
26
openspec/changes/add-system-config-management/design.md
Normal file
@@ -0,0 +1,26 @@
|
||||
## Context
|
||||
|
||||
系统配置由后端注册,前端不能假设固定字段。列表接口返回控件提示、值类型、枚举和范围,更新接口要求配置 Key 与路径一致且值字符串化。
|
||||
|
||||
## Goals / Non-Goals
|
||||
|
||||
- Goals:
|
||||
- 在设置管理提供统一的模块筛选、分页和配置编辑入口。
|
||||
- 动态遵循后端配置元数据进行展示和校验。
|
||||
- 防止误修改只读配置和敏感配置脱敏值。
|
||||
- Non-Goals:
|
||||
- 不在前端维护配置 Key 白名单或复制后端注册规则。
|
||||
- 不对 JSON 配置做业务语义解析。
|
||||
- 不绕过后端对已注册配置、范围和枚举的最终校验。
|
||||
|
||||
## Decisions
|
||||
|
||||
- 列表数据读取 `data.list`,分页使用 `page`、`page_size` 和 `total`。
|
||||
- 编辑控件优先根据 `control` 渲染,`value_type` 作为值转换和校验兜底。
|
||||
- `bool` 以开关展示并提交 `true`/`false` 字符串;`int` 以数字输入展示并提交十进制字符串;其他类型以输入框或文本域提交字符串。
|
||||
- `readonly=true` 的配置不显示可编辑操作;`sensitive=true` 的值仅显示接口返回值,只有用户主动输入新值时才提交更新。
|
||||
|
||||
## Risks / Trade-offs
|
||||
|
||||
- 未知控件提示可能无法映射到专用控件,使用文本输入作为安全兜底,并仍由后端校验。
|
||||
- 脱敏敏感值无法判断是否为完整原值,因此禁止把未修改的脱敏值再次提交。
|
||||
18
openspec/changes/add-system-config-management/proposal.md
Normal file
18
openspec/changes/add-system-config-management/proposal.md
Normal file
@@ -0,0 +1,18 @@
|
||||
# Change: 增加系统配置管理
|
||||
|
||||
## Why
|
||||
|
||||
系统配置接口已经提供受控配置的注册信息、控件提示和校验范围,设置管理需要提供统一入口,避免为每个配置模块单独维护页面和字段。
|
||||
|
||||
## What Changes
|
||||
|
||||
- 在设置管理下新增系统配置页面和路由。
|
||||
- 接入系统配置列表查询和按配置 Key 更新接口。
|
||||
- 按后端返回的 `control`、`value_type`、枚举值及范围动态渲染编辑控件。
|
||||
- 只读配置不可编辑,更新请求统一提交 `{ key, value }`,其中 `value` 为字符串。
|
||||
- 敏感配置按接口脱敏值展示,保存时不覆盖未重新输入的脱敏值。
|
||||
|
||||
## Impact
|
||||
|
||||
- Affected specs: `system-config-management`
|
||||
- Affected code: `src/api/modules/systemConfig.ts`, `src/types/api/systemConfig.ts`, `src/views/settings/system-configs/index.vue`, `src/router/routesAlias.ts`, `src/router/routes/asyncRoutes.ts`
|
||||
@@ -0,0 +1,56 @@
|
||||
## ADDED Requirements
|
||||
|
||||
### Requirement: 受控系统配置列表
|
||||
|
||||
系统 SHALL 在设置管理提供受控系统配置列表,支持按 `module` 筛选和分页,并展示后端返回的配置元数据及当前值。
|
||||
|
||||
#### Scenario: 查询系统配置
|
||||
|
||||
- **WHEN** 用户进入系统配置页面或执行刷新
|
||||
- **THEN** 前端调用 `GET /api/admin/system-configs`
|
||||
- **AND** 使用响应中的 `data.list`、`data.page`、`data.page_size` 和 `data.total` 渲染列表
|
||||
- **AND** 展示配置 Key、模块、说明、值、控件提示、注册状态、只读状态、敏感状态和更新时间
|
||||
|
||||
#### Scenario: 按模块筛选
|
||||
|
||||
- **WHEN** 用户选择 `carrier_callback` 或 `c2b.payment`
|
||||
- **THEN** 查询请求携带对应的 `module` 参数
|
||||
- **AND** 页面从第一页展示筛选后的配置
|
||||
|
||||
### Requirement: 动态配置编辑
|
||||
|
||||
系统 SHALL 根据配置返回的 `control`、`value_type`、`enum_values`、`min` 和 `max` 元数据渲染编辑控件并进行前端基础校验;更新请求 SHALL 统一提交字符串形式的 `value`。
|
||||
|
||||
#### Scenario: 更新可编辑配置
|
||||
|
||||
- **WHEN** 用户修改非只读配置并提交
|
||||
- **THEN** 前端调用 `PUT /api/admin/system-configs/{key}`
|
||||
- **AND** 请求体为 `{ "key": "配置Key", "value": "字符串化配置值" }`
|
||||
- **AND** 成功后使用接口返回的配置数据更新列表
|
||||
|
||||
#### Scenario: bool 和 int 配置
|
||||
|
||||
- **WHEN** 配置类型分别为 `bool` 或 `int`
|
||||
- **THEN** 页面分别使用开关或数字输入控件
|
||||
- **AND** bool 提交 `true`/`false` 字符串,int 提交十进制数字字符串
|
||||
- **AND** int 值违反 `min` 或 `max` 时阻止提交
|
||||
|
||||
#### Scenario: 枚举配置
|
||||
|
||||
- **WHEN** 配置返回非空 `enum_values`
|
||||
- **THEN** 页面使用枚举选择控件
|
||||
- **AND** 只能提交允许的枚举值
|
||||
|
||||
### Requirement: 只读和敏感配置保护
|
||||
|
||||
系统 SHALL 禁止前端编辑只读配置;敏感配置 SHALL 展示接口返回的脱敏值,用户未主动输入新值时不得将该脱敏值再次提交。
|
||||
|
||||
#### Scenario: 只读配置
|
||||
|
||||
- **WHEN** 配置的 `readonly` 为 `true`
|
||||
- **THEN** 页面禁用编辑控件和保存操作
|
||||
|
||||
#### Scenario: 敏感配置未修改
|
||||
|
||||
- **WHEN** 敏感配置仅展示脱敏值且用户未输入新值
|
||||
- **THEN** 页面不提交该配置的更新请求
|
||||
20
openspec/changes/add-system-config-management/tasks.md
Normal file
20
openspec/changes/add-system-config-management/tasks.md
Normal file
@@ -0,0 +1,20 @@
|
||||
## 1. API And Types
|
||||
|
||||
- [x] 1.1 新增系统配置字段、查询参数和分页响应类型。
|
||||
- [x] 1.2 新增 `GET /api/admin/system-configs` 服务方法,读取 `data.list`。
|
||||
- [x] 1.3 新增 `PUT /api/admin/system-configs/{key}` 服务方法,提交 `{ key, value }`。
|
||||
|
||||
## 2. Settings Management Page
|
||||
|
||||
- [x] 2.1 在设置管理下新增系统配置路由和菜单入口。
|
||||
- [x] 2.2 实现模块筛选、分页、刷新和配置列表展示。
|
||||
- [x] 2.3 根据配置元数据动态渲染开关、数字、枚举、文本和 JSON 控件。
|
||||
- [x] 2.4 实现只读配置禁用编辑、敏感值脱敏保护和字符串化提交。
|
||||
- [x] 2.5 展示配置注册状态、更新时间、范围和校验提示。
|
||||
|
||||
## 3. Verification
|
||||
|
||||
- [x] 3.1 验证两个模块筛选和分页参数正确传递。
|
||||
- [x] 3.2 验证 bool、int、enum、string 和 json 配置的展示及提交值。
|
||||
- [x] 3.3 验证只读配置不能提交,敏感配置未修改时不会回传脱敏值。
|
||||
- [x] 3.4 运行类型检查、lint 和构建。
|
||||
Reference in New Issue
Block a user