mirror of
https://github.com/SECTL/SecScore.git
synced 2026-07-19 12:34:22 +08:00
refactor: 优化代码结构并修复多个问题
修复 ruleComponent.tsx 和 ruleBuilderUtils.ts 中 queryToAutoScoreRule 函数的参数问题 调整 database.rs 中 state_guard 的 drop 位置 优化 EventEmitter 和 Context 中的 once 方法实现 移除 Sidebar.tsx 和 OOBE.tsx 中未使用的代码 格式化 MCP 使用文档和规则文件
This commit is contained in:
@@ -2,7 +2,4 @@
|
|||||||
trigger: always_on
|
trigger: always_on
|
||||||
---
|
---
|
||||||
|
|
||||||
1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint)
|
1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint)2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier)3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有)4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。
|
||||||
2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier)
|
|
||||||
3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有)
|
|
||||||
4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。
|
|
||||||
|
|||||||
+7
-7
@@ -25,19 +25,19 @@
|
|||||||
你可以在前端通过 Tauri `invoke` 调用:
|
你可以在前端通过 Tauri `invoke` 调用:
|
||||||
|
|
||||||
```ts
|
```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: {
|
config: {
|
||||||
host: '127.0.0.1',
|
host: "127.0.0.1",
|
||||||
port: 3901,
|
port: 3901,
|
||||||
},
|
},
|
||||||
});
|
})
|
||||||
|
|
||||||
const status = await invoke('mcp_server_status');
|
const status = await invoke("mcp_server_status")
|
||||||
console.log(status);
|
console.log(status)
|
||||||
|
|
||||||
await invoke('mcp_server_stop');
|
await invoke("mcp_server_stop")
|
||||||
```
|
```
|
||||||
|
|
||||||
说明:
|
说明:
|
||||||
|
|||||||
@@ -1061,7 +1061,6 @@ pub async fn db_switch_connection(
|
|||||||
Some("database"),
|
Some("database"),
|
||||||
None,
|
None,
|
||||||
);
|
);
|
||||||
drop(state_guard);
|
|
||||||
|
|
||||||
let (db_type, saved_connection_string, saved_status, conn) = if connection_string
|
let (db_type, saved_connection_string, saved_status, conn) = if connection_string
|
||||||
.starts_with("postgres://")
|
.starts_with("postgres://")
|
||||||
@@ -1170,6 +1169,7 @@ pub async fn db_switch_connection(
|
|||||||
conn,
|
conn,
|
||||||
)
|
)
|
||||||
};
|
};
|
||||||
|
drop(state_guard);
|
||||||
|
|
||||||
{
|
{
|
||||||
let settings_db_path = sqlite_db_path(&app_handle)?;
|
let settings_db_path = sqlite_db_path(&app_handle)?;
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import { useTheme } from "../../contexts/ThemeContext"
|
|||||||
import { changeLanguage, AppLanguage, languageOptions } from "../../i18n"
|
import { changeLanguage, AppLanguage, languageOptions } from "../../i18n"
|
||||||
import type { themeConfig } from "../../preload/types"
|
import type { themeConfig } from "../../preload/types"
|
||||||
import logoSvg from "../../assets/logoHD.svg"
|
import logoSvg from "../../assets/logoHD.svg"
|
||||||
import { useResponsive, useScreenSize } from "../../hooks/useResponsive"
|
import { useResponsive } from "../../hooks/useResponsive"
|
||||||
|
|
||||||
interface oobeProps {
|
interface oobeProps {
|
||||||
visible: boolean
|
visible: boolean
|
||||||
@@ -102,7 +102,6 @@ export const OOBE: React.FC<oobeProps> = ({ visible, onComplete }) => {
|
|||||||
const { currentTheme, setTheme, themes, applyTheme } = useTheme()
|
const { currentTheme, setTheme, themes, applyTheme } = useTheme()
|
||||||
const [messageApi, contextHolder] = message.useMessage()
|
const [messageApi, contextHolder] = message.useMessage()
|
||||||
const breakpoint = useResponsive()
|
const breakpoint = useResponsive()
|
||||||
const { width: screenWidth, height: screenHeight } = useScreenSize()
|
|
||||||
const isMobile = breakpoint === "xs" || breakpoint === "sm"
|
const isMobile = breakpoint === "xs" || breakpoint === "sm"
|
||||||
|
|
||||||
const [currentStep, setCurrentStep] = useState<oobeStep>("entry")
|
const [currentStep, setCurrentStep] = useState<oobeStep>("entry")
|
||||||
|
|||||||
@@ -1163,7 +1163,9 @@ export const Settings: React.FC<{ permission: permissionLevel }> = ({ permission
|
|||||||
<div style={{ fontSize: "16px", fontWeight: 600, marginBottom: "8px" }}>
|
<div style={{ fontSize: "16px", fontWeight: 600, marginBottom: "8px" }}>
|
||||||
{t("settings.mcp.title")}
|
{t("settings.mcp.title")}
|
||||||
</div>
|
</div>
|
||||||
<div style={{ color: "var(--ss-text-secondary)", marginBottom: "12px", fontSize: "12px" }}>
|
<div
|
||||||
|
style={{ color: "var(--ss-text-secondary)", marginBottom: "12px", fontSize: "12px" }}
|
||||||
|
>
|
||||||
{t("settings.mcp.description")}
|
{t("settings.mcp.description")}
|
||||||
</div>
|
</div>
|
||||||
<Space style={{ marginBottom: "12px" }}>
|
<Space style={{ marginBottom: "12px" }}>
|
||||||
|
|||||||
@@ -14,7 +14,6 @@ import {
|
|||||||
} from "@ant-design/icons"
|
} from "@ant-design/icons"
|
||||||
import { useState, useEffect } from "react"
|
import { useState, useEffect } from "react"
|
||||||
import { useTranslation } from "react-i18next"
|
import { useTranslation } from "react-i18next"
|
||||||
import { useResponsive } from "../hooks/useResponsive"
|
|
||||||
import appLogo from "../assets/logoHD.svg"
|
import appLogo from "../assets/logoHD.svg"
|
||||||
|
|
||||||
const { Sider } = Layout
|
const { Sider } = Layout
|
||||||
@@ -45,8 +44,6 @@ export function Sidebar({
|
|||||||
onFloatingExpandedChange,
|
onFloatingExpandedChange,
|
||||||
}: SidebarProps): React.JSX.Element {
|
}: SidebarProps): React.JSX.Element {
|
||||||
const { t } = useTranslation()
|
const { t } = useTranslation()
|
||||||
const breakpoint = useResponsive()
|
|
||||||
const isMobile = breakpoint === "xs" || breakpoint === "sm"
|
|
||||||
const [dbStatus, setDbStatus] = useState<DbStatus>({ type: "sqlite", connected: true })
|
const [dbStatus, setDbStatus] = useState<DbStatus>({ type: "sqlite", connected: true })
|
||||||
const [syncLoading, setSyncLoading] = useState(false)
|
const [syncLoading, setSyncLoading] = useState(false)
|
||||||
const [messageApi, contextHolder] = message.useMessage()
|
const [messageApi, contextHolder] = message.useMessage()
|
||||||
|
|||||||
@@ -62,7 +62,7 @@ export const defaultQuery: RuleGroupType = {
|
|||||||
rules: [{ field: "interval_time_passed", operator: "=", value: "1440" }],
|
rules: [{ field: "interval_time_passed", operator: "=", value: "1440" }],
|
||||||
}
|
}
|
||||||
|
|
||||||
export function queryToAutoScoreRule(_query: RuleGroupType): AutoScoreRuleData {
|
export function queryToAutoScoreRule(): AutoScoreRuleData {
|
||||||
const triggers: AutoScoreTrigger[] = []
|
const triggers: AutoScoreTrigger[] = []
|
||||||
|
|
||||||
/* const processRuleGroup = (group: RuleGroupType, relation: 'AND' | 'OR' = 'AND') => {
|
/* const processRuleGroup = (group: RuleGroupType, relation: 'AND' | 'OR' = 'AND') => {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export const RuleComponent: React.FC<RuleComponentProps> = ({ initialData, onCha
|
|||||||
const handleQueryChange = (newQuery: RuleGroupType) => {
|
const handleQueryChange = (newQuery: RuleGroupType) => {
|
||||||
setQuery(newQuery)
|
setQuery(newQuery)
|
||||||
if (onChange) {
|
if (onChange) {
|
||||||
const ruleData = queryToAutoScoreRule(newQuery)
|
const ruleData = queryToAutoScoreRule()
|
||||||
onChange(ruleData)
|
onChange(ruleData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -309,8 +309,10 @@ const api = {
|
|||||||
mcpServerStart: (config?: {
|
mcpServerStart: (config?: {
|
||||||
port?: number
|
port?: number
|
||||||
host?: string
|
host?: string
|
||||||
}): Promise<{ success: boolean; data?: { url: string; config: { port: number; host: string } } }> =>
|
}): Promise<{
|
||||||
invoke("mcp_server_start", { config }),
|
success: boolean
|
||||||
|
data?: { url: string; config: { port: number; host: string } }
|
||||||
|
}> => invoke("mcp_server_start", { config }),
|
||||||
mcpServerStop: (): Promise<{ success: boolean }> => invoke("mcp_server_stop"),
|
mcpServerStop: (): Promise<{ success: boolean }> => invoke("mcp_server_stop"),
|
||||||
mcpServerStatus: (): Promise<{
|
mcpServerStatus: (): Promise<{
|
||||||
success: boolean
|
success: boolean
|
||||||
|
|||||||
@@ -20,9 +20,8 @@ export class EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
once(event: string | symbol, listener: eventListener): this {
|
once(event: string | symbol, listener: eventListener): this {
|
||||||
const self = this
|
const onceListener: eventListener = (...args) => {
|
||||||
const onceListener: eventListener = function (...args) {
|
this.off(event, onceListener)
|
||||||
self.off(event, onceListener)
|
|
||||||
listener(...args)
|
listener(...args)
|
||||||
}
|
}
|
||||||
return this.on(event, onceListener)
|
return this.on(event, onceListener)
|
||||||
@@ -72,9 +71,8 @@ export class Context extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
once(event: string | symbol, listener: eventListener): this {
|
once(event: string | symbol, listener: eventListener): this {
|
||||||
const self = this
|
const onceListener: eventListener = (...args) => {
|
||||||
const onceListener: eventListener = function (...args) {
|
this.off(event, onceListener)
|
||||||
self.off(event, onceListener)
|
|
||||||
listener(...args)
|
listener(...args)
|
||||||
}
|
}
|
||||||
super.on(event, onceListener)
|
super.on(event, onceListener)
|
||||||
|
|||||||
Reference in New Issue
Block a user