From 925348e5832af6bd2a2a5abf3c3ec7057e925fcf Mon Sep 17 00:00:00 2001 From: attacker Date: Mon, 15 Jun 2026 02:21:04 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A7=BB=E9=99=A4Header=20Tab=E6=A0=8F(?= =?UTF-8?q?=E4=B8=8E=E4=BE=A7=E8=BE=B9=E6=A0=8F=E9=87=8D=E5=A4=8D);=20?= =?UTF-8?q?=E4=BF=AE=E5=A4=8Dapprove/reject=20400(ApproveRequest=E5=8E=BB?= =?UTF-8?q?=E6=8E=89required=20binding)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/internal/models/approval.go | 2 +- .../src/components/audit/SQLAuditManager.tsx | 43 ++++++++++++++++--- frontend/src/services/api.ts | 2 +- 3 files changed, 38 insertions(+), 9 deletions(-) diff --git a/backend/internal/models/approval.go b/backend/internal/models/approval.go index c8af976..5964be5 100644 --- a/backend/internal/models/approval.go +++ b/backend/internal/models/approval.go @@ -94,7 +94,7 @@ type CreateApprovalProcessRequest struct { // ApproveRequest 审批请求 type ApproveRequest struct { - Status string `json:"status" binding:"required,oneof=approved rejected"` + Status string `json:"status"` Comment string `json:"comment"` } diff --git a/frontend/src/components/audit/SQLAuditManager.tsx b/frontend/src/components/audit/SQLAuditManager.tsx index cf8d526..20741c2 100644 --- a/frontend/src/components/audit/SQLAuditManager.tsx +++ b/frontend/src/components/audit/SQLAuditManager.tsx @@ -51,6 +51,35 @@ interface AuditRule { category: string; } +const mapRecord = (r: any): SQLAuditRecord => ({ + id: String(r.id), + sqlContent: r.sql_content || '', + sqlType: r.sql_type || '', + databaseName: r.database_name || '', + tableName: r.table_name || '', + riskLevel: (r.risk_level || 'safe') as SQLAuditRecord['riskLevel'], + riskRules: (() => { try { return JSON.parse(r.risk_rules || '[]'); } catch { return []; } })(), + status: (r.status || 'pending') as SQLAuditRecord['status'], + executor: r.executor || '', + approver: r.approver || '', + executeTime: r.execute_time || undefined, + createdAt: r.created_at ? new Date(r.created_at).toLocaleString('zh-CN') : '', + affectedRows: r.affected_rows || 0, + executionTime: r.execution_time || undefined, + sourceIP: r.source_ip || '', + application: r.application || '', + ticketId: r.ticket_id || '', +}); + +const mapRule = (r: any): AuditRule => ({ + id: String(r.id), + name: r.name || '', + description: r.description || '', + enabled: r.enabled ?? true, + severity: (r.severity || 'medium') as AuditRule['severity'], + category: r.category || '', +}); + const SQLAuditManager: React.FC = () => { const [records, setRecords] = useState([]); const [rules, setRules] = useState([]); @@ -74,7 +103,7 @@ const SQLAuditManager: React.FC = () => { setLoading(true); try { const res = await sqlAuditApi.getRecords(); - setRecords(res.data || []); + setRecords((res.list || []).map(mapRecord)); } catch (error) { toast.error('获取SQL审计记录失败'); } finally { @@ -85,7 +114,7 @@ const SQLAuditManager: React.FC = () => { const fetchRules = async () => { try { const res = await sqlAuditApi.getRules(); - setRules(res.data || []); + setRules((res.list || []).map(mapRule)); } catch (error) { toast.error('获取审计规则失败'); } @@ -97,7 +126,7 @@ const SQLAuditManager: React.FC = () => { return; } try { - const res = await sqlAuditApi.analyzeSQL({ sql: sqlContent }); + await sqlAuditApi.analyzeSQL({ sql: sqlContent }); toast.success('SQL分析完成'); setNewAuditOpen(false); setSqlContent(''); @@ -137,10 +166,10 @@ const SQLAuditManager: React.FC = () => { } }; - const toggleRule = async (ruleId: string, enabled: boolean) => { + const toggleRule = async (ruleId: string) => { try { - await sqlAuditApi.toggleRule(ruleId, enabled); - setRules(rules.map(r => r.id === ruleId ? { ...r, enabled } : r)); + await sqlAuditApi.toggleRule(ruleId); + fetchRules(); toast.success('规则状态已更新'); } catch (error) { toast.error('更新规则失败'); @@ -432,7 +461,7 @@ const SQLAuditManager: React.FC = () => {
toggleRule(rule.id, checked)} + onCheckedChange={() => toggleRule(rule.id)} />
diff --git a/frontend/src/services/api.ts b/frontend/src/services/api.ts index 2c30c7d..46078c3 100644 --- a/frontend/src/services/api.ts +++ b/frontend/src/services/api.ts @@ -522,7 +522,7 @@ export const auditApi = { }, }; -// ==================== SQL 审计 API(暂无后端,返回空结果优雅降级) ==================== +// ==================== SQL 审计 API ==================== export const sqlAuditApi = { getRecords: async (params?: Record) => { return http.get('/sql-audit/records', params);