# 已上线规则编辑功能 PRD

## 1. 文档信息

- 文档名称：已上线规则编辑功能 PRD
- 所属模块：全知平台 / 风控模块 / 规则详情
- 文档类型：功能优化 PRD
- 前置依赖：规则详情页（`规则详情.html`）
- 变更记录：
  - 2026-05-12：初稿

---

## 2. 背景

### 2.1 现状

规则详情页当前为纯只读展示，所有字段（基本信息、技术信息）均以静态文本或 disabled 状态呈现，无编辑入口。规则一旦上线，无法通过页面修改其详情信息。

### 2.2 问题

- 已上线规则在实际运营中仍需修改信息（如规则名称调整、监控逻辑优化、风险等级变更、制度关联更新等）
- 当前无编辑入口，业务方只能通过线下沟通或数据库直接修改，缺乏规范流程和操作记录
- 疑点描述模板仅管理员可编辑，规则提交人（最了解规则业务含义的人）无法自行维护

### 2.3 目标

- 为已上线规则提供页面内编辑能力
- 明确编辑权限：管理员 + 规则提交人
- 保存后生成新版本并上链，保证链上数据可追溯
- 记录编辑日志，支持操作审计

---

## 3. 设计原则

### 3.1 原地编辑，不跳转

在规则详情页内切换为编辑模式，复用现有页面结构，不跳转新页面。字段不多，原地编辑更符合"微调"的用户心智模型。

### 3.2 权限最小化

仅管理员和规则提交人可编辑。其他用户（如场景管理者、普通查看者）保持只读。

### 3.3 保存即上链

编辑保存后自动生成新版本并提交上链，不做额外的版本确认提示。区块链信息面板同步刷新。

### 3.4 操作可追溯

每次编辑保存记录操作人、操作时间、修改字段、修改前后值，支持后续审计。

### 3.5 安全离开

编辑模式下有未保存修改时，任何离开行为（返回、切TAB、关闭页面）均需二次确认，防止误操作丢失修改。

---

## 4. 功能范围

### 4.1 本次要做

| 序号 | 功能项 | 说明 |
|------|--------|------|
| F1 | 编辑入口 | 规则详情页增加"编辑"按钮，权限控制显示 |
| F2 | 基本信息编辑 | 规则名称、业务域、监控目标/逻辑、风险等级、处置类型、备注可编辑 |
| F3 | 技术信息编辑 | 规则类型、模块名称、数据系统、模块路径、详情描述等可编辑 |
| F4 | 制度重新关联 | 对应制度字段支持"重新关联"操作，跳转制度模块一对一替换 |
| F5 | 疑点描述模板权限扩展 | 规则提交人可编辑疑点描述模板（原仅管理员） |
| F6 | 保存与版本管理 | 保存时二次确认，生成新版本并上链 |
| F7 | 编辑日志 | 记录操作人、时间、字段变更详情 |
| F8 | 未保存离开检测 | 返回/TAB切换/关闭页面时检测未保存修改 |

### 4.2 本次不做

- 并发编辑冲突检测的完整实现（原型中预留接口，实际由后端实现）
- 技术信息中的系统截图上传功能（保持原有 disabled 状态）
- 规则审核流程（保存直接生效，不做审核环节）
- 编辑历史版本对比查看

---

## 5. 详细方案

### 5.1 F1：编辑入口

#### 适用页面

`规则详情.html`

#### 入口位置

页面右上角，返回链接同一行右侧。

```
[← 返回我的规则]                        [✏ 编辑]
```

#### 显示条件

| 条件 | 编辑按钮 |
|------|---------|
| 当前用户 = 管理员 | 显示 |
| 当前用户 = 规则提交人 | 显示 |
| 其他用户 | 不显示 |

#### 交互

点击"编辑"按钮 → 进入编辑模式（页面原地切换，不跳转）。

---

### 5.2 F2：基本信息编辑

#### 可编辑字段

| 字段 | 控件类型 | 必填 | 说明 |
|------|---------|------|------|
| 规则名称 | 文本输入框 | 是 | — |
| 业务域/业务能力 | 下拉选择 | 是 | 去除 disabled |
| 监控目标 | 多行文本框 | 是 | — |
| 监控逻辑 | 多行文本框 | 是 | — |
| 风险等级 | 下拉选择 | 是 | 重大/重要/一般 |
| 处置类型 | 下拉选择 | 是 | 需处置/提示 |
| 备注 | 多行文本框 | 否 | — |

#### 只读字段（不可编辑）

| 字段 | 原因 |
|------|------|
| 规则编码 | 系统生成，不可变 |
| 规则提出人 | 创建时确定 |
| 规则提出单位 | 创建时确定 |

---

### 5.3 F3：技术信息编辑

#### 可编辑字段

| 字段 | 控件类型 | 说明 |
|------|---------|------|
| 规则类型 | 下拉选择 | 普通规则/AI规则/其他 |
| 模块名称 | 文本输入框 | — |
| 数据系统 | 下拉选择 | — |
| 登录用户名 | 文本输入框 | 系统截图中的登录用户名 |
| 系统模块路径 | 文本输入框 | — |
| 详情描述 | 多行文本框 | — |
| 疑点数据展示字段 | 文本输入框 | — |

#### 不可编辑

| 字段 | 原因 |
|------|------|
| 系统截图 | 上传功能复杂度高，本期不做 |

---

### 5.4 F4：制度重新关联

#### 入口

基本信息编辑模式下，"对应制度来源"标签旁显示"重新关联"按钮。

```
对应制度来源  [🔗 重新关联]
```

#### 操作流程

1. 点击"重新关联"按钮 → 跳转到制度模块（`有效制度库列表.html`）
2. 用户在制度模块中找到合适的新制度，打开制度正文
3. 在正文中圈选文字，点击"关联风险规则"
4. 在弹出的关联弹窗中，选择当前这条规则（需允许出现"已上线"状态的规则）
5. 完成关联，制度相关信息自动更新回规则详情页

#### 后端改动

- 关联弹窗中的规则列表：需放开"已上线"状态规则的筛选限制（当前仅允许关联未上线规则）
- 一对一替换：新制度替换旧制度，旧制度绑定关系在后台保留历史记录
- 四个制度字段（来源、编号、名称、内容）由制度模块统一回填，不允许手动输入

---

### 5.5 F5：疑点描述模板编辑统一纳入编辑模式

#### 设计变更

疑点描述模板的编辑不再独立于主编辑模式。统一由页面右上角"编辑"按钮控制，与基本信息/技术信息同步进入和退出编辑模式。

#### 权限逻辑

```javascript
const hasPermission = isOnline && (isAdmin || isSubmitter);
const canEdit = hasPermission && isEditMode;
```

- `hasPermission`：管理员或规则提交人有编辑权限
- `canEdit`：有权限 + 当前处于编辑模式

#### 交互变化

| 状态 | 模板区域表现 |
|------|------------|
| 查看模式（有权限） | textarea 只读，显示提示"点击右上角编辑按钮可编辑疑点描述模板" |
| 编辑模式（有权限） | textarea 可编辑，变量可点击插入，"立即验证"按钮可用 |
| 无权限 | textarea 只读，显示"当前仅管理员或规则提交人可编辑" |

#### 保存流程

- 移除模板区域的独立"保存"按钮
- 模板修改统一由底部操作栏的"保存"按钮处理
- 保存时检查模板验证状态：若模板已修改但未验证，弹出确认"疑点描述模板尚未验证，是否继续保存？"
- 模板修改纳入变更摘要和编辑日志

#### 验证功能

- "立即验证"按钮保留在编辑模式下可用
- 验证是模板特有的步骤，建议在保存前完成
- 验证状态（已验证/未验证）在保存时记录到版本信息中

---

### 5.6 F6：保存与版本管理

#### 保存流程

```
点击"保存"
    │
    ├── 前端校验必填字段
    │       └── 不通过 → 字段标红，提示"请填写所有必填字段"
    │
    ├── 检测变更
    │       └── 无修改 → 提示"未检测到任何修改"
    │
    ├── 检查疑点描述模板验证状态
    │       └── 模板已修改但未验证 → 弹出确认"模板尚未验证，是否继续保存？"
    │
    ├── 生成变更摘要（按分组：基本信息/技术信息/疑点描述模板）
    │
    ├── 弹出二次确认弹窗
    │       标题：确认保存（橙色警告样式）
    │       内容："您正在修改已上线的规则，保存后将立即生效并生成新版本上链。"
    │       变更摘要：按分组展示，每组有标题和分隔线
    │         蓝色 — 基本信息变更
    │         橙色 — 技术信息变更
    │         绿色 — 疑点描述模板变更
    │
    ├── 点击"确认保存"
    │       ├── 记录编辑日志
    │       ├── 保存数据
    │       ├── 生成新版本
    │       ├── 提交上链
    │       ├── 提示"规则已保存成功，新版本已生成并提交上链"
    │       └── 退出编辑模式，刷新页面
    │
    └── 点击"取消"
            └── 返回编辑模式
```

#### 确认弹窗

| 元素 | 内容 |
|------|------|
| 标题 | 确认保存（橙色，带警告图标） |
| 提示文字 | "您正在修改已上线的规则，保存后将立即生效并生成新版本上链。请确认修改内容无误后再保存。" |
| 变更摘要 | 按分组展示（可滚动，最大高度200px）：蓝色=基本信息、橙色=技术信息、绿色=疑点描述模板，每组有标题和分隔线 |
| 按钮 | 取消 / 确认保存 |

#### 版本管理

- 保存后自动生成新版本（如当前为 V5，保存后生成 V6）
- 新版本自动提交上链
- 区块链信息面板刷新，展示新版本的上链记录
- 不做"本次修改将生成 V6"的额外提示

---

### 5.7 F7：编辑日志

#### 日志格式

```json
{
    "operator": "张三",
    "operatorRole": "管理员",
    "ruleCode": "GZ177019905698527",
    "timestamp": "2026-05-12T10:30:00.000Z",
    "changes": "<div>规则名称：差旅费伙食补助校验 → 差旅费伙食补助人数校验</div><div>风险等级：一般 → 重要</div>"
}
```

#### 记录内容

| 字段 | 说明 |
|------|------|
| operator | 操作人姓名 |
| operatorRole | 操作人角色（管理员/业务用户） |
| ruleCode | 规则编号 |
| timestamp | 操作时间（ISO 8601） |
| changes | 变更详情HTML（字段名：旧值 → 新值） |

#### 存储

- 原型阶段：localStorage（`ruleEditLogs`）
- 实际实现：后端数据库 audit_log 表

---

### 5.8 F8：未保存离开检测

#### 触发场景

| 场景 | 检测方式 | 行为 |
|------|---------|------|
| 点击"返回"链接 | jQuery click 事件拦截 | 阻止跳转，弹出确认弹窗 |
| 关闭/刷新页面 | `beforeunload` 事件 | 浏览器原生提示 |

> 注意：TAB切换（基本信息/技术信息/区块链）不触发未保存检测。TAB切换只是同一页面内浏览不同区块，不是离开页面。

#### 确认弹窗

| 元素 | 内容 |
|------|------|
| 标题 | 提示 |
| 内容 | "您有未保存的修改，确定要离开吗？" |
| 按钮 | 继续编辑 / 放弃修改 |

#### 行为

- "继续编辑" → 关闭弹窗，留在编辑模式
- "放弃修改" → 恢复原始数据，退出编辑模式，执行离开操作

---

## 6. 编辑模式UI规范

### 6.1 编辑提示条

位于TAB区域顶部，制度废止告警条下方。

| 属性 | 值 |
|------|-----|
| 背景色 | `#ecf5ff` |
| 边框 | `1px solid #b3d8ff` |
| 文字色 | `#409EFF` |
| 图标 | `fa-pencil` |
| 文案 | "当前处于编辑模式 — 您正在修改已上线规则的基本信息，保存后将生成新版本并上链。" |

### 6.2 底部操作栏

| 属性 | 值 |
|------|-----|
| 定位 | `position: sticky; bottom: 0` |
| 背景色 | `#fff` |
| 阴影 | `0 -2px 8px rgba(0,0,0,0.06)` |
| 按钮 | 取消（outline）/ 保存（primary） |

### 6.3 可编辑字段样式

| 属性 | 值 |
|------|-----|
| 边框高亮 | `border-color: #409EFF` |
| 阴影 | `0 0 0 2px rgba(64,158,255,0.15)` |
| 必填校验失败 | `border-color: #f56c6c` |

### 6.4 制度重新关联按钮

| 属性 | 值 |
|------|-----|
| 样式 | 边框按钮（outline），蓝色 |
| 图标 | `fa-link` |
| 文案 | "重新关联" |
| 位置 | "对应制度来源"标签内，文字右侧 |

---

## 7. 验证清单

### 7.1 权限控制

- [ ] 管理员角色访问规则详情页，编辑按钮显示
- [ ] 规则提交人访问规则详情页，编辑按钮显示
- [ ] 其他用户访问规则详情页，编辑按钮不显示
- [ ] 疑点描述模板：管理员可编辑
- [ ] 疑点描述模板：规则提交人可编辑
- [ ] 疑点描述模板：其他用户只读

### 7.2 编辑模式

- [ ] 点击编辑按钮后，页面进入编辑模式
- [ ] 编辑提示条正确显示
- [ ] 底部操作栏（保存/取消）正确显示
- [ ] 基本信息可编辑字段变为输入框/下拉框
- [ ] 技术信息可编辑字段变为输入框/下拉框
- [ ] 只读字段（规则编码、提出人、提出单位）不可编辑
- [ ] 制度字段旁显示"重新关联"按钮

### 7.3 保存流程

- [ ] 必填字段为空时，保存失败，字段标红，提示信息正确
- [ ] 无修改时保存，提示"未检测到任何修改"
- [ ] 有修改时保存，弹出确认弹窗，变更摘要正确
- [ ] 确认保存后，页面退出编辑模式，恢复只读视图
- [ ] 保存后区块链信息面板刷新，显示新版本记录
- [ ] 编辑日志正确记录

### 7.4 取消与未保存检测

- [ ] 无修改时点击取消，直接退出编辑模式
- [ ] 有修改时点击取消，弹出未保存确认弹窗
- [ ] 选择"放弃修改"，数据恢复原始状态，退出编辑模式
- [ ] 选择"继续编辑"，留在编辑模式
- [ ] 编辑后点击返回链接，弹出确认弹窗
- [ ] 编辑后切换TAB，弹出确认弹窗
- [ ] 编辑后关闭/刷新页面，浏览器原生提示

### 7.5 制度重新关联

- [ ] 点击"重新关联"按钮，跳转到制度模块
- [ ] 制度模块中完成关联后，规则详情页制度字段更新
- [ ] 一对一替换，旧制度绑定关系后台保留历史

### 7.6 疑点描述模板

- [ ] 管理员在编辑模式下可修改模板内容
- [ ] 提交人在编辑模式下可修改模板内容
- [ ] 其他用户看到只读提示"当前仅管理员或规则提交人可编辑疑点描述模板"
