- 版本升级 0.1.0 -> 0.2.0(package.json 单一来源,标题栏/设置/关于同步)
- 新增交互发布:指定大屏为主屏,其余屏自行加载本屏页面,主屏可轮流投屏各屏内容
- 单屏发布支持自动轮播(intervalSec)与停止轮播(保留窗体可手动切换)
- 多屏发布支持 alsoMain 主屏同时参与;新增屏幕检测弹窗
- 页面列表缩略图 key 重建避免浏览器复用旧图;「打开」按钮防抖(opening 状态)
- URL 粘贴自动提取网页标题/描述(主进程 fetchMeta)
- 项目组新增「新建」:默认创建 1 个空白页面,保存时选择位置
- 发布组 4 按钮(预览/单屏/多屏/交互)统一为线性 SVG 显示器族图标
- 属性面板 URL 输入框加高 1 行、页面参数加高 2 行并去掉水印
- 编辑预览 WebFrame key={src} 重建,修复切页内容错位
50 lines
6.9 KiB
Markdown
50 lines
6.9 KiB
Markdown
# 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 组序:项目 → 页面 → 发布(发布 7 按钮:预览本页👁️/单屏发布🎠/多屏发布🖥️/交互发布🔁[主屏+小屏轮流投屏]/停止轮播⏹️/关闭所有🏁/检测屏幕📡,全部走弹窗)。
|
||
- 页面列表卡片:预览图 + 底部操作组(前插/上移/下移/复制/删除/截图,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.2.0**,2026-08-23 从 0.1.0 升级,因新增交互发布+多项 bug 修复);主进程 `app.getVersion()`;标题栏显示「系统版本号 vX.Y.Z」;任务栏标题由 `did-finish-load` 时 `setTitle` 兜底(页面 `<title>` 会覆盖构造标题)。版本号其他兜底引用:`main/settings.ts` 默认 projectVersion、`renderer/utils.ts` fallback、`AboutPanel`/`ProjectInfo` fallback+placeholder,升级时需同步;**项目 JSON 文件内 version 字段是用户数据不动**。
|
||
- 文档三件套(均在根目录,无扩展名):`项目需求`(v3.0,✅/⏳ 标注)、`开发进度存档`(**跨会话恢复入口**)、`指令清单`(历史,已全部实现)。
|
||
- 已实现功能全景(v0.2.0):Ribbon 三组(项目/页面/发布)、项目组含**新建**(默认 1 个空白页面,另存为才落地)、发布 7 按钮(预览本页/单屏发布[可轮播]/多屏发布[alsoMain]/交互发布[主屏轮流投屏]/停止轮播/关闭所有/检测屏幕,**其中预览/单屏/多屏/交互 4 按钮为统一线性 SVG 显示器族图标**)、配置 6 菜单(项目信息/遥控设置[阈值+锁定键]/快捷方式×3/发布设置/设备测试[键/音/麦/屏]/关于)、快捷键(1-9 长按>阈值、↑↓、Esc、F5、锁定键)、AES-256-GCM 密码加密、标题栏版本号(package.json 单一来源)、编辑预览 WebFrame `key={src}` 重建(防内容错位)、`window.__store` 全局调试接口、属性面板 URL 输入框 3 行/页面参数 4 行无水印。
|
||
- **未实现/规划**:项目导入/导出、代码视图/页面视图切换、遥控器硬件对接、帮助文档入口。
|
||
- 绿色版打包已完成(2026-08-23,electron-builder@26.15.3 已装,**产物为 v0.1.0**):`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。**升级到 0.2.0 后需重新 `npm run dist`**。
|
||
- **⚠️ 打包必读**:每次 `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. 代码视图/页面视图切换、遥控器硬件对接、帮助文档入口。
|