- 本项目是
Tauri 2 + Vue 3 + TypeScript桌面应用模板,前端负责 UI 与交互,Rust 负责系统能力与命令实现。 - 后续功能(包括“桌面窗口置顶管理工具”)必须在现有模板架构内扩展,不得绕开分层。
- 前端:Vue 3、Vue Router 4、Pinia、PrimeVue、UnoCSS、TypeScript。
- 桌面端:Tauri 2、Rust、
@tauri-apps/api。 - 状态持久化:
pinia-plugin-persistedstate。
src/main.ts:前端启动入口,挂载 router/pinia/PrimeVue 主题。src/App.vue:应用壳,仅承载顶层RouterView。src/router/:路由定义与页面组织(当前采用 layout + children 路由)。src/layouts/:页面骨架布局(如顶部栏、内容容器)。src/pages/:页面级组件,一个文件对应一个路由页面。src/common/components/:可复用业务/界面组件。src/common/composables/:组合式逻辑(useXxx),封装可复用交互与状态衍生。src/common/assets/:静态资源。src/pinia/stores/:Pinia store 模块。src/pinia/index.ts:Pinia 实例与插件注册、store 对外导出入口。src-tauri/src/main.rs:Rust 可执行入口,仅调用run()。src-tauri/src/lib.rs:Tauri Builder、plugin 注册、invoke_handler注册入口。src-tauri/capabilities/:Tauri 能力权限声明。
- Vue 层只负责:页面展示、交互编排、状态管理。
- Rust 层只负责:系统 API 调用、平台能力封装、命令实现。
- 前端调用系统能力必须经由 Tauri command(
invoke)或官方 API 封装,不允许把系统调用逻辑散落在页面组件中。 - 所有跨层交互都要有清晰的数据结构(建议显式 TypeScript 类型 + Rust
serde序列化结构)。
- 通用规则:使用英文命名,避免拼音/中文缩写;名称表达业务语义。
- Vue SFC 文件:
- 页面文件放
src/pages/,可使用简洁页面名;新增页面建议采用语义化 PascalCase(如WindowListPage.vue)。 - 通用组件采用 PascalCase(如
TopNav.vue)。
- 页面文件放
- composables:统一
useXxx.ts。 - Pinia store:
src/pinia/stores/<domain>.ts,导出useXxxStore。 - Rust command 函数:使用 snake_case;对外命令名与前端调用名保持一致。
- 页面级逻辑优先放在
src/pages/*,不要把整页业务写进layouts。 - 布局只处理“结构壳子”,不承载具体页面业务。
- 可复用 UI/业务片段抽到
src/common/components/。 - 复用交互逻辑(滚动、主题切换等)抽到
src/common/composables/,页面中只做组装。 - 跨页面共享状态进入 Pinia;仅页面私有的瞬时状态保留在组件内。
- store 不直接依赖具体页面组件,保持可复用与可测试。
- 统一使用 Pinia 管理全局/跨页面状态。
- 需要持久化的状态通过
pinia-plugin-persistedstate在 store 内声明。 localStoragekey 应稳定、可读、与 store 域一致(如当前theme)。- 避免重复状态:同一事实来源只在一个 store 中维护。
- 当前项目以
src-tauri/src/lib.rs作为 command 注册中心(invoke_handler)。 - command 数量较少时可直接定义在
lib.rs;数量增长后按领域拆分为src-tauri/src/commands/*.rs,并在lib.rs统一注册。 - 每个 command 只做一件事:输入校验 + 调用底层能力 + 返回结构化结果。
- command 返回值应稳定(成功/失败语义清晰),错误信息避免直接暴露底层实现细节。
- 新增系统能力时,必须同步检查/更新
src-tauri/capabilities/*.json权限。
- 优先使用已配置别名:
@、@pages、@layouts、@components、@composables、@assets、@pinia等。 - 保持导入路径风格一致,不在同一模块混用大量相对路径与别名路径。
- 禁止在 Vue 页面/组件中直接实现系统级能力(窗口枚举、置顶控制、进程访问等)。
- 禁止绕过 store 直接在多个页面重复维护同一份全局状态。
- 禁止将一次性需求或临时调试代码固化到长期模块(提交前清理临时代码)。
- 禁止进行与当前任务无关的大规模重构或目录迁移。
- 只改与需求直接相关的文件,优先复用现有模块与模式。
- 先遵循现有结构,再考虑抽象;避免“为未来”过度设计。
- 新增文件时保持与现有目录职责一致,避免跨层放置。
- 不在一次改动中同时引入架构调整、样式重写、业务重写等多类变化。
- 修改 Tauri command 时,前后端调用链(类型、命名、权限)必须一次性对齐。
- 前端构建与类型检查可通过:
pnpm build。 - Rust/Tauri 构建可通过:
pnpm desktop:build(或开发态pnpm desktop:dev)。 - 新增路由、store、command 均有对应入口注册(router / pinia 导出 / invoke_handler)。