Private
Public Access
1
0

新增:连接管理、数据查询等功能

This commit is contained in:
2026-01-22 18:34:59 +08:00
parent 95d3a20292
commit 652f5e5d60
87 changed files with 15082 additions and 162 deletions

View File

@@ -0,0 +1,100 @@
import type { Component } from 'vue'
import type { MenuItem } from '../components/ContextMenu.vue'
import { IconEye, IconEdit, IconDelete, IconRefresh, IconCheck, IconCode, IconCopy, IconPlus } from '@arco-design/web-vue/es/icon'
/**
* 菜单项注册表
* 根据节点类型返回对应的菜单项配置
*/
export function useMenuRegistry() {
/**
* 获取连接节点菜单项
*/
const getConnectionMenuItems = (): MenuItem[] => {
return [
{ key: 'view-structure', label: '查看结构', icon: IconEye },
{ key: 'edit', label: '编辑连接', icon: IconEdit },
{ key: 'delete', label: '删除连接', icon: IconDelete, divider: true },
{ key: 'refresh', label: '刷新', icon: IconRefresh },
{ key: 'test', label: '测试连接', icon: IconCheck }
]
}
/**
* 获取数据库节点菜单项
*/
const getDatabaseMenuItems = (dbType: string): MenuItem[] => {
const items: MenuItem[] = []
// 新建表/集合/Key
if (dbType === 'mysql') {
items.push({ key: 'create-table', label: '新建表', icon: IconPlus })
} else if (dbType === 'mongo') {
items.push({ key: 'create-table', label: '新建集合', icon: IconPlus })
} else if (dbType === 'redis') {
items.push({ key: 'create-table', label: '新建Key', icon: IconPlus })
}
items.push({ key: 'view-structure', label: '查看结构', icon: IconEye, divider: true })
if (dbType === 'mysql' || dbType === 'mongo') {
items.push({ key: 'generate-sql', label: dbType === 'mysql' ? '生成SELECT语句' : '生成find语句', icon: IconCode })
} else if (dbType === 'redis') {
items.push({ key: 'generate-sql', label: '生成KEYS命令', icon: IconCode })
}
items.push({ key: 'refresh', label: '刷新', icon: IconRefresh, divider: true })
return items
}
/**
* 获取表节点菜单项
*/
const getTableMenuItems = (dbType: string): MenuItem[] => {
const items: MenuItem[] = [
{ key: 'view-structure', label: '查看结构', icon: IconEye }
]
if (dbType === 'mysql') {
items.push({ key: 'generate-sql', label: '生成SELECT语句', icon: IconCode })
items.push({ key: 'copy-name', label: '复制表名', icon: IconCopy, divider: true })
} else if (dbType === 'mongo') {
items.push({ key: 'generate-sql', label: '生成find语句', icon: IconCode })
items.push({ key: 'copy-name', label: '复制集合名', icon: IconCopy, divider: true })
} else if (dbType === 'redis') {
items.push({ key: 'generate-sql', label: '生成GET命令', icon: IconCode })
items.push({ key: 'copy-name', label: '复制Key名', icon: IconCopy, divider: true })
}
items.push({ key: 'refresh', label: '刷新', icon: IconRefresh })
return items
}
/**
* 根据节点类型获取菜单项
*/
const getMenuItems = (nodeType: string, dbType?: string): MenuItem[] => {
switch (nodeType) {
case 'connection':
return getConnectionMenuItems()
case 'database':
return getDatabaseMenuItems(dbType || 'mysql')
case 'table':
case 'collection':
case 'key':
return getTableMenuItems(dbType || 'mysql')
default:
return []
}
}
return {
getMenuItems,
getConnectionMenuItems,
getDatabaseMenuItems,
getTableMenuItems
}
}