feat: 添加后端部署和API基本检索的Docker Compose配置

- 引入新的`docker-compose.yml`文件,便于后端和MQTT代理(EMQX)的部署。
- 更新多个组件中的API基本检索,使用函数进行动态解析。
- 加强了多个组件中API调用的错误处理和日志记录。
- 优化了AI聊天面板离线场景的回退响应。
- 更新DataScreen和MediaScreen组件中的数据显示和统计,以反映准确的指标。
- 重构MQTT连接逻辑,以支持动态凭证和客户端ID。
This commit is contained in:
Pine
2026-08-18 06:50:50 +08:00
parent fbf2eccad2
commit 18d28be943
23 changed files with 621 additions and 142 deletions
+34 -8
View File
@@ -1,20 +1,46 @@
/* =========================================================
运行配置 —— 后端地址 / MQTT Broker
优先级:window.__DPM_*__ 全局变量 > Vite 环境变量(.env.local> 内置默认
部署时在项目根目录 .env.local 配置(已 gitignore):
VITE_API_BASE=http://192.168.x.x:18003
VITE_MQTT_URL=ws://192.168.x.x:8083/mqtt
VITE_MQTT_USERNAME=...
VITE_MQTT_PASSWORD=...
优先级:window.__DPM_*__ 全局变量(运行时可被 /api/config 引导覆盖)
> Vite 环境变量(.env.local,构建时)> 内置默认
内置默认(打包部署):Tauri 内 WebView 的 hostname 为 tauri.localhost
后端与 MQTT Broker 若与展播程序同机部署,回退到 127.0.0.1;
浏览器开发/局域网访问时回退到当前主机 hostname。
========================================================= */
const env = import.meta.env || {};
export const API_BASE = window.__DPM_API__ || env.VITE_API_BASE || 'http://192.168.1.9:10085';
export const MQTT_URL = window.__DPM_MQTT__ || env.VITE_MQTT_URL || 'ws://192.168.1.3:8083/mqtt';
/* 运行期解析(惰性读取 window.__DPM_*__,供 main.jsx bootstrap 覆盖后再生效) */
function resolveHost() {
const h = window.location.hostname || '127.0.0.1';
// Tauri 打包 WebViewtauri.localhost / localhost)→ 服务同机部署用 127.0.0.1
if (h === 'tauri.localhost' || h === 'localhost' || h === '127.0.0.1' || h.includes('tauri')) {
return '127.0.0.1';
}
return h; // 浏览器开发/局域网:当前主机 IP
}
export const API_BASE = window.__DPM_API__ || env.VITE_API_BASE || `http://${resolveHost()}:10085`;
export const MQTT_URL = window.__DPM_MQTT__ || env.VITE_MQTT_URL || `ws://${resolveHost()}:8083/mqtt`;
export const MQTT_USERNAME = window.__DPM_MQTT_USER__ || env.VITE_MQTT_USERNAME || '';
export const MQTT_PASSWORD = window.__DPM_MQTT_PASS__ || env.VITE_MQTT_PASSWORD || '';
/** 惰性读取 API 基址(允许 bootstrap 从后端 /api/config 覆盖后再生效) */
export function getApiBase() {
return window.__DPM_API__ || API_BASE;
}
/** 惰性读取 MQTT 地址(允许 bootstrap 覆盖后再生效) */
export function getMqttUrl() {
return window.__DPM_MQTT__ || MQTT_URL;
}
export function getMqttCredentials() {
return {
username: window.__DPM_MQTT_USER__ || MQTT_USERNAME,
password: window.__DPM_MQTT_PASS__ || MQTT_PASSWORD,
};
}
export const MQTT_TOPIC_COMMAND = 'opc/display/command';
export const MQTT_TOPIC_TICK = 'opc/dashboard/tick';
export const MQTT_TOPIC_HEARTBEAT = 'opc/display/heartbeat';