From 72c566b7210308f6f009309fd8b0deb07ac61e3b Mon Sep 17 00:00:00 2001 From: imbytecat Date: Sun, 18 Jan 2026 16:18:17 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Tauri=20=E6=A1=8C?= =?UTF-8?q?=E9=9D=A2=E5=BA=94=E7=94=A8=E6=94=AF=E6=8C=81=E5=B9=B6=E8=AE=BE?= =?UTF-8?q?=E7=BD=AE=E7=AA=97=E5=8F=A3=E6=A0=87=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 添加 Tauri API 依赖包以支持桌面应用功能 - 添加 Tauri 应用 API 依赖以支持本地应用功能。 - 启用本地与远程访问权限并添加窗口标题设置权限 - 在 Tauri 应用中动态设置窗口标题为“待办事项” --- bun.lock | 3 +++ package.json | 1 + src-tauri/capabilities/default.json | 9 +++++++++ src/routes/index.tsx | 9 ++++++++- 4 files changed, 21 insertions(+), 1 deletion(-) diff --git a/bun.lock b/bun.lock index c1e4337..b2e32f3 100644 --- a/bun.lock +++ b/bun.lock @@ -15,6 +15,7 @@ "@tanstack/react-router": "^1.151.0", "@tanstack/react-router-ssr-query": "^1.151.0", "@tanstack/react-start": "^1.151.0", + "@tauri-apps/api": "^2.9.1", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.8.3", "postgres": "^3.4.8", @@ -533,6 +534,8 @@ "@tanstack/virtual-file-routes": ["@tanstack/virtual-file-routes@1.145.4", "", {}, "sha512-CI75JrfqSluhdGwLssgVeQBaCphgfkMQpi8MCY3UJX1hoGzXa8kHYJcUuIFMOLs1q7zqHy++EVVtMK03osR5wQ=="], + "@tauri-apps/api": ["@tauri-apps/api@2.9.1", "", {}, "sha512-IGlhP6EivjXHepbBic618GOmiWe4URJiIeZFlB7x3czM0yDHHYviH1Xvoiv4FefdkQtn6v7TuwWCRfOGdnVUGw=="], + "@tauri-apps/cli": ["@tauri-apps/cli@2.9.6", "", { "optionalDependencies": { "@tauri-apps/cli-darwin-arm64": "2.9.6", "@tauri-apps/cli-darwin-x64": "2.9.6", "@tauri-apps/cli-linux-arm-gnueabihf": "2.9.6", "@tauri-apps/cli-linux-arm64-gnu": "2.9.6", "@tauri-apps/cli-linux-arm64-musl": "2.9.6", "@tauri-apps/cli-linux-riscv64-gnu": "2.9.6", "@tauri-apps/cli-linux-x64-gnu": "2.9.6", "@tauri-apps/cli-linux-x64-musl": "2.9.6", "@tauri-apps/cli-win32-arm64-msvc": "2.9.6", "@tauri-apps/cli-win32-ia32-msvc": "2.9.6", "@tauri-apps/cli-win32-x64-msvc": "2.9.6" }, "bin": { "tauri": "tauri.js" } }, "sha512-3xDdXL5omQ3sPfBfdC8fCtDKcnyV7OqyzQgfyT5P3+zY6lcPqIYKQBvUasNvppi21RSdfhy44ttvJmftb0PCDw=="], "@tauri-apps/cli-darwin-arm64": ["@tauri-apps/cli-darwin-arm64@2.9.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-gf5no6N9FCk1qMrti4lfwP77JHP5haASZgVbBgpZG7BUepB3fhiLCXGUK8LvuOjP36HivXewjg72LTnPDScnQQ=="], diff --git a/package.json b/package.json index ad0f2b3..ee32432 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@tanstack/react-router": "^1.151.0", "@tanstack/react-router-ssr-query": "^1.151.0", "@tanstack/react-start": "^1.151.0", + "@tauri-apps/api": "^2.9.1", "drizzle-orm": "^0.45.1", "drizzle-zod": "^0.8.3", "postgres": "^3.4.8", diff --git a/src-tauri/capabilities/default.json b/src-tauri/capabilities/default.json index f50fbf4..71fbab6 100644 --- a/src-tauri/capabilities/default.json +++ b/src-tauri/capabilities/default.json @@ -3,8 +3,17 @@ "identifier": "default", "description": "Capability for the main window", "windows": ["main"], + "local": true, + "remote": { + "urls": [ + "http://localhost:*", + "http://127.0.0.1:*", + "http{s}?://localhost(:\\d+)?/*" + ] + }, "permissions": [ "core:default", + "core:window:allow-set-title", { "identifier": "shell:allow-execute", "allow": [ diff --git a/src/routes/index.tsx b/src/routes/index.tsx index e6647d3..ab7ac88 100644 --- a/src/routes/index.tsx +++ b/src/routes/index.tsx @@ -1,7 +1,9 @@ import { useMutation, useSuspenseQuery } from '@tanstack/react-query' import { createFileRoute } from '@tanstack/react-router' +import { isTauri } from '@tauri-apps/api/core' +import { getCurrentWindow } from '@tauri-apps/api/window' import type { ChangeEventHandler, FormEventHandler } from 'react' -import { useState } from 'react' +import { useEffect, useState } from 'react' import { orpc } from '@/orpc' export const Route = createFileRoute('/')({ @@ -19,6 +21,11 @@ function Todos() { const updateMutation = useMutation(orpc.todo.update.mutationOptions()) const deleteMutation = useMutation(orpc.todo.remove.mutationOptions()) + useEffect(() => { + if (!isTauri()) return + getCurrentWindow().setTitle('待办事项') + }, []) + const handleCreateTodo: FormEventHandler = (e) => { e.preventDefault() if (newTodoTitle.trim()) {