# SSA-Pro 前端 UI 改进开发计划 - V8 双屏版 > **文档版本:** v1.1 > **创建日期:** 2026-02-20 > **最后更新:** 2026-02-20(根据审查反馈更新) > **预计工时:** 3-4 天(前端) > **依赖文档:** > - `03-UI设计/产品原型图V8双屏版.html` > - `03-UI设计/SSA-Pro UX方案对比与技术选型报告.md` > - `docs/03-业务模块/AIA-AI智能问答/00-模块当前状态与开发指南.md` > - `frontend-v2/src/shared/components/Chat/README.md`(流式响应能力) --- ## 1. 背景与目标 ### 1.1 背景 当前 SSA 前端已实现基础功能(Phase 1 完成 85%),但 UI/UX 存在以下问题: | 问题 | 影响 | |------|------| | 单列布局 | 统计结果(表格、图表)展示空间狭窄 | | 对话被结果顶开 | 用户无法同时查看计划和结果 | | 缺乏专业感 | 不像 RStudio/SPSS 等专业统计软件 | | 交互割裂 | 数据上传、分析、结果分散在不同卡片 | ### 1.2 目标 采用 **V8 双屏工作台** 架构(类似 Claude Artifacts),实现: 1. **左右分屏**:左侧对话控制 + 右侧工作区(60%+ 空间) 2. **上下文保持**:对话和结果独立展示,互不干扰 3. **专业信任感**:类似 RStudio 的布局,提升医生信任 4. **完整流程可视化**:SAP → 执行日志 → 结果报告 --- ## 2. 架构设计 ### 2.1 整体布局 ``` ┌────────┬─────────────────────────┬──────────────────────────────────────┐ │ 64px │ 400-450px │ 剩余空间 │ │ │ │ │ │ 全局 │ 对话控制区 │ 工作区 (Artifacts) │ │ 导航 │ (ChatPane) │ (ArtifactPane) │ │ │ │ │ │ ┌───┐ │ ┌─────────────────────┐ │ ┌─────────────────────────────────┐ │ │ │新建│ │ │ AI 欢迎语 │ │ │ 视图标题 + 操作按钮 │ │ │ └───┘ │ │ 用户消息 │ │ └─────────────────────────────────┘ │ │ ┌───┐ │ │ AI 回复 + 交互卡片 │ │ ┌─────────────────────────────────┐ │ │ │历史│ │ │ 数据挂载确认 │ │ │ │ │ │ └───┘ │ │ 执行状态提示 │ │ │ 动态内容区域 │ │ │ ┌───┐ │ └─────────────────────┘ │ │ - SAP 文档 │ │ │ │设置│ │ │ │ - 执行日志 │ │ │ └───┘ │ ┌─────────────────────┐ │ │ - 结果报告(表格 + 图表) │ │ │ │ │ 📎 数据挂载区 │ │ │ │ │ │ │ │ ────────────────── │ │ └─────────────────────────────────┘ │ │ │ │ 输入框 + 发送按钮 │ │ │ │ │ └─────────────────────┘ │ │ └────────┴─────────────────────────┴──────────────────────────────────────┘ ``` ### 2.2 右侧工作区三种视图 | 视图 | 触发条件 | 内容 | |------|---------|------| | **empty** | 初始状态 | 空状态提示(图标 + 文案) | | **sap** | 生成 SAP 后 | 研究目的、推荐方法、统计护栏 | | **execution** | 执行分析时 | 实时日志(护栏检查、自动降级) | | **result** | 执行完成后 | AI 解读、三线表、图表、R 代码 | ### 2.3 状态管理设计 ```typescript // stores/ssaStore.ts 扩展 interface SSAWorkspaceState { // 现有状态 mode: SSAMode; currentSession: SSASession | null; currentPlan: AnalysisPlan | null; executionResult: ExecutionResult | null; traceSteps: TraceStep[]; // 🆕 新增:右侧面板状态 activePane: 'empty' | 'sap' | 'execution' | 'result'; currentArtifact: { type: 'sap' | 'trace' | 'result'; data: any; } | null; // 🆕 新增:数据挂载状态 mountedFile: { name: string; size: number; rowCount: number; } | null; // 🆕 新增:动作 setActivePane: (pane: 'empty' | 'sap' | 'execution' | 'result') => void; setArtifact: (artifact: { type: string; data: any } | null) => void; setMountedFile: (file: { name: string; size: number; rowCount: number } | null) => void; // 🆕 新增:历史记录状态恢复(审查反馈 - 盲区二) hydrateFromHistory: (session: SSASession) => void; } ``` **历史记录状态恢复逻辑**: ```typescript // hydrateFromHistory 实现 hydrateFromHistory: (session: SSASession) => { // 根据 session 状态恢复右侧面板 if (session.executionResult) { set({ activePane: 'result', currentArtifact: { type: 'result', data: session.executionResult } }); } else if (session.currentPlan) { set({ activePane: 'sap', currentArtifact: { type: 'sap', data: session.currentPlan } }); } else { set({ activePane: 'empty', currentArtifact: null }); } // 恢复数据挂载状态 if (session.dataSchema) { set({ mountedFile: { name: session.title, size: 0, rowCount: session.dataSchema.rowCount, } }); } } ``` --- ## 3. 组件复用分析 ### 3.1 可复用的 AIA 组件 | 组件 | 来源路径 | 复用程度 | 改造需求 | |------|---------|----------|----------| | **ResizableSplitPane** | `aia/protocol-agent/components/` | 🟢 100% | 直接复用 | | **AIStreamChat** | `shared/components/Chat/` | 🟢 90% | 定制欢迎语 | | **ThinkingBlock** | `shared/components/Chat/` | 🟢 100% | 直接复用 | | **ViewSwitcher** | `aia/protocol-agent/components/` | 🟡 70% | 修改视图选项 | | **MarkdownContent** | `aia/protocol-agent/components/` | 🟢 100% | SAP 文档渲染 | ### 3.2 SSA 现有组件保留/改造 | 组件 | 当前路径 | 处理方式 | 说明 | |------|---------|---------|------| | **ModeSwitch** | `ssa/components/` | ⏸️ 暂时移除 | V8 聚焦智能分析模式 | | **PlanCard** | `ssa/components/` | 🔄 改造 | 移入 ChatPane 作为交互卡片 | | **ExecutionTrace** | `ssa/components/` | 🔄 改造 | 移入 ArtifactPane | | **ResultCard** | `ssa/components/` | 🔄 重构 | 拆分为独立组件 | | **APATable** | `ssa/components/` | ✅ 保留 | 三线表核心组件 | ### 3.3 需要新开发的组件 | 组件 | 说明 | 预估工时 | |------|------|----------| | **SSAWorkspace** | 双屏布局主页面 | 4h | | **GlobalNav** | 左侧全局导航栏 | 2h | | **ChatPane** | 左侧对话控制区 | 3h | | **DataMountZone** | 数据挂载区(嵌入式) | 2h | | **ArtifactPane** | 右侧工作区容器 | 2h | | **SAPViewer** | SAP 文档视图 | 3h | | **ExecutionViewer** | 执行日志视图 | 2h | | **ResultViewer** | 结果报告视图 | 4h | | **SciTable** | 三线表组件(科学格式) | 2h | | **ChartViewer** | 图表展示组件 | 2h | | **CodeModal** | R 代码预览模态框 | 1h | --- ## 4. 详细开发任务 ### 4.1 Day 1: 架构搭建 + 组件下沉 | 任务 | 预估 | 说明 | |------|------|------| | 下沉 `ResizableSplitPane` 到 shared | 1h | 提取为系统级 Common 组件 | | 创建 `SSAWorkspace` 骨架 | 2h | 双屏布局 + 状态联动 | | 改造 `ssaStore.ts` | 1.5h | 新增 activePane、artifact 状态 | | 创建 `GlobalNav` 组件 | 1.5h | 新建/历史/设置图标 | | 样式文件创建 | 1h | `ssa-workspace.css` | **Day 1 交付物:** - [ ] 双屏布局可拖拽 - [ ] 左侧空白区域 + 右侧空白区域 - [ ] 全局状态管理就绪 ### 4.2 Day 2: 左侧对话区 + 流式联动 | 任务 | 预估 | 说明 | |------|------|------| | 创建 `ChatPane` 组件 | 2h | 消息列表 + 输入区 | | 创建 `DataMountZone` 组件 | 2h | 嵌入式数据挂载 | | 改造 `PlanCard` 为交互卡片 | 1.5h | 点击触发右侧 SAP 展示 | | 集成 `AIStreamChat` | 1.5h | 咨询模式对话 | | 🆕 实现流式 Artifact 标记解析 | 2h | **审查反馈 - 盲区一** | | 左侧区域样式精调 | 1h | 参考原型图 | **Day 2 交付物:** - [ ] 数据上传 → 挂载区显示文件信息 - [ ] 输入分析需求 → 生成 SAP - [ ] 点击 SAP 卡片 → 右侧展示详情 - [ ] 🆕 AI 流式输出中解析 Artifact 标记,自动切换右侧面板 ### 4.3 Day 3: 右侧工作区 | 任务 | 预估 | 说明 | |------|------|------| | 创建 `ArtifactPane` 容器 | 1h | 动态视图切换 | | 创建 `SAPViewer` 组件 | 2.5h | 研究目的、推荐方法、护栏 | | 创建 `ExecutionViewer` 组件 | 2h | 实时日志 + 动画 | | 创建 `SciTable` 组件 | 2h | 三线表科学格式 | | 创建 `ChartViewer` 组件 | 1.5h | Base64 图片展示 | **Day 3 交付物:** - [ ] SAP 文档视图完整 - [ ] 执行日志实时展示 - [ ] 三线表科学格式 ### 4.4 Day 4: 结果展示 + 联调 | 任务 | 预估 | 说明 | |------|------|------| | 创建 `ResultViewer` 组件 | 2.5h | AI 解读 + 表格 + 图表 | | 创建 `CodeModal` 组件 | 1h | R 代码预览模态框 | | 下载功能完善 | 1.5h | 代码下载 + 报告下载 | | 端到端联调测试 | 2h | 完整流程验证 | | UI 样式精调 | 1h | 对齐原型图 | **Day 4 交付物:** - [ ] 结果报告完整展示 - [ ] R 代码一键下载 - [ ] 端到端流程通过 --- ## 5. 组件详细设计 ### 5.1 ResizableSplitPane(复用) 直接从 `aia/protocol-agent/components/ResizableSplitPane.tsx` 复制到 `shared/components/Layout/`。 ```typescript // 使用方式 } rightPanel={} /> ``` ### 5.2 SSAWorkspace(主页面) ```tsx // modules/ssa/SSAWorkspace.tsx const SSAWorkspace: React.FC = () => { const { activePane, setActivePane } = useSSAStore(); return (
{/* 全局导航 */} {/* 主工作区 */}
} rightPanel={} defaultLeftRatio={35} />
); }; ``` ### 5.3 GlobalNav(全局导航) ```tsx // modules/ssa/components/GlobalNav.tsx const GlobalNav: React.FC = () => { return ( ); }; ``` ### 5.4 ChatPane(对话控制区) ```tsx // modules/ssa/components/ChatPane.tsx const ChatPane: React.FC = () => { const { mountedFile, setMountedFile } = useSSAStore(); return (
{/* 头部 */}
新的统计分析
{/* 消息列表 */}
{/* AI 欢迎语 */} {/* 用户消息 */} {/* AI 回复 + 交互卡片 */}
{/* 输入区 */}
{/* 数据挂载区 */} {mountedFile && } {/* 输入框 */}