mirror of
https://github.com/SECTL/SecScore.git
synced 2026-07-19 03:54: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:
@@ -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
|
||||
|
||||
|
||||
@@ -2,7 +2,4 @@
|
||||
trigger: always_on
|
||||
---
|
||||
|
||||
1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint)
|
||||
2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier)
|
||||
3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有)
|
||||
4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。
|
||||
1.每次完成任务之前必须跑一遍测试(比如说npm系的typecheck/lint)2.每次完成任务之前必须跑一遍格式化(比如说npm系的prettier)3.任务完成时详细输出你所做的事情和需要用户确认的问题(如有)4.每次规划任务必须按照步骤来,每个步骤结束后遵循第三条规定。
|
||||
|
||||
+7
-7
@@ -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")
|
||||
```
|
||||
|
||||
说明:
|
||||
|
||||
@@ -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)?;
|
||||
|
||||
@@ -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<oobeProps> = ({ 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<oobeStep>("entry")
|
||||
|
||||
@@ -1163,7 +1163,9 @@ export const Settings: React.FC<{ permission: permissionLevel }> = ({ permission
|
||||
<div style={{ fontSize: "16px", fontWeight: 600, marginBottom: "8px" }}>
|
||||
{t("settings.mcp.title")}
|
||||
</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")}
|
||||
</div>
|
||||
<Space style={{ marginBottom: "12px" }}>
|
||||
|
||||
@@ -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<DbStatus>({ type: "sqlite", connected: true })
|
||||
const [syncLoading, setSyncLoading] = useState(false)
|
||||
const [messageApi, contextHolder] = message.useMessage()
|
||||
|
||||
@@ -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') => {
|
||||
|
||||
@@ -37,7 +37,7 @@ export const RuleComponent: React.FC<RuleComponentProps> = ({ initialData, onCha
|
||||
const handleQueryChange = (newQuery: RuleGroupType) => {
|
||||
setQuery(newQuery)
|
||||
if (onChange) {
|
||||
const ruleData = queryToAutoScoreRule(newQuery)
|
||||
const ruleData = queryToAutoScoreRule()
|
||||
onChange(ruleData)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user