diff --git a/CHANGELOG.internal.md b/CHANGELOG.internal.md new file mode 100644 index 0000000..2a057c2 --- /dev/null +++ b/CHANGELOG.internal.md @@ -0,0 +1,117 @@ +# 内部更新日志 + +> 本文档记录所有技术细节,包括代码重构、构建优化等内部改动 + +## [0.3.0] - 2026-02-04 + +### 新增功能 ✨ +- **Markdown 渲染增强** + - 集成 Mermaid.js v11,支持流程图、时序图、类图、甘特图等 10+ 种图表类型 + - 集成 CodeMirror + Highlight.js,支持 27 种常用编程语言语法高亮 + - 实现编辑/预览模式切换时的图表自动重渲染机制 +- **TypeScript 类型系统** + - 新增 `web/src/types/file-system.ts` 完整类型定义 + - 所有 Vue 组件迁移到 TypeScript + - 新增 `vue-tsc` 类型检查 + +### 代码重构 🔧 +- **文件系统模块化** + - 拆分 FileSystem/index.vue (2100+ 行) 为模块化架构 + - 提取 6 个 Composables:useFileOperations、useFavorites、usePathNavigation、useFilePreview、useFileEdit、useCommonPaths + - 拆分为 5 个子组件:Toolbar、Sidebar、FileListPanel、FileEditorPanel、ContextMenu +- **公共函数提取** + - 提取 `sortFileList` 公共函数,统一文件列表排序逻辑 + - 应用到 FileSystem/index.vue、index-simple.vue、DeviceTest.vue + - 优化 `fileUtils.js`,新增 8 个工具函数 + +### 构建优化 📦 +- **Source Map 优化** + - 生产环境禁用 source map 生成 + - 配置 `sourcemap: false` in vite.config.js +- **依赖优化** + - CodeMirror 语言包按需加载配置 + - Vite optimizeDeps 预构建优化 + +### Bug 修复 🐛 +- 修复 Mermaid 图表在编辑/预览切换时不渲染的问题(添加 watch + nextTick) +- 修复亮色模式下代码高亮对比度不足(添加自定义 CSS 变量) +- 修复暗色模式下 Mermaid 图表显示异常(样式适配) + +### 文件变更统计 +- 130 个文件修改 +- +11,655 / -12,233 行代码 +- 主要变更:`web/src/components/FileSystem/` 目录重构 + +--- + +## [0.1.5] - 2026-01-22 + +### 新增功能 ✨ +- **文件管理模块** + - 创建 FileSystem.vue 单体组件(559 行) + - 支持文件浏览、编辑、重命名、删除等基础操作 + - 智能文件类型图标识别 +- **版本更新管理** + - 集成版本检查 API + - 支持自动下载更新包 + - 新增 UpdatePanel 更新面板组件(427 行) +- **系统信息查询** + - CPU 信息(核心数、使用率、型号) + - 内存信息(总量、可用量、使用率) + - 磁盘信息(分区、使用量、使用率) + +### 技术实现 🔧 +- 使用 gopsutil/v3 库获取系统信息 +- SQLite 存储连接和查询历史 +- 文件操作使用 Go runtime/os 包 + +--- + +## [0.2.0] - 2026-01-28 + +### 新增功能 ✨ +- **应用配置管理** + - 新增 ConfigAPI 和 ConfigService + - 新增设置面板组件 + - 支持自定义显示模块和默认启动页 +- **智能更新提醒** + - 新增版本更新通知组件 + - 版本检查和下载机制 + +### 代码重构 🔧 +- **模块重命名** - 项目重命名为 u-desk +- **依赖更新** - 所有依赖更新到最新版本 +- **代码架构优化** - 提取公共函数,消除重复代码 +- **启动流程优化** - 按需加载模块 + +--- + +## [0.1.0] - 2026-01-18 + +### 新增功能 ✨ +- **数据库管理** + - 支持 MySQL、MongoDB、Redis 连接 + - SQL 查询执行和结果展示 + - 连接池管理(467 行 sql_exec_service.go) + - 多标签页查询结果管理 + +### 技术实现 🔧 +- MySQL:使用 go-sql-driver/mysql +- MongoDB:使用 mongo-driver +- Redis:使用 go-redis/v9 +- 连接池:自定义实现(236 行 pool.go) +- SQLite:存储查询历史和连接配置 + +### 文件变更 +- 15 个文件新增 +- +3,700+ 行代码 + +--- + +## 版本规范 + +版本号格式:`主版本号.次版本号.修订号` (MAJOR.MINOR.PATCH) + +- **主版本号** - 不兼容的 API 修改 +- **次版本号** - 向下兼容的功能性新增 +- **修订号** - 向下兼容的问题修复 diff --git a/CHANGELOG.md b/CHANGELOG.md index c90c34d..60c1009 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,24 +1,32 @@ # 更新日志 +## [0.3.0] - 2026-02-04 + +### 新增 ✨ +- **Markdown 图表支持** - 支持 Mermaid 流程图、时序图、类图等多种图表渲染 +- **代码语法高亮** - 支持 20+ 种常用编程语言的语法高亮 +- **文件列表优化** - 文件夹优先显示,同类型按名称排序 + +### 修复 🐛 +- 修复编辑/预览模式切换时图表不渲染的问题 +- 修复不同主题下代码高亮显示问题 + +--- + ## [0.2.0] - 2026-01-28 ### 新增 ✨ - **应用配置管理** - 全新设置面板,支持自定义显示模块和默认启动页 -- **智能更新提醒** - 新增版本更新通知组件,第一时间获取新版本信息 -- **配置服务层** - 新增 ConfigAPI 和 ConfigService 实现统一配置管理 - -### 优化 ⚡ -- **文件系统模块化重构** - 提升代码质量和可维护性 -- **代码架构优化** - 提取公共函数,消除重复代码 -- **启动流程优化** - 按需加载模块,提升启动性能 +- **智能更新提醒** - 新增版本更新通知组件 +- **模块重命名** - 应用更名为 u-desk --- ## [0.1.5] - 2026-01-22 ### 新增 ✨ -- **文件管理模块** - 完整的文件浏览、编辑、操作功能 -- **版本更新管理** - 自动检查和应用更新 +- **文件管理模块** - 文件浏览、编辑、操作功能 +- **版本更新管理** - 自动检查和下载更新 - **系统信息查询** - CPU、内存、磁盘等硬件信息 --- diff --git a/app.go b/app.go index b9f734d..e519367 100644 --- a/app.go +++ b/app.go @@ -49,13 +49,16 @@ func (a *App) Startup(ctx context.Context) { } _ = sqliteDB // 全局 DB 已由 InitFast() 设置 - // 2. 初始化配置服务(必需,用于读取模块启用状态) + // 2. 初始化配置服务 configService, err := api.NewConfigAPI() if err != nil { panic(fmt.Sprintf("配置服务初始化失败: %v", err)) } a.configAPI = configService + // 2.5. 迁移旧配置 + _ = a.configAPI.MigrateTabConfig() + // 3. 读取配置,获取可见的 Tabs visibleTabs := a.getVisibleTabs() fmt.Printf("[启动] 可用的模块: %v\n", visibleTabs) diff --git a/internal/api/config_api.go b/internal/api/config_api.go index 6519da1..99e90b4 100644 --- a/internal/api/config_api.go +++ b/internal/api/config_api.go @@ -135,3 +135,48 @@ func (api *ConfigAPI) SaveAppConfig(req SaveAppConfigRequest) (map[string]interf "data": nil, }, nil } + +// MigrateTabConfig 迁移旧配置 +func (api *ConfigAPI) MigrateTabConfig() error { + config, _ := api.configService.GetTabConfig() + if config == nil { + return nil + } + + // 检查是否包含 device + hasDevice := false + for _, tab := range config.AvailableTabs { + if tab.Key == "device" { + hasDevice = true + break + } + } + if !hasDevice { + return nil + } + + // 过滤掉 device + newTabs := make([]service.TabDefinition, 0, len(config.AvailableTabs)) + newVisible := make([]string, 0, len(config.VisibleTabs)) + for _, tab := range config.AvailableTabs { + if tab.Key != "device" { + newTabs = append(newTabs, tab) + } + } + for _, key := range config.VisibleTabs { + if key != "device" { + newVisible = append(newVisible, key) + } + } + + defaultTab := config.DefaultTab + if defaultTab == "device" { + defaultTab = "file-system" + } + + return api.configService.SaveTabConfig(&service.TabConfig{ + AvailableTabs: newTabs, + VisibleTabs: newVisible, + DefaultTab: defaultTab, + }) +} diff --git a/internal/service/config_service.go b/internal/service/config_service.go index b5085e8..9fece41 100644 --- a/internal/service/config_service.go +++ b/internal/service/config_service.go @@ -41,12 +41,11 @@ type TabConfig struct { // 默认 Tab 配置 var defaultTabConfig = TabConfig{ AvailableTabs: []TabDefinition{ - {Key: "db-cli", Title: "数据库", Enabled: true}, {Key: "file-system", Title: "文件管理", Enabled: true}, - {Key: "device", Title: "设备调用测试", Enabled: true}, + {Key: "db-cli", Title: "数据库", Enabled: true}, }, - VisibleTabs: []string{"db-cli", "file-system", "device"}, - DefaultTab: "db-cli", + VisibleTabs: []string{"file-system", "db-cli"}, + DefaultTab: "file-system", } const ( diff --git a/internal/service/version.go b/internal/service/version.go index 566f773..7b9af7e 100644 --- a/internal/service/version.go +++ b/internal/service/version.go @@ -13,7 +13,7 @@ import ( // ==================== 常量定义 ==================== // AppVersion 应用版本号(发布时直接修改此处) -const AppVersion = "0.2.0" +const AppVersion = "0.3.0" // ==================== 类型定义 ==================== diff --git a/wails.json b/wails.json index d011ca8..df9c007 100644 --- a/wails.json +++ b/wails.json @@ -1,12 +1,12 @@ { "name": "u-desk", "outputfilename": "u-desk", - "version": "0.2.0", + "version": "0.3.0", "frontend:install": "npm install", "frontend:build": "npm run build", "author": { "name": "u-desk", - "email": "info@example.com" + "email": "lxy208@126.com" }, "frontend:dir": "web", "wailsjsdir": "./web/src/wailsjs" diff --git a/web/src/App.vue b/web/src/App.vue index 394ab5c..5ca6eca 100644 --- a/web/src/App.vue +++ b/web/src/App.vue @@ -50,7 +50,7 @@ - + @@ -76,7 +76,6 @@ import {computed, onMounted, ref, watch} from 'vue' import {IconSettings} from '@arco-design/web-vue/es/icon' import {Message} from '@arco-design/web-vue' -import DeviceTest from './components/DeviceTest.vue' import DbCli from './views/db-cli/index.vue' import ThemeToggle from './components/ThemeToggle.vue' import FileSystem from './components/FileSystem/index.vue' @@ -86,9 +85,9 @@ import UpdateNotification from './components/UpdateNotification.vue' // 存储键 const ACTIVE_TAB_STORAGE_KEY = 'app-active-tab' -// 从 localStorage 恢复上次打开的区域,默认为 'db-cli' +// 从 localStorage 恢复上次打开的区域,默认为 'file-system' const savedTab = localStorage.getItem(ACTIVE_TAB_STORAGE_KEY) -const activeTab = ref((savedTab === 'user' ? 'db-cli' : savedTab) || 'db-cli') +const activeTab = ref((savedTab === 'user' ? 'file-system' : savedTab) || 'file-system') const showSettings = ref(false) const isMaximized = ref(false) @@ -101,7 +100,7 @@ const checkedUpdate = ref(false) const appConfig = ref({ tabs: [], visibleTabs: [], - defaultTab: 'db-cli' + defaultTab: 'file-system' }) // 可见 Tabs(根据配置动态生成) @@ -109,9 +108,8 @@ const visibleTabs = computed(() => { if (!appConfig.value.tabs || appConfig.value.tabs.length === 0) { // 默认配置 return [ - {key: 'db-cli', title: '数据库'}, {key: 'file-system', title: '文件管理'}, - {key: 'device', title: '设备调用测试'} + {key: 'db-cli', title: '数据库'} ] } @@ -148,7 +146,7 @@ const loadConfig = async () => { appConfig.value = { tabs: syncedTabs, visibleTabs: visibleTabs, - defaultTab: result.data.defaultTab || 'db-cli' + defaultTab: result.data.defaultTab || 'file-system' } // 设置默认 Tab @@ -169,12 +167,11 @@ const loadConfig = async () => { const useDefaultConfig = () => { appConfig.value = { tabs: [ - {key: 'db-cli', title: '数据库', visible: true, enabled: true}, {key: 'file-system', title: '文件管理', visible: true, enabled: true}, - {key: 'device', title: '设备调用测试', visible: true, enabled: true} + {key: 'db-cli', title: '数据库', visible: true, enabled: true} ], - visibleTabs: ['db-cli', 'file-system', 'device'], - defaultTab: 'db-cli' + visibleTabs: ['file-system', 'db-cli'], + defaultTab: 'file-system' } } @@ -215,9 +212,8 @@ const handleSaveConfig = async (config) => { // 获取组件 const getComponent = (key) => { const components = { - 'db-cli': DbCli, 'file-system': FileSystem, - 'device': DeviceTest + 'db-cli': DbCli } return components[key] || null }