# 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 失败,命令一律用相对路径。 - 后台启动 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` 兜底(页面 `