Pine
|
07dbd404a9
|
refactor: 弱化媒体播放控制区 + MQTT 客户端 ID 唯一化
播放控制区:
- 从底部中央移到右下角,整体缩小(播放键 42→30px、导航键 34→26px)
- 背景更透(0.8→0.55)、阴影更轻,视觉弱化不抢内容
- 播放名不再显示完整地址:URL 媒体只显示文件名(cleanName 清洗,去掉协议/路径/查询)
MQTT 客户端 ID:
- 后端 client_id 由固定 dpm-backend 改为 dpm-backend-{pid}-{随机},多实例不互踢
- 前端 client_id 增加时间戳 + 更高熵随机,避免多屏/多标签竞争
|
2026-08-17 22:16:22 +08:00 |
|
Pine
|
7bb0e9024a
|
fix: 修复大屏播放控制链路
前端:
- useMqttControl 指令分发补上 play_target(此前被静默丢弃,立即播放无法触发大屏跳转)
- MediaScreen 重构 playTarget:pendingTargetRef 统一刷新播放列表路径,
消除与 playlist_changed 重载的竞态(避免跳转被旧索引覆盖)
后端:
- storage.add_to_playlist 自动识别 URL 来源(source=url),
修复 URL 媒体加入播放列表后被当本地文件过滤、永远无法播放的问题
- _load 时规范化旧数据(source=None 的 http 条目自动补 url)
|
2026-08-17 21:59:13 +08:00 |
|
Pine
|
c55835fb7d
|
fix: 管理后台连接状态 + 修复按钮无响应
连接状态(正式):
- /api/display/state 扩展:screens_online(大屏心跳统计,opc/display/heartbeat)+ last_command(最近指令与发布结果)
- 前端大屏每 10s 上报心跳(稳定 client_id),后端 30s TTL 统计在线大屏数
- 管理台新增「连接状态」卡片:后端/MQTT/在线大屏/最近指令,3s 轮询刷新
按钮无响应根治:
- admin.js 改为 document 事件委托(data-nav/data-control/data-action/复制/预览),不再依赖逐个绑定
- /static 与 /admin 响应加 no-cache 头,杜绝旧 JS/CSS 缓存导致的按钮失效
- SSE 不再自动重载页面(避免与操作回调双重重载清掉反馈);立即播放改为 toast 不重载
|
2026-08-17 21:54:28 +08:00 |
|
Pine
|
1a95ecbacb
|
feat: 管理后台补齐完整功能
- 页面切换卡片:数据大屏/数字孪生/AI 助手/媒体轮播 → MQTT navigate 控制所有大屏
- 立即播放:新增 POST /api/playlist/play(加入播放列表 + MQTT play_target),
MediaScreen 监听 play_target 跳转并播放指定媒体
- 远程 URL 支持两种操作:添加到媒体库 / 加入播放列表
- 本地媒体卡片显示 FastAPI 输出 URL(/file/...)+ 一键复制
- 预览弹窗增加「立即播放」;新增 page-switch/media-url/copy-btn 样式
|
2026-08-17 21:38:04 +08:00 |
|
Pine
|
00cb76c73f
|
feat: 管理后台迁移至 FastAPI + Jinja2 服务端渲染
- GET /admin:Jinja 模板渲染(登录页 / 管理台),媒体库、播放列表、设置由服务端渲染
- POST /admin/login:表单登录 + HMAC 签名 Cookie(DPM_ADMIN_SECRET),GET /admin/logout 退出
- /static/admin.css + admin.js:动态操作(上传进度/播放控制/设置/SSE 状态/预览弹窗)调 REST 后整页刷新
- 前端移除 React Admin 页面与 /admin 路由(Admin.jsx 删除);媒体/播放列表接口保持不变
- 依赖改用 uv 管理(pyproject.toml + uv.lock,含 jinja2),README 更新启动方式
|
2026-08-17 21:30:44 +08:00 |
|
Pine
|
856ff88440
|
feat: 拆出 FastAPI 独立后端 + MQTT 控制 + 阿里云 AI
后端(backend/,FastAPI :10085):
- 全部数据 REST 接口:dashboard 快照 / 企业分区 / 播放列表 / 媒体 / 设置
- MQTT 控制通道:opc/display/command(切页/播放/卡片/通知),
管理端 POST /api/display/command → MQTT 广播 → 所有大屏同步响应
- 阿里云 DashScope:通义千问 LLM + 函数调用(工具经 MQTT 广播),
paraformer-realtime-v2 语音识别 /api/ai/asr
- 媒体资源统一由后端存储返回(上传/列表/静态服务)
- SSE /api/events 保留作 MQTT 不可用时的兼容回退
前端:
- config.js + .env.local 配置后端地址与 MQTT 账号(前端 dpm / 服务端 dpmserver)
- mqtt.js 客户端 + useMqttControl(MQTT 驱动切页/媒体/卡片/通知)
- DpmOverlays 全局覆盖层(通知 toast + 企业/分区/总览卡片)
- useParkSim 改为后端 API 数据源(离线回退本地模拟)
- AiChatPanel:对话走后端 LLM(工具调用),语音走本地录音 + 后端 ASR
- MediaScreen:媒体控制走 MQTT(保留 SSE 回退),修复 useEffect TDZ
Rust:lib.rs 移除内嵌 HTTP 服务器,只保留薄壳(窗口/权限/自启/npc 隧道)
安全:backend/.env、.env.local、media、data.json 已 gitignore
|
2026-08-17 21:26:16 +08:00 |
|