diff --git a/frontend/src/components/Sidebar.tsx b/frontend/src/components/Sidebar.tsx index de6b341..61db2b7 100644 --- a/frontend/src/components/Sidebar.tsx +++ b/frontend/src/components/Sidebar.tsx @@ -3829,6 +3829,13 @@ const Sidebar: React.FC<{ onEditConnection?: (conn: SavedConnection) => void }> const currentSort = tableSortPreference[sortPreferenceKey] || 'name'; return [ + { + key: 'new-table', + label: '新建表', + icon: , + onClick: () => openNewTableDesign(node) + }, + { type: 'divider' }, { key: 'sort-by-name', label: '按名称排序', diff --git a/frontend/src/components/TableOverview.tsx b/frontend/src/components/TableOverview.tsx index cd69e20..9c625a0 100644 --- a/frontend/src/components/TableOverview.tsx +++ b/frontend/src/components/TableOverview.tsx @@ -292,6 +292,20 @@ const TableOverview: React.FC = ({ tab }) => { } }, [buildConfig, tab.dbName]); + const handleCopyTableName = useCallback(async (tableName: string) => { + const name = String(tableName || '').trim(); + if (!name) { + message.warning('表名为空,无法复制'); + return; + } + try { + await navigator.clipboard.writeText(name); + message.success('表名已复制到剪贴板'); + } catch (e: any) { + message.error('复制表名失败: ' + (e?.message || String(e))); + } + }, []); + const handleExport = useCallback(async (tableName: string, format: string) => { const config = buildConfig(); if (!config) return; @@ -538,6 +552,7 @@ const TableOverview: React.FC = ({ tab }) => { }}, { type: 'divider' }, { key: 'design-table', label: '设计表', icon: , onClick: () => openDesign(t.name) }, + { key: 'copy-table-name', label: '复制表名', icon: , onClick: () => handleCopyTableName(t.name) }, { 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) }, @@ -624,6 +639,7 @@ const TableOverview: React.FC = ({ tab }) => { }}, { type: 'divider' }, { key: 'design-table', label: '设计表', icon: , onClick: () => openDesign(t.name) }, + { key: 'copy-table-name', label: '复制表名', icon: , onClick: () => handleCopyTableName(t.name) }, { 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) },