diff --git a/.github/desktop-tauri.jpeg b/.github/desktop-tauri.jpeg new file mode 100644 index 00000000..cf4d691e Binary files /dev/null and b/.github/desktop-tauri.jpeg differ diff --git a/README.md b/README.md index 1b56f635..0b99f3d0 100644 --- a/README.md +++ b/README.md @@ -30,12 +30,15 @@ --- ## 预览 - +Web端: [![明色主题][product-light-screenshot]](https://www.paopao.info) [![暗色主题][product-dark-screenshot]](https://www.paopao.info) -更多演示请前往[官网](https://www.paopao.info)体验(谢绝灌水) +更多演示请前往[官网](https://www.paopao.info)体验(谢绝灌水) + +桌面端: +![](.github/desktop-tauri.jpeg)

(back to top)

@@ -115,6 +118,29 @@ PaoPao主要由以下优秀的开源项目/工具构建 build完成后,可以在dist目录获取编译产出,配置nginx指向至该目录即可 +#### 桌面端 + +1. 进入前端目录 `web`,编辑 `.env` 文件中后端服务地址,下载依赖包 + + ```sh + cd ./web + vim .env + yarn + ``` + +2. 编译前端 + + ```sh + yarn build + ``` + +3. 构建桌面端 + ```sh + yarn tauri build + ``` + 桌面端是使用[Rust](https://www.rust-lang.org/) + [tauri](https://github.com/tauri-apps/tauri)编写 + 的,需要Rust编译环境,具体安装指南请参考[https://www.rust-lang.org/tools/install](https://www.rust-lang.org/tools/install). + ### 其他说明 建议后端服务使用 `supervisor` 守护进程,并通过 `nginx` 反向代理后,提供API给前端服务调用。 diff --git a/web/package.json b/web/package.json index 78bd809a..d93e4413 100644 --- a/web/package.json +++ b/web/package.json @@ -5,7 +5,8 @@ "scripts": { "dev": "vite", "build": "vite build", - "preview": "vite preview" + "preview": "vite preview", + "tauri": "tauri" }, "dependencies": { "@vicons/carbon": "^0.12.0", @@ -29,6 +30,7 @@ "vuex": "^4.0.2" }, "devDependencies": { + "@tauri-apps/cli": "^1.0.0-rc.7", "@types/node": "^17.0.35", "@types/qrcode": "^1.4.2", "@vitejs/plugin-vue": "^2.3.1", diff --git a/web/src-tauri/.gitignore b/web/src-tauri/.gitignore new file mode 100644 index 00000000..25279840 --- /dev/null +++ b/web/src-tauri/.gitignore @@ -0,0 +1,5 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ +WixTools +Cargo.lock diff --git a/web/src-tauri/Cargo.toml b/web/src-tauri/Cargo.toml new file mode 100644 index 00000000..f1f34a5d --- /dev/null +++ b/web/src-tauri/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "paopao" +version = "0.1.0" +description = "Paopao App" +authors = ["Rocboss"] +license = "MIT License" +repository = "https://github.com/rocboss/paopao-ce" +edition = "2021" +rust-version = "1.57" + +[build-dependencies] +tauri-build = { version = "1.0.0-rc.4", features = [] } + +[dependencies] +tauri = { version = "1.0.0-rc.4", features = ["api-all"] } + +[features] +# by default Tauri runs in production mode +# when `tauri dev` runs it is executed with `cargo run --no-default-features` if `devPath` is an URL +default = [ "custom-protocol" ] +# this feature is used used for production builds where `devPath` points to the filesystem +# DO NOT remove this +custom-protocol = [ "tauri/custom-protocol" ] diff --git a/web/src-tauri/build.rs b/web/src-tauri/build.rs new file mode 100644 index 00000000..d860e1e6 --- /dev/null +++ b/web/src-tauri/build.rs @@ -0,0 +1,3 @@ +fn main() { + tauri_build::build() +} diff --git a/web/src-tauri/icons/128x128.png b/web/src-tauri/icons/128x128.png new file mode 100644 index 00000000..8976d45d Binary files /dev/null and b/web/src-tauri/icons/128x128.png differ diff --git a/web/src-tauri/icons/128x128@2x.png b/web/src-tauri/icons/128x128@2x.png new file mode 100644 index 00000000..826a74fc Binary files /dev/null and b/web/src-tauri/icons/128x128@2x.png differ diff --git a/web/src-tauri/icons/32x32.png b/web/src-tauri/icons/32x32.png new file mode 100644 index 00000000..96e054be Binary files /dev/null and b/web/src-tauri/icons/32x32.png differ diff --git a/web/src-tauri/icons/icon.icns b/web/src-tauri/icons/icon.icns new file mode 100644 index 00000000..80eebbf3 Binary files /dev/null and b/web/src-tauri/icons/icon.icns differ diff --git a/web/src-tauri/icons/icon.ico b/web/src-tauri/icons/icon.ico new file mode 100644 index 00000000..92783607 Binary files /dev/null and b/web/src-tauri/icons/icon.ico differ diff --git a/web/src-tauri/src/main.rs b/web/src-tauri/src/main.rs new file mode 100644 index 00000000..6c858d61 --- /dev/null +++ b/web/src-tauri/src/main.rs @@ -0,0 +1,52 @@ +#![cfg_attr( + all(not(debug_assertions), target_os = "windows"), + windows_subsystem = "windows" +)] + +use tauri::api::shell; +use tauri::{CustomMenuItem, Manager, Menu, MenuEntry, MenuItem, Submenu}; + +fn main() { + let _ctx = tauri::generate_context!(); + + tauri::Builder::default() + .menu(Menu::with_items([ + #[cfg(target_os = "macos")] + MenuEntry::Submenu(Submenu::new( + &_ctx.package_info().name, + Menu::with_items([ + MenuItem::Separator.into(), + MenuItem::Services.into(), + MenuItem::Separator.into(), + MenuItem::Hide.into(), + MenuItem::HideOthers.into(), + MenuItem::ShowAll.into(), + MenuItem::Separator.into(), + MenuItem::Quit.into(), + ]), + )), + MenuEntry::Submenu(Submenu::new( + "Window", + Menu::with_items([MenuItem::Minimize.into(), MenuItem::Zoom.into()]), + )), + // You should always have a Help menu on macOS because it will automatically + // show a menu search field + MenuEntry::Submenu(Submenu::new( + "Help", + Menu::with_items([CustomMenuItem::new("Learn More", "Learn More").into()]), + )), + ])) + .on_menu_event(|event| { + let event_name = event.menu_item_id(); + event.window().emit("menu", event_name).unwrap(); + match event_name { + "Learn More" => { + let link = "https://github.com/rocboss/paopao-ce".to_string(); + shell::open(&event.window().shell_scope(), link, None).unwrap(); + } + _ => {} + } + }) + .run(tauri::generate_context!()) + .expect("error while running tauri application"); +} diff --git a/web/src-tauri/tauri.conf.json b/web/src-tauri/tauri.conf.json new file mode 100644 index 00000000..e28b7816 --- /dev/null +++ b/web/src-tauri/tauri.conf.json @@ -0,0 +1,74 @@ +{ + "package": { + "productName": "Paopao", + "version": "0.1.0" + }, + "build": { + "distDir": "../dist", + "beforeDevCommand": "", + "beforeBuildCommand": "", + "withGlobalTauri": true + }, + "tauri": { + "bundle": { + "active": true, + "targets": "all", + "identifier": "tauri.paopao.info", + "icon": [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" + ], + "resources": [], + "externalBin": [], + "copyright": "", + "category": "Social Networking", + "shortDescription": "", + "longDescription": "", + "deb": { + "depends": [] + }, + "macOS": { + "frameworks": [], + "minimumSystemVersion": "", + "exceptionDomain": "", + "signingIdentity": null, + "providerShortName": null, + "entitlements": null + }, + "windows": { + "certificateThumbprint": null, + "digestAlgorithm": "sha256", + "timestampUrl": "" + } + }, + "updater": { + "active": false + }, + "allowlist": { + "all": true, + "http": { + "all": true, + "request": true, + "scope": ["https://**", "http://**"] + }, + "notification": { + "all": true + } + }, + "windows": [ + { + "title": "泡泡 - 闲了,冒个泡", + "width": 1080, + "height": 800, + "resizable": true, + "fullscreen": false + } + ], + "security": { + "csp": null + } + } +} diff --git a/web/yarn.lock b/web/yarn.lock index cc2ab349..9a7dafa3 100644 --- a/web/yarn.lock +++ b/web/yarn.lock @@ -84,6 +84,66 @@ estree-walker "^2.0.1" picomatch "^2.2.2" +"@tauri-apps/cli-darwin-arm64@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-arm64/-/cli-darwin-arm64-1.0.0-rc.13.tgz#da73a770835ffd63a149d8becf50d3781e1c97dd" + integrity sha512-/EqOz7ASHOU98H58Ibbkg12pLG/P5oyQz8OlueaMYryajkJdmi+bHTkJ05DfbS0owAaHkRJ6f+NmoW/AnyqUbg== + +"@tauri-apps/cli-darwin-x64@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-darwin-x64/-/cli-darwin-x64-1.0.0-rc.13.tgz#e120cc623fddca3eb9d7fea0c2de057c7440a821" + integrity sha512-bvZ0MBKFD1kc4gdVPXgwUA6tHNKj0EmlQK0Xolk6PYP9vZZeNTP1vejevW0bh2IqxC8DuqUArbG9USXwu+LFbQ== + +"@tauri-apps/cli-linux-arm-gnueabihf@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm-gnueabihf/-/cli-linux-arm-gnueabihf-1.0.0-rc.13.tgz#3052a59788ae57ad690d4bc09bf0756bc8808116" + integrity sha512-yODvfUkNvtYYdDTOJSDXMx9fpoEB66I2PTrYx1UKonKTEaLrQDcpw2exD/S9LPQzCYgyTuJ/kHRhG1uLdO/UUQ== + +"@tauri-apps/cli-linux-arm64-gnu@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-gnu/-/cli-linux-arm64-gnu-1.0.0-rc.13.tgz#9c4094473890c165a4fb22132229ed8212559f79" + integrity sha512-kVDJHERD8CmTeMcd2VTnD/nVCHdnNAK8a6ur3l0KTR1iF8A1AtN/sPahMQjK4f7Ar00UDjIzTw74liqakOeiZg== + +"@tauri-apps/cli-linux-arm64-musl@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-arm64-musl/-/cli-linux-arm64-musl-1.0.0-rc.13.tgz#16270a6d3b9289993b9b4d837f63dba4991d9be5" + integrity sha512-PFHz+0xKCGMqqn2TmbOSPvTRS61xJQV7srwTZjs5sHBvK536mdBnF/6V6BPEvTn5LzfRnxMu2A5X5GFkYnrZ7w== + +"@tauri-apps/cli-linux-x64-gnu@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-gnu/-/cli-linux-x64-gnu-1.0.0-rc.13.tgz#d2f5031f9597300a5814dc8b4d3c59e8dc25a871" + integrity sha512-EWhTOUNHaaMM7mxp/ue+Osnzn6/o9/7qVle3MSnNI9pGQzumc/dOtBs+sWS/NPXdVEiWKET2mFMK120KJlYcQQ== + +"@tauri-apps/cli-linux-x64-musl@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-linux-x64-musl/-/cli-linux-x64-musl-1.0.0-rc.13.tgz#9d8b02de7bd5af71c5d3d5be96ec88f3f29c8fbd" + integrity sha512-i8lsKw5iAGTAhqSQHeUCISLjhRXNrloHPoFCaSZtU0/GAPGbW/qST7u593h7cKWxRooeMwzo74ij4GhgmddClQ== + +"@tauri-apps/cli-win32-ia32-msvc@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-ia32-msvc/-/cli-win32-ia32-msvc-1.0.0-rc.13.tgz#1fcf6bed5a89af2cb30a2fe2e823ca486ded61b7" + integrity sha512-rJxSqWIQXeeT2oLzSiQyqZPgDKSGH5sK7MUr8cOCBitqy3T0COlOMX4O7hhqF3cJ/5s0aX+MuNZBzF/D0QUcxA== + +"@tauri-apps/cli-win32-x64-msvc@1.0.0-rc.13": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli-win32-x64-msvc/-/cli-win32-x64-msvc-1.0.0-rc.13.tgz#ed2feaf3b3a120c1460cae8941443563d14840bb" + integrity sha512-ifOTrJVQoBAQUYX+EVnE4XJ/FCMHs4FQ8qxGNszqkSxrU24mmT7La6tzj77352q80KnxRa05xjjLL6GGhmzXRg== + +"@tauri-apps/cli@^1.0.0-rc.7": + version "1.0.0-rc.13" + resolved "https://registry.yarnpkg.com/@tauri-apps/cli/-/cli-1.0.0-rc.13.tgz#e58127ebe24c6cc81c3258229219056199421500" + integrity sha512-q7i45Mi1SMv5XllNoX09QS4Q/fYVFwD6piVYmqMSrKY/T5RwedQhytiVH60TxC2xk6o0akVHa7BdYiyJvXNR8A== + optionalDependencies: + "@tauri-apps/cli-darwin-arm64" "1.0.0-rc.13" + "@tauri-apps/cli-darwin-x64" "1.0.0-rc.13" + "@tauri-apps/cli-linux-arm-gnueabihf" "1.0.0-rc.13" + "@tauri-apps/cli-linux-arm64-gnu" "1.0.0-rc.13" + "@tauri-apps/cli-linux-arm64-musl" "1.0.0-rc.13" + "@tauri-apps/cli-linux-x64-gnu" "1.0.0-rc.13" + "@tauri-apps/cli-linux-x64-musl" "1.0.0-rc.13" + "@tauri-apps/cli-win32-ia32-msvc" "1.0.0-rc.13" + "@tauri-apps/cli-win32-x64-msvc" "1.0.0-rc.13" + "@types/jest@^27.0.1": version "27.4.1" resolved "https://registry.npmmirror.com/@types/jest/-/jest-27.4.1.tgz"