Syngnat
|
b2df94a3ba
|
🐛 fix(window): 修复 mac 窗口恢复越界 (#643)
## 问题描述
macOS 多屏环境下,普通窗口恢复/修正位置时可能被定位到当前屏幕外,尤其是在外接屏位于主屏左侧或上方、浏览器
`screen.availLeft/availTop` 出现全局偏移时更容易触发。
## 复现条件说明
该问题不是所有 macOS 用户都能稳定复现,更依赖特定显示器布局和窗口状态。高概率触发条件包括:
- 使用 macOS 多屏。
- 外接屏位于主屏左侧或上方,导致 `screen.availLeft` / `screen.availTop` 为负数或非零。
- GoNavi 处于普通窗口态,而不是最大化或全屏。
- 应用保存过窗口位置,并在重启、切屏、拔插显示器、focus/resize 后触发窗口 bounds 恢复或修正。
单屏 mac、外接屏仅位于主屏右侧、始终最大化/全屏打开,或未保存过异常窗口位置的用户通常不容易触发。
## 根本原因
Wails 的 `WindowSetPosition(x, y)` 在 macOS 上接收的是当前 monitor
可见区域内的局部坐标,而不是全局桌面坐标。原逻辑把 `window.screen.availLeft/availTop`
作为可见区起点传入恢复算法,导致保存的局部坐标和恢复时的全局偏移混用。
## 修复方案
- 新增 `resolveWailsWindowVisibleViewport`,集中处理 Wails 主窗口恢复使用的可见区域。
- macOS 下将可见区原点固定为当前 monitor 局部 `(0, 0)`,避免把浏览器 screen 全局偏移继续传给 Wails。
- 补充单元测试覆盖负 `availLeft` 的外接屏场景。
- 更新 App 窗口恢复源码断言测试。
## 变更文件
| 文件 | 修改说明 | 变更行数 |
|---|---|---|
| `frontend/src/App.tsx` | macOS 下使用 Wails 局部坐标解析窗口可见区 | +7 -7 |
| `frontend/src/utils/wailsWindowViewport.ts` | 新增 Wails 窗口可见区解析工具 | +52
|
| `frontend/src/utils/wailsWindowViewport.test.ts` | 覆盖 macOS 局部原点和
fallback 场景 | +43 |
| `frontend/src/App.tool-center.test.ts` | 同步窗口恢复源码断言 | +2 -1 |
## 合并注意事项
- **影响功能点**:桌面端普通窗口启动恢复、focus/resize 后窗口 bounds 修正。
- **验证方式**:
- `npm test -- --run src/utils/wailsWindowViewport.test.ts
src/utils/windowRestoreBounds.test.ts
src/utils/windowStartupLayout.test.ts src/App.tool-center.test.ts`
- `npm run build`
- **回归风险**:低。变更集中在窗口可见区解析;非 macOS 平台保留原 `screen.availLeft/availTop` 处理。
- **回滚方式**:revert 此 PR 即可。
|
2026-07-09 16:31:44 +08:00 |
|
Syngnat
|
19572a3cc9
|
feature(query-result): 支持SQL执行结果差异比对
|
2026-07-09 16:28:59 +08:00 |
|
Syngnat
|
8d7e7a6ddf
|
✨ feat(query-editor): 结果页列元数据跨库加载并实心化保存按钮
- 结果集携带 metadataDbName/TableName,列类型注释从真实库表加载
- 只读查询也解析 tableRef,避免结果页丢元数据
- 选择列底色与固定列对齐;保存按钮改为蓝色实心主按钮样式
- 独立结果窗/还原路径同步元数据字段
|
2026-07-09 15:37:27 +08:00 |
|
Syngnat
|
af9f490172
|
✨ feat(datagrid): 完善左固定列体验并统一选中主题色
- 虚拟表横滚:表头 sticky + 表体 translateX 补偿,勾选/行号/钉住列同步固定
- 支持列头钉住左侧、钉住列显示图标;序号列可拖宽且不参与排序
- 行选中与单元格选区统一 V2 绿色,固定列底色对齐 --gn-bg-panel
- 查询结果页启用列头筛选,并在客户端按条件过滤当前结果集
|
2026-07-09 15:37:20 +08:00 |
|
DurianPankek
|
099443fddc
|
🐛 fix(window): 修复 mac 窗口恢复越界
|
2026-07-09 15:25:48 +08:00 |
|
Syngnat
|
947277bdec
|
🐛 fix(query-editor): 修复限定名超链接并支持跨库/schema 解析
- 两段名兼容 MySQL 库.表与 PG/SQL Server 的 schema.表
- 三段名支持 database.schema.object,常见 schema 不当成库拉取
- SQL 变更时按引用库防抖补拉元数据并刷新装饰
- 修复元数据 key 提前占死导致取消后不再拉取、超链接全灭
- 补充限定名解析与收集逻辑单测
|
2026-07-09 14:23:09 +08:00 |
|
Syngnat
|
b1bd4bb5ec
|
✨ feat(datagrid): 数据预览与 SQL 结果支持行号显示及设置开关
- 新增 appearance.showDataTableRowNumber,默认开启,主题设置可切换
- 数据预览与查询结果表统一跟随该偏好显示行号列
- 行号列收窄为固定窄宽,少列时多余宽度只加到数据列避免撑宽
- 补充 i18n 与相关单测
|
2026-07-09 14:23:09 +08:00 |
|
Syngnat
|
d210b3f39c
|
🐛 fix(window): 加固 Windows 冷启动半窗,原生最大化并兜底铺满工作区
- Windows 启动 WindowStartState 改为 Maximised,默认尺寸提升到 1440×900
- 无记忆/历史 1024×768/覆盖率过低的普通窗记忆改为启动最大化
- Maximise 多次失败时铺满工作区兜底,避免残留浮动半窗
- 用户刻意拉大的普通窗仍先 Unmaximise 再恢复尺寸位置
|
2026-07-09 14:02:53 +08:00 |
|
Syngnat
|
901b436107
|
🐛 fix(connection-package): 导出/导入连接包携带 Redis DB 别名
- 连接包 payload 与导出选项支持 redisDbAliases(连接 ID → db 序号 → 别名)
- 导入返回 ConnectionPackageImportResult,一并恢复别名映射
- 前端导出时注入 appearance.redisDbAliases,导入后 merge 回 appearance
- 补充别名往返测试与 mergeRedisDbAliases 单元测试
|
2026-07-09 13:57:32 +08:00 |
|
Syngnat
|
097826508a
|
🐛 fix(update): 修复 dev→latest 安装后丢包且仍停在旧版的问题
- 安装成功且 relaunch 发出后再删除下载包,失败保留 latest 包便于手动安装
- macOS open 使用路径形式,避免 -a 传完整路径导致重启失败
- 明确覆盖「当前运行的 .app」(桌面 dev 包),避免误以为只更新了 Applications
- Windows 同样先启动目标再删 SOURCE,防止重启失败时只剩旧包
|
2026-07-09 13:45:17 +08:00 |
|
Syngnat
|
cdfbdd5dd5
|
✨ feat(update): 下载进度到 100% 后由用户点击「重启应用更新」
- 取消 macOS 下载完成后自动安装/退出,Win/Mac 统一交互
- 进度弹窗在 100% 显示就绪提示,主按钮改为「重启应用更新」
- 关于页安装入口同步文案;点击后才执行安装脚本并重启
- 补充多语言与前端回归测试
|
2026-07-09 13:38:07 +08:00 |
|
Syngnat
|
d31bb978f2
|
🐛 fix(update/macos): 加固在线更新自动安装脚本与进程隔离
- 安装脚本 Setsid 脱离主进程,避免 Quit 后脚本被连带结束
- 等待宿主退出增加 120s 超时,防止无限挂起
- 支持 dmg/zip 解包定位 .app,稳健解析 Contents/MacOS 可执行文件
- 不再 rm -rf 脚本所在 STAGED 目录,降低安装中途自删风险
- 替换失败明确走管理员权限回退,增强 relaunch(open -n -a / nohup)
- 补充 macOS 更新脚本单测
|
2026-07-09 13:35:41 +08:00 |
|
Syngnat
|
d067e2c00a
|
✨ feat(update): dev 通道同步生成 latest-dev.json 静态清单
- dev-build 发版流程上传 latest-dev.json 到 dev-latest Release
- 客户端 dev 通道优先读取 releases/download/dev-latest/latest-dev.json
- build-release 本地打包按版本自动选择 latest / latest-dev
- SHA256SUMS 生成时跳过清单文件本身
|
2026-07-09 12:38:18 +08:00 |
|
Syngnat
|
3beab030f4
|
✨ feat(update): 检查更新优先静态 latest.json,避免用户撞 GitHub API 限流
- 客户端优先下载 releases/latest/download/latest.json,再回退 REST API
- 成功结果写入磁盘缓存,限流/断网时可 stale 回退
- 静默检查增加节流;限流文案改为用户无需配置 Token
- CI 与 build-release 发版时生成 latest.json 清单
- 补充静态清单/缓存/节流单测与生成脚本测试
|
2026-07-09 12:35:12 +08:00 |
|
Syngnat
|
566339f09f
|
🐛 fix(window): 加固 Windows 启动最大化与窗口尺寸记忆落盘
- windowState/windowBounds 与启动偏好一致,立即写入本地持久化
- 启动最大化首次立即执行并加重试,成功后固化 maximized 状态
- 仅在 hydration 完成后恢复,避免默认 1024×768 半窗被误记
- 补充 store 与启动恢复相关测试断言
|
2026-07-09 12:35:12 +08:00 |
|
Syngnat
|
dec9b8317c
|
♻️ refactor(settings/ai): 聊天入口打开 AI 设置改走设置中心
- 从 AI 聊天面板打开设置时进入设置中心服务-AI 页
- 移除独立 AISettingsModal 挂载,复用 AISettingsContent
- 安全更新修复跳转同步走设置中心,关闭后可回到修复流程
- 更新设置中心与工具中心相关源码级测试断言
|
2026-07-09 12:19:22 +08:00 |
|
Syngnat
|
c77d338ab1
|
✨ feat(ai-chat): 支持侧栏/独立窗默认打开、双向切换与尺寸记忆
- 新增 AI 独立浮动窗,标题栏可拖拽缩放并与侧栏双向切换
- 设置中可配置默认打开方式(侧栏/独立窗),偏好持久化
- 记忆独立窗上次位置与尺寸,再次打开自动恢复
- 优化输入区默认高度与底部模型/思考/用量工具条布局
- 去掉独立窗外层重复标题栏,由面板 header 统一承载操作
|
2026-07-09 12:18:51 +08:00 |
|
Syngnat
|
bc3f76dd73
|
✨ feat(ai-chat): 思考强度移入聊天面板并按次请求下发
- 面板底部新增思考强度选择,按服务商 profile 动态选项
- ChatSendOptions 支持 thinkingIntensity,仅本次发送生效
- 从供应商表单移除思考强度配置,避免与面板控制重复
- 补齐多语言文案与相关前后端测试
|
2026-07-09 12:17:40 +08:00 |
|
Syngnat
|
4fcd7ff61f
|
✨ feat(ai): 支持 MCP 少量查数与分服务商思考强度,修复 DeepSeek Anthropic
- MCP HTTP 默认可注册 execute_sql,行数默认 50/上限 200,设置页可切换仅结构模式
- 思考强度按 OpenAI/Anthropic/DeepSeek/Gemini 体系映射档位与请求参数
- 自定义端点 DeepSeek Anthropic 自动纠正 base 路径并回传 thinking 块
- 补充前后端回归测试与多语言文案
|
2026-07-09 11:34:38 +08:00 |
|
Syngnat
|
f930ffe153
|
🐛 fix(docker/web-server): 修复前端构建缺失 shared/i18n 导致 CI 失败
- frontend 阶段改为 monorepo 布局 WORKDIR /src/frontend
- COPY shared/ 到 /src/shared,恢复 catalog/messages/translate 相对路径解析
- dist 产物路径同步为 /src/frontend/dist
- 新增 Dockerfile 布局回归校验脚本,避免再次漏拷 shared
|
2026-07-09 11:16:30 +08:00 |
|
Syngnat
|
26c22379ae
|
🐛 fix(window/theme/updater/query-editor): 修复 Windows 冷启动半窗与主题/更新/补全体验
- 窗口:最大化恢复加重试与启动宽限,无记忆尺寸时 Windows 居中大窗,冷启动主动 WebView2 settle
- 主题:v2 设置中心主题外观改扁平自定义控件,legacy 保持侧栏卡片布局
- 更新:启动发现更新改开设置中心关于页,下载失败支持 assets API 回退并硬化检查链路
- 补全:suggest 列表字段名优先完整显示,元数据空间不足时再省略
- 测试:补充 window/theme/updater/补全相关回归断言
|
2026-07-09 11:13:42 +08:00 |
|
Syngnat
|
4c9bff5e8c
|
✨ feat(web-server): 支持 Docker 部署浏览器 Web UI
- 新增 Dockerfile.web-server:前端构建 + 纯 Go 主程序 web-server 模式
- 提供 Compose/env 示例与本地源码构建 override
- CI 增加 gonavi-web-server 镜像构建、冒烟与 GHCR 发布
- 文档补充 Web 容器部署、数据卷与安全暴露说明
|
2026-07-09 09:56:56 +08:00 |
|
Syngnat
|
8808a5aa77
|
🐛 fix(dameng): 修复设计表加载字段因 comment 保留字别名失败
- GetColumns/GetAllColumns 将 AS comment 改为 AS col_comment
- 达梦 COMMENT 为保留字,AS comment 会触发 Error -2007 语法分析出错
- 结果映射优先读取 COL_COMMENT,兼容 COMMENT/COMMENTS
- 补充单测锁定禁止使用 AS comment 别名
|
2026-07-09 09:48:52 +08:00 |
|
Syngnat
|
6fb6674803
|
✨ feat(tab/window): 完善Tab拖出独立窗口跟手预览与入场动效
- 结果Tab支持拖出拆分,拖拽过程抑制文本选中
- 抽取 DetachDragPreview:进度条/跟手预览/阈值高亮
- 工作区主Tab拖出复用同一套预览动效,松手位置跟手
- 浮动窗增加 scale 入场动画,增强拆出反馈
|
2026-07-09 09:44:53 +08:00 |
|
Syngnat
|
c1cf19ef67
|
🐛 fix(sidebar/kingbase): 修复函数列表重复叠加导致越刷越多
- 元数据 fallback:完整目录查询首次成功后停止,避免多条 SQL 结果叠加
- 函数去重:按 schema+name+type 大小写不敏感去重,折叠同名 overload
- 树节点 key 区分 func/proc,避免同名函数/过程 key 冲突引发虚拟列表刷屏
- 补充 Kingbase/MySQL 函数元数据加载单测锁定回归
|
2026-07-09 09:20:33 +08:00 |
|
Syngnat
|
de868a2763
|
✨ feat(tab/window): 支持主工作区与结果Tab拆出为应用内浮动窗口并还原
- 新增 detached 会话态:主工作区窗口与查询结果窗口独立管理
- 主Tab支持右键拆出与垂直拖出,浮动窗可拖拽缩放并还原/关闭
- 结果Tab右键拆出为浮动结果窗,支持还原回源查询结果区
- 抽离 WorkbenchTabContent,QueryEditor 结果会话缓存避免拆出丢失
- 补充六语言文案与 detach/store 相关单元测试
|
2026-07-09 09:08:50 +08:00 |
|
Syngnat
|
5fc33102a9
|
🐛 fix(updater): 修复关于页正式版信息兜底
- 为关于页补充固定项目元数据兜底
- 过滤 Unknown/未知 等无效版本与作者信息
- 增加正式版 AppInfo 缺失时的回归测试
|
2026-07-08 21:37:10 +08:00 |
|
Syngnat
|
f74ad02b9d
|
🐛 fix(query-editor): 限制 macOS 搜索仅响应 Cmd+F
- 拦截 Monaco 内置 Cmd+E find-with-selection 行为
- 保留默认 Cmd+E 当前语句选择逻辑,禁用或改键时不触发搜索
- 增加 SQL 编辑器快捷键回归测试并加固 Monaco 测试包装
|
2026-07-08 20:30:31 +08:00 |
|
Syngnat
|
dca1e8a251
|
✨ feat(updater): 优化关于页更新信息展示
- 关于页直接进入 GoNavi 内容详情,减少二次点击
- 将更新通道改为分段选择器并优化描述布局
- 保留后端发布发布时间元数据并在版本信息中展示
|
2026-07-08 20:30:05 +08:00 |
|
Syngnat
|
22fab86010
|
🐛 fix(ui): 修复数据表按钮与侧栏滚动条显示
- 修复 v2 分页“统计总数”按钮被压缩为图标宽度的问题
- 首次打开时隐藏树主体横向溢出,保留独立横向滚动条占位
- 将自定义字段显示里的全局隐藏列文案改为多语言翻译
- 增加数据表按钮和侧栏横向滚动条布局回归断言
|
2026-07-08 17:37:21 +08:00 |
|
Syngnat
|
da895ea502
|
✨ feat(settings): 统一设置中心内页与代理交互
- 将主题设置、AI 设置和关于页纳入设置中心详情页,补齐返回和取消交互
- 重构全局代理设置为草稿应用模式,新增常用预设、URL 测试入口和测试结果展示
- 按参考样式重做关于页版本与项目入口布局,并收紧顶部品牌卡尺寸
- 提取 AISettingsContent 供设置中心内嵌复用,控制详情页内部滚动边界
- 补齐多语言文案和设置中心静态回归断言
|
2026-07-08 17:37:05 +08:00 |
|
Syngnat
|
b94168957e
|
🐛 fix(update/proxy): 稳定更新检查与代理运行时
- 更新检查前恢复持久化全局代理,避免重启后代理状态未进入运行时
- 将 DNS、EOF 和临时网络异常转为本地化错误,并对可重试网络错误做短重试
- 优先读取 GitHub asset digest,缺失时再回退 SHA256SUMS 校验文件
- 新增全局代理连接测试后端接口,支持草稿代理、已保存密码复用和清除密码意图
- 更新 Wails 绑定、浏览器 mock 与代理草稿序列化测试
|
2026-07-08 17:36:42 +08:00 |
|
Syngnat
|
c792a30932
|
🐛 fix(query-result): 修复SQL执行后结果面板崩溃
- 提前解析当前激活结果页 key
- 避免构造结果 tab 时读取未初始化变量
- 修复 MySQL SELECT 成功返回后编辑器闪退问题
|
2026-07-08 14:16:36 +08:00 |
|
Syngnat
|
dd01d1c3f9
|
fix(update): auto-install macOS updates after download
|
2026-07-08 13:49:00 +08:00 |
|
Syngnat
|
23c895e839
|
test(update): auto install macOS package after download
|
2026-07-08 13:43:13 +08:00 |
|
Syngnat
|
7a5960e737
|
fix(update): auto install macOS package after download
|
2026-07-08 13:41:45 +08:00 |
|
Syngnat
|
5c6110a57e
|
feat(query-result): support global hidden columns
|
2026-07-08 12:29:58 +08:00 |
|
Syngnat
|
17843ffd71
|
chore: remove temporary file
|
2026-07-08 12:26:21 +08:00 |
|
Syngnat
|
7296ab0425
|
tmp stop
|
2026-07-08 12:26:05 +08:00 |
|
Syngnat
|
47664023ee
|
chore: remove temporary file
|
2026-07-08 12:25:57 +08:00 |
|
Syngnat
|
33918c6837
|
no
|
2026-07-08 12:25:42 +08:00 |
|
Syngnat
|
66a6052f88
|
chore: remove temporary file
|
2026-07-08 12:25:35 +08:00 |
|
Syngnat
|
31b5b838a2
|
chore: tmp create pr
|
2026-07-08 12:25:23 +08:00 |
|
Syngnat
|
575a3d88b9
|
chore: remove temporary PR trigger file
|
2026-07-08 12:25:07 +08:00 |
|
Syngnat
|
bef811ce13
|
tmp
|
2026-07-08 12:24:53 +08:00 |
|
Syngnat
|
dee5620fc9
|
test(data-grid): cover global hidden column helpers
|
2026-07-08 12:24:27 +08:00 |
|
Syngnat
|
b1174861d4
|
feat(query-result): apply global hidden columns
|
2026-07-08 12:24:12 +08:00 |
|
Syngnat
|
a1f296ee08
|
feat(data-grid): expose global hidden column configuration
|
2026-07-08 12:20:54 +08:00 |
|
Syngnat
|
3e34795ef5
|
feat(data-grid): add global hidden column storage helpers
|
2026-07-08 12:19:47 +08:00 |
|
Syngnat
|
f73d8dcb97
|
fix(oceanbase): tolerate Oracle sequence metadata differences
|
2026-07-08 12:18:44 +08:00 |
|