# 智慧农业大数据可视化控制中心 项目需求文档 > 文档版本:2.0(2026-08-23 重写) > 对应实现版本:v0.1.0(Electron 重写版) > > 更新说明:本版根据项目当前实现阶段全面重写。原文档基于旧 WinForm 版(v1.0)撰写, > 技术架构、界面结构、功能划分均已按 Electron + React 重写版实际状态更新; > 已实现需求标注 ✅,规划中需求标注 ⏳。 --- ## 1. 项目概述 ### 1.1 产品定位 **智慧农业大数据可视化控制中心**是一款 Windows 桌面应用,同时扮演三种角色: - **编辑器**:编辑、管理大屏页面工程 - **调度器**:将编辑好的页面按屏分发、轮播调度 - **发布器**:把网页大屏推送输出到显示屏幕终端 > 核心原则:软件本身是**编辑器、调度器、发布器**,大屏业务内容全部是 HTML 网页。 > 软件不做图表绘制,只负责管理页面配置与分发调度。 ### 1.2 技术架构 | 层 | 技术选型 | |---|---| | 桌面框架 | Electron(v43.x) | | UI 框架 | React 19 + TypeScript | | 构建工具 | Vite + electron-vite | | 状态管理 | Zustand | | 宿主环境 | Windows x64 | | 项目存储 | `.json` 工程文件(可选密码加密) | 三进程结构:主进程(main,窗口/发布/快捷键/IPC)、预加载(preload,安全桥接)、渲染进程(renderer,编辑与配置 UI)。 ### 1.3 界面布局 1. **无边框自绘标题栏**:工程名 + 版本号(`v0.1.0`,随 `package.json` 版本号自动更新)+ 未保存标记 + 最小化/最大化/关闭按钮 2. **Ribbon 顶部工具栏**:`项目`、`页面`、`发布` 三组功能按钮 3. **编辑视图**(三栏布局,参考 WPS 幻灯片界面): - 左侧:页面列表(缩略图 + 序号,增删改管理) - 中间:大屏预览画布(内嵌加载所选页面,支持缩放与刷新) - 右侧:页面属性面板 4. **配置视图**(左右结构):左侧配置菜单栏 + 右侧配置区 5. **底部状态栏**:系统状态信息 --- ## 2. 功能需求 ## 2.1 编辑功能 ### 2.1.1 项目操作(Ribbon「项目」组) | 功能 | 状态 | 说明 | |---|---|---| | 新建项目 | ✅ | 内置 4 个示例页面 | | 打开项目 | ✅ | 选择 `.json` 工程文件,含密码解密(见 §5.2) | | 保存 | ✅ | 写入当前工程(密码加密) | | 另存为 | ✅ | 选择新路径保存 | | 记住最后文件夹 | ✅ | 打开/另存为自动定位上次使用的目录 | | 导入项目 | ⏳ | 规划中 | | 导出项目 | ⏳ | 规划中 | ### 2.1.2 页面操作(Ribbon「页面」组) | 功能 | 状态 | 说明 | |---|---|---| | 新建页面 | ✅ | 在列表末尾插入新页 | | 前插页面 | ✅ | 在选中页面前插入 | | 上移 / 下移 | ✅ | 调整页面顺序 | | 复制页面 | ✅ | 复制选中页面 | | 删除页面 | ✅ | 删除选中页面 | | 截图 | ✅ | 对当前页面 URL 截图,生成预览图 | | 页面重排 | ✅ | 重置/整理页面顺序 | | 切换代码视图 / 页面视图 | ⏳ | 规划中 | ### 2.1.3 页面列表 - 每个页面以**缩略图 + 序号**展示 - 预览图来自当前 URL 页面的**截图**,以 **Base64** 方式保存在 JSON 中并展示 - 选中页面后,中间画布加载该大屏、右侧刷新属性 ### 2.1.4 页面属性(右侧面板) | 字段 | 说明 | |---|---| | PageID | 页面编号(页面 ID) | | ScreenIndex | 绑定屏幕编号(指定该页面投放到哪块屏幕) | | ControllerIndex | 控制器索引(键盘数字键长按切换到此页) | | IsDisplay | 是否显示 | | PageTitle | 页面标题 | | PageDescribe | 页面描述备注 | | PageUrl | 页面网页地址(如 `about:blank`) | | PageParams | 页面参数(自动拼装进 URL 访问) | | PagePreview | 页面截图预览(Base64,持久化到 JSON) | ### 2.1.5 画布 - 内嵌加载当前选中页面(`about:blank` 显示空白页提示) - 工具栏:显示页面标题、URL、**刷新大屏页面**、**缩小/放大**(±10%) ## 2.2 发布功能(大屏输出调度) ### 2.2.1 发布按钮组(Ribbon「发布」组,顺序固定) | 按钮 | 状态 | 行为 | |---|---|---| | **预览本页** | ✅ | 弹窗选择指定屏幕播放当前页面(支持快捷键控制) | | **单屏发布** | ✅ | 弹窗选择指定屏幕播放所有页面;新增**是否轮播** + **轮播间隔 X 秒**选项(支持快捷键控制) | | **多屏发布** | ✅ | 弹窗预览各屏幕布局与页面;新增 CheckBox 设置**是否在当前编辑器屏幕上也全屏显示**;确认后各页面按所在屏幕 ID 全屏播放(支持快捷键控制) | | **停止轮播** | ✅ | 停止单屏轮播 | | **关闭所有** | ✅ | 关闭所有播放的页面 | | **检测屏幕** | ✅ | 弹窗显示已连接屏幕列表;各屏幕左上角**黑底白字**醒目显示屏幕编号和分辨率,便于演示人员查看屏幕布局 | ### 2.2.2 快捷键体系(大屏 / 轮播 / 主窗口统一生效) | 按键 | 功能 | |---|---| | `1` - `9` | 进入对应控制器编号的页面(需长按超过阈值,见 §2.3.2) | | `↑` `↓`(或 `←` `→`) | 轮播页面上/下切换 | | `Esc` | 退出全屏 / 关闭播放 | | `F5` | 刷新当前页面 | | `F9`(可配置) | 锁定 / 解锁快捷键识别 | ## 2.3 配置功能 配置页面为**左右结构**:左侧菜单栏 + 右侧配置区。共 6 个菜单: ### 2.3.1 项目信息(📋) - 配置**项目名称**、**版本号** - 配置 **JSON 读写密码**(防止 JSON 文件泄露后明文显示 URL 和网页参数) ### 2.3.2 遥控设置(🎮) - **遥控器模拟界面**:给演示者展示快捷键信息并测试快捷键 - 数字键 `1`-`9`:切换对应控制器编号页面 - `↑` `↓`:上一页 / 下一页 - `Esc`:关闭所有播放页面 - 锁定键:一键锁定/解锁快捷键识别 - **快捷键触发阈值设置**:解决"网页内交互输入数字也会触发切屏"的问题——数字/方向键需**长按超过阈值**(默认 350ms,可调 100-1500ms)才切屏,快速输入不受影响 - **锁定/解锁快捷键**:默认 `F9`,可选 `F8` / `F10` / `ScrollLock` / `Pause` / `NumLock` - **快捷键测试区**:输入框实测键盘行为,记录按键与键码 - **快捷键速查表**:集中展示全部快捷键 ### 2.3.3 快捷方式(🖱️) 三个桌面快捷方式: | 序号 | 快捷方式 | 行为 | |---|---|---| | ① | 打开本控制中心工具 | 直接打开应用主界面 | | ② | 打开指定项目 Json | 打开指定项目并进入**编辑**状态 | | ③ | 打开指定项目 Json | 打开指定项目并默认进入**发布**状态 | ### 2.3.4 发布设置(🚀) - 发布**默认值**配置(快捷方式③按此默认配置发布): - 发布模式:多屏 / 单屏 / 主屏 - 屏幕编号、是否同时主屏全屏 - 单屏轮播间隔(秒) ### 2.3.5 设备测试(🔌) | 测试项 | 说明 | |---|---| | ⌨️ 键盘测试 | 聚焦后记录按键与键码,支持清空记录 | | 🔊 音箱测试 | 音量调节、播放提示音、播放 C5 音阶 | | 🎙️ 麦克风测试 | 实时电平表,验证麦克风采集 | | 🖥️ 屏幕测试 | 检测屏幕,表格显示编号/分辨率/位置/类型/当前播放状态 | ### 2.3.6 关于(ℹ️) - 显示当前工具版本号、系统简介 - 运行环境:Electron / Chromium / Node 版本、平台 - 编辑帮助、发布帮助 --- ## 3. 业务流程 1. **编辑**:新建多个大屏页面,配置每个页面的 URL、绑定屏幕索引等属性,必要时截图生成预览图 2. **发布**:检测屏幕 → 选择屏幕 → 执行预览 / 单屏发布(可轮播)/ 多屏发布,网页大屏即在硬件屏幕上全屏展示 3. **配置**:硬件调试、系统设置、快捷方式创建;全部工程配置保存到 JSON 文件,方便打开复用项目 --- ## 4. 数据与安全 ### 4.1 工程文件结构(`.json`) ```json { "appName": "项目名称", "version": "项目版本号", "pages": [ { "PageID": "页面编号", "PageTitle": "页面标题", "PageDescribe": "页面描述", "ScreenIndex": 0, "ControllerIndex": 0, "IsDisplay": true, "PageUrl": "网页地址", "PageParams": "页面参数", "PagePreview": "Base64 预览图" } ] } ``` ### 4.2 密码加密 - 项目 JSON 支持 **AES-256-GCM** 密码加密 - 设置密码后,保存的 JSON 为密文,打开时需输入密码解密 - 目的:防止工程文件泄露后明文暴露 URL 与网页参数 ### 4.3 应用配置(settings.json,存储于 userData 目录) 项目名称、项目版本号、JSON 密码、快捷键阈值、锁定键、发布默认值(模式/屏幕/同时主屏/轮播间隔)、上次使用的文件夹。 --- ## 5. 版本管理与分发 1. **版本号单一来源**:`package.json` 的 `version` 字段(当前 `0.1.0`) - 主进程通过 `app.getVersion()` 读取 - 标题栏、任务栏/Alt+Tab 标题均显示版本号 - 升级时仅需修改 `package.json` 一处 2. **绿色版打包**:`npm run dist` 生成免安装 zip 压缩包(x64,解压即用),输出到 `release/` 3. **运行时信息**:可通过主窗口「关于」查看 Electron / Chromium / Node 版本 --- ## 6. 非功能需求 1. **单实例运行**:应用同一时刻仅允许一个实例 2. **未保存守卫**:关闭窗口时若有未保存修改,提示用户处理 3. **快捷键避坑**:数字键长按阈值机制避免与网页输入冲突;锁定键可一键暂停快捷键识别(适合演示场景) 4. **多屏异步输出**:支持多页面、多屏幕,实现多屏异步输出不同大屏网页 5. **性能**:发布页面使用独立渲染视图,不影响编辑器操作 --- ## 7. 待办与后续规划 ⏳ | 待办 | 说明 | |---|---| | 项目导入 / 导出 | 编辑 Tab 项目操作补齐 | | 代码视图 / 页面视图切换 | 编辑页面双视图 | | 遥控器硬件对接 | 对接实体遥控器硬件操作大屏(当前为键盘模拟方案) | | 帮助文档入口 | 「关于」中提供外部帮助文档链接 | --- ## 8. 需求来源对照 | 来源 | 状态 | |---|---| | 原 WinForm 版需求(v1.0 文档) | 已在 Electron 重写版中落地,本文档为当前实现版 | | 界面/功能调整清单(指令清单) | 发布按钮组 6 按钮、配置页 6 菜单、遥控阈值、快捷方式×3、发布默认值、设备测试、关于、记住最后文件夹、轮播选项、页面重排 —— **已全部实现** ✅ |