前端界面设计
目录
简介
本文件面向 capcut-mate 桌面客户端的前端界面设计,系统性阐述基于 React 的组件结构、页面布局与用户交互设计。文档重点覆盖以下方面:
- 页面组织与路由策略(当前采用 Tab 切换)
- 功能模块设计:草稿管理、下载控制、历史记录、配置中心
- 组件间通信机制与状态管理
- 用户操作流程与体验优化
- 响应式设计与主题适配建议
- 面向开发者的界面定制与功能扩展指导
项目结构
前端位于 desktop-client/web 目录,采用 Vite 构建,React 19 作为核心框架,配合 Bootstrap 和 react-bootstrap-icons 提供基础 UI 能力。Electron 作为桌面宿主,通过 IPC 暴露能力给前端使用。
应用根节点
index.jsx
应用容器
App.jsx
顶部导航
Header/index.jsx
主内容区
下载页面
pages/Download/index.jsx
历史记录页面
pages/History/index.jsx
配置中心页面
pages/ConfigCenter/index.jsx
通用组件集合
示例草稿模板
components/Tabs.jsx
多行文本输入
components/Textarea.jsx
下载控制开关
components/DownloadControls.jsx
下载按钮
components/DownloadButton.jsx
日志模块
components/LogModule.jsx
外部网页展示
components/ExternalWebpage.jsx
Electron 服务封装
services/electronService.js
核心组件
- 应用入口与挂载:负责创建 React 根实例并渲染 App 容器。
- 应用容器:集中管理全局状态(如当前选中的 Tab)与页面内容渲染。
- 顶部导航:提供页面切换与外部链接跳转。
- 页面组件:下载页面、历史记录页面、配置中心页面。
- 通用组件:示例草稿模板、多行文本输入、下载控制开关、下载按钮、日志模块、外部网页展示。
- Electron 服务封装:统一浏览器与 Electron 环境下的 API 调用差异。
架构概览
capcut-mate 前端采用"容器 + 组件"分层设计:
- 容器层:App.jsx 负责状态持有与页面切换;各页面组件负责具体业务逻辑。
- 组件层:通用 UI 组件复用度高,职责单一,便于测试与维护。
- 服务层:electronService.js 抽象 Electron 与浏览器环境差异,提供统一接口。
- 数据流:页面组件通过 electronService 与桌面端通信,接收日志、历史、配置等数据;UI 通过状态驱动更新。
服务层
组件层
页面层
容器层
App.jsx
Header/index.jsx
Download/index.jsx
History/index.jsx
ConfigCenter/index.jsx
Tabs.jsx
Textarea.jsx
DownloadControls.jsx
DownloadButton.jsx
LogModule.jsx
ExternalWebpage.jsx
electronService.js
详细组件分析
应用容器与页面切换
- App.jsx 通过 useState 维护当前选中的 Tab,使用对象映射根据 Tab 渲染对应页面。
- 顶部导航通过回调通知 App 切换 Tab,实现页面级切换。
- 使用 ToastContainer 全局提示,避免页面内重复引入。
"Config 页面" "History 页面" "Download 页面" "App" "Header" "用户" "Config 页面" "History 页面" "Download 页面" "App" "Header" "用户" alt [选中 download] [选中 history] [选中 config] 点击导航项 onTabChange(tab) 更新 selectedTab 渲染 Download 页面 渲染 History 页面 渲染 Config 页面
下载页面(草稿管理与下载控制)
- 状态管理:包含文本输入值、下载开关、日志列表、加载状态等。
- 日志订阅:通过 electronService.onFileOperationLog 订阅日志事件,自动滚动到底部。
- 下载流程:校验输入、解析 draft_id、获取远程文件列表、匹配目标文件、调用 saveFile 并提示结果。
- 组件组合:Textarea、Tabs、DownloadControls、DownloadButton、LogModule、ExternalWebpage。
"Electron 主进程" "electronService" "Download 页面" "用户" "Electron 主进程" "electronService" "Download 页面" "用户" loop [对每个地址] 输入草稿地址并点击下载 校验输入并拆分多行 getUrlJsonData(url) IPC 调用 返回 JSON 数据 文件列表 过滤匹配的文件 saveFile({sourceUrl, remoteFileUrls, targetId, isOpenDir}) IPC 调用 下载完成 结果 Toast 提示 onFileOperationLog 订阅日志 实时推送日志
历史记录页面(数据展示与分页)
- 数据加载:首次加载时调用 electronService.getHistoryRecord 获取全部历史,按时间倒序排序。
- 分页策略:固定每页条数,计算总页数,动态生成页码项,支持省略号。
- 交互细节:复制草稿地址到剪贴板,悬浮提示展示完整 URL,加载状态友好提示。
- UI 基于 react-bootstrap 组件库,样式通过内联样式与类名结合实现。
复制地址
切换页码
无
进入历史页面
加载历史记录
getHistoryRecord()
按时间倒序排序
计算总页数
渲染当前页数据
用户操作?
复制到剪贴板
更新当前页并渲染
结束
配置中心页面(路径设置)
- 功能:读取并展示剪映草稿保存路径,提供选择新路径的能力。
- 交互:点击"选择..."触发 Electron 更新路径流程,成功后刷新显示。
- 提示:使用 Toast 提示错误与成功信息。
通用组件设计
- Tabs:提供示例草稿模板快速填充,简化用户输入。
- Textarea:自适应高度,限制最大高度,提升输入体验。
- DownloadControls:下载完成后是否自动打开文件夹的开关。
- DownloadButton:下载过程中的禁用与加载态处理。
- LogModule:实时日志展示与清空,自动滚动到底部。
- ExternalWebpage:外部网页 iframe 展示,具备可访问性检测与降级展示。
依赖关系分析
- 依赖管理:package.json 中声明 React、Bootstrap、react-bootstrap-icons、react-toastify 等依赖。
- 构建配置:vite.config.js 配置别名 @ 指向 src,开发服务器端口 9000,构建输出到 .../ui。
- Electron 集成:Vite 插件 electron 在生产构建时启用(注释),开发阶段通过浏览器环境运行。
package.json 依赖
react / react-dom
react-bootstrap / bootstrap
react-bootstrap-icons
react-toastify
axios
vite.config.js
@ -> src
开发服务器: 9000
构建输出: ../ui
性能考虑
- 日志自动滚动:通过 useEffect 在日志数组变化时滚动到底部,避免阻塞主线程。
- 文本域自适应:限制最大高度,减少重排开销。
- 分页渲染:历史记录页面按页渲染,避免一次性渲染大量节点。
- 事件清理:下载页面在卸载时移除日志监听,防止内存泄漏。
- 环境适配:electronService 在浏览器环境提供降级实现,避免直接依赖 Electron API 导致的性能问题。
故障排除指南
- 下载失败或无文件列表:
- 检查输入的草稿地址是否包含 draft_id 参数。
- 确认 getUrlJsonData 返回的 files 数组包含匹配的文件。
- 日志不更新:
- 确认 onFileOperationLog 已正确订阅,且在组件卸载时调用了 removeAllFileOperationLogListeners。
- 外部网页无法展示:
- 检查 checkUrlAccess 返回的 accessible 状态,若为 false,将显示默认静态广告。
- 路径选择无效:
- 浏览器环境不支持选择路径,需在 Electron 环境下使用 updateDraftPath。
结论
capcut-mate 前端采用清晰的容器-组件分层与服务抽象,实现了跨环境的一致体验。通过 electronService 统一封装 IPC 调用,页面组件专注于业务逻辑,通用组件保证了良好的复用性与可维护性。建议后续在保持现有架构稳定的基础上,逐步引入更完善的主题系统与国际化支持,持续优化日志与错误提示的可视化表现。
附录
-
开发与构建
- 开发模式:npm run dev 或 npm run dev:electron
- 生产构建:npm run build 或 npm run build:electron
-
目录约定
- 组件目录:components/
- 页面目录:pages/
- 服务目录:services/
- 样式目录:styles/
- 工具目录:utils/
-
接口文档: https://docs.jcaigc.cn