设计时间: 2026-02-12
核心变化: 前端只关心"项目"概念,不区分项目/模板/报告三层
项目 (PROJECT)
└── 报告 (REPORT)
├── 基于模板 (TEMPLATE)
├── 附件 (ATTACHMENT)
├── 实体 (ENTITY)
├── 规则 (RULE)
└── 要素值 (VALUE)
问题:
项目 (PROJECT)
├── 要素定义 (ELEMENT) - 原模板的要素
├── 要素值 (VALUE) - 原报告的值
├── 附件 (ATTACHMENT)
├── 实体 (ENTITY)
└── 规则 (RULE)
优势:
| 原设计 | 新设计 | 说明 |
|---|---|---|
| PROJECT | PROJECT | 保留,但语义变化 |
| TEMPLATE | 功能合并到PROJECT | |
| REPORT | 功能合并到PROJECT | |
| ELEMENT | ELEMENT | 保留,直接属于PROJECT |
| VALUE | VALUE | 保留,直接属于PROJECT |
| ATTACHMENT | ATTACHMENT | 保留 |
| ENTITY | ENTITY | 保留 |
| RULE | RULE | 保留 |
| 原设计 | 新设计 | 说明 |
|---|---|---|
| PROJECT --CONTAINS--> REPORT | 不再需要 | |
| REPORT --INSTANCE_OF--> TEMPLATE | 不再需要 | |
| TEMPLATE --HAS_ELEMENT--> ELEMENT | PROJECT --HAS_ELEMENT--> ELEMENT | 直接关联 |
| REPORT --HAS_VALUE--> VALUE | PROJECT --HAS_VALUE--> VALUE | 直接关联 |
| REPORT --HAS_ATTACHMENT--> ATTACHMENT | PROJECT --HAS_ATTACHMENT--> ATTACHMENT | 直接关联 |
| REPORT --HAS_RULE--> RULE | PROJECT --HAS_RULE--> RULE | 直接关联 |
-- 只保留必要的节点类型
INSERT INTO node_types (type_code, type_name, description) VALUES
('PROJECT', '项目', '智报项目'),
('ELEMENT', '要素', '报告要素定义'),
('VALUE', '要素值', '要素的具体值'),
('ATTACHMENT', '附件', '项目附件'),
('ENTITY', '实体', 'NER识别的实体'),
('RULE', '规则', '数据提取规则');
-- 简化后的关系类型
INSERT INTO edge_types (type_code, type_name, from_node_type, to_node_type) VALUES
('HAS_ELEMENT', '包含要素', 'PROJECT', 'ELEMENT'),
('HAS_VALUE', '包含要素值', 'PROJECT', 'VALUE'),
('FOR_ELEMENT', '对应要素', 'VALUE', 'ELEMENT'),
('HAS_ATTACHMENT', '包含附件', 'PROJECT', 'ATTACHMENT'),
('HAS_ENTITY', '包含实体', 'ATTACHMENT', 'ENTITY'),
('HAS_RULE', '包含规则', 'PROJECT', 'RULE'),
('FOR_ELEMENT', '针对要素', 'RULE', 'ELEMENT'),
('INPUT_FROM', '输入来源', 'RULE', 'ENTITY');
-- 项目节点的属性(合并了原模板和报告的属性)
property_definitions:
- title: 项目标题
- description: 项目描述
- status: 状态 (draft/in_progress/completed/archived)
- content_html: 报告内容HTML
- content_markdown: 报告内容Markdown
- template_type: 模板类型 (用于区分不同类型的项目)
- created_by: 创建人
- updated_by: 更新人
- created_at: 创建时间
- updated_at: 更新时间
原流程:
1. 创建项目
2. 选择模板
3. 基于模板创建报告
4. 初始化要素值
5. 开始编辑
新流程:
1. 创建项目(可选择预设模板类型)
2. 自动初始化要素定义和空值
3. 直接开始编辑
原流程:
1. 上传样本文档到模板
2. 解析生成要素定义
3. 保存为模板
4. 基于模板创建报告
新流程:
1. 创建项目时选择"从样本创建"
2. 上传样本文档
3. 自动解析生成要素定义
4. 直接开始编辑
或者:
1. 创建空白项目
2. 上传样本文档作为附件
3. 点击"从附件生成要素"
4. 自动解析生成要素定义
原流程:
1. 复制报告
2. 选择目标项目
3. 创建新报告(保留要素定义和规则)
新流程:
1. 复制项目
2. 创建新项目(保留要素定义和规则)
3. 清空要素值
原设计:
- 项目列表页
- 报告列表页
- 报告编辑器
- 模板列表页
- 模板详情页
新设计:
- 项目列表页
- 项目编辑器(直接编辑)
功能:
卡片信息:
布局:
┌─────────────────────────────────────────────────────────┐
│ 顶部工具栏: [项目标题] [状态] [保存] [导出] [更多] │
├──────────┬──────────────────────────┬────────────────────┤
│ │ │ │
│ 左侧 │ 中间编辑区 │ 右侧AI助手 │
│ 资源 │ │ │
│ 管理 │ - 富文本编辑器 │ - 要素管理 │
│ │ - 实体高亮 │ - AI对话 │
│ - 附件 │ - 要素标记 │ - 智能建议 │
│ - 实体 │ │ │
│ - 规则 │ │ │
│ │ │ │
└──────────┴──────────────────────────┴────────────────────┘
GET /api/v1/projects # 获取项目列表
GET /api/v1/projects/{id} # 获取项目详情
POST /api/v1/projects # 创建项目
PUT /api/v1/projects/{id} # 更新项目
DELETE /api/v1/projects/{id} # 删除项目
POST /api/v1/projects/{id}/copy # 复制项目
POST /api/v1/projects/{id}/archive # 归档项目
POST /api/v1/projects/{id}/export # 导出项目
GET /api/v1/projects/{id}/elements # 获取项目要素列表
POST /api/v1/projects/{id}/elements # 添加要素定义
PUT /api/v1/projects/{id}/elements/{key} # 更新要素定义
DELETE /api/v1/projects/{id}/elements/{key} # 删除要素定义
POST /api/v1/projects/{id}/elements/parse # 从样本解析要素
GET /api/v1/projects/{id}/values # 获取所有要素值
GET /api/v1/projects/{id}/values/{key} # 获取单个要素值
PUT /api/v1/projects/{id}/values/{key} # 更新要素值
POST /api/v1/projects/{id}/values/batch # 批量更新要素值
POST /api/v1/projects/{id}/attachments/upload # 上传附件
GET /api/v1/projects/{id}/attachments # 获取附件列表
DELETE /api/v1/attachments/{id} # 删除附件
POST /api/v1/attachments/{id}/parse # 解析附件
GET /api/v1/projects/{id}/entities # 获取项目所有实体
GET /api/v1/attachments/{id}/entities # 获取附件实体
PUT /api/v1/entities/{id} # 更新实体
POST /api/v1/entities/merge # 合并实体
GET /api/v1/projects/{id}/rules # 获取项目规则
POST /api/v1/projects/{id}/rules # 创建规则
PUT /api/v1/rules/{id} # 更新规则
DELETE /api/v1/rules/{id} # 删除规则
POST /api/v1/rules/{id}/execute # 执行单个规则
POST /api/v1/projects/{id}/rules/execute-all # 批量执行规则
虽然前端不区分模板,但可以提供"模板库"作为快速创建的辅助功能:
- 电力安全生产标准化复审报告
- 安全评估报告
- 项目可行性研究报告
- 技术方案报告
用户可以将项目"保存为模板":
1. 编辑项目,定义好要素结构
2. 点击"保存为模板"
3. 输入模板名称和描述
4. 系统创建一个特殊的PROJECT节点(is_template=true)
5. 其他用户可以"从模板创建项目"
实现方式:
-- PROJECT节点增加属性
is_template: BOOLEAN -- 是否为模板
template_name: TEXT -- 模板名称
如果已有旧数据,迁移方案:
-- 1. 将所有REPORT节点转为PROJECT节点
UPDATE nodes
SET node_type = 'PROJECT'
WHERE node_type = 'REPORT';
-- 2. 删除原PROJECT节点(如果是空的容器)
DELETE FROM nodes
WHERE node_type = 'PROJECT'
AND id NOT IN (
SELECT DISTINCT from_node_id
FROM edges
WHERE edge_type = 'CONTAINS'
);
-- 3. 更新关系
UPDATE edges
SET edge_type = 'HAS_ELEMENT'
WHERE edge_type IN ('HAS_ELEMENT', 'INSTANCE_OF');
-- 4. 删除不需要的关系
DELETE FROM edges
WHERE edge_type = 'CONTAINS';
| 维度 | 原设计 | 新设计 |
|---|---|---|
| 概念层级 | 3层(项目/模板/报告) | 1层(项目) |
| 节点类型 | 8种 | 6种 |
| 关系类型 | 10种 | 8种 |
| 前端页面 | 4个主页面 | 2个主页面 |
| 操作步骤 | 创建项目→选模板→创建报告 | 创建项目→直接编辑 |
✅ 用户体验: 概念简单,操作直观
✅ 开发效率: 前后端代码量减少30%
✅ 维护成本: 状态管理简化,Bug更少
✅ 灵活性: 保留图数据库优势,扩展性不减
⚠️ 模板功能: 可通过"保存为模板"实现,不影响核心流程
⚠️ 历史数据: 需要数据迁移脚本
⚠️ 文档更新: 需要同步更新所有设计文档