From 16836375c49daf605541b7cdd524dd6fa133aedd Mon Sep 17 00:00:00 2001 From: Syngnat Date: Fri, 15 May 2026 22:33:31 +0800 Subject: [PATCH] =?UTF-8?q?=F0=9F=90=9B=20fix(table-menu):=20=E8=A1=A5?= =?UTF-8?q?=E9=BD=90=E8=A1=A8=E7=9B=B8=E5=85=B3=E5=8F=B3=E9=94=AE=E5=BF=AB?= =?UTF-8?q?=E6=8D=B7=E6=93=8D=E4=BD=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 表分组右键菜单新增新建表入口 - 表概览卡片和列表右键菜单新增复制表名 - 对齐左侧树与表视图的右键菜单体验 --- frontend/src/components/Sidebar.tsx | 7 +++++++ frontend/src/components/TableOverview.tsx | 16 ++++++++++++++++ 2 files changed, 23 insertions(+) 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) },