diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx
index b50d09f..08d27aa 100644
--- a/frontend/src/components/Sidebar.tsx
+++ b/frontend/src/components/Sidebar.tsx
@@ -31,7 +31,8 @@ import { Tree, message, Dropdown, MenuProps, Input, Button, Modal, Form, Badge,
TagOutlined,
CheckOutlined,
FilterOutlined,
- DashboardOutlined
+ DashboardOutlined,
+ WarningOutlined
} from '@ant-design/icons';
import { useStore } from '../store';
import { buildOverlayWorkbenchTheme } from '../utils/overlayWorkbenchTheme';
@@ -3396,11 +3397,18 @@ const Sidebar: React.FC<{ onEditConnection?: (conn: SavedConnection) => void }>
}
},
{
- key: 'drop-db',
- label: '删除数据库',
- icon: ,
- danger: true,
- onClick: () => handleDeleteDatabase(node)
+ key: 'danger-zone',
+ label: '危险操作',
+ icon: ,
+ children: [
+ {
+ key: 'drop-db',
+ label: '删除数据库',
+ icon: ,
+ danger: true,
+ onClick: () => handleDeleteDatabase(node)
+ }
+ ]
},
{
key: 'refresh',
@@ -3513,11 +3521,18 @@ const Sidebar: React.FC<{ onEditConnection?: (conn: SavedConnection) => void }>
}
},
{
- key: 'drop-view',
- label: '删除视图',
- icon: ,
- danger: true,
- onClick: () => handleDropView(node)
+ key: 'danger-zone',
+ label: '危险操作',
+ icon: ,
+ children: [
+ {
+ key: 'drop-view',
+ label: '删除视图',
+ icon: ,
+ danger: true,
+ onClick: () => handleDropView(node)
+ }
+ ]
},
];
} else if (node.type === 'routine') {
@@ -3538,11 +3553,18 @@ const Sidebar: React.FC<{ onEditConnection?: (conn: SavedConnection) => void }>
},
{ type: 'divider' },
{
- key: 'drop-routine',
- label: `删除${typeLabel}`,
- icon: ,
- danger: true,
- onClick: () => handleDropRoutine(node)
+ key: 'danger-zone',
+ label: '危险操作',
+ icon: ,
+ children: [
+ {
+ key: 'drop-routine',
+ label: `删除${typeLabel}`,
+ icon: ,
+ danger: true,
+ onClick: () => handleDropRoutine(node)
+ }
+ ]
},
];
} else if (node.type === 'table') {
@@ -3594,11 +3616,18 @@ const Sidebar: React.FC<{ onEditConnection?: (conn: SavedConnection) => void }>
}
},
{
- key: 'drop-table',
- label: '删除表',
- icon: ,
- danger: true,
- onClick: () => handleDeleteTable(node)
+ key: 'danger-zone',
+ label: '危险操作',
+ icon: ,
+ children: [
+ {
+ key: 'drop-table',
+ label: '删除表',
+ icon: ,
+ danger: true,
+ onClick: () => handleDeleteTable(node)
+ }
+ ]
},
{
type: 'divider'
diff --git a/frontend/src/components/TableOverview.tsx b/frontend/src/components/TableOverview.tsx
index da611e3..b93a66f 100644
--- a/frontend/src/components/TableOverview.tsx
+++ b/frontend/src/components/TableOverview.tsx
@@ -1,6 +1,6 @@
import React, { useState, useEffect, useMemo, useCallback } from 'react';
import { Input, Spin, Empty, Dropdown, message, Tooltip, Modal } from 'antd';
-import { TableOutlined, SearchOutlined, ReloadOutlined, SortAscendingOutlined, DatabaseOutlined, ConsoleSqlOutlined, EditOutlined, CopyOutlined, SaveOutlined, DeleteOutlined, ExportOutlined, AppstoreOutlined, UnorderedListOutlined } from '@ant-design/icons';
+import { TableOutlined, SearchOutlined, ReloadOutlined, SortAscendingOutlined, DatabaseOutlined, ConsoleSqlOutlined, EditOutlined, CopyOutlined, SaveOutlined, DeleteOutlined, ExportOutlined, AppstoreOutlined, UnorderedListOutlined, WarningOutlined } from '@ant-design/icons';
import { useStore } from '../store';
import { DBQuery, DBShowCreateTable, ExportTable, DropTable, RenameTable } from '../../wailsjs/go/app/App';
import type { TabData } from '../types';
@@ -432,7 +432,9 @@ const TableOverview: React.FC = ({ tab }) => {
{ key: 'copy-structure', label: '复制表结构', icon: , onClick: () => handleCopyStructure(t.name) },
{ key: 'backup-table', label: '备份表 (SQL)', icon: , onClick: () => handleExport(t.name, 'sql') },
{ key: 'rename-table', label: '重命名表', icon: , onClick: () => handleRenameTable(t.name) },
- { key: 'drop-table', label: '删除表', icon: , danger: true, onClick: () => handleDeleteTable(t.name) },
+ { key: 'danger-zone', label: '危险操作', icon: , children: [
+ { key: 'drop-table', label: '删除表', icon: , danger: true, onClick: () => handleDeleteTable(t.name) }
+ ]},
{ type: 'divider' },
{ key: 'export', label: '导出表数据', icon: , children: [
{ key: 'export-csv', label: '导出 CSV', onClick: () => handleExport(t.name, 'csv') },
@@ -544,7 +546,9 @@ const TableOverview: React.FC = ({ tab }) => {
{ key: 'copy-structure', label: '复制表结构', icon: , onClick: () => handleCopyStructure(t.name) },
{ key: 'backup-table', label: '备份表 (SQL)', icon: , onClick: () => handleExport(t.name, 'sql') },
{ key: 'rename-table', label: '重命名表', icon: , onClick: () => handleRenameTable(t.name) },
- { key: 'drop-table', label: '删除表', icon: , danger: true, onClick: () => handleDeleteTable(t.name) },
+ { key: 'danger-zone', label: '危险操作', icon: , children: [
+ { key: 'drop-table', label: '删除表', icon: , danger: true, onClick: () => handleDeleteTable(t.name) }
+ ]},
{ type: 'divider' },
{ key: 'export', label: '导出表数据', icon: , children: [
{ key: 'export-csv', label: '导出 CSV', onClick: () => handleExport(t.name, 'csv') },