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