diff --git a/IFLOW.md b/IFLOW.md new file mode 100644 index 0000000..0cf42ad --- /dev/null +++ b/IFLOW.md @@ -0,0 +1,94 @@ +# IFLOW 上下文文档 + +## 项目概述 + +这是一个基于 **Vite + Vue 3 + Electron** 的桌面应用程序开发模板,名为 **Vutron**。它提供了一个快速搭建跨平台桌面应用的环境,内置了热重载、TypeScript 支持、多语言支持、主题切换(暗黑/明亮)、全局状态管理(Pinia)等功能。 + +项目使用 `pnpm` 作为包管理器,主要技术栈包括: + +- 前端框架:Vue 3 (Composition API) +- 构建工具:Vite +- 桌面应用框架:Electron +- UI 库:Vuetify +- 状态管理:Pinia +- 国际化:vue-i18n +- 自动更新:electron-updater + +## 项目结构 + +``` +src/ +├── main/ # Electron 主进程代码 +│ ├── AutoUpdater.ts # 自动更新功能 +│ ├── IPCs.ts # IPC 通信处理 +│ ├── MainRunner.ts # 主窗口和错误窗口创建 +│ ├── index.dev.ts # 开发环境入口 +│ ├── index.ts # 生产环境入口 +│ ├── tray.ts # 系统托盘功能 +│ └── utils/ +│ └── Constants.ts # 常量定义 +├── preload/ # Electron 预加载脚本 +├── public/ # 静态资源 +└── renderer/ # 渲染进程(Vue 应用) + ├── App.vue # 根组件 + ├── main.ts # Vue 应用入口 + ├── components/ # 公共组件 + ├── screens/ # 页面组件 + ├── plugins/ # 插件配置(vuetify, i18n, pinia) + ├── router/ # 路由配置 + ├── store/ # Pinia 状态管理 + ├── locales/ # 语言包 + └── utils/ # 工具函数 + +buildAssets/ # 构建相关资源 +docs/ # 项目文档 +tests/ # 测试文件 +``` + +## 构建和运行 + +### 开发环境 + +1. 安装依赖: + + ```bash + pnpm install + ``` + +2. 启动开发服务器: + + ```bash + pnpm dev + ``` + + 这将启动 Vite 开发服务器,并在 Electron 中打开应用。 + +3. 构建项目: + + ```bash + pnpm build + ``` + + 构建应用到 `dist/` 目录,并使用 `electron-builder` 打包成可执行文件。 + +4. 运行测试: + ```bash + pnpm test + ``` + 运行 Playwright 自动化测试。 + +### 生产环境 + +构建后的应用位于 `release/` 目录下,根据不同平台生成对应的安装包。 + +## 开发约定 + +- 使用 TypeScript 进行开发,类型检查通过 `vue-tsc` 完成。 +- 代码风格遵循 ESLint 和 Prettier 规范。 +- 使用 Pinia 进行全局状态管理。 +- 国际化支持通过 vue-i18n 实现。 +- 主进程与渲染进程通过 IPC 进行通信。 +- 日志记录使用 `electron-log` 模块。 +- 自动更新功能通过 `electron-updater` 实现。 + +如果有修改代码,任务结束前需要先运行 `pnpm typecheck` 检查类型错误。不要直接运行 `pnpm dev` 或 `pnpm build`。 diff --git a/src/renderer/App.vue b/src/renderer/App.vue index cd1d162..75ab147 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -2,6 +2,7 @@ import { DefaultLayout } from '@/renderer/components/layout' import GlobalDialog from '@/renderer/components/GlobalDialog.vue' import UpdateDialog from '@/renderer/components/UpdateDialog.vue' +import GlobalSnackbar from '@/renderer/components/GlobalSnackbar.vue' import { onMounted } from 'vue' import { useAppStore } from '@/renderer/store/app' @@ -75,6 +76,7 @@ const checkForUpdates = async () => { +