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) },