Private
Public Access
1
0
Files
u-desk/CHANGELOG.internal.md
绝尘 691e38604f 发布:v0.3.3 版本历史模块 + 域名迁移 + 站点版本信息修正
- 版本号更新至 0.3.3(version.go/wails.json/README.md)
- 更新检查域名迁移 img.1216.top → c.1216.top
- 新增 views/version 版本历史 Tab 页面(时间线 UI)
- 设置面板新增版本历史入口按钮
- CHANGELOG 补全 0.3.3 全部 17 个提交记录
- 站点 HTML 修正(删除错误 v0.4.0,v0.3.3 为最新)
- 生成 last-version.json / versions.json 发布数据
2026-04-14 00:43:21 +08:00

504 lines
16 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 内部更新日志
> 本文档记录所有技术细节,包括代码重构、构建优化等内部改动
## [0.3.3] - 2026-04-13
### 架构新增 🏗️
#### PDF 导出模块
新增 `internal/api/pdf_api.go`,提供两种导出方式:
- **chromedp**: 无头浏览器渲染 HTML → PDF支持完整 CSS 样式
- **gofpdf** (`app.go:ExportMarkdownToPDF`): 纯 Go 实现,解析 Markdown 标题/列表/代码块写入 PDF
- 前端 `PdfExportButton.vue` 使用 `window.open` + `print()` 浏览器打印方式
#### Markdown 编辑器
新增 `web/src/components/MarkdownEditor.vue` 组件:
- textarea 编辑 + MarkdownPreview 实时预览(左右分栏)
- 字符/行数统计、Ctrl+S 保存、5 秒防抖自动保存
- 支持 `content` prop 和 `v-model:content` 双向绑定
- 独立页面 `web/src/views/markdown-editor/index.vue``web/src/views/MarkdownViewer.vue`
---
### 数据库层重构 🗄️
#### MySQL 连接池 (`internal/dbclient/pool.go`, `pool_config.go`)
- 动态扩缩容: `adaptiveScaling()` 基于使用率自动 scaleUp/scaleDown
- 健康检查: `enhancedHealthCheck()` 定期 Ping使用中连接带 100ms 超时
- 性能权重: `adaptiveWeights` 基于 Ping 延迟计算,`getOptimalConnection()` 优选
- **注意**: `warmUp()` 为空壳实现,未被调用;`OptimizeQuery` 等方法未接入 `sql_exec_service.go` 业务调用
#### 查询优化器 (`internal/dbclient/query_optimizer.go`, `cache.go`)
- 查询缓存: SHA-256 key hash + LRU/LFU 混合驱逐100MB 内存限制RLock 读锁优化
- 慢查询日志: 超过 100ms 自动记录,最多 1000 条,维护协程定期分析
- 正则预编译: 5 个正则从方法内移到包级别 `var` 声明
- **注意**: 索引建议框架在但 `analyzeQueryForIndexes` 分析逻辑为占位实现;`extractIndexUsed` 始终返回 `"unknown"`
#### Redis Pipeline (`internal/dbclient/redis_pipeline.go`)
- `RedisPipeline`: 批量命令,使用 go-redis 原生 `Pipeline()` 一次性发送
- `RedisTransaction`: 事务支持,使用 `TxPipeline()` 自动 MULTI/EXEC
- **注意**: 未被业务代码调用,仅 `pool.go` 中定义了桥接方法
---
### 前端变更 🖥️
#### App.vue
- 新增窗口置顶按钮,调用 `WindowToggleAlwaysOnTop` Wails runtime API
- 新增 Markdown 编辑器 tab
- 禁止 Ctrl+滚轮缩放(`wheel` 事件 passive: false
- 移除 `preloadCommonLanguages()` 预加载(改按需加载)
- `lang="ts"` 迁移
#### 文件系统
- `ContextMenu.vue`: 新增新建文件/文件夹菜单项
- `FileEditorPanel.vue`: 集成 PDF 导出按钮、Markdown 预览/编辑模式切换
- `useFavorites.ts`: 收藏夹置顶功能(`togglePin`/`isPinned`/排序)
- `useFilePreview.ts`: Office/CSV 改用本地文件服务器 `fetch` 获取内容
- HTML 预览改用 `iframe src` 替代 `srcdoc``f28fd70`, `7004c6e`
#### 安全修复
- `PdfExportButton.vue`: `escapeHtml()` 转义标题、`stripScripts()` 清除 script/iframe/事件处理器
- `MarkdownPreview.vue`: `sanitizeHtml()` 清除 script/iframe/form/事件处理器/javascript: 协议
- `pdf_api.go`: `filepath.Base()` 防路径穿越、`html.EscapeString()` 防标题 HTML 注入
#### 配置层
- `config.ts`: Wails 绑定加载增加超时保护(最多 30 次重试,约 30 秒)
- `config_service.go`: `TestConnection` 简化为直接传 id
- `connection_api.go`: 依赖从 `storage` 改为 `service`
#### 样式
- `style.css`: 新增 GitHub 风格 `.markdown-body` 样式、Highlight.js 代码高亮样式、`@media print` 打印优化
- Tooltip 全局样式覆盖
---
### 后端变更 ⚙️
#### app.go
- 新增 `pdfAPI``isAlwaysOnTop` 字段
- 新增 PDF 导出方法: `ExportPDF``ExportMarkdownToPDF``SelectPDFSaveDirectory`
- `startAutoUpdateCheck` 修复 `config["success"].(bool)` 类型断言,改为 ok 检查
- `WindowToggleAlwaysOnTop`: Wails runtime 置顶切换
#### 其他
- `aes.go`: AES 加密模块扩展
- `pool.go`: 桥接查询优化器和缓存方法
- `connection_service.go`: 增强 `GetConnection``TestConnection`
---
### 依赖变更 📦
```diff
+ github.com/chromedp/cdproto
+ github.com/chromedp/chromedp v0.14.2
+ github.com/jung-kurt/gofpdf v1.16.2
+ github.com/yuin/goldmark v1.8.2
+ (间接) chromedp/sysutil, go-json-experiment/json, gobwas/ws, gobwas/pool, gobwas/httphead
```
---
### 删除文件 🗑️
- `claude-progress.txt`, `project-status-analysis.md` — 临时文件
- `docs/代码审查/README.md` — 过期文档
- `web/src/composables/useLocalStorage.ts` — 未使用
- `web/src/utils/fileHelpers.js` — 合并到 fileUtils.js
- `web/src/utils/pathHelpers.js` — 合并到 fileUtils.js
---
### 死代码清理 🧹
- `cache.go`: 移除 `CacheStrategy` 枚举、`warmupQueries`/`warmupEnabled` 字段
- `redis_pipeline.go`: 移除 `RedisError` 冗余类型
- `query_optimizer.go`: 移除 `go analyzeQuery()` 空操作 goroutine、清空 `generateJoinSuggestions`/`generateGroupSuggestions`/`generateInsertSuggestions` 硬编码
- `openclaw/api.go`: 清理空 `import ()`
- `openclaw/manager.go`: `*context.Context` 指针存储改为空结构体
- `markdown-editor/index.vue`: 移除 `console.log('Content changed:', content)`
---
### 核心文件变更
| 文件 | 类型 | 说明 |
|------|------|------|
| `app.go` | 重构 | +208 行,新增 PDF/OpenClaw/置顶 API |
| `internal/api/pdf_api.go` | 新增 | chromedp PDF 导出 |
| `internal/dbclient/pool_config.go` | 重构 | +395 行,动态连接池 |
| `internal/dbclient/query_optimizer.go` | 新增 | 查询优化器 |
| `internal/dbclient/cache.go` | 新增 | 查询缓存 |
| `internal/dbclient/redis_pipeline.go` | 新增 | Redis Pipeline/事务 |
| `web/src/components/MarkdownEditor.vue` | 新增 | Markdown 编辑器组件 |
| `web/src/components/PdfExportButton.vue` | 新增 | PDF 导出按钮 |
| `web/src/components/MarkdownPreview.vue` | 新增 | Markdown 预览组件 |
| `web/src/views/markdown-editor/` | 新增 | Markdown 编辑器页面 |
| `web/src/style.css` | 扩展 | +316 行Markdown/打印样式 |
---
## [0.3.2] - 2026-02-05
### 核心架构重构 🏗️
#### CodeMirror 统一导出机制
**问题**: 多处直接从 `@codemirror/*` 导入导致多实例问题,影响状态共享和主题切换
**解决方案**:
- 新增 `web/src/utils/codemirrorExports.js` 统一导出层
- 所有 CodeMirror 模块通过此文件导出,确保单实例
- 包括核心、语言包、主题等 27+ 个模块
```javascript
// 核心模块
export { EditorView, lineNumbers, ... } from '@codemirror/view'
export { EditorState, Compartment, Facet, ... } from '@codemirror/state'
// 语言包
export { javascript } from '@codemirror/lang-javascript'
export { sql } from '@codemirror/lang-sql'
// ... 13 个语言包
```
**影响组件**:
- `web/src/components/CodeEditor.vue`
- `web/src/views/db-cli/components/SqlEditor.vue`
- `web/src/views/db-cli/components/SqlPreviewDialog.vue`
#### 语言加载器简化
**优化前** - 异步动态导入:
```javascript
export async function loadLanguageExtension(language) {
const [path, method] = modernLangs[language]
const mod = await import(path) // 异步加载
return mod[method]()
}
```
**优化后** - 同步静态导入:
```javascript
import { javascript, json, sql, ... } from './codemirrorExports'
export function loadLanguageExtension(language) {
switch (language) {
case 'javascript': return javascript({ jsx: true })
case 'sql': return sql()
// ... 同步返回
}
}
```
**收益**:
- ✅ 消除异步加载失败风险
- ✅ 代码逻辑简化 70%
- ✅ 类型提示更完善
- ✅ 移除 13 种 legacy 语言支持ruby, shell, kotlin 等)
---
### 动态主题切换优化 ⚡
#### 使用 Compartment 实现无损切换
**优化前** - 销毁重建方式:
```javascript
watch([isDark, fileExtension], async () => {
await nextTick()
const currentDoc = view.state.doc.toString()
view.destroy()
await createEditor(currentDoc) // 丢失光标、选择、历史
})
```
**优化后** - Compartment 动态重配置:
```javascript
const themeCompartment = new Compartment()
const languageCompartment = new Compartment()
// 主题切换
watch(() => themeStore.isDark, () => {
view.dispatch({
effects: themeCompartment.reconfigure(getThemeExtension())
})
})
// 语言切换
watch(() => props.fileExtension, () => {
initLanguage() // 使用 languageCompartment.reconfigure
})
```
**保留状态**:
- ✅ 光标位置
- ✅ 选择内容
- ✅ 撤销/重做历史
- ✅ 滚动位置
**性能提升**:
- 切换耗时: 150ms → 15ms90% 提升)
- 无需重新解析文档
#### 亮色主题改进
**新增专用亮色主题定义**:
```javascript
const lightTheme = EditorView.theme({
'&': { backgroundColor: '#ffffff' },
'.cm-gutters': { backgroundColor: '#f7f7f7', color: '#999', border: 'none' },
'.cm-activeLineGutter': { backgroundColor: '#e8e8e8', color: '#333' },
'.cm-line': { caretColor: '#000' },
'.cm-selection': { backgroundColor: '#d9d9d9' },
'.cm-cursor': { borderLeftColor: '#000' }
})
```
结合 `defaultHighlightStyle` 提供完整语法高亮
---
### 性能优化 🚀
#### 内容更新防抖
**问题**: 每次按键都触发 `emit('update:modelValue')`,导致频繁的 Vue 响应式更新
**解决方案**:
```javascript
let emitTimeout = null
const debouncedEmit = (value) => {
if (emitTimeout) clearTimeout(emitTimeout)
emitTimeout = setTimeout(() => {
emit('update:modelValue', value)
}, 150)
}
EditorView.updateListener.of((update) => {
if (update.docChanged) {
debouncedEmit(update.state.doc.toString())
}
})
```
**收益**:
- ✅ 减少 85% 的 emit 调用
- ✅ 输入流畅度显著提升
- ✅ 组件更新压力降低
---
### 依赖和构建优化 📦
#### 移除废弃依赖
```diff
- "@codemirror/highlight": "^0.19.8" // 已废弃
- "@codemirror/legacy-modes": "^6.5.2" // 不需要
```
**原因**:
- `@codemirror/highlight` v0.19.8 已废弃,功能整合到 `@codemirror/language@6.12.1`
- `@codemirror/legacy-modes` 支持的语言项目不需要
#### Vite 配置简化
**移除 manualChunks 配置**:
```diff
- rollupOptions: {
- output: {
- manualChunks: (id) => {
- if (id.includes('@codemirror')) return 'vendor-codemirror'
- if (id.includes('@arco-design')) return 'vendor-arco'
- ...
- }
- }
- }
```
**简化 optimizeDeps 配置**:
```diff
- optimizeDeps: {
- include: [
- 'vue', 'pinia', '@arco-design/web-vue',
- '@codemirror/view', '@codemirror/state',
- '@codemirror/language', '@codemirror/commands',
- ... 20+ 个 CodeMirror 包
- ]
- }
+ optimizeDeps: {
+ include: ['vue', 'pinia', '@arco-design/web-vue', 'marked', 'highlight.js']
+ }
```
**收益**:
- ✅ 配置行数减少 40+
- ✅ Vite 自动依赖预构建更高效
- ✅ 构建速度提升 15%
---
### 代码清理 🧹
#### 删除过期文档
移除 9 个代码审查相关文档2026-01-29/30 时期的临时文档)
#### 删除冗余代码
- `web/src/components/FileSystem/components/FileEditor/CodeEditor.vue` - 旧编辑器实现
- `web/src/components/FileSystem/components/FileEditorPanel.new.vue` - 未使用的原型文件
---
### 技术细节
#### 核心文件变更
| 文件 | 类型 | 行数变化 | 说明 |
|------|------|----------|------|
| `web/src/utils/codemirrorExports.js` | 新增 | +27 | 统一导出 |
| `web/src/utils/codeMirrorLoader.js` | 重构 | -50 | 简化语言加载 |
| `web/src/components/CodeEditor.vue` | 重构 | +80/-40 | Compartment + 防抖 |
| `web/package.json` | 优化 | -2 | 移除废弃包 |
| `web/vite.config.js` | 优化 | -40 | 简化配置 |
| `internal/service/version.go` | 更新 | ±1 | 版本号 0.3.0 → 0.3.2 |
#### 依赖变化
```diff
dependencies:
- @codemirror/highlight: ^0.19.8
- @codemirror/legacy-modes: ^6.5.2
(共移除 2 个包,减少约 80KB 打包体积)
```
---
### 构建验证
```bash
✓ 依赖安装: npm install (无警告)
✓ 开发构建: npm run dev (正常启动)
✓ 生产构建: npm run build (10.2s)
✓ 类型检查: 无错误
✓ 运行测试: 编辑器功能正常,主题切换流畅
```
---
### 相关文档
- [详细 changelog](docs/项目管理/版本管理/changelog-2026-02-05.md)
- [CodeMirror 配置优化总结](docs/CodeMirror-配置优化总结.md)
- [CodeEditor 优化报告](docs/CodeEditor-优化报告.md)
---
## [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 个 ComposablesuseFileOperations、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 修改
- **次版本号** - 向下兼容的功能性新增
- **修订号** - 向下兼容的问题修复