# 安全测试ERP配置 · 需求文档（PRD）

> **文档状态**：初稿 · **版本**：v1.0 · **最后更新**：2026-08-13  
> **维护者**：czj · **所属模块**：安全测试  
> **参考实现**：功能测试报告模块 ERP 配置子菜单  

---

## 一、需求背景与目标

### 1.1 背景

当前安全测试模块已作为一级菜单独立运行，包含「用例管理」「执行中心」「报告中心」三个子页面。安全测试报告生成后，需要将报告上传到 ERP 系统进行归档和管理，但目前安全测试模块下缺少 ERP 配置入口。

功能测试报告模块已实现 ERP 配置功能（API Key、Base URL、测试单 ID、Type ID、图片URL前缀），通过 `erp_configs` 数据表持久化。安全测试模块可以直接复用同一套 ERP 配置数据与 API，仅需在前端新增配置页面入口。

### 1.2 目标

在安全测试模块下新增「ERP 配置」子菜单，提供 ERP 连接配置管理功能：

1. **ERP 配置管理**：配置 API Key、Base URL、测试单 ID、Type ID、图片 URL 前缀
2. **配置持久化**：保存到数据库，服务重启后保留
3. **配置回退**：数据库无记录时自动回退到环境变量默认值

### 1.3 范围

| 范围 | 包含 | 不包含 |
|------|------|--------|
| ERP 配置表单 | API Key、Base URL、测试单 ID、Type ID、图片 URL 前缀 | 其他 ERP 字段 |
| 配置持久化 | 数据库读写，重启保留 | 多租户配置隔离 |
| 配置回退 | 数据库无记录时回退环境变量 | 配置版本管理 |
| 后端 API | 复用 `erp_configs` 表的 GET/PUT 接口 | 新建数据表 |

---

## 二、功能需求

### 2.1 功能清单

| 编号 | 功能模块 | 子功能 | 优先级 | 说明 |
|------|---------|--------|--------|------|
| F1 | ERP 配置 | 配置获取 | P0 | 页面加载时自动获取当前 ERP 配置 |
| F2 | ERP 配置 | 配置保存 | P0 | 修改后保存到数据库，重启后持久化 |
| F3 | ERP 配置 | 配置重置 | P1 | 重置回加载时的原始值 |
| F4 | ERP 配置 | 表单校验 | P0 | API Key 和 Base URL 必填校验 |

### 2.2 功能详细描述

#### 2.2.1 配置获取（F1）

- 触发时机：页面加载时自动调用
- 数据来源：优先从数据库 `erp_configs` 表读取，无记录时回退到环境变量默认值
- 字段映射：

| 表单字段 | 数据库字段 | 环境变量 | 默认值 |
|---------|-----------|---------|--------|
| API Key | `api_key` | `ERP_API_KEY` | 空字符串 |
| Base URL | `base_url` | `ERP_BASE_URL` | 空字符串 |
| 测试单 ID | `developtesting_id` | `ERP_DEVELOPTESTING_ID` | 397 |
| Type ID | `type_id` | `ERP_TYPE_ID` | 2 |
| 图片 URL 前缀 | `image_url_prefix` | `ERP_IMAGE_URL_PREFIX` | 空字符串 |

#### 2.2.2 配置保存（F2）

- 所有字段均支持修改
- 保存成功后弹出成功提示
- 更新数据库记录，同时更新运行时环境变量（`settings` 对象）
- 保存后更新原始快照，使"重置"按钮回到最新保存值

#### 2.2.3 配置重置（F3）

- 点击"重置"按钮，表单恢复到加载时的原始值
- 清除表单校验错误状态
- 如果未保存过修改，重置到加载时的值

#### 2.2.4 表单校验（F4）

| 字段 | 规则 | 提示 |
|------|------|------|
| API Key | 必填 | 请输入 ERP API 密钥 |
| Base URL | 必填 | 请输入 ERP 基础 URL |

---

## 三、非功能需求

### 3.1 性能要求

- ERP 配置读取应在 1s 内返回
- 配置保存应在 2s 内返回

### 3.2 可用性要求

- 表单提交时按钮显示加载状态，防止重复提交
- 保存失败时显示错误信息，不丢失已填数据

### 3.3 兼容性要求

- 复用功能测试报告模块的 `erp_configs` 表，不新增数据表
- 复用后端 ERP 配置 API（`GET/PUT /api/functional-report/config`）

---

## 四、数据模型

### 4.1 复用现有模型

复用 `backend/app/models/erp_config.py` 中的 `ErpConfig` 模型，表名 `erp_configs`，固定 ID=1 的单行记录：

```
erp_configs
├── id: int (PK, 固定为 1)
├── api_key: varchar(255)       — ERP API 密钥
├── base_url: varchar(500)       — ERP 基础 URL
├── developtesting_id: int       — 默认测试单 ID
├── type_id: int                 — 报告类型 ID
├── image_url_prefix: varchar(500) — 图片 URL 前缀
└── updated_at: datetime         — 更新时间
```

### 4.2 API 设计

| 方法 | 路径 | 说明 | 请求体 | 响应 |
|------|------|------|--------|------|
| GET | `/api/security/erp-config` | 获取 ERP 配置 | — | `{ api_key, base_url, developtesting_id, type_id, image_url_prefix }` |
| PUT | `/api/security/erp-config` | 更新 ERP 配置 | `{ api_key?, base_url?, developtesting_id?, type_id?, image_url_prefix? }` | 同上 |

---

## 五、用户界面

### 5.1 页面布局

- 安全测试 → ERP 配置（子菜单）
- 页面内容：一个卡片容器，包含表单
- 表单宽度：最大 600px，标签右对齐，标签宽度 140px
- 表单字段：API Key（密码框）、Base URL（输入框）、测试单 ID（数字框）、Type ID（数字框）、图片 URL 前缀（输入框）
- 操作按钮：保存配置 + 重置

### 5.2 菜单结构变更

```
安全测试（改前）                     安全测试（改后）
├── 用例管理                          ├── 用例管理
├── 执行中心                          ├── 执行中心
└── 报告中心                          ├── 报告中心
                                      └── ERP 配置 ← 新增
```

---

## 六、风险与依赖

| 风险 | 影响 | 缓解措施 |
|------|------|---------|
| 与功能测试报告模块 ERP 配置共用数据表 | 两个模块的配置同步 | 共享同一套 ERP 配置属于预期行为，降低维护成本 |
| 环境变量未配置 | 配置为空 | 数据库无记录时回退环境变量，环境变量无值时回退空字符串 |

---

*本文档为安全测试 ERP 配置功能需求规格说明，供开发和测试参考。*