新增: Tauri 2.0 桌面版脚手架(B0)

- src-tauri/ 完整项目结构: Cargo.toml / build.rs / tauri.conf.json
- Rust 入口 lib.rs: ping IPC 命令验证双向通信
- 应用图标生成(SVG → ico/icns/png 多尺寸)
- Tauri 窗口配置: 1280×800, 最小 900×600, 可缩放
- package.json 新增 tauri / tauri:dev / tauri:build 脚本
- vite.config.ts 环境检测: Tauri 模式端口 5173, Web 模式 8080
- @tauri-apps/cli + @tauri-apps/api 依赖安装
- cargo check 编译通过,前端构建不受影响
- 桌面版与 Web 版共享同一套前端代码
This commit is contained in:
2026-07-12 15:11:35 +08:00
parent 056dc58318
commit b9a388b570
28 changed files with 4728 additions and 2 deletions

4383
src-tauri/Cargo.lock generated Normal file

File diff suppressed because it is too large Load Diff

19
src-tauri/Cargo.toml Normal file
View File

@@ -0,0 +1,19 @@
[package]
name = "u-ppt"
version = "1.0.0"
description = "在线演示工具 - 桌面版"
authors = ["u-ppt"]
edition = "2021"
rust-version = "1.77"
[lib]
name = "u_ppt_lib"
crate-type = ["staticlib", "cdylib", "rlib"]
[build-dependencies]
tauri-build = { version = "2", features = [] }
[dependencies]
tauri = { version = "2", features = [] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"

10
src-tauri/app-icon.svg Normal file
View File

@@ -0,0 +1,10 @@
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 512 512">
<rect width="512" height="512" rx="96" fill="#4f46e5"/>
<rect x="128" y="120" width="256" height="272" rx="16" fill="#fff"/>
<rect x="160" y="160" width="192" height="8" rx="4" fill="#4f46e5"/>
<rect x="160" y="184" width="160" height="6" rx="3" fill="#c7d2fe"/>
<rect x="160" y="204" width="176" height="6" rx="3" fill="#c7d2fe"/>
<rect x="160" y="224" width="128" height="6" rx="3" fill="#c7d2fe"/>
<circle cx="272" cy="312" r="40" fill="#06b6d4"/>
<rect x="150" y="300" width="80" height="56" rx="8" fill="#818cf8"/>
</svg>

After

Width:  |  Height:  |  Size: 631 B

3
src-tauri/build.rs Normal file
View File

@@ -0,0 +1,3 @@
fn main() {
tauri_build::build()
}

BIN
src-tauri/icons/128x128.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
src-tauri/icons/32x32.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 514 B

BIN
src-tauri/icons/64x64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 838 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 530 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 693 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 743 B

BIN
src-tauri/icons/icon.icns Normal file

Binary file not shown.

BIN
src-tauri/icons/icon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

BIN
src-tauri/icons/icon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

19
src-tauri/src/lib.rs Normal file
View File

@@ -0,0 +1,19 @@
/* =====================================================================
* lib.rs — Tauri 应用入口B0 脚手架)
*
* 当前阶段Vue 前端原样跑在 WebView 里Rust 端只有 ping 验证 IPC。
* 后续 B1-B5 逐步迁移核心逻辑到 Rust。
* ===================================================================== */
/// IPC 验证命令:前端 invoke('ping') → 返回 'pong'
#[tauri::command]
fn ping() -> String {
"pong".to_string()
}
pub fn run() {
tauri::Builder::default()
.invoke_handler(tauri::generate_handler![ping])
.run(tauri::generate_context!())
.expect("error while running tauri application");
}

6
src-tauri/src/main.rs Normal file
View File

@@ -0,0 +1,6 @@
// Prevents additional console window on Windows in release, DO NOT REMOVE!!
#![cfg_attr(not(debug_assertions), windows_subsystem = "windows")]
fn main() {
u_ppt_lib::run()
}

39
src-tauri/tauri.conf.json Normal file
View File

@@ -0,0 +1,39 @@
{
"$schema": "https://schema.tauri.app/config/2",
"productName": "u-ppt",
"version": "1.0.0",
"identifier": "com.uppt.desktop",
"build": {
"frontendDist": "../dist",
"devUrl": "http://localhost:5173",
"beforeDevCommand": "npm run dev",
"beforeBuildCommand": "npm run build"
},
"app": {
"windows": [
{
"title": "u-ppt · 在线演示工具",
"width": 1280,
"height": 800,
"minWidth": 900,
"minHeight": 600,
"resizable": true,
"fullscreen": false
}
],
"security": {
"csp": null
}
},
"bundle": {
"active": true,
"targets": "all",
"icon": [
"icons/32x32.png",
"icons/128x128.png",
"icons/128x128@2x.png",
"icons/icon.icns",
"icons/icon.ico"
]
}
}