Files
MyGoNavi/frontend
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
..

Lite DB Client

一个基于 Electron、React 和 Ant Design 构建的轻量级 MySQL 数据库客户端。

功能特性

  • 连接管理: 轻松创建和保存 MySQL 数据库连接。
  • 结构浏览: 通过树形视图快速查看数据库和表结构。
  • 数据查看: 双击表名即可查看数据(支持分页/滚动加载)。
  • SQL 编辑器: 集成 Monaco Editor提供强大的 SQL 编写和执行体验(支持语法高亮)。
  • 多标签页: 支持多窗口并行操作,类似 Navicat 的使用体验。

🛠️ 技术栈

  • Electron: 桌面端运行环境。
  • React + Vite: 前端框架与极速构建工具。
  • Ant Design: 企业级 UI 组件库。
  • Zustand: 轻量级状态管理。
  • MySQL2: 高性能 Node.js MySQL 驱动。
  • Monaco Editor: VS Code 同款代码编辑器。

🚀 快速开始

  1. 安装依赖

    npm install
    
  2. 启动开发模式

    npm run electron:dev
    

    这将启动 Vite 开发服务器并打开 Electron 窗口。

  3. 构建生产版本

    npm run build
    

    构建完成的安装包dmg/exe/deb将位于 dist/release/ 目录下。

⚠️ 说明

  • 本项目目前处于 MVP (最小可行性产品) 阶段。
  • 当前版本主要支持 MySQL 数据库。
  • 密码目前保存在内存/本地存储中,请注意在生产环境中的安全性。

希望这款轻量级工具能成为你开发路上的好帮手!