前端界面设计
目录
简介
本文件面向 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