46 lines
1.4 KiB
Plaintext
46 lines
1.4 KiB
Plaintext
---
|
||
description: Tauri 2 桌面壳、窗口与单例规范
|
||
globs: src-tauri/**/*
|
||
alwaysApply: false
|
||
---
|
||
|
||
# Tauri 桌面规范
|
||
|
||
## 窗口配置(`tauri.conf.json`)
|
||
|
||
- 主窗口 `label`: `"main"`(单例回调中通过此 label 获取窗口)
|
||
- `decorations: false` — 无边框;`resizable: true`
|
||
- `identifier`: `com.aiclient.desktop`(避免以 `.app` 结尾)
|
||
|
||
## 单例运行
|
||
|
||
- 插件:`tauri-plugin-single-instance`
|
||
- 二次启动时:对 `main` 窗口 `unminimize` → `show` → `set_focus`,**不**新建窗口
|
||
- 注册于 `src-tauri/src/lib.rs`,需 `use tauri::Manager`
|
||
|
||
```rust
|
||
.plugin(tauri_plugin_single_instance::init(|app, _args, _cwd| {
|
||
if let Some(window) = app.get_webview_window("main") {
|
||
let _ = window.unminimize();
|
||
let _ = window.show();
|
||
let _ = window.set_focus();
|
||
}
|
||
}))
|
||
```
|
||
|
||
## 权限(`capabilities/default.json`)
|
||
|
||
- 拖动窗口需:`core:window:allow-start-dragging`
|
||
- 前端标题栏元素使用 `data-tauri-drag-region`(在 `AppTitlebar.vue`)
|
||
|
||
## Rust 约定
|
||
|
||
- 入口逻辑在 `src/lib.rs`;`main.rs` 仅调用 `tauri_app_lib::run()`
|
||
- 新增 Tauri 命令:在 `lib.rs` 用 `#[tauri::command]` 定义,并在 `invoke_handler` 注册
|
||
- 前端调用:`import { invoke } from "@tauri-apps/api/core"`
|
||
|
||
## 开发注意
|
||
|
||
- Vite 固定端口 `1420`(见 `vite.config.js`),与 `tauri.conf.json` 的 `devUrl` 一致
|
||
- 修改 capabilities 或插件后需重新 `tauri dev` / `tauri build`
|