mirror of
https://github.com/zhouxiaoka/autoclip.git
synced 2026-05-06 14:04:32 +08:00
5.8 KiB
5.8 KiB
内嵌式进度条实现方案
概述
本文档描述了为AutoClip项目实现的内嵌式进度条功能,用于替换原有的静态"正在处理中"状态显示,提供实时的任务处理进度反馈。
设计目标
- 保持原有高度:不增加"正在处理中"色块的高度
- 动态进度显示:通过背景色变化和进度条显示实时进度
- 实时状态同步:基于WebSocket的实时进度更新
- 步骤信息展示:显示当前处理步骤和详细进度信息
技术实现
前端组件
1. InlineProgressBar 组件
位置: frontend/src/components/InlineProgressBar.tsx
主要特性:
- 内嵌式设计,保持原有色块高度
- 动态背景渐变效果
- 实时进度条显示
- 步骤信息展示
- WebSocket实时更新
核心功能:
interface InlineProgressBarProps {
projectId: string;
currentStep?: number;
totalSteps?: number;
status?: string;
onProgressUpdate?: (progress: number, step: string) => void;
}
视觉效果:
- 背景渐变:从蓝色到浅蓝色的进度填充
- 动画效果:进度条填充动画和闪烁效果
- 信息层次:主状态 → 步骤信息 → 进度百分比 → 详细进度条
2. 流水线步骤配置
const PIPELINE_STEPS = [
{ id: 1, name: '大纲提取', description: '从视频转写文本中提取结构性大纲' },
{ id: 2, name: '时间定位', description: '基于SRT字幕定位话题时间区间' },
{ id: 3, name: '内容评分', description: '多维度评估片段质量与传播潜力' },
{ id: 4, name: '标题生成', description: '为高分片段生成吸引人的标题' },
{ id: 5, name: '主题聚类', description: '将相关片段聚合为合集推荐' },
{ id: 6, name: '视频切割', description: '使用FFmpeg生成切片与合集视频' }
];
后端集成
1. 实时进度推送
位置: backend/services/processing_orchestrator.py
新增方法:
def _send_realtime_progress_update(self, status: TaskStatus, progress: Optional[float] = None,
error_message: Optional[str] = None):
"""发送实时进度更新到前端"""
进度映射:
- 步骤1 (大纲提取): 0-10%
- 步骤2 (时间定位): 10-30%
- 步骤3 (内容评分): 30-50%
- 步骤4 (标题生成): 50-70%
- 步骤5 (主题聚类): 70-85%
- 步骤6 (视频切割): 85-100%
2. WebSocket消息格式
位置: backend/services/websocket_notification_service.py
消息结构:
{
"type": "task_progress_update",
"task_id": "task_uuid",
"project_id": "project_uuid",
"status": "running",
"progress": 45,
"current_step": 3,
"total_steps": 6,
"step_name": "内容评分",
"message": "正在执行内容评分...",
"timestamp": "2024-01-01T12:00:00Z"
}
集成点
1. ProjectCard 组件更新
位置: frontend/src/components/ProjectCard.tsx
替换内容:
// 原有静态显示
<div style={{...}}>
<LoadingOutlined />
正在处理中
</div>
// 新的动态进度条
<InlineProgressBar
projectId={project.id}
currentStep={project.current_step}
totalSteps={project.total_steps}
status={normalizedStatus}
onProgressUpdate={(progress, stepName) => {
console.log(`项目 ${project.id} 进度更新: ${progress}% - ${stepName}`);
}}
/>
用户体验改进
1. 视觉反馈
- 动态背景:进度条背景随进度变化
- 动画效果:平滑的进度填充动画
- 状态指示:清晰的步骤名称和进度百分比
2. 信息层次
- 主状态:当前步骤名称(如"大纲提取")
- 进度信息:步骤计数和百分比
- 详细进度条:精确的进度可视化
- 步骤详情:可选的详细描述信息
3. 实时性
- WebSocket连接:实时接收后端进度更新
- 即时响应:进度变化立即反映在UI上
- 状态同步:多用户环境下的状态一致性
技术优势
1. 性能优化
- 轻量级组件:最小化重渲染
- WebSocket连接复用:避免频繁HTTP请求
- 状态管理优化:局部状态更新
2. 可扩展性
- 模块化设计:组件可独立使用
- 配置化步骤:易于添加新的处理步骤
- 主题支持:可自定义颜色和样式
3. 错误处理
- 连接失败处理:WebSocket断开时的降级方案
- 数据验证:进度数据的有效性检查
- 异常恢复:自动重连和状态恢复
部署说明
1. 前端部署
- 确保WebSocket连接配置正确
- 验证组件导入路径
- 测试不同浏览器的兼容性
2. 后端部署
- 确保WebSocket服务正常运行
- 验证进度推送逻辑
- 监控WebSocket连接状态
3. 测试验证
- 功能测试:验证进度条显示正确
- 性能测试:验证实时更新性能
- 兼容性测试:验证多浏览器支持
未来扩展
1. 功能增强
- 暂停/恢复:支持任务暂停和恢复
- 取消操作:支持任务取消功能
- 历史记录:显示处理历史
2. 用户体验
- 个性化设置:用户可自定义进度条样式
- 通知系统:处理完成时的通知提醒
- 移动端优化:响应式设计优化
3. 技术优化
- 缓存机制:进度数据的本地缓存
- 离线支持:网络断开时的离线模式
- 性能监控:实时性能指标监控
总结
内嵌式进度条功能成功实现了以下目标:
- ✅ 保持原有高度:进度条完全内嵌在原有色块中
- ✅ 动态进度显示:实时显示处理进度和当前步骤
- ✅ 实时状态同步:基于WebSocket的实时更新机制
- ✅ 用户体验提升:提供丰富的视觉反馈和信息展示
该实现为AutoClip项目提供了现代化的任务处理状态显示,显著提升了用户体验和系统的实时性。