114 lines
5.7 KiB
Markdown
114 lines
5.7 KiB
Markdown
# 园区大屏(park-desktop / DPM)
|
||
|
||
> 核对:2026-10-19 · 依据 park-desktop `main@a2fbad8` · 以实现为准
|
||
|
||
**DPM**(Digital Playback Media)—— 基于 **Tauri 2 + React 19** 的园区大屏客户端,为昆明市大学生创业园 OPC 运营中心提供数据大屏、数字孪生、AI 助手、媒体轮播、任务大屏与企业墙。
|
||
|
||
> 园区后端已并入 **server-core `/park`**(不再有独立 `:10085` 后端);管理后台为后端 **FastAPI + Jinja** 页面(`GET /admin`),**不由 React 路由接管**。实时控制走 **MQTT(EMQX `:8083`)**,不再使用内置 Axum HTTP 服务 / SSE / nps。
|
||
|
||
## 技术栈
|
||
|
||
| 层级 | 技术 |
|
||
|------|------|
|
||
| 前端框架 | React 19 + React Router 7 |
|
||
| 构建工具 | Vite 7 + Tailwind 4.3(`@tailwindcss/vite`) |
|
||
| 桌面框架 | Tauri 2(Rust,`src-tauri/`,本地 `wry` 补丁) |
|
||
| 三维 / 可视化 | three 0.185(`@react-three/fiber` / `drei`)、`@appica/ui-react` |
|
||
| 实时通信 | MQTT 5.15(`mqtt.js`,EMQX) |
|
||
| 二维码 | `qrcode.react` |
|
||
|
||
## 页面(`src/App.jsx`)
|
||
|
||
| 路由 | 页面 | 说明 |
|
||
|------|------|------|
|
||
| `/` | `DataScreen` | 园区数据大屏(概览/数据快照) |
|
||
| `/twin` | `DigitalTwin` | 数字孪生(3D 园区) |
|
||
| `/ai` | `AiAssistant` | 园区 AI 助手(含语音 s2s) |
|
||
| `/screen` | `MediaScreen` | 全屏媒体轮播(视频/图片,MQTT 受控) |
|
||
| `/tasks` | `TaskDisplay` | 任务大屏(轮播卡 + 二维码扫码接单) |
|
||
| `/wall` | `CompanyWall` | 入驻企业展示墙 |
|
||
|
||
- 统一页眉布局 `components/ScreenLayout`;`/voice` 有 `VoiceAssistant` 组件但**当前未挂路由**。
|
||
- 首启可走 **屏幕绑定**(`components/BindScreen` + `utils/tenant`,绑定后按租户拉数据);支持双屏(`set_dual_screen`)、全屏、开机自启(`tauri-plugin-autostart`)、应用内自动更新(`components/UpdateNotify` + `utils/updateCheck`)。
|
||
|
||
## 功能概览
|
||
|
||
- **媒体轮播**(`pages/MediaScreen.jsx`):视频/图片全屏轮播、沉浸式空间背景、自动播放、点击暂停/恢复、音量与顺序/随机播放、播放状态上报(`opc/display/*` MQTT 主题)。
|
||
- **任务大屏**(`pages/TaskDisplay.jsx`):任务轮播卡 + 二维码扫码接单。
|
||
- **园区数据 / 数字孪生 / 企业墙**:数据快照(`opc/dashboard/tick`)、3D 园区、入驻企业展示。
|
||
- **AI 助手**:对话面板 + 语音 s2s(`src/voice/`)。
|
||
- **设备与运维**:屏幕绑定/租户隔离、心跳上报(`opc/display/heartbeat`,后端统计在线)、双屏、全屏、开机自启、自动更新。
|
||
- **管理后台**:媒体上传、播放列表编排与播放控制等由 **server-core `/park`** 的后端 `/admin` 页面提供(前端不再内置管理页)。
|
||
|
||
## 快速开始
|
||
|
||
### 环境要求
|
||
|
||
- **Rust**(edition 2021)、**Node.js** >= 18、**Yarn**(或 npm)、Tauri 2 CLI(`yarn tauri` 走本地依赖)
|
||
|
||
### 安装与运行
|
||
|
||
```bash
|
||
yarn install
|
||
|
||
yarn dev # 仅启动 Vite(http://localhost:1420,浏览器预览大屏)
|
||
yarn tauri dev # Tauri 桌面端(前端 + Rust 壳)
|
||
yarn build # 前端产物 dist/
|
||
yarn tauri build # 桌面安装包,产物在 src-tauri/target/release/
|
||
```
|
||
|
||
> ⚠️ 按团队铁律:**AI 不启动/重启任何服务(含 vite / Tauri)**,需要时通知用户亲自操作。
|
||
|
||
### 配置(`src/config.js`)
|
||
|
||
地址解析优先级:**exe 旁 `config.json`(Tauri `read_runtime_config`)> 后端 `/park/api/config` 下发 > 构建期 `VITE_*` > 内置默认**。
|
||
|
||
| 项 | 默认 | 覆盖方式 |
|
||
|----|------|---------|
|
||
| 园区 API | `http://<当前主机>:8090/park`(打包生产回退 `opc.pinesound.cn`) | `window.__DPM_API__`、`VITE_API_BASE` |
|
||
| MQTT | `ws(s)://<当前主机>:8083/mqtt`(生产 `wss`) | `window.__DPM_MQTT__`、`VITE_MQTT_URL` |
|
||
| 视频识别 | 空 = 禁用 | `window.__DPM_VISION__`、`VITE_VISION_API_BASE` |
|
||
| 大屏引导令牌 | 空 | `window.__DPM_BOOTSTRAP__`、`VITE_PARK_BOOTSTRAP_TOKEN` |
|
||
|
||
旧 `:10085` 地址一律判为失效并回退 server-core 统一入口。
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
index.html
|
||
package.json # 包名 dpm
|
||
vite.config.js # 端口 1420;无 dev 代理(API 由 src/config.js 直连 server-core)
|
||
public/ # logo、语音 worklets 等静态资源
|
||
src/
|
||
main.jsx # React 入口 + 运行时配置引导 + 致命错误兜底
|
||
App.jsx # 6 个大屏路由
|
||
config.js # API / MQTT / Vision / bootstrap 令牌解析
|
||
pages/ # DataScreen / DigitalTwin / AiAssistant / MediaScreen / TaskDisplay / CompanyWall
|
||
components/ # ScreenLayout / BindScreen / PageHeader / 各类面板、弹窗
|
||
utils/ # api.js、mqtt.js、tenant.js、taskData.js、updateCheck.js、pageNav.js、sounds.js
|
||
voice/ # s2s 语音客户端、orb 可视化、worklets
|
||
styles/ # tokens/global/datascreen/mediascreen/task-display 等
|
||
src-tauri/
|
||
Cargo.toml # tauri 2 + opener/autostart + 本地 wry 补丁
|
||
tauri.conf.json # productName「云超服昆创园OPC运营中心」,1200x800 全屏
|
||
capabilities/default.json # 窗口/自启/opener 权限
|
||
src/{main.rs,lib.rs} # 入口;命令:set_dual_screen / install_update / read_runtime_config
|
||
```
|
||
|
||
## 端口一览
|
||
|
||
| 端口 | 用途 |
|
||
|------|------|
|
||
| 1420 | Vite 前端开发服务器(`strictPort`) |
|
||
| 8090 | server-core(园区 API 前缀 `/park`) |
|
||
| 8083 | MQTT Broker(EMQX,`/mqtt`) |
|
||
| 10085 | **已废弃**的旧园区后端(源码已回退到统一入口,勿再使用) |
|
||
|
||
## 许可
|
||
|
||
本项目为昆明市大学生创业园公益定制开发。
|
||
|
||
---
|
||
|
||
*云南派音人工智能科技提供技术支持*
|