From 5be6bd09d2e154ced27a0d95c417a64a1d77a0f1 Mon Sep 17 00:00:00 2001 From: Yukino_fox Date: Sun, 22 Mar 2026 19:26:35 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E4=BC=98=E5=8C=96=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E7=BB=93=E6=9E=84=E5=B9=B6=E4=BF=AE=E5=A4=8D=E5=A4=9A?= =?UTF-8?q?=E4=B8=AA=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修复 ruleComponent.tsx 和 ruleBuilderUtils.ts 中 queryToAutoScoreRule 函数的参数问题 调整 database.rs 中 state_guard 的 drop 位置 优化 EventEmitter 和 Context 中的 once 方法实现 移除 Sidebar.tsx 和 OOBE.tsx 中未使用的代码 格式化 MCP 使用文档和规则文件 --- .github/workflows/build.yml | 6 +++--- .lingma/rules/rules.md | 5 +---- MCP-使用说明.md | 14 +++++++------- src-tauri/src/commands/database.rs | 2 +- src/components/OOBE/OOBE.tsx | 3 +-- src/components/Settings.tsx | 4 +++- src/components/Sidebar.tsx | 3 --- src/components/autoScore/ruleBuilderUtils.ts | 2 +- src/components/autoScore/ruleComponent.tsx | 2 +- src/preload/types.ts | 6 ++++-- src/shared/kernel.ts | 10 ++++------ 11 files changed, 26 insertions(+), 31 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d8dfe9f..b2304f3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -228,10 +228,10 @@ jobs: exit 1 fi echo "使用 apksigner: $APKSIGNER" - + # 创建临时密钥库文件 echo "$ANDROID_SIGNING_KEY" | base64 -d > /tmp/android_keystore.jks - + # 找到所有未签名的 APK 文件 find src-tauri/gen/android/app/build/outputs -name "*-unsigned.apk" -type f | while read -r apk; do # 生成签名后的文件名 @@ -255,7 +255,7 @@ jobs: rm "$apk" mv "$signed_apk" "${apk/-unsigned/}" done - + # 清理密钥库 rm -f /tmp/android_keystore.jks diff --git a/.lingma/rules/rules.md b/.lingma/rules/rules.md index 202659c..215b511 100644 --- a/.lingma/rules/rules.md +++ b/.lingma/rules/rules.md @@ -2,7 +2,4 @@ trigger: always_on --- -1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint) -2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier) -3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有) -4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。 \ No newline at end of file +1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint)2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier)3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有)4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。 diff --git a/MCP-使用说明.md b/MCP-使用说明.md index 5e4bfb9..ddff1e0 100644 --- a/MCP-使用说明.md +++ b/MCP-使用说明.md @@ -25,19 +25,19 @@ 你可以在前端通过 Tauri `invoke` 调用: ```ts -import { invoke } from '@tauri-apps/api/core'; +import { invoke } from "@tauri-apps/api/core" -await invoke('mcp_server_start', { +await invoke("mcp_server_start", { config: { - host: '127.0.0.1', + host: "127.0.0.1", port: 3901, }, -}); +}) -const status = await invoke('mcp_server_status'); -console.log(status); +const status = await invoke("mcp_server_status") +console.log(status) -await invoke('mcp_server_stop'); +await invoke("mcp_server_stop") ``` 说明: diff --git a/src-tauri/src/commands/database.rs b/src-tauri/src/commands/database.rs index 7933ff1..c6f3ce1 100644 --- a/src-tauri/src/commands/database.rs +++ b/src-tauri/src/commands/database.rs @@ -1061,7 +1061,6 @@ pub async fn db_switch_connection( Some("database"), None, ); - drop(state_guard); let (db_type, saved_connection_string, saved_status, conn) = if connection_string .starts_with("postgres://") @@ -1170,6 +1169,7 @@ pub async fn db_switch_connection( conn, ) }; + drop(state_guard); { let settings_db_path = sqlite_db_path(&app_handle)?; diff --git a/src/components/OOBE/OOBE.tsx b/src/components/OOBE/OOBE.tsx index 5fe5d9f..c6aeea4 100644 --- a/src/components/OOBE/OOBE.tsx +++ b/src/components/OOBE/OOBE.tsx @@ -7,7 +7,7 @@ import { useTheme } from "../../contexts/ThemeContext" import { changeLanguage, AppLanguage, languageOptions } from "../../i18n" import type { themeConfig } from "../../preload/types" import logoSvg from "../../assets/logoHD.svg" -import { useResponsive, useScreenSize } from "../../hooks/useResponsive" +import { useResponsive } from "../../hooks/useResponsive" interface oobeProps { visible: boolean @@ -102,7 +102,6 @@ export const OOBE: React.FC = ({ visible, onComplete }) => { const { currentTheme, setTheme, themes, applyTheme } = useTheme() const [messageApi, contextHolder] = message.useMessage() const breakpoint = useResponsive() - const { width: screenWidth, height: screenHeight } = useScreenSize() const isMobile = breakpoint === "xs" || breakpoint === "sm" const [currentStep, setCurrentStep] = useState("entry") diff --git a/src/components/Settings.tsx b/src/components/Settings.tsx index afdfdee..bf3264a 100644 --- a/src/components/Settings.tsx +++ b/src/components/Settings.tsx @@ -1163,7 +1163,9 @@ export const Settings: React.FC<{ permission: permissionLevel }> = ({ permission
{t("settings.mcp.title")}
-
+
{t("settings.mcp.description")}
diff --git a/src/components/Sidebar.tsx b/src/components/Sidebar.tsx index 70f7059..ade63ae 100644 --- a/src/components/Sidebar.tsx +++ b/src/components/Sidebar.tsx @@ -14,7 +14,6 @@ import { } from "@ant-design/icons" import { useState, useEffect } from "react" import { useTranslation } from "react-i18next" -import { useResponsive } from "../hooks/useResponsive" import appLogo from "../assets/logoHD.svg" const { Sider } = Layout @@ -45,8 +44,6 @@ export function Sidebar({ onFloatingExpandedChange, }: SidebarProps): React.JSX.Element { const { t } = useTranslation() - const breakpoint = useResponsive() - const isMobile = breakpoint === "xs" || breakpoint === "sm" const [dbStatus, setDbStatus] = useState({ type: "sqlite", connected: true }) const [syncLoading, setSyncLoading] = useState(false) const [messageApi, contextHolder] = message.useMessage() diff --git a/src/components/autoScore/ruleBuilderUtils.ts b/src/components/autoScore/ruleBuilderUtils.ts index 50620b5..4b9c01d 100644 --- a/src/components/autoScore/ruleBuilderUtils.ts +++ b/src/components/autoScore/ruleBuilderUtils.ts @@ -62,7 +62,7 @@ export const defaultQuery: RuleGroupType = { rules: [{ field: "interval_time_passed", operator: "=", value: "1440" }], } -export function queryToAutoScoreRule(_query: RuleGroupType): AutoScoreRuleData { +export function queryToAutoScoreRule(): AutoScoreRuleData { const triggers: AutoScoreTrigger[] = [] /* const processRuleGroup = (group: RuleGroupType, relation: 'AND' | 'OR' = 'AND') => { diff --git a/src/components/autoScore/ruleComponent.tsx b/src/components/autoScore/ruleComponent.tsx index d4b2d6b..b9da023 100644 --- a/src/components/autoScore/ruleComponent.tsx +++ b/src/components/autoScore/ruleComponent.tsx @@ -37,7 +37,7 @@ export const RuleComponent: React.FC = ({ initialData, onCha const handleQueryChange = (newQuery: RuleGroupType) => { setQuery(newQuery) if (onChange) { - const ruleData = queryToAutoScoreRule(newQuery) + const ruleData = queryToAutoScoreRule() onChange(ruleData) } } diff --git a/src/preload/types.ts b/src/preload/types.ts index 21278dc..29520f8 100644 --- a/src/preload/types.ts +++ b/src/preload/types.ts @@ -309,8 +309,10 @@ const api = { mcpServerStart: (config?: { port?: number host?: string - }): Promise<{ success: boolean; data?: { url: string; config: { port: number; host: string } } }> => - invoke("mcp_server_start", { config }), + }): Promise<{ + success: boolean + data?: { url: string; config: { port: number; host: string } } + }> => invoke("mcp_server_start", { config }), mcpServerStop: (): Promise<{ success: boolean }> => invoke("mcp_server_stop"), mcpServerStatus: (): Promise<{ success: boolean diff --git a/src/shared/kernel.ts b/src/shared/kernel.ts index 0e31ad5..ef229e3 100644 --- a/src/shared/kernel.ts +++ b/src/shared/kernel.ts @@ -20,9 +20,8 @@ export class EventEmitter { } once(event: string | symbol, listener: eventListener): this { - const self = this - const onceListener: eventListener = function (...args) { - self.off(event, onceListener) + const onceListener: eventListener = (...args) => { + this.off(event, onceListener) listener(...args) } return this.on(event, onceListener) @@ -72,9 +71,8 @@ export class Context extends EventEmitter { } once(event: string | symbol, listener: eventListener): this { - const self = this - const onceListener: eventListener = function (...args) { - self.off(event, onceListener) + const onceListener: eventListener = (...args) => { + this.off(event, onceListener) listener(...args) } super.on(event, onceListener)