MiroFish/frontend/功能演示.md
666ghj b67e14cced Add project status report and frontend documentation
- Introduced `PROJECT_STATUS.md` to provide a comprehensive overview of the MiroFish project, detailing the current status, completed features, and future development plans.
- Added multiple documentation files in the frontend directory, including detailed descriptions of the homepage functionality, startup guide, and project completion summary.
- Implemented a structured approach to document the project's architecture, API integration, and user interaction processes, enhancing clarity for developers and users alike.
- Included a `.gitignore` file to manage ignored files and directories in the frontend project, improving project organization and cleanliness.
2025-12-10 14:49:11 +08:00

506 lines
14 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MiroFish 前端功能演示
## 首页功能详解
### 1. 页面整体布局
```
┌─────────────────────────────────────────────────┐
│ │
│ [MiroFish Logo] │
│ │
│ 上传任意报告,模拟世界即刻开始 │
│ │
├─────────────────────────────────────────────────┤
│ │
│ 模拟需求 │
│ ┌───────────────────────────────────────────┐ │
│ │ 请描述您的模拟需求... │ │
│ │ │ │
│ │ │ │
│ └───────────────────────────────────────────┘ │
│ │
│ 项目名称 (可选) │
│ ┌───────────────────────────────────────────┐ │
│ │ 为您的项目命名 │ │
│ └───────────────────────────────────────────┘ │
│ │
│ 上传文档 │
│ ┌───────────────────────────────────────────┐ │
│ │ 📤 │ │
│ │ 点击或拖拽文件到此处 │ │
│ │ 支持 PDF、Markdown、TXT 格式 │ │
│ └───────────────────────────────────────────┘ │
│ │
│ 额外说明 (可选) │
│ ┌───────────────────────────────────────────┐ │
│ │ 如有其他需要补充的信息... │ │
│ └───────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────┐ │
│ │ 开 始 模 拟 │ │
│ └───────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────┘
```
### 2. 交互功能说明
#### 2.1 文件上传
**支持方式**:
1. **点击上传**: 点击上传区域,弹出文件选择对话框
2. **拖拽上传**: 直接拖拽文件到上传区域
**支持格式**:
- PDF文档 (.pdf)
- Markdown文档 (.md)
- 纯文本文档 (.txt)
**上传特性**:
- ✅ 支持多文件上传
- ✅ 显示文件名和大小
- ✅ 可以删除已选择的文件
- ✅ 自动过滤不支持的格式
- ✅ 拖拽时高亮显示上传区域
**示例**:
```
上传后显示:
┌─────────────────────────────────────────┐
│ 📄 report.pdf 2.5 MB [×] │
│ 📄 analysis.md 1.2 MB [×] │
└─────────────────────────────────────────┘
```
#### 2.2 表单验证
**必填项检查**:
- ❌ 未填写模拟需求 → 按钮禁用
- ❌ 未上传文件 → 按钮禁用
- ✅ 两者都完成 → 按钮可点击
**可选项**:
- 项目名称(留空则自动生成)
- 额外说明(留空则不传递)
**状态提示**:
- 按钮禁用时:灰色不可点击
- 按钮可用时:黑色背景,hover变白色背景
#### 2.3 提交流程
**步骤1: 用户点击"开始模拟"**
```
按钮状态变为:
┌─────────────────────────────┐
│ ⌛ 处理中... │
└─────────────────────────────┘
```
**步骤2: 构建FormData**
```javascript
FormData包含:
- files: [file1, file2, ...]
- simulation_requirement: "用户输入的需求"
- project_name: "项目名称" (可选)
- additional_context: "额外说明" (可选)
```
**步骤3: 调用API**
```
POST /api/graph/ontology/generate
Content-Type: multipart/form-data
自动重试机制:
第1次失败 → 等待1秒 → 重试
第2次失败 → 等待2秒 → 重试
第3次失败 → 等待4秒 → 重试
第4次失败 → 显示错误
```
**步骤4: 成功响应**
```json
{
"success": true,
"data": {
"project_id": "proj_abc123",
"project_name": "项目名称",
"ontology": { ... },
...
}
}
```
**步骤5: 页面跳转**
```
跳转到: /process/proj_abc123
```
#### 2.4 错误处理
**网络错误**:
```
┌───────────────────────────────────────┐
│ ⚠ 提交失败,请检查网络连接或稍后重试 │
└───────────────────────────────────────┘
```
**API错误**:
```
┌───────────────────────────────────────┐
│ ⚠ 生成本体失败,请重试 │
└───────────────────────────────────────┘
```
**文件格式错误**:
```
┌───────────────────────────────────────┐
│ ⚠ 部分文件格式不支持,已自动过滤 │
└───────────────────────────────────────┘
```
### 3. 设计细节
#### 3.1 颜色方案
```css
/* 主色调 */
黑色: #000000 (文字边框按钮)
白色: #FFFFFF (背景按钮hover)
灰色: #666666 (次要文字)
浅灰: #f5f5f5 (禁用背景)
/* 错误色 */
红色: #ff0000 (错误提示边框和文字)
浅红: #fff5f5 (错误提示背景)
```
#### 3.2 边框样式
```css
/* 输入框 */
border: 1px solid #000000
/* 输入框聚焦 */
border: 2px solid #000000
/* 上传区域 */
border: 2px dashed #000000
/* 上传区域hover */
border: 2px dashed #333333
background: #fafafa
/* 上传区域拖拽中 */
border: 2px solid #000000
background: #f0f0f0
```
#### 3.3 字体样式
```css
/* Logo标语 */
font-size: 1.5rem (24px)
font-weight: 300
letter-spacing: 0.05em
/* 标签 */
font-size: 0.95rem (15.2px)
font-weight: 500
letter-spacing: 0.02em
/* 输入框 */
font-size: 0.95rem (15.2px)
/* 按钮 */
font-size: 1.1rem (17.6px)
font-weight: 500
letter-spacing: 0.1em
```
#### 3.4 间距设计
```css
/* 区块间距 */
margin-bottom: 1.5rem (24px)
/* 内边距 */
表单区域: padding: 2.5rem (40px)
输入框: padding: 0.75rem (12px)
按钮: padding: 1rem (16px)
```
### 4. 响应式适配
#### 桌面端 (>= 768px)
```
容器最大宽度: 800px
表单内边距: 2.5rem
Logo最大宽度: 400px
```
#### 移动端 (< 768px)
```
容器宽度: 100%
表单内边距: 1.5rem
Logo最大宽度: 300px
标语字号: 1.2rem
```
### 5. 动画效果
#### 加载动画
```css
@keyframes spin {
to { transform: rotate(360deg); }
}
.loading-spinner {
width: 16px;
height: 16px;
border: 2px solid #ffffff;
border-top-color: transparent;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
```
#### 按钮hover
```css
transition: all 0.3s;
/* Normal */
background: #000000;
color: #ffffff;
/* Hover */
background: #ffffff;
color: #000000;
```
#### 输入框焦点
```css
transition: all 0.2s;
/* Normal */
border: 1px solid #000000;
/* Focus */
border: 2px solid #000000;
```
## 第二页功能详解
### 1. 页面布局
```
┌───────────────────┬─────────────────────────┐
│ │ │
│ 实时图谱 │ Step 1 - 现实种子构建 │
│ │ │
│ ┌─────────────┐ │ ① 文档分析 ✓ │
│ │ │ │ 正在分析上传的文档... │
│ │ 图谱 │ │ │
│ │ 可视化 │ │ ② 本体生成 ⌛ │
│ │ │ │ 使用LLM生成本体... │
│ │ │ │ │
│ └─────────────┘ │ ③ 图谱构建 │
│ │ 待处理... │
│ 节点数: 50 │ │
│ 关系数: 120 │ ④ 完成 │
│ │ 待处理... │
│ │ │
│ │ ─────────────────── │
│ │ 项目信息 │
│ │ 项目名称: ... │
│ │ 项目ID: proj_xxx │
│ │ 状态: graph_building │
│ │ │
└───────────────────┴─────────────────────────┘
```
### 2. 自动化流程
**页面加载**:
1. 从URL获取projectId
2. 调用 `GET /api/graph/project/{projectId}`
3. 根据项目状态更新UI
**状态机**:
```
created → ontology_generated → graph_building → graph_completed
↓ ↓ ↓ ↓
步骤1 步骤2 步骤3 步骤4
```
**自动触发图谱构建**:
```javascript
if (status === 'ontology_generated' && !graph_id) {
// 自动调用 POST /api/graph/build
await buildGraph({ project_id })
}
```
**轮询任务状态**:
```javascript
setInterval(() => {
// 每2秒调用 GET /api/graph/task/{taskId}
const task = await getTaskStatus(taskId)
// 更新进度显示
}, 2000)
```
**加载图谱数据**:
```javascript
if (status === 'graph_completed' && graph_id) {
// 调用 GET /api/graph/data/{graphId}
const graphData = await getGraphData(graph_id)
}
```
### 3. 步骤指示器
**未开始状态**:
```
○ 步骤标题
描述文字
opacity: 0.4
```
**进行中状态**:
```
● 步骤标题
描述文字
进度信息 (45%)
opacity: 1.0
background: #000000 (number)
color: #ffffff (number)
```
**已完成状态**:
```
● 步骤标题
描述文字
已完成 ✓
opacity: 1.0
background: #000000 (number)
```
## 使用示例
### 完整流程演示
**场景**: 模拟武汉大学撤销处分事件的舆情走向
**步骤1**: 打开首页
```
访问: http://localhost:3000
```
**步骤2**: 填写表单
```
模拟需求: "模拟武汉大学撤销处分通告发布后的舆情走向"
项目名称: "武汉大学舆情分析"
上传文档: report.pdf (关于事件的背景报告)
```
**步骤3**: 提交
```
点击"开始模拟"按钮
等待API响应(约5-30秒)
```
**步骤4**: 查看处理
```
自动跳转到: /process/proj_abc123
观察四个步骤的执行进度
等待图谱构建完成(约1-5分钟)
```
**步骤5**: 完成
```
所有步骤显示"已完成"
左侧展示图谱节点和关系统计
```
## 技术细节
### API重试机制
```javascript
export const requestWithRetry = async (
requestFn,
maxRetries = 3,
delay = 1000
) => {
for (let i = 0; i < maxRetries; i++) {
try {
return await requestFn()
} catch (error) {
if (i === maxRetries - 1) throw error
const waitTime = delay * Math.pow(2, i)
await new Promise(resolve => setTimeout(resolve, waitTime))
}
}
}
```
### 文件上传处理
```javascript
// 构建FormData
const formDataObj = new FormData()
// 添加文件
files.value.forEach(file => {
formDataObj.append('files', file)
})
// 添加文本字段
formDataObj.append('simulation_requirement', requirement)
```
### 轮询实现
```javascript
let pollTimer = setInterval(async () => {
const response = await getTaskStatus(taskId)
if (response.data.status === 'completed') {
clearInterval(pollTimer)
// 处理完成逻辑
}
}, 2000)
// 组件卸载时清理
onUnmounted(() => {
if (pollTimer) clearInterval(pollTimer)
})
```
## 常见问题
### Q: 上传文件后看不到文件列表?
A: 检查文件格式是否支持(PDF、MD、TXT),不支持的格式会被自动过滤
### Q: 点击"开始模拟"没有反应?
A: 检查是否填写了模拟需求和上传了文件,两者都是必填项
### Q: 页面一直显示"处理中"?
A:
1. 检查后端服务是否正常运行
2. 查看浏览器控制台是否有错误信息
3. 检查网络连接
### Q: 图谱构建一直不完成?
A:
1. 图谱构建可能需要1-5分钟,请耐心等待
2. 查看右侧进度信息
3. 如果超过10分钟,可能是后端处理失败,查看后端日志
## 性能优化建议
1. **大文件上传**: 建议单个文件不超过10MB
2. **网络优化**: 使用稳定的网络连接
3. **浏览器**: 推荐使用Chrome浏览器
4. **并发限制**: 避免同时打开多个模拟任务
---
**文档更新**: 2025-12-10
**版本**: v1.0.0