♻️ use opener instead of window.open/shell

This commit is contained in:
目棃
2025-03-18 14:52:00 +08:00
parent 765c860473
commit 01dc6a6ea7
17 changed files with 213 additions and 217 deletions

View File

@@ -3,7 +3,7 @@
"version": "0.7.1",
"description": "Game Tool for GenshinImpact player",
"private": true,
"packageManager": "pnpm@10.6.3",
"packageManager": "pnpm@10.6.4",
"type": "module",
"scripts": {
"build": "tauri build",
@@ -76,6 +76,7 @@
"@tauri-apps/plugin-fs": "^2.2.0",
"@tauri-apps/plugin-http": "^2.4.2",
"@tauri-apps/plugin-log": "^2.3.1",
"@tauri-apps/plugin-opener": "^2.2.6",
"@tauri-apps/plugin-os": "^2.2.1",
"@tauri-apps/plugin-process": "^2.2.0",
"@tauri-apps/plugin-shell": "^2.2.0",
@@ -91,7 +92,7 @@
"pinia": "^3.0.1",
"pinia-plugin-persistedstate": "^4.2.0",
"qrcode.vue": "^3.6.0",
"sass": "^1.85.1",
"sass": "^1.86.0",
"sass-loader": "^16.0.5",
"uuid": "^11.1.0",
"vue": "^3.5.13",
@@ -112,7 +113,7 @@
"@types/node": "^22.13.10",
"@types/uuid": "^10.0.0",
"@typescript-eslint/parser": "^8.26.1",
"@vitejs/plugin-vue": "^5.2.2",
"@vitejs/plugin-vue": "^5.2.3",
"concurrently": "^9.1.2",
"eslint": "^9.22.0",
"eslint-plugin-import": "^2.31.0",

278
pnpm-lock.yaml generated
View File

@@ -29,6 +29,9 @@ importers:
'@tauri-apps/plugin-log':
specifier: ^2.3.1
version: 2.3.1
'@tauri-apps/plugin-opener':
specifier: ~2.2.6
version: 2.2.6
'@tauri-apps/plugin-os':
specifier: ^2.2.1
version: 2.2.1
@@ -75,11 +78,11 @@ importers:
specifier: ^3.6.0
version: 3.6.0(vue@3.5.13(typescript@5.8.2))
sass:
specifier: ^1.85.1
version: 1.85.1
specifier: ^1.86.0
version: 1.86.0
sass-loader:
specifier: ^16.0.5
version: 16.0.5(@rspack/core@1.2.7(@swc/helpers@0.5.15))(sass@1.85.1)(webpack@5.98.0)
version: 16.0.5(@rspack/core@1.2.7(@swc/helpers@0.5.15))(sass@1.86.0)(webpack@5.98.0)
uuid:
specifier: ^11.1.0
version: 11.1.0
@@ -133,8 +136,8 @@ importers:
specifier: ^8.26.1
version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
'@vitejs/plugin-vue':
specifier: ^5.2.2
version: 5.2.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))
specifier: ^5.2.3
version: 5.2.3(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))
concurrently:
specifier: ^9.1.2
version: 9.1.2
@@ -212,13 +215,13 @@ importers:
version: 8.26.1(eslint@9.22.0(jiti@2.4.2))(typescript@5.8.2)
vite:
specifier: ^6.2.2
version: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
version: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite-plugin-vue-devtools:
specifier: ^7.7.2
version: 7.7.2(rollup@4.35.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))
version: 7.7.2(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))
vite-plugin-vuetify:
specifier: ^2.1.0
version: 2.1.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))(vuetify@3.7.16)
version: 2.1.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))(vuetify@3.7.16)
vue-eslint-parser:
specifier: ^10.1.1
version: 10.1.1(eslint@9.22.0(jiti@2.4.2))
@@ -814,108 +817,108 @@ packages:
rollup:
optional: true
'@rollup/rollup-android-arm-eabi@4.35.0':
resolution: {integrity: sha512-uYQ2WfPaqz5QtVgMxfN6NpLD+no0MYHDBywl7itPYd3K5TjjSghNKmX8ic9S8NU8w81NVhJv/XojcHptRly7qQ==}
'@rollup/rollup-android-arm-eabi@4.36.0':
resolution: {integrity: sha512-jgrXjjcEwN6XpZXL0HUeOVGfjXhPyxAbbhD0BlXUB+abTOpbPiN5Wb3kOT7yb+uEtATNYF5x5gIfwutmuBA26w==}
cpu: [arm]
os: [android]
'@rollup/rollup-android-arm64@4.35.0':
resolution: {integrity: sha512-FtKddj9XZudurLhdJnBl9fl6BwCJ3ky8riCXjEw3/UIbjmIY58ppWwPEvU3fNu+W7FUsAsB1CdH+7EQE6CXAPA==}
'@rollup/rollup-android-arm64@4.36.0':
resolution: {integrity: sha512-NyfuLvdPdNUfUNeYKUwPwKsE5SXa2J6bCt2LdB/N+AxShnkpiczi3tcLJrm5mA+eqpy0HmaIY9F6XCa32N5yzg==}
cpu: [arm64]
os: [android]
'@rollup/rollup-darwin-arm64@4.35.0':
resolution: {integrity: sha512-Uk+GjOJR6CY844/q6r5DR/6lkPFOw0hjfOIzVx22THJXMxktXG6CbejseJFznU8vHcEBLpiXKY3/6xc+cBm65Q==}
'@rollup/rollup-darwin-arm64@4.36.0':
resolution: {integrity: sha512-JQ1Jk5G4bGrD4pWJQzWsD8I1n1mgPXq33+/vP4sk8j/z/C2siRuxZtaUA7yMTf71TCZTZl/4e1bfzwUmFb3+rw==}
cpu: [arm64]
os: [darwin]
'@rollup/rollup-darwin-x64@4.35.0':
resolution: {integrity: sha512-3IrHjfAS6Vkp+5bISNQnPogRAW5GAV1n+bNCrDwXmfMHbPl5EhTmWtfmwlJxFRUCBZ+tZ/OxDyU08aF6NI/N5Q==}
'@rollup/rollup-darwin-x64@4.36.0':
resolution: {integrity: sha512-6c6wMZa1lrtiRsbDziCmjE53YbTkxMYhhnWnSW8R/yqsM7a6mSJ3uAVT0t8Y/DGt7gxUWYuFM4bwWk9XCJrFKA==}
cpu: [x64]
os: [darwin]
'@rollup/rollup-freebsd-arm64@4.35.0':
resolution: {integrity: sha512-sxjoD/6F9cDLSELuLNnY0fOrM9WA0KrM0vWm57XhrIMf5FGiN8D0l7fn+bpUeBSU7dCgPV2oX4zHAsAXyHFGcQ==}
'@rollup/rollup-freebsd-arm64@4.36.0':
resolution: {integrity: sha512-KXVsijKeJXOl8QzXTsA+sHVDsFOmMCdBRgFmBb+mfEb/7geR7+C8ypAml4fquUt14ZyVXaw2o1FWhqAfOvA4sg==}
cpu: [arm64]
os: [freebsd]
'@rollup/rollup-freebsd-x64@4.35.0':
resolution: {integrity: sha512-2mpHCeRuD1u/2kruUiHSsnjWtHjqVbzhBkNVQ1aVD63CcexKVcQGwJ2g5VphOd84GvxfSvnnlEyBtQCE5hxVVw==}
'@rollup/rollup-freebsd-x64@4.36.0':
resolution: {integrity: sha512-dVeWq1ebbvByI+ndz4IJcD4a09RJgRYmLccwlQ8bPd4olz3Y213uf1iwvc7ZaxNn2ab7bjc08PrtBgMu6nb4pQ==}
cpu: [x64]
os: [freebsd]
'@rollup/rollup-linux-arm-gnueabihf@4.35.0':
resolution: {integrity: sha512-mrA0v3QMy6ZSvEuLs0dMxcO2LnaCONs1Z73GUDBHWbY8tFFocM6yl7YyMu7rz4zS81NDSqhrUuolyZXGi8TEqg==}
'@rollup/rollup-linux-arm-gnueabihf@4.36.0':
resolution: {integrity: sha512-bvXVU42mOVcF4le6XSjscdXjqx8okv4n5vmwgzcmtvFdifQ5U4dXFYaCB87namDRKlUL9ybVtLQ9ztnawaSzvg==}
cpu: [arm]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm-musleabihf@4.35.0':
resolution: {integrity: sha512-DnYhhzcvTAKNexIql8pFajr0PiDGrIsBYPRvCKlA5ixSS3uwo/CWNZxB09jhIapEIg945KOzcYEAGGSmTSpk7A==}
'@rollup/rollup-linux-arm-musleabihf@4.36.0':
resolution: {integrity: sha512-JFIQrDJYrxOnyDQGYkqnNBtjDwTgbasdbUiQvcU8JmGDfValfH1lNpng+4FWlhaVIR4KPkeddYjsVVbmJYvDcg==}
cpu: [arm]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-arm64-gnu@4.35.0':
resolution: {integrity: sha512-uagpnH2M2g2b5iLsCTZ35CL1FgyuzzJQ8L9VtlJ+FckBXroTwNOaD0z0/UF+k5K3aNQjbm8LIVpxykUOQt1m/A==}
'@rollup/rollup-linux-arm64-gnu@4.36.0':
resolution: {integrity: sha512-KqjYVh3oM1bj//5X7k79PSCZ6CvaVzb7Qs7VMWS+SlWB5M8p3FqufLP9VNp4CazJ0CsPDLwVD9r3vX7Ci4J56A==}
cpu: [arm64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-arm64-musl@4.35.0':
resolution: {integrity: sha512-XQxVOCd6VJeHQA/7YcqyV0/88N6ysSVzRjJ9I9UA/xXpEsjvAgDTgH3wQYz5bmr7SPtVK2TsP2fQ2N9L4ukoUg==}
'@rollup/rollup-linux-arm64-musl@4.36.0':
resolution: {integrity: sha512-QiGnhScND+mAAtfHqeT+cB1S9yFnNQ/EwCg5yE3MzoaZZnIV0RV9O5alJAoJKX/sBONVKeZdMfO8QSaWEygMhw==}
cpu: [arm64]
os: [linux]
libc: [musl]
'@rollup/rollup-linux-loongarch64-gnu@4.35.0':
resolution: {integrity: sha512-5pMT5PzfgwcXEwOaSrqVsz/LvjDZt+vQ8RT/70yhPU06PTuq8WaHhfT1LW+cdD7mW6i/J5/XIkX/1tCAkh1W6g==}
'@rollup/rollup-linux-loongarch64-gnu@4.36.0':
resolution: {integrity: sha512-1ZPyEDWF8phd4FQtTzMh8FQwqzvIjLsl6/84gzUxnMNFBtExBtpL51H67mV9xipuxl1AEAerRBgBwFNpkw8+Lg==}
cpu: [loong64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-powerpc64le-gnu@4.35.0':
resolution: {integrity: sha512-c+zkcvbhbXF98f4CtEIP1EBA/lCic5xB0lToneZYvMeKu5Kamq3O8gqrxiYYLzlZH6E3Aq+TSW86E4ay8iD8EA==}
'@rollup/rollup-linux-powerpc64le-gnu@4.36.0':
resolution: {integrity: sha512-VMPMEIUpPFKpPI9GZMhJrtu8rxnp6mJR3ZzQPykq4xc2GmdHj3Q4cA+7avMyegXy4n1v+Qynr9fR88BmyO74tg==}
cpu: [ppc64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-riscv64-gnu@4.35.0':
resolution: {integrity: sha512-s91fuAHdOwH/Tad2tzTtPX7UZyytHIRR6V4+2IGlV0Cej5rkG0R61SX4l4y9sh0JBibMiploZx3oHKPnQBKe4g==}
'@rollup/rollup-linux-riscv64-gnu@4.36.0':
resolution: {integrity: sha512-ttE6ayb/kHwNRJGYLpuAvB7SMtOeQnVXEIpMtAvx3kepFQeowVED0n1K9nAdraHUPJ5hydEMxBpIR7o4nrm8uA==}
cpu: [riscv64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-s390x-gnu@4.35.0':
resolution: {integrity: sha512-hQRkPQPLYJZYGP+Hj4fR9dDBMIM7zrzJDWFEMPdTnTy95Ljnv0/4w/ixFw3pTBMEuuEuoqtBINYND4M7ujcuQw==}
'@rollup/rollup-linux-s390x-gnu@4.36.0':
resolution: {integrity: sha512-4a5gf2jpS0AIe7uBjxDeUMNcFmaRTbNv7NxI5xOCs4lhzsVyGR/0qBXduPnoWf6dGC365saTiwag8hP1imTgag==}
cpu: [s390x]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-gnu@4.35.0':
resolution: {integrity: sha512-Pim1T8rXOri+0HmV4CdKSGrqcBWX0d1HoPnQ0uw0bdp1aP5SdQVNBy8LjYncvnLgu3fnnCt17xjWGd4cqh8/hA==}
'@rollup/rollup-linux-x64-gnu@4.36.0':
resolution: {integrity: sha512-5KtoW8UWmwFKQ96aQL3LlRXX16IMwyzMq/jSSVIIyAANiE1doaQsx/KRyhAvpHlPjPiSU/AYX/8m+lQ9VToxFQ==}
cpu: [x64]
os: [linux]
libc: [glibc]
'@rollup/rollup-linux-x64-musl@4.35.0':
resolution: {integrity: sha512-QysqXzYiDvQWfUiTm8XmJNO2zm9yC9P/2Gkrwg2dH9cxotQzunBHYr6jk4SujCTqnfGxduOmQcI7c2ryuW8XVg==}
'@rollup/rollup-linux-x64-musl@4.36.0':
resolution: {integrity: sha512-sycrYZPrv2ag4OCvaN5js+f01eoZ2U+RmT5as8vhxiFz+kxwlHrsxOwKPSA8WyS+Wc6Epid9QeI/IkQ9NkgYyQ==}
cpu: [x64]
os: [linux]
libc: [musl]
'@rollup/rollup-win32-arm64-msvc@4.35.0':
resolution: {integrity: sha512-OUOlGqPkVJCdJETKOCEf1mw848ZyJ5w50/rZ/3IBQVdLfR5jk/6Sr5m3iO2tdPgwo0x7VcncYuOvMhBWZq8ayg==}
'@rollup/rollup-win32-arm64-msvc@4.36.0':
resolution: {integrity: sha512-qbqt4N7tokFwwSVlWDsjfoHgviS3n/vZ8LK0h1uLG9TYIRuUTJC88E1xb3LM2iqZ/WTqNQjYrtmtGmrmmawB6A==}
cpu: [arm64]
os: [win32]
'@rollup/rollup-win32-ia32-msvc@4.35.0':
resolution: {integrity: sha512-2/lsgejMrtwQe44glq7AFFHLfJBPafpsTa6JvP2NGef/ifOa4KBoglVf7AKN7EV9o32evBPRqfg96fEHzWo5kw==}
'@rollup/rollup-win32-ia32-msvc@4.36.0':
resolution: {integrity: sha512-t+RY0JuRamIocMuQcfwYSOkmdX9dtkr1PbhKW42AMvaDQa+jOdpUYysroTF/nuPpAaQMWp7ye+ndlmmthieJrQ==}
cpu: [ia32]
os: [win32]
'@rollup/rollup-win32-x64-msvc@4.35.0':
resolution: {integrity: sha512-PIQeY5XDkrOysbQblSW7v3l1MDZzkTEzAfTPkj5VAu3FW8fS4ynyLg2sINp0fp3SjZ8xkRYpLqoKcYqAkhU1dw==}
'@rollup/rollup-win32-x64-msvc@4.36.0':
resolution: {integrity: sha512-aRXd7tRZkWLqGbChgcMMDEHjOKudo1kChb1Jt1IfR8cY/KIpgNviLeJy5FUb9IpSuQj8dU2fAYNMPW/hLKOSTw==}
cpu: [x64]
os: [win32]
@@ -1091,6 +1094,9 @@ packages:
'@tauri-apps/plugin-log@2.3.1':
resolution: {integrity: sha512-nnKGHENWt7teqvUlIKxd6bp2wCUrrLvCvajN6CWbyrHBNKPi/pyKELzD511siEMDEdndbiZ/GEhiK0xBtZopRg==}
'@tauri-apps/plugin-opener@2.2.6':
resolution: {integrity: sha512-bSdkuP71ZQRepPOn8BOEdBKYJQvl6+jb160QtJX/i2H9BF6ZySY/kYljh76N2Ne5fJMQRge7rlKoStYQY5Jq1w==}
'@tauri-apps/plugin-os@2.2.1':
resolution: {integrity: sha512-cNYpNri2CCc6BaNeB6G/mOtLvg8dFyFQyCUdf2y0K8PIAKGEWdEcu8DECkydU2B+oj4OJihDPD2de5K6cbVl9A==}
@@ -1186,8 +1192,8 @@ packages:
resolution: {integrity: sha512-AjOC3zfnxd6S4Eiy3jwktJPclqhFHNyd8L6Gycf9WUPoKZpgM5PjkxY1X7uSy61xVpiJDhhk7XT2NVsN3ALTWg==}
engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
'@vitejs/plugin-vue@5.2.2':
resolution: {integrity: sha512-IY0aPonWZI2huxrWjoSBUQX14GThitmr1sc2OUJymcgnY5RlUI7HoXGAnFEoVNRsck/kS6inGvxCN6CoHu86yQ==}
'@vitejs/plugin-vue@5.2.3':
resolution: {integrity: sha512-IYSLEQj4LgZZuoVpdSUCw3dIynTWQgPlaRP6iAvMle4My0HdYwr5g5wQAfwOeHQBmYwEkqF70nRpSilr6PoUDg==}
engines: {node: ^18.0.0 || >=20.0.0}
peerDependencies:
vite: ^5.0.0 || ^6.0.0
@@ -1501,8 +1507,8 @@ packages:
resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
engines: {node: '>=6'}
caniuse-lite@1.0.30001705:
resolution: {integrity: sha512-S0uyMMiYvA7CxNgomYBwwwPUnWzFD83f3B1ce5jHUfHTH//QL6hHsreI8RVC5606R4ssqravelYO5TU6t8sEyg==}
caniuse-lite@1.0.30001706:
resolution: {integrity: sha512-3ZczoTApMAZwPKYWmwVbQMFpXBDds3/0VciVoUwPUbldlYyVLmRVuRs/PcUZtHpbLRpzzDvrvnFuREsGt6lUug==}
chalk@4.1.2:
resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
@@ -1580,8 +1586,8 @@ packages:
confbox@0.2.1:
resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==}
consola@3.4.0:
resolution: {integrity: sha512-EiPU8G6dQG0GFHNR8ljnZFki/8a+cQwEQ+7wpxdChl02Q8HXlwEZWD5lqAF8vC2sEC3Tehr8hy7vErz88LHyUA==}
consola@3.4.1:
resolution: {integrity: sha512-zaUUWockhqxFf4bSXS+kTJwxWvAyMuKtShx0BWcGrMEUqbETcBCT91iQs9pECNx7yz8VH4VeWW/1KAbhE8kiww==}
engines: {node: ^14.18.0 || >=16.10.0}
convert-source-map@2.0.0:
@@ -1727,8 +1733,8 @@ packages:
echarts@5.6.0:
resolution: {integrity: sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==}
electron-to-chromium@1.5.119:
resolution: {integrity: sha512-Ku4NMzUjz3e3Vweh7PhApPrZSS4fyiCIbcIrG9eKrriYVLmbMepETR/v6SU7xPm98QTqMSYiCwfO89QNjXLkbQ==}
electron-to-chromium@1.5.120:
resolution: {integrity: sha512-oTUp3gfX1gZI+xfD2djr2rzQdHCwHzPQrrK0CD7WpTdF0nPdQ/INcRVjWgLdCT4a9W3jFObR9DAfsuyFQnI8CQ==}
emoji-regex@10.4.0:
resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
@@ -2942,8 +2948,8 @@ packages:
rfdc@1.4.1:
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
rollup@4.35.0:
resolution: {integrity: sha512-kg6oI4g+vc41vePJyO6dHt/yl0Rz3Thv0kJeVQ3D1kS3E5XSuKbPc29G4IpT/Kv1KQwgHVcN+HtyS+HYLNSvQg==}
rollup@4.36.0:
resolution: {integrity: sha512-zwATAXNQxUcd40zgtQG0ZafcRK4g004WtEl7kbuhTWPvf07PsfohXl39jVUvPF7jvNAIkKPQ2XrsDlWuxBd++Q==}
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
hasBin: true
@@ -2993,8 +2999,8 @@ packages:
webpack:
optional: true
sass@1.85.1:
resolution: {integrity: sha512-Uk8WpxM5v+0cMR0XjX9KfRIacmSG86RH4DCCZjLU2rFh5tyutt9siAXJ7G+YfxQ99Q6wrRMbMlVl6KqUms71ag==}
sass@1.86.0:
resolution: {integrity: sha512-zV8vGUld/+mP4KbMLJMX7TyGCuUp7hnkOScgCMsWuHtns8CWBoz+vmEhoGMXsaJrbUP8gj+F1dLvVe79sK8UdA==}
engines: {node: '>=14.0.0'}
hasBin: true
@@ -4100,7 +4106,7 @@ snapshots:
'@nuxt/kit@3.16.0':
dependencies:
c12: 3.0.2
consola: 3.4.0
consola: 3.4.1
defu: 6.1.4
destr: 2.0.3
errx: 0.1.0
@@ -4213,69 +4219,69 @@ snapshots:
'@polka/url@1.0.0-next.28': {}
'@rollup/pluginutils@5.1.4(rollup@4.35.0)':
'@rollup/pluginutils@5.1.4(rollup@4.36.0)':
dependencies:
'@types/estree': 1.0.6
estree-walker: 2.0.2
picomatch: 4.0.2
optionalDependencies:
rollup: 4.35.0
rollup: 4.36.0
'@rollup/rollup-android-arm-eabi@4.35.0':
'@rollup/rollup-android-arm-eabi@4.36.0':
optional: true
'@rollup/rollup-android-arm64@4.35.0':
'@rollup/rollup-android-arm64@4.36.0':
optional: true
'@rollup/rollup-darwin-arm64@4.35.0':
'@rollup/rollup-darwin-arm64@4.36.0':
optional: true
'@rollup/rollup-darwin-x64@4.35.0':
'@rollup/rollup-darwin-x64@4.36.0':
optional: true
'@rollup/rollup-freebsd-arm64@4.35.0':
'@rollup/rollup-freebsd-arm64@4.36.0':
optional: true
'@rollup/rollup-freebsd-x64@4.35.0':
'@rollup/rollup-freebsd-x64@4.36.0':
optional: true
'@rollup/rollup-linux-arm-gnueabihf@4.35.0':
'@rollup/rollup-linux-arm-gnueabihf@4.36.0':
optional: true
'@rollup/rollup-linux-arm-musleabihf@4.35.0':
'@rollup/rollup-linux-arm-musleabihf@4.36.0':
optional: true
'@rollup/rollup-linux-arm64-gnu@4.35.0':
'@rollup/rollup-linux-arm64-gnu@4.36.0':
optional: true
'@rollup/rollup-linux-arm64-musl@4.35.0':
'@rollup/rollup-linux-arm64-musl@4.36.0':
optional: true
'@rollup/rollup-linux-loongarch64-gnu@4.35.0':
'@rollup/rollup-linux-loongarch64-gnu@4.36.0':
optional: true
'@rollup/rollup-linux-powerpc64le-gnu@4.35.0':
'@rollup/rollup-linux-powerpc64le-gnu@4.36.0':
optional: true
'@rollup/rollup-linux-riscv64-gnu@4.35.0':
'@rollup/rollup-linux-riscv64-gnu@4.36.0':
optional: true
'@rollup/rollup-linux-s390x-gnu@4.35.0':
'@rollup/rollup-linux-s390x-gnu@4.36.0':
optional: true
'@rollup/rollup-linux-x64-gnu@4.35.0':
'@rollup/rollup-linux-x64-gnu@4.36.0':
optional: true
'@rollup/rollup-linux-x64-musl@4.35.0':
'@rollup/rollup-linux-x64-musl@4.36.0':
optional: true
'@rollup/rollup-win32-arm64-msvc@4.35.0':
'@rollup/rollup-win32-arm64-msvc@4.36.0':
optional: true
'@rollup/rollup-win32-ia32-msvc@4.35.0':
'@rollup/rollup-win32-ia32-msvc@4.36.0':
optional: true
'@rollup/rollup-win32-x64-msvc@4.35.0':
'@rollup/rollup-win32-x64-msvc@4.36.0':
optional: true
'@rspack/binding-darwin-arm64@1.2.7':
@@ -4323,7 +4329,7 @@ snapshots:
'@module-federation/runtime-tools': 0.8.4
'@rspack/binding': 1.2.7
'@rspack/lite-tapable': 1.0.1
caniuse-lite: 1.0.30001705
caniuse-lite: 1.0.30001706
optionalDependencies:
'@swc/helpers': 0.5.15
optional: true
@@ -4409,6 +4415,10 @@ snapshots:
dependencies:
'@tauri-apps/api': 2.3.0
'@tauri-apps/plugin-opener@2.2.6':
dependencies:
'@tauri-apps/api': 2.3.0
'@tauri-apps/plugin-os@2.2.1':
dependencies:
'@tauri-apps/api': 2.3.0
@@ -4543,9 +4553,9 @@ snapshots:
'@typescript-eslint/types': 8.26.1
eslint-visitor-keys: 4.2.0
'@vitejs/plugin-vue@5.2.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))':
'@vitejs/plugin-vue@5.2.3(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))':
dependencies:
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vue: 3.5.13(typescript@5.8.2)
'@volar/language-core@2.4.12':
@@ -4630,14 +4640,14 @@ snapshots:
dependencies:
'@vue/devtools-kit': 7.7.2
'@vue/devtools-core@7.7.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))':
'@vue/devtools-core@7.7.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))':
dependencies:
'@vue/devtools-kit': 7.7.2
'@vue/devtools-shared': 7.7.2
mitt: 3.0.1
nanoid: 5.1.4
pathe: 2.0.3
vite-hot-client: 0.2.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))
vite-hot-client: 0.2.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))
vue: 3.5.13(typescript@5.8.2)
transitivePeerDependencies:
- vite
@@ -4934,8 +4944,8 @@ snapshots:
browserslist@4.24.4:
dependencies:
caniuse-lite: 1.0.30001705
electron-to-chromium: 1.5.119
caniuse-lite: 1.0.30001706
electron-to-chromium: 1.5.120
node-releases: 2.0.19
update-browserslist-db: 1.1.3(browserslist@4.24.4)
@@ -4990,7 +5000,7 @@ snapshots:
callsites@3.1.0: {}
caniuse-lite@1.0.30001705: {}
caniuse-lite@1.0.30001706: {}
chalk@4.1.2:
dependencies:
@@ -5008,7 +5018,7 @@ snapshots:
citty@0.1.6:
dependencies:
consola: 3.4.0
consola: 3.4.1
cli-cursor@5.0.0:
dependencies:
@@ -5068,7 +5078,7 @@ snapshots:
confbox@0.2.1: {}
consola@3.4.0: {}
consola@3.4.1: {}
convert-source-map@2.0.0: {}
@@ -5207,7 +5217,7 @@ snapshots:
tslib: 2.3.0
zrender: 5.6.1
electron-to-chromium@1.5.119: {}
electron-to-chromium@1.5.120: {}
emoji-regex@10.4.0: {}
@@ -5714,7 +5724,7 @@ snapshots:
giget@2.0.0:
dependencies:
citty: 0.1.6
consola: 3.4.0
consola: 3.4.1
defu: 6.1.4
node-fetch-native: 1.6.6
nypm: 0.6.0
@@ -6226,7 +6236,7 @@ snapshots:
nypm@0.6.0:
dependencies:
citty: 0.1.6
consola: 3.4.0
consola: 3.4.1
pathe: 2.0.3
pkg-types: 2.1.0
tinyexec: 0.3.2
@@ -6510,29 +6520,29 @@ snapshots:
rfdc@1.4.1: {}
rollup@4.35.0:
rollup@4.36.0:
dependencies:
'@types/estree': 1.0.6
optionalDependencies:
'@rollup/rollup-android-arm-eabi': 4.35.0
'@rollup/rollup-android-arm64': 4.35.0
'@rollup/rollup-darwin-arm64': 4.35.0
'@rollup/rollup-darwin-x64': 4.35.0
'@rollup/rollup-freebsd-arm64': 4.35.0
'@rollup/rollup-freebsd-x64': 4.35.0
'@rollup/rollup-linux-arm-gnueabihf': 4.35.0
'@rollup/rollup-linux-arm-musleabihf': 4.35.0
'@rollup/rollup-linux-arm64-gnu': 4.35.0
'@rollup/rollup-linux-arm64-musl': 4.35.0
'@rollup/rollup-linux-loongarch64-gnu': 4.35.0
'@rollup/rollup-linux-powerpc64le-gnu': 4.35.0
'@rollup/rollup-linux-riscv64-gnu': 4.35.0
'@rollup/rollup-linux-s390x-gnu': 4.35.0
'@rollup/rollup-linux-x64-gnu': 4.35.0
'@rollup/rollup-linux-x64-musl': 4.35.0
'@rollup/rollup-win32-arm64-msvc': 4.35.0
'@rollup/rollup-win32-ia32-msvc': 4.35.0
'@rollup/rollup-win32-x64-msvc': 4.35.0
'@rollup/rollup-android-arm-eabi': 4.36.0
'@rollup/rollup-android-arm64': 4.36.0
'@rollup/rollup-darwin-arm64': 4.36.0
'@rollup/rollup-darwin-x64': 4.36.0
'@rollup/rollup-freebsd-arm64': 4.36.0
'@rollup/rollup-freebsd-x64': 4.36.0
'@rollup/rollup-linux-arm-gnueabihf': 4.36.0
'@rollup/rollup-linux-arm-musleabihf': 4.36.0
'@rollup/rollup-linux-arm64-gnu': 4.36.0
'@rollup/rollup-linux-arm64-musl': 4.36.0
'@rollup/rollup-linux-loongarch64-gnu': 4.36.0
'@rollup/rollup-linux-powerpc64le-gnu': 4.36.0
'@rollup/rollup-linux-riscv64-gnu': 4.36.0
'@rollup/rollup-linux-s390x-gnu': 4.36.0
'@rollup/rollup-linux-x64-gnu': 4.36.0
'@rollup/rollup-linux-x64-musl': 4.36.0
'@rollup/rollup-win32-arm64-msvc': 4.36.0
'@rollup/rollup-win32-ia32-msvc': 4.36.0
'@rollup/rollup-win32-x64-msvc': 4.36.0
fsevents: 2.3.3
run-applescript@7.0.0: {}
@@ -6567,15 +6577,15 @@ snapshots:
es-errors: 1.3.0
is-regex: 1.2.1
sass-loader@16.0.5(@rspack/core@1.2.7(@swc/helpers@0.5.15))(sass@1.85.1)(webpack@5.98.0):
sass-loader@16.0.5(@rspack/core@1.2.7(@swc/helpers@0.5.15))(sass@1.86.0)(webpack@5.98.0):
dependencies:
neo-async: 2.6.2
optionalDependencies:
'@rspack/core': 1.2.7(@swc/helpers@0.5.15)
sass: 1.85.1
sass: 1.86.0
webpack: 5.98.0
sass@1.85.1:
sass@1.86.0:
dependencies:
chokidar: 4.0.3
immutable: 5.0.3
@@ -7104,14 +7114,14 @@ snapshots:
uuid@11.1.0: {}
vite-hot-client@0.2.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)):
vite-hot-client@0.2.4(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)):
dependencies:
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite-plugin-inspect@0.8.9(rollup@4.35.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)):
vite-plugin-inspect@0.8.9(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)):
dependencies:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.4(rollup@4.35.0)
'@rollup/pluginutils': 5.1.4(rollup@4.36.0)
debug: 4.4.0
error-stack-parser-es: 0.1.5
fs-extra: 11.3.0
@@ -7119,28 +7129,28 @@ snapshots:
perfect-debounce: 1.0.0
picocolors: 1.1.1
sirv: 3.0.1
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
transitivePeerDependencies:
- rollup
- supports-color
vite-plugin-vue-devtools@7.7.2(rollup@4.35.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)):
vite-plugin-vue-devtools@7.7.2(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2)):
dependencies:
'@vue/devtools-core': 7.7.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))
'@vue/devtools-core': 7.7.2(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))
'@vue/devtools-kit': 7.7.2
'@vue/devtools-shared': 7.7.2
execa: 9.5.2
sirv: 3.0.1
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite-plugin-inspect: 0.8.9(rollup@4.35.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))
vite-plugin-vue-inspector: 5.3.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite-plugin-inspect: 0.8.9(rollup@4.36.0)(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))
vite-plugin-vue-inspector: 5.3.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))
transitivePeerDependencies:
- '@nuxt/kit'
- rollup
- supports-color
- vue
vite-plugin-vue-inspector@5.3.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)):
vite-plugin-vue-inspector@5.3.1(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)):
dependencies:
'@babel/core': 7.26.10
'@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.10)
@@ -7151,31 +7161,31 @@ snapshots:
'@vue/compiler-dom': 3.5.13
kolorist: 1.8.0
magic-string: 0.30.17
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
transitivePeerDependencies:
- supports-color
vite-plugin-vuetify@2.1.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))(vuetify@3.7.16):
vite-plugin-vuetify@2.1.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))(vuetify@3.7.16):
dependencies:
'@vuetify/loader-shared': 2.1.0(vue@3.5.13(typescript@5.8.2))(vuetify@3.7.16)
debug: 4.4.0
upath: 2.0.1
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vite: 6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0)
vue: 3.5.13(typescript@5.8.2)
vuetify: 3.7.16(typescript@5.8.2)(vite-plugin-vuetify@2.1.0)(vue@3.5.13(typescript@5.8.2))
transitivePeerDependencies:
- supports-color
vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0):
vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0):
dependencies:
esbuild: 0.25.1
postcss: 8.5.3
rollup: 4.35.0
rollup: 4.36.0
optionalDependencies:
'@types/node': 22.13.10
fsevents: 2.3.3
jiti: 2.4.2
sass: 1.85.1
sass: 1.86.0
terser: 5.39.0
tsx: 4.19.3
yaml: 2.7.0
@@ -7239,7 +7249,7 @@ snapshots:
vue: 3.5.13(typescript@5.8.2)
optionalDependencies:
typescript: 5.8.2
vite-plugin-vuetify: 2.1.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.85.1)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))(vuetify@3.7.16)
vite-plugin-vuetify: 2.1.0(vite@6.2.2(@types/node@22.13.10)(jiti@2.4.2)(sass@1.86.0)(terser@5.39.0)(tsx@4.19.3)(yaml@2.7.0))(vue@3.5.13(typescript@5.8.2))(vuetify@3.7.16)
watchpack@2.4.2:
dependencies:

22
src-tauri/Cargo.lock generated
View File

@@ -17,6 +17,7 @@ dependencies = [
"tauri-plugin-fs",
"tauri-plugin-http",
"tauri-plugin-log",
"tauri-plugin-opener",
"tauri-plugin-os",
"tauri-plugin-process",
"tauri-plugin-shell",
@@ -4981,6 +4982,27 @@ dependencies = [
"time",
]
[[package]]
name = "tauri-plugin-opener"
version = "2.2.6"
source = "git+ssh://git@github.com/tauri-apps/plugins-workspace.git?branch=v2#c245f123ea944b5c103a0661adcdcab6f10efbf9"
dependencies = [
"dunce",
"glob",
"objc2-app-kit",
"objc2-foundation 0.3.0",
"open",
"schemars",
"serde",
"serde_json",
"tauri",
"tauri-plugin",
"thiserror 2.0.12",
"url",
"windows",
"zbus",
]
[[package]]
name = "tauri-plugin-os"
version = "2.2.1"

View File

@@ -59,6 +59,11 @@ features = ["unsafe-headers"]
git = "ssh://git@github.com/tauri-apps/plugins-workspace.git"
branch = "v2"
# opener 插件
[dependencies.tauri-plugin-opener]
git = "ssh://git@github.com/tauri-apps/plugins-workspace.git"
branch = "v2"
# os 插件
[dependencies.tauri-plugin-os]
git = "ssh://git@github.com/tauri-apps/plugins-workspace.git"

View File

@@ -14,6 +14,7 @@
"core:window:default",
"core:path:allow-resolve-directory",
"core:path:default",
"opener:default",
{ "identifier": "fs:allow-exists", "allow": [{ "path": "**" }] },
{ "identifier": "fs:allow-mkdir", "allow": [{ "path": "**" }] },
{ "identifier": "fs:allow-read-dir", "allow": [{ "path": "**" }] },

View File

@@ -37,6 +37,7 @@
"core:window:allow-set-focus",
"core:window:allow-show",
"core:window:allow-unminimize",
"opener:default",
{ "identifier": "fs:allow-exists", "allow": [{ "path": "**" }] },
{ "identifier": "fs:allow-mkdir", "allow": [{ "path": "**" }] },
{ "identifier": "fs:allow-read-dir", "allow": [{ "path": "**" }] },
@@ -44,6 +45,7 @@
{ "identifier": "fs:allow-remove", "allow": [{ "path": "**" }] },
{ "identifier": "fs:allow-write-file", "allow": [{ "path": "**" }] },
{ "identifier": "fs:allow-write-text-file", "allow": [{ "path": "**" }] },
{ "identifier": "opener:allow-open-path", "allow": [{ "path": "**" }] },
{
"identifier": "http:default",
"allow": [
@@ -55,11 +57,7 @@
},
{
"identifier": "shell:allow-execute",
"allow": [
{ "name": "win_open", "cmd": "explorer", "args": true },
{ "name": "mac_open", "cmd": "open", "args": true },
{ "name": "exec-sh", "cmd": "powershell", "args": true }
]
"allow": [{ "name": "exec-sh", "cmd": "powershell", "args": true }]
}
],
"platforms": ["windows", "macOS"]

View File

@@ -42,6 +42,7 @@ pub fn run() {
.plugin(tauri_plugin_dialog::init())
.plugin(tauri_plugin_fs::init())
.plugin(tauri_plugin_http::init())
.plugin(tauri_plugin_opener::init())
.plugin(tauri_plugin_os::init())
.plugin(tauri_plugin_process::init())
.plugin(tauri_plugin_shell::init())

View File

@@ -21,6 +21,7 @@ import { app, core, event, webviewWindow } from "@tauri-apps/api";
import type { Event, UnlistenFn } from "@tauri-apps/api/event";
import { getCurrentWindow, LogicalSize } from "@tauri-apps/api/window";
import { mkdir } from "@tauri-apps/plugin-fs";
import { openUrl } from "@tauri-apps/plugin-opener";
import { storeToRefs } from "pinia";
import { computed, onMounted, onUnmounted, ref } from "vue";
import { useRouter } from "vue-router";
@@ -233,7 +234,7 @@ async function checkUpdate(): Promise<void> {
buildTime.value = getBuildTime();
await TGSqlite.update();
showSnackbar.success("数据库已更新!", 3000);
window.open("https://app.btmuli.ink/docs/TeyvatGuide/changelogs.html");
await openUrl("https://app.btmuli.ink/docs/TeyvatGuide/changelogs.html");
}
}

View File

@@ -15,6 +15,7 @@ import TMiImg from "@comp/app/t-mi-img.vue";
import showDialog from "@comp/func/dialog.js";
import showSnackbar from "@comp/func/snackbar.js";
import { emit } from "@tauri-apps/api/event";
import { openUrl } from "@tauri-apps/plugin-opener";
import { storeToRefs } from "pinia";
import { computed, onMounted, ref, shallowRef, watch } from "vue";
@@ -93,7 +94,7 @@ async function toNav(item: TGApp.BBS.Navigator.Navigator): Promise<void> {
}
// 如果不在上面的域名里面,就直接打开
if (!mysList.includes(link.origin)) {
window.open(item.app_path);
await openUrl(item.app_path);
return;
}
if (item.name === "签到福利" || item.name === "每日签到") {

View File

@@ -23,6 +23,7 @@
</template>
<script lang="ts" setup>
import { app } from "@tauri-apps/api";
import { openUrl } from "@tauri-apps/plugin-opener";
import { storeToRefs } from "pinia";
import { onMounted, ref } from "vue";
@@ -33,24 +34,24 @@ const versionApp = ref<string>();
onMounted(async () => (versionApp.value = await app.getVersion()));
function toRelease(): void {
window.open("https://github.com/BTMuli/TeyvatGuide/releases/latest");
async function toRelease(): Promise<void> {
await openUrl("https://github.com/BTMuli/TeyvatGuide/releases/latest");
}
function toGroup(): void {
window.open("https://h5.qun.qq.com/s/3cgX0hJ4GA");
async function toGroup(): Promise<void> {
await openUrl("https://h5.qun.qq.com/s/3cgX0hJ4GA");
}
function toGithub(): void {
window.open("https://github.com/BTMuli/TeyvatGuide");
async function toGithub(): Promise<void> {
await openUrl("https://github.com/BTMuli/TeyvatGuide");
}
function toStore(): void {
window.open("https://www.microsoft.com/store/productId/9NLBNNNBNSJN");
async function toStore(): Promise<void> {
await openUrl("https://www.microsoft.com/store/productId/9NLBNNNBNSJN");
}
function toSite(): void {
window.open("https://app.btmuli.ink/docs/TeyvatGuide/changelogs.html");
async function toSite(): Promise<void> {
await openUrl("https://app.btmuli.ink/docs/TeyvatGuide/changelogs.html");
}
</script>
<style lang="css" scoped>

View File

@@ -11,7 +11,7 @@
<template #append>
<div class="config-opers">
<v-icon @click="confirmCUD()" title="修改用户数据目录"> mdi-pencil</v-icon>
<v-icon @click="openPath('user')" title="打开用户数据目录"> mdi-folder-open</v-icon>
<v-icon @click="openDataPath('user')" title="打开用户数据目录"> mdi-folder-open</v-icon>
<v-icon @click="copyPath('user')" title="复制用户数据目录路径"> mdi-content-copy</v-icon>
</div>
</template>
@@ -24,7 +24,7 @@
</template>
<template #append>
<div class="config-opers">
<v-icon @click="openPath('db')" title="打开数据库目录"> mdi-folder-open</v-icon>
<v-icon @click="openDataPath('db')" title="打开数据库目录"> mdi-folder-open</v-icon>
<v-icon @click="copyPath('db')" title="复制数据库目录路径"> mdi-content-copy</v-icon>
</div>
</template>
@@ -38,7 +38,7 @@
<template #append>
<div class="config-opers">
<v-icon @click="confirmCGD()" title="修改游戏安装目录"> mdi-pencil</v-icon>
<v-icon @click="openPath('game')" title="打开游戏安装目录"> mdi-folder-open</v-icon>
<v-icon @click="openDataPath('game')" title="打开游戏安装目录"> mdi-folder-open</v-icon>
<v-icon @click="copyPath('game')" title="复制游戏安装目录"> mdi-content-copy</v-icon>
</div>
</template>
@@ -52,7 +52,7 @@
<template #append>
<div class="config-opers">
<v-icon @click="confirmCLD()" title="清理日志文件"> mdi-delete</v-icon>
<v-icon @click="openPath('log')" title="打开日志目录"> mdi-folder-open</v-icon>
<v-icon @click="openDataPath('log')" title="打开日志目录"> mdi-folder-open</v-icon>
<v-icon @click="copyPath('log')" title="复制日志目录路径"> mdi-content-copy</v-icon>
</div>
</template>
@@ -68,13 +68,13 @@ import { path } from "@tauri-apps/api";
import { sep } from "@tauri-apps/api/path";
import { open } from "@tauri-apps/plugin-dialog";
import { exists, readDir, remove } from "@tauri-apps/plugin-fs";
import { openPath } from "@tauri-apps/plugin-opener";
import { platform } from "@tauri-apps/plugin-os";
import { storeToRefs } from "pinia";
import { onMounted } from "vue";
import { useAppStore } from "@/store/modules/app.js";
import { backUpUserData } from "@/utils/dataBS.js";
import TGShell from "@/utils/TGShell.js";
const { dbPath, logDir, userDir, gameDir } = storeToRefs(useAppStore());
@@ -225,7 +225,7 @@ function copyPath(type: "db" | "user" | "log" | "game"): void {
showSnackbar.success(`${targetName}路径已复制!`);
}
async function openPath(type: "db" | "user" | "log" | "game"): Promise<void> {
async function openDataPath(type: "db" | "user" | "log" | "game"): Promise<void> {
let targetPath: string;
switch (type) {
case "db":
@@ -245,7 +245,7 @@ async function openPath(type: "db" | "user" | "log" | "game"): Promise<void> {
targetPath = gameDir.value;
break;
}
await TGShell.openPath(targetPath);
await openPath(targetPath);
}
</script>
<style lang="css" scoped>

View File

@@ -2,7 +2,7 @@
<v-list class="config-list">
<v-list-subheader :inset="true" class="config-header" title="相关信息" />
<v-divider :inset="true" class="border-opacity-75" />
<v-list-item title="Tauri 版本" @click="toOuter('https://v2.tauri.app/')">
<v-list-item title="Tauri 版本" @click="openUrl('https://v2.tauri.app/')">
<template #prepend>
<v-img class="config-icon" src="/platforms/tauri.webp" alt="Tauri" />
</template>
@@ -77,6 +77,7 @@ import showSnackbar from "@comp/func/snackbar.js";
import TGSqlite from "@Sqlite/index.js";
import TSUserAchi from "@Sqlite/modules/userAchi.js";
import { app } from "@tauri-apps/api";
import { openUrl } from "@tauri-apps/plugin-opener";
import { platform, version } from "@tauri-apps/plugin-os";
import { onMounted, ref, shallowRef } from "vue";
@@ -123,10 +124,6 @@ onMounted(async () => {
await TGLogger.Error(`加载数据库错误: ${e}`);
}
});
function toOuter(url: string): void {
window.open(url);
}
</script>
<style lang="css" scoped>
.config-header {

View File

@@ -34,6 +34,7 @@
<script lang="ts" setup>
import TMiImg from "@comp/app/t-mi-img.vue";
import showSnackbar from "@comp/func/snackbar.js";
import { openUrl } from "@tauri-apps/plugin-opener";
import { computed, onMounted, onUnmounted, ref } from "vue";
import { parseLink } from "@/utils/linkParser.js";
@@ -85,7 +86,7 @@ async function openPosition(): Promise<void> {
showSnackbar.warn(`未知链接:${props.pos.url}`, 3000);
return;
}
window.open(props.pos.url);
await openUrl(props.pos.url);
}
onUnmounted(() => {

View File

@@ -13,6 +13,7 @@
<script lang="ts" setup>
import TMiImg from "@comp/app/t-mi-img.vue";
import showSnackbar from "@comp/func/snackbar.js";
import { openUrl } from "@tauri-apps/plugin-opener";
import { computed, toRaw } from "vue";
import { useRouter } from "vue-router";
@@ -62,7 +63,7 @@ async function toLink(): Promise<void> {
showSnackbar.error(`未知链接:${link}`, 3000);
return;
}
window.open(res);
await openUrl(res);
}
</script>
<style lang="css" scoped>

View File

@@ -21,6 +21,7 @@
</template>
<script lang="ts" setup>
import showSnackbar from "@comp/func/snackbar.js";
import { openUrl } from "@tauri-apps/plugin-opener";
import { onMounted, ref, shallowRef, StyleValue, toRaw } from "vue";
import { parseLink, parsePost } from "@/utils/linkParser.js";
@@ -107,7 +108,7 @@ async function toLink(): Promise<void> {
showSnackbar.error(`未知链接:${link}`, 3000);
return;
}
window.open(res);
await openUrl(res);
}
// 解析表情链接

View File

@@ -1,13 +1,14 @@
/**
* @file utils/TGClient.ts
* @desc 负责米游社客户端的 callback 处理
* @since Beta v0.6.3
* @since Beta v0.7.2
*/
import showSnackbar from "@comp/func/snackbar.js";
import TGSqlite from "@Sqlite/index.js";
import { core, event, webviewWindow } from "@tauri-apps/api";
import type { Event, UnlistenFn } from "@tauri-apps/api/event";
import { openUrl } from "@tauri-apps/plugin-opener";
import { parseLink } from "./linkParser.js";
import TGLogger from "./TGLogger.js";
@@ -709,7 +710,7 @@ class Client {
): Promise<void> {
console.log(`[openSystemBrowser] ${JSON.stringify(arg)}`);
const url = arg.payload.open_url;
window.open(url);
await openUrl(url);
}
/**

View File

@@ -1,46 +0,0 @@
/**
* @file utils/TGShell.ts
* @description Shell工具
* @since Beta v0.5.0
*/
import showSnackbar from "@comp/func/snackbar.js";
import { platform } from "@tauri-apps/plugin-os";
import { Command } from "@tauri-apps/plugin-shell";
/**
* @description Shell工具
* @since Beta v0.5.0
*/
class Shell {
private constructor() {}
private static instance: Shell | null = null;
static getInstance(): Shell {
if (this.instance === null) this.instance = new Shell();
return this.instance;
}
/**
* @description 打开文件
* @since Beta v0.5.0
* @param {string} path - 文件路径
* @returns {Promise<void>} 无返回值
*/
async openPath(path: string): Promise<void> {
const plat = platform();
let command: string;
if (plat !== "windows" && plat !== "macos") {
showSnackbar.warn("暂不支持该平台");
return;
}
if (plat === "windows") command = "win_open";
else command = "mac_open";
await Command.create(command, [path]).execute();
}
}
const TGShell = Shell.getInstance();
export default TGShell;