# MEMORY.md — SmartAgriCenter 智慧农业大数据可视化控制中心

> 维护说明：本文件为跨会话长期记忆，记录项目稳定事实与约定。每日详细变更见 `YYYY-MM-DD.md`。
> **⚠️ 换环境/重装/新开会话时，先读根目录 `开发进度存档`**（目录结构+启动打包手册+代码地图+踩坑实录），可省大量探索。

## 项目定位
- Electron + React 19 + TypeScript + Vite 7 + electron-vite@5 + zustand 重写版（替代旧 WinForm 版 SmartAgriDataCenter）。
- 角色：软件本身只是**编辑器/调度器/发布器**，大屏业务内容是 HTML 网页，不做图表绘制。
- 工作区：仓库根目录（当前为 `c:/Users/范先生/CodeBuddy/DataViewCenter`，**路径可迁移**，文档内的绝对路径以克隆后实际位置为准），项目在 `SmartAgriCenter/`。原型参考在 `prototype/`（index.html、sample-screen.html）。

## 依赖与运行（重要！）
- 依赖固定 `electron-vite@5 vite@7 @vitejs/plugin-react@5`（避免 vite8 与 electron-vite peer 冲突）；Electron ^43。
- 命令：`npm run dev` / `npm run build` / `npm start`（preview）/ `npm run typecheck`。
- **中文路径 PowerShell 坑**：参数含中文路径（`c:/Users/范先生/...`）会乱码导致 cd 失败，命令一律用相对路径。
- **⚠️ 中文 commit message 坑（2026-08-23 修复）**：`git commit -m "中文"` 在 PowerShell/cmd 下会按 GBK 传参、git 按 UTF-8 存储 → **提交信息双编码乱码**。已用 Node 脚本 + `git hash-object` 保真重写 3 条历史并 force push（新 hash：2c90205/4b3ea03/b11bea1）。**以后提交一律用 `git commit -F <utf8消息文件>`**（write_to_file 写 UTF-8 文件再 -F），或提交信息用英文。
- 后台启动 dev：`cd SmartAgriCenter; Start-Process npm.cmd -ArgumentList 'run','dev' -RedirectStandardOutput 'dev.log' -RedirectStandardError 'dev-err.log'`（必须 npm.cmd）。
- Electron 二进制缺失时：先 `$env:ELECTRON_MIRROR="https://npmmirror.com/mirrors/electron/"` 再 `node node_modules/electron/install.js`。
- dev.log / dev-err.log 留在 SmartAgriCenter 根目录，受 SafeDelete 保护，无害。

## 架构要点
- 三进程：`src/main/`（index.ts 无边框主窗+单实例锁；ipc.ts 全部 IPC+未保存关闭守卫；screens.ts 屏幕窗口/轮播/WebContentsView 主屏全屏/probe；settings.ts 配置持久化 userData/settings.json；crypto.ts AES-256-GCM 密码加密页面 URL/参数；project.ts；shortcuts.ts；loader.ts）。
- preload：`window.api`（win/screens/project/key/syncProject/setDirty/beep/createShortcut/confirm/carousel/page.snapshot/settings）。
- renderer：zustand store（pages/屏幕/视图/settings）；视图仅 `'edit' | 'config'`（发布 Tab 已并入编辑 Tab Ribbon）；Webview 用 `document.createElement('webview')` 封装。
- 页面 JSON 字段含 `PagePreview`（Base64 截图），项目文件存 `.json`。

## 关键 UI/交互约定
- Ribbon 编辑 Tab 组序：项目 → 页面 → 发布（发布 6 按钮：预览本页👁️/单屏发布🎠/多屏发布🖥️/停止轮播⏹️/关闭所有🏁/检测屏幕📡，全部走弹窗）。
- 页面列表卡片：预览图 + 底部操作组（前插/上移/下移/复制/删除/截图，SVG 扁平图标，仅 active 显示）。
- 快捷键：大屏窗口/轮播数字键 1-9 需**长按超过 keyThreshold**（防网页内输入数字误触），Esc 退出、F5 刷新、锁定键（默认 F9）全局开关。
- 发布设置可配 multi/single/main 三种默认模式，single 支持 intervalSec 轮播。

## 验证方法
- 渲染层 CDP：`Start-Process electron.cmd -ArgumentList ".", "--remote-debugging-port=9223"` 后 `Runtime.evaluate` 检查 `#root` children / `window.api`。
- 改完 WebFrame 相关代码需重启 dev（HMR 不重建已存在 webview）。
- **electron-vite dev 修改 src/main/preload 不会自动重启 electron**，需手动杀掉 dev 进程组（npm-cli→electron-vite→electron）再重新启动；仅 renderer 改动走 HMR 无需重启。

## 版本号与打包（2026-08-23 新增）
- 版本号单一来源 = `package.json version`（当前 0.1.0）；主进程 `app.getVersion()`；标题栏显示「系统版本号 vX.Y.Z」；任务栏标题由 `did-finish-load` 时 `setTitle` 兜底（页面 `<title>` 会覆盖构造标题）。
- 文档三件套（均在根目录，无扩展名）：`项目需求`（v3.0，✅/⏳ 标注）、`开发进度存档`（**跨会话恢复入口**）、`指令清单`（历史，已全部实现）。
- 已实现功能全景（v0.1.0）：Ribbon 三组（项目/页面/发布）、发布 6 按钮（预览本页/单屏发布[可轮播]/多屏发布[alsoMain]/停止轮播/关闭所有/检测屏幕）、配置 6 菜单（项目信息/遥控设置[阈值+锁定键]/快捷方式×3/发布设置/设备测试[键/音/麦/屏]/关于）、快捷键（1-9 长按>阈值、↑↓、Esc、F5、锁定键）、AES-256-GCM 密码加密、标题栏版本号（package.json 单一来源）。
- **未实现/规划**：项目导入/导出、代码视图/页面视图切换、遥控器硬件对接、帮助文档入口。
- 绿色版打包已完成（2026-08-23，electron-builder@26.15.3 已装）：`npm run dist` → `release\智慧农业大数据可视化控制中心-0.1.0-win.zip`（绿色免安装，当前 **128.9MB**）+ `release\win-unpacked\`。应用图标 `build/icon.ico` 已配置。瘦身：`compression: maximum` + `scripts/afterPack.js` 裁剪 locales（55→3），zip 139.7→128.9MB。
- **⚠️ 打包必读**：每次 `npm run dist` 前必须用 `[System.IO.Directory]::Delete(...,$true)` 删掉旧 `release/`（SafeDelete 守卫会拦批量删除并导致打包卡死）；打包前设 `$env:ELECTRON_BUILDER_BINARIES_MIRROR="https://npmmirror.com/mirrors/electron-builder-binaries/"`。详见根目录 `开发进度存档` §4。

## 待办/候选开发点（截至 2026-08-23）
1. 页面预览图实际截图流程实测（page:snapshot 依赖 URL 可加载）。
2. 遥控器模拟界面视觉美化。
3. 项目 JSON 导入/导出。
4. 代码视图/页面视图切换、遥控器硬件对接、帮助文档入口。
