diff --git a/frontend/src/App.tool-center.test.ts b/frontend/src/App.tool-center.test.ts new file mode 100644 index 0000000..8813531 --- /dev/null +++ b/frontend/src/App.tool-center.test.ts @@ -0,0 +1,21 @@ +import { describe, expect, it } from 'vitest'; +import { readFileSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; + +const appSource = readFileSync( + fileURLToPath(new globalThis.URL('./App.tsx', import.meta.url)), + 'utf8', +); + +describe('tool center menu entries', () => { + it('exposes snippet management next to shortcut management', () => { + expect(appSource).toContain("key: 'snippet-settings'"); + expect(appSource).toContain("title: '代码片段管理'"); + expect(appSource).toContain('setIsSnippetModalOpen(true)'); + + const snippetIndex = appSource.indexOf("key: 'snippet-settings'"); + const shortcutIndex = appSource.indexOf("key: 'shortcut-settings'", snippetIndex); + expect(snippetIndex).toBeGreaterThan(-1); + expect(shortcutIndex).toBeGreaterThan(snippetIndex); + }); +}); diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx index f6e8ff3..53d88d0 100644 --- a/frontend/src/App.tsx +++ b/frontend/src/App.tsx @@ -1,7 +1,7 @@ import React, { useState, useEffect, useMemo, useCallback } from 'react'; import { Layout, Button, ConfigProvider, theme, message, Modal, Spin, Slider, Progress, Switch, Input, InputNumber, Select, Segmented, Tooltip } from 'antd'; import zhCN from 'antd/locale/zh_CN'; -import { PlusOutlined, ConsoleSqlOutlined, UploadOutlined, DownloadOutlined, CloudDownloadOutlined, BugOutlined, ToolOutlined, GlobalOutlined, InfoCircleOutlined, GithubOutlined, SkinOutlined, CheckOutlined, MinusOutlined, BorderOutlined, CloseOutlined, SettingOutlined, LinkOutlined, BgColorsOutlined, AppstoreOutlined, RobotOutlined, FolderOpenOutlined, HddOutlined, SafetyCertificateOutlined, SwitcherOutlined } from '@ant-design/icons'; +import { PlusOutlined, ConsoleSqlOutlined, UploadOutlined, DownloadOutlined, CloudDownloadOutlined, BugOutlined, ToolOutlined, GlobalOutlined, InfoCircleOutlined, GithubOutlined, SkinOutlined, CheckOutlined, MinusOutlined, BorderOutlined, CloseOutlined, SettingOutlined, LinkOutlined, BgColorsOutlined, AppstoreOutlined, RobotOutlined, FolderOpenOutlined, HddOutlined, SafetyCertificateOutlined, SwitcherOutlined, CodeOutlined } from '@ant-design/icons'; import { BrowserOpenURL, Environment, EventsOn, Quit, WindowFullscreen, WindowGetPosition, WindowGetSize, WindowIsFullscreen, WindowIsMaximised, WindowIsMinimised, WindowIsNormal, WindowMaximise, WindowMinimise, WindowSetPosition, WindowSetSize, WindowUnfullscreen, WindowUnmaximise } from '../wailsjs/runtime'; import Sidebar from './components/Sidebar'; import TabManager from './components/TabManager'; @@ -3020,6 +3020,16 @@ function App() { setIsDataRootModalOpen(true); }, }, + { + key: 'snippet-settings', + icon: , + title: '代码片段管理', + description: '管理 SQL 代码片段和前缀补全。', + onClick: () => { + setIsToolsModalOpen(false); + setIsSnippetModalOpen(true); + }, + }, { key: 'shortcut-settings', icon: ,