mirror of
https://github.com/zhouxiaoka/autoclip.git
synced 2026-05-06 22:13:00 +08:00
- 增加CollectionCard高度:420px → 480px - 增加CollectionCardMini高度:200px → 240px - 增加封面区域高度:180px → 220px (CollectionCard), 100px → 120px (CollectionCardMini) - 优化内容间距:16px → 20px (CollectionCard), 12px → 16px (CollectionCardMini) - 重新设计统计信息区域,去掉重复的时长和评分信息 - 将时长和评分信息移到内容区域底部,布局更清晰 - 修复CollectionResponse schema缺少thumbnail_path字段的问题 - 修复CollectionService中get_collections_paginated方法缺少thumbnail_path映射 - 修复collections API响应构建中缺少video_path和thumbnail_path字段 - 封面提取功能现在正常工作,API正确返回thumbnail_path
Auto Clips Frontend
基于 React + TypeScript + Vite + Ant Design 的视频自动切片前端应用。
功能特性
🎯 核心功能
- 视频上传: 支持拖拽上传视频文件和字幕文件
- 智能处理: AI 自动提取视频精彩片段
- 片段管理: 查看、编辑、下载视频片段
- 合集创建: AI 推荐合集 + 手动创建合集
- 实时监控: 处理进度实时反馈
🎨 用户界面
- 现代化设计: 基于 Ant Design 组件库
- 响应式布局: 支持桌面和移动端
- 直观操作: 拖拽排序、一键下载
- 状态反馈: 清晰的处理状态和进度显示
技术栈
- 前端框架: React 18 + TypeScript
- 构建工具: Vite
- UI 组件: Ant Design
- 状态管理: Zustand
- 路由: React Router DOM
- HTTP 客户端: Axios
- 拖拽功能: React Beautiful DnD
- 视频播放: React Player
- 文件上传: React Dropzone
快速开始
环境要求
- Node.js >= 16
- npm 或 yarn
安装依赖
npm install
# 或
yarn install
启动开发服务器
npm run dev
# 或
yarn dev
构建生产版本
npm run build
# 或
yarn build
项目结构
frontend/
├── public/ # 静态资源
├── src/
│ ├── components/ # 可复用组件
│ │ ├── Header.tsx # 页面头部
│ │ ├── FileUpload.tsx # 文件上传组件
│ │ ├── ProjectCard.tsx # 项目卡片
│ │ ├── ClipCard.tsx # 视频片段卡片
│ │ └── CollectionCard.tsx # 合集卡片
│ ├── pages/ # 页面组件
│ │ ├── HomePage.tsx # 项目首页
│ │ └── ProjectDetailPage.tsx # 项目详情页
│ ├── services/ # API 服务
│ │ └── api.ts # API 接口定义
│ ├── store/ # 状态管理
│ │ └── useProjectStore.ts # 项目状态
│ ├── App.tsx # 应用主组件
│ ├── main.tsx # 应用入口
│ └── index.css # 全局样式
├── package.json
├── vite.config.ts # Vite 配置
├── tsconfig.json # TypeScript 配置
└── README.md
页面说明
项目首页 (/)
- 项目列表展示
- 搜索和筛选功能
- 新建项目(文件上传)
- 项目状态监控
项目详情页 (/project/:id)
- 项目信息和处理状态
- 视频片段管理
- AI 合集展示
- 手动创建合集
- 下载和导出功能
组件说明
FileUpload
- 支持拖拽和点击上传
- 文件类型验证
- 上传进度显示
- 自动创建项目
ProjectCard
- 项目信息展示
- 状态指示器
- 快捷操作按钮
- 进度条显示
ClipCard
- 视频片段信息
- 在线预览功能
- 编辑和下载
- 添加到合集
CollectionCard
- 合集信息展示
- 片段列表管理
- 拖拽排序
- 生成合集视频
API 接口
前端通过 /api 代理与后端通信,主要接口包括:
GET /api/projects- 获取项目列表POST /api/projects- 创建新项目GET /api/projects/:id- 获取项目详情POST /api/projects/:id/upload- 上传文件POST /api/projects/:id/process- 开始处理GET /api/projects/:id/status- 获取处理状态PUT /api/projects/:id/clips/:clipId- 更新片段PUT /api/projects/:id/collections/:collectionId- 更新合集GET /api/projects/:id/download- 下载视频
开发说明
状态管理
使用 Zustand 进行轻量级状态管理,主要管理:
- 项目列表和当前项目
- 视频片段和合集数据
- 加载状态和错误信息
样式规范
- 使用 Ant Design 主题色彩
- 响应式设计,支持移动端
- 统一的间距和圆角规范
- 自定义滚动条和悬停效果
类型定义
所有数据结构都有完整的 TypeScript 类型定义,确保类型安全。
部署说明
开发环境
npm run dev
生产环境
npm run build
npm run preview
Docker 部署
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["npm", "run", "preview"]
后续优化
功能增强
- 视频在线编辑
- 批量操作
- 导出多种格式
- 用户权限管理
- 云端存储集成
性能优化
- 虚拟滚动
- 图片懒加载
- 代码分割
- 缓存策略
用户体验
- 快捷键支持
- 主题切换
- 国际化
- 无障碍访问
贡献指南
- Fork 项目
- 创建功能分支
- 提交更改
- 推送到分支
- 创建 Pull Request
许可证
MIT License