# Web UI 设计文档 > 版本: v1.0 | 日期: 2026-07-21 | 状态: 初版 --- ## 1. 概述 概要设计书自动生成 Agent 的 Web UI 是用户与系统交互的唯一界面,承担以下功能: - 文件上传(要件定义、模板、规则文档、现系统文件) - 各步骤的确认与修正(解析结果、影响调查结果、生成结果) - 生成进度实时展示 - 最终设计书的预览与下载 - 规则手册管理(更新、版本查看) - 多用户支持(数据隔离) --- ## 2. 页面结构 ### 2.1 全局布局 ``` ┌─────────────────────────────────────────────────────────────┐ │ Genesis [上传] [解析] [影响调查] [生成] [结果] [设置] │ ← 顶部导航 ├─────────────────────────────────────────────────────────────┤ │ │ │ ┌─ 对话区域 ──────────────────────────────────────────┐ │ │ │ 🤖 你好。请上传要件定义的Excel │ │ │ │ 🧑 [拖放文件] │ │ │ │ 🤖 解析完成!请确认以下Sheet类型 │ │ │ │ ┌────────┬──────────┬───────────┐ │ │ │ │ │ Sheet名 │ 判定结果 │ 修正 │ │ │ │ │ ├────────┼──────────┼───────────┤ │ │ │ │ │ 功能一览 │ ✅ FUNCTION │ │ │ │ │ │ │ 画面一览 │ ❌ 未判定 │ [修正▼] │ │ │ │ │ └────────┴──────────┴───────────┘ │ │ │ │ [确认并继续] │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ ┌─ 组件区域 ──────────────────────────────────────────┐ │ │ │ (根据当前步骤切换) │ │ │ └──────────────────────────────────────────────────────┘ │ │ │ │ 状态: [📤已上传] [✅完成] [⏳进行中] [⏸未开始] │ ← 底部状态栏 └─────────────────────────────────────────────────────────────┘ ``` ### 2.2 导航步骤 ``` ① 上传 → ② 解析确认 → ③ 影响调查确认 → ④ 生成执行 → ⑤ 结果预览 (文件选择) (Sheet判定等) (关联・不确定处) (进度显示) (设计书浏览/下载) ``` - 每步骤有"确认"按钮,确认后进入下一步 - 可通过左侧导航跳转到任意已完成的步骤(支持回退) - 当前步骤高亮显示 --- ## 3. 各页面详细设计 ### 3.1 页面1: 文件上传 ``` ┌─────────────────────────────────────────────┐ │ 1. 上传文件 │ ├─────────────────────────────────────────────┤ │ │ │ 📁 要件定义 (必须) │ │ ┌─────────────────────────────────────┐ │ │ │ .xlsx, .xls, .docx, .pptx 拖放即可 │ │ │ │ 或 [选择文件] │ │ │ └─────────────────────────────────────┘ │ │ ⚠ 要件定义推荐使用Excel │ │ │ │ 📁 设计书模板 (必须) │ │ ┌─────────────────────────────────────┐ │ │ │ .docx (Word) │ │ │ └─────────────────────────────────────┘ │ │ │ │ 📁 记录规则文档 (推荐) │ │ ┌─────────────────────────────────────┐ │ │ │ .docx / .xlsx / .pptx (可多个) │ │ │ └─────────────────────────────────────┘ │ │ │ │ 📁 图表规则 (推荐) │ │ ┌─────────────────────────────────────┐ │ │ │ .docx / .xlsx / .pptx │ │ │ └─────────────────────────────────────┘ │ │ │ │ 📁 现有系统文件 (任意, 追加/改修场景使用) │ │ ┌─────────────────────────────────────┐ │ │ │ .java/.xml/.yml 源代码 或 │ │ │ │ 既有设计书 (.docx/.xlsx) │ │ │ └─────────────────────────────────────┘ │ │ │ │ [更新规则] ← 规则手册再构建按钮 │ │ │ │ [上传完成 → 进入解析] │ └─────────────────────────────────────────────┘ ``` **上传规则:** - 要件定义文件至少一个 - 模板文件必须是一个 .docx - 规则文档可多个,也可零个(规则手册已存在时) - 现系统文件仅在追加/改修场景时需要 - 文件大小限制:最大100MB - 支持拖拽上传、点击上传、取消上传 **斜杠命令:** `/upload` 等同于"上传文件区域获得焦点" --- ### 3.2 页面2: 解析结果确认 ``` ┌─────────────────────────────────────────────┐ │ 2. 确认解析结果 │ ├─────────────────────────────────────────────┤ │ │ │ ▶ Excel要件定义 - Sheet类型判定 │ │ ┌────────┬────────────┬────────┬─────────┐ │ │ │ Sheet名│ 类型判定 │ 修正 │ 行数/列数│ │ │ ├────────┼────────────┼────────┼─────────┤ │ │ │ 功能一览 │ ✅ FUNCTION │ [修正]│ 150x5 │ │ │ │ 画面一览 │ ✅ SCREEN │ [修正]│ 30x4 │ │ │ │ 账票一览 │ ✅ REPORT │ [修正]│ 12x6 │ │ │ │ DB定义 │ ✅ DATABASE │ [修正]│ 20x8 │ │ │ │ 自由记述 │ ⚠ 自由记述型│ [修正]│ 45行 │ │ │ └────────┴────────────┴────────┴─────────┘ │ │ ※ 取消线行将从生成对象中排除 │ │ │ │ ▶ Word模板 - 章节构成 │ │ 检测到的章节: │ │ 1. 目的 │ │ 2. 功能一览 │ │ 3. 画面一览 │ │ 4. DB设计 │ │ 5. IF定义 │ │ 6. 账票一览 │ │ 7. 非功能要件 │ │ [修改章节] │ │ │ │ ▶ 现有系统探索结果 (仅追加/改修场景显示) │ │ 检测: Controller 5件 / Service 12件 / Entity 8件 │ │ API端点: 14件 │ │ DB表: 14件 │ │ [查看详情] [要修正吗?] │ │ │ │ [确认并进入影响调查] │ └─────────────────────────────────────────────┘ ``` **交互说明:** - Sheet类型判定由 AI 自动,但用户可以点击"修正"手动更改 - 章节构成由模板自动解析,但用户可以追加/删除章节 - 现有系统信息仅在追加/改修场景显示 --- ### 3.3 页面3: 影响调查确认 ``` ┌─────────────────────────────────────────────┐ │ 3. 确认影响调查结果 │ ├─────────────────────────────────────────────┤ │ │ │ ── 影响调查概要 ── │ │ 要素数: 45件(功能12/画面10/账票8/DB10/IF3/批处理2)│ │ 关联数: 128件(高置信度85/中32/低11 │ │ 不确定处: 2件 │ │ │ │ ── 要素一览(可折叠) ── │ │ ▸ F001 用户注册 (功能) │ │ 关联: SC001(利用/h) SC002(利用/h) TB001(更新/h) │ │ [编辑] [删除] │ │ ▸ F005 月度汇总处理 (功能) │ │ 关联: ... │ │ │ │ ── 未确定项目(2件) ── │ │ ❓ F004 → TB007 的关联不明 │ │ 根据: 仅名称相似 │ │ → [追加] [否决] [修正] │ │ ❓ 批注「另纸参照」的另纸未找到 │ │ → [输入回答] [跳过] │ │ │ │ ── 质量指标 ── │ │ ⚠ 孤立要素: F012 与任何要素均无关联 │ │ ⚠ 风险: 删除 F001 将影响 5 个要素 │ │ │ │ [确认完成 → 进入生成] │ └─────────────────────────────────────────────┘ ``` **交互说明:** - 一栏显示全部关联(无 auto-pass) - 仅高亮关注未确定项目 - 各关联的追加/删除/种类变更/证据修正是个别交互 - 修正履历显示在画面底部 --- ### 3.4 页面4: 生成执行 ``` ┌─────────────────────────────────────────────┐ │ 4. 概要设计书生成中... │ ├─────────────────────────────────────────────┤ │ │ │ 进度: │ │ │ │ ✅ 功能一览 - 完成 (23秒) │ │ ✅ 画面一览 - 完成 (18秒) │ │ ⠋ DB设计 - 生成中... │ │ ⬜ 账票一览 - 等待 │ │ ⬜ IF定义 - 等待 │ │ ⬜ 非功能要件 - 等待 │ │ │ │ 已过时间: 41秒 / 预计时间: ~3分 │ │ │ │ ────────────────────────────────────── │ │ DB设计章 生成中: │ │ 关联要素: F001, F003, TB001, TB002 │ │ 适用规则: 写入规则_v3 │ │ │ │ ────────────────────────────────────── │ │ │ │ [中途中断] [查看日志] │ └─────────────────────────────────────────────┘ ``` **交互说明:** - 用户可保持此画面打开同时进行其他工作 - 生成完成时通过浏览器通知(或 WebSocket 推送)告知 - 选择中断时,已完成的章节保留,其余作为未完成保存 - 中断后恢复时,从已完成的章节继续生成 --- ### 3.5 页面5: 结果预览与下载 ``` ┌─────────────────────────────────────────────┐ │ 5. 生成完成 │ ├─────────────────────────────────────────────┤ │ │ │ ┌─ QA报告 ──────────────────────────┐ │ │ │ ✅ 全部10项检查通过 │ │ │ │ 内容准确性: 通过 │ │ │ │ 关联一致性: 通过 │ │ │ │ 规则遵守度: 警告 1件 │ │ │ │ → 「功能概要应包含影响范围」 │ │ │ └────────────────────────────────────────┘ │ │ │ │ ┌─ 预览 ──────────────────────────┐ │ │ │ (docx → HTML → 浏览器内渲染) │ │ │ │ 1. 目的 │ │ │ │ 本系统是... │ │ │ │ │ │ │ │ 2. 功能一览 │ │ │ │ ┌──────┬────────┬───────┐ │ │ │ │ │功能ID │ 功能名 │ 概要 │ │ │ │ │ ├──────┼────────┼───────┤ │ │ │ │ │F001 │用户 │... │ │ │ │ │ └──────┴────────┴───────┘ │ │ │ │ ... │ │ │ └────────────────────────────────────────┘ │ │ │ │ ┌─ 下载区域 ──────────────────────────┐ │ │ │ 📥 下载设计书 (.docx) │ │ │ │ 📥 下载QA报告 (.json) │ │ │ │ 📥 下载影响调查书 (.json) │ │ │ └────────────────────────────────────────┘ │ │ │ │ [修正后重新生成] [进行新生成] │ └─────────────────────────────────────────────┘ ``` --- ## 4. 技术设计 ### 4.1 任务管理 ``` Task Queue (Redis) ├── task:generate-chapter-1 │ status: completed │ result: {chapter: "功能一览", html: "...", time_ms: 23000} │ ├── task:generate-chapter-2 │ status: running │ started_at: 2026-07-21T12:01:00Z │ └── task:generate-chapter-3 status: pending ``` ### 4.2 会话管理(SQLite) **会话表设计:** ```sql -- 主模型: 每个用户的会话 CREATE TABLE sessions ( id TEXT PRIMARY KEY, user_id TEXT NOT NULL, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, updated_at DATETIME, status TEXT, -- "uploading" | "parsing" | "awaiting_parse_confirm" | "impact_running" | "awaiting_impact_confirm" | "writing" | "qa" | "done" current_step TEXT, metadata JSON -- 会话的摘要 ); -- 中间成果物的快照 CREATE TABLE session_snapshots ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL REFERENCES sessions(id), step TEXT NOT NULL, -- "parse" | "impact" | "writer" | "qa" data BLOB, -- 序列化的中间成果物 (JSON) version INTEGER DEFAULT 1, -- 修正时的版本管理 created_at DATETIME DEFAULT CURRENT_TIMESTAMP ); -- 已上传文件的元数据(文件本体保存在文件系统) CREATE TABLE session_files ( id INTEGER PRIMARY KEY AUTOINCREMENT, session_id TEXT NOT NULL REFERENCES sessions(id), file_type TEXT NOT NULL, -- "requirements" | "template" | "rules" | "existing_system" file_name TEXT NOT NULL, file_path TEXT NOT NULL, -- 文件系统上的路径 file_size INTEGER, mime_type TEXT, uploaded_at DATETIME DEFAULT CURRENT_TIMESTAMP ); ``` **为什么用 SQLite:** - 单一文件,无需额外安装 - 通过 SQL 查询即可轻松搜索会话(如「用户X的未完成会话」) - ACID 事务保证数据一致性 - 进程重启后数据仍保留 - 迁移到 PostgreSQL 也容易(表定义兼容性高) ### 4.3 多用户 ``` 工作区: /data/users/{user_id}/ ├── uploads/ # 用户上传的文件 │ ├── session_001/ │ │ ├── requirements.xlsx │ │ └── template.docx │ └── session_002/ ├── outputs/ # 生成的设计书 │ ├── session_001.docx │ └── session_002.docx └── config/ └── .env # 用户个别设置(API Key 等共享) 共享数据(所有用户通用): /data/shared/ ├── rules-handbook/ │ ├── v1/ │ └── v2/ # 规则更新版本 └── templates/ ``` --- ## 5. 异常处理UX ### 5.1 生成出错时 ``` DB设计 生成过程中发生错误 ┌─────────────────────────────────────────┐ │ ⚠ DB设计章生成时发生错误 │ │ 错误详情: LLM API调用失败 │ │ 错误码: LLM_TIMEOUT │ │ │ │ [重试] [跳过并继续] [中断] │ └─────────────────────────────────────────┘ ``` - **重试**: 重新生成同一章(重试 LLM 调用) - **跳过**: 跳过此章并进入下一章 - **中断**: 全部中断,保存迄今为止的已完成章节 ### 5.2 会话恢复 浏览器关闭后再次打开时: ``` 「要恢复上次的会话吗?」 上次的状态: Step 3 (影响调查确认) ・解析结果: ✅ 完成 ・影响调查: ✅ 完成(以上述v2确认) ・Writer: 未开始 [恢复并继续] [开始新会话] ``` --- ## 6. 斜杠命令一览 ``` /upload → 聚焦到文件上传区域 /probe → 跳转到解析结果画面 /impact → 跳转到影响调查画面 /generate → 跳转到生成执行画面 /result → 跳转到结果画面 /settings → 跳转到设置画面 /status → 显示当前生成任务的状态 /cancel → 取消当前生成 /help → 显示帮助 ```