diff --git a/pages.json b/pages.json index fd6a24f..eeda99a 100644 --- a/pages.json +++ b/pages.json @@ -23,7 +23,6 @@ "navigationStyle": "custom" } }, - { "path": "pages/deviceBind/index", "style": { @@ -38,7 +37,6 @@ "navigationStyle": "custom" } }, - { "path": "pages/device/index", "style": { @@ -65,7 +63,8 @@ "selectedColor": "#007AFF", "backgroundColor": "#FFFFFF", "borderStyle": "black", - "list": [{ + "list": [ + { "pagePath": "pages/index/index", "text": "首页", "iconPath": "static/tabbar/index.png", diff --git a/pages/deviceManage/index.vue b/pages/deviceManage/index.vue index 5116a4a..e06d594 100644 --- a/pages/deviceManage/index.vue +++ b/pages/deviceManage/index.vue @@ -16,7 +16,7 @@ + @click="getVideoImg('video')"> 获取视频 @@ -32,24 +32,29 @@ - + + + + 设备状态 + @click="deviceType = 1">设备状态 设备日志 + @click="deviceType = 2">设备日志 设备控制 + @click="deviceType = 3">设备控制 @@ -138,8 +143,8 @@ - + + 暂无日志数据 @@ -150,10 +155,10 @@ 打印文件名称: - + + src="https://online.totustec.com/upload/deviceManage/clear_deviceN_icon.png"> @@ -161,45 +166,39 @@ 文件位置:桌面File文件夹内 - - - 开始打印 + + + + 开始打印 - + 继续打印 + :style="{ color: deviceDetail.status === 0 || printInfo.status !== 6 ? '#ece8e8' : '#333333' }">继续打印 + 暂停打印 + color: + printInfo.status !== 6 && deviceDetail.status !== 0 + ? '#333333' : '#ece8e8', + }">暂停打印 - 退出打印 + 退出打印 @@ -240,7 +237,7 @@ import { } from "@/config.js"; export default { - data() { + data () { return { isMediaLoading: false, deviceName: "", @@ -403,9 +400,10 @@ export default { reconnectTimer: null, // 重连定时器 reconnectInterval: 5000, // 重连间隔(5秒) socketData: {}, + isMediaRequesting: false, // 媒体请求状态锁,防止并发请求 }; }, - onLoad(options) { + onLoad (options) { const systemInfo = wx.getSystemInfoSync(); const { statusBarHeight, // 状态栏高度(单位:px) @@ -423,15 +421,26 @@ export default { this.connectWebSocket(); // 初始化 WebSocket 连接 }, - onUnload() { + onUnload () { this.closeWebSocket(); // 页面卸载时关闭连接 }, methods: { + // 媒体加载成功处理 + handleMediaLoaded () { + this.isMediaLoading = false; + this.isMediaRequesting = false; // 解锁请求状态 + }, + + // 媒体加载失败处理 + handleMediaError () { + this.isMediaLoading = false; + this.isMediaRequesting = false; // 解锁请求状态 + }, // ---------------------- WebSocket 核心方法 ---------------------- - connectWebSocket() { + connectWebSocket () { const wsUrl = BASE_STOKECT_URL; // 初始化 WebSocket 连接(使用 uni-app 接口) @@ -449,7 +458,7 @@ export default { }); }, - listenSocketMessage() { + listenSocketMessage () { // 监听 WebSocket 消息 uni.onSocketMessage((event) => { console.log("event", event); @@ -460,7 +469,7 @@ export default { }); }, - closeWebSocket() { + closeWebSocket () { // 关闭连接并清理资源 if (this.socketTask) { uni.closeSocket(); @@ -470,7 +479,7 @@ export default { clearTimeout(this.reconnectTimer); }, - tryReconnect() { + tryReconnect () { // 自动重连机制 clearTimeout(this.reconnectTimer); this.reconnectTimer = setTimeout(() => { @@ -479,7 +488,7 @@ export default { }, this.reconnectInterval); }, - updateDeviceStatus(message) { + updateDeviceStatus (message) { console.log("实时消息", message); // CLOSE、STATUS 你那就刷新接口就行 if (message.msgType == "CLOSE" || message.msgType == "STATUS") { @@ -498,7 +507,7 @@ export default { this.socketData = message.data; if (this.socketData.imageUrl) { this.socketData.imageUrl = - BASE_IMG_URL + message.data.imageUrl; + BASE_IMG_URL + message.data.imageUrl; } } // WRITEIMG 接收图片数据中 @@ -515,7 +524,7 @@ export default { * 发送 WebSocket 指令 * @param {string} command - 指令值(如 PAUSE、CONTINUE 等) */ - sendWsCommand(command) { + sendWsCommand (command) { if (!this.isSocketConnected) { console.warn("WebSocket 未连接,无法发送指令"); return; @@ -537,18 +546,18 @@ export default { // 发送消息(使用 uni-app 的 sendSocketMessage) uni - .sendSocketMessage({ - data: JSON.stringify(message), - }) - .then(() => { - console.log("指令发送成功:", message); - }) - .catch((err) => { - console.error("指令发送失败:", err); - }); + .sendSocketMessage({ + data: JSON.stringify(message), + }) + .then(() => { + console.log("指令发送成功:", message); + }) + .catch((err) => { + console.error("指令发送失败:", err); + }); }, - operationData(type) { + operationData (type) { if (type == "PRINT") { // 检查设备状态 if (this.deviceDetail.status == 0 && this.deviceDetail.status != -1) { @@ -598,8 +607,8 @@ export default { } if (type == 'PAUSE') { - console.log(this.deviceDetail.status ===0) - if (this.printInfo.status === 6 || this.deviceDetail.status ===0){ + console.log(this.deviceDetail.status === 0) + if (this.printInfo.status === 6 || this.deviceDetail.status === 0) { // uni.showToast({ // title: "当前设备已暂定,禁止操作", // icon: "none", @@ -635,24 +644,65 @@ export default { } } }, - getVideoImg(type) { + // getVideoImg (type) { + // this.isMediaLoading = true; + // if (!this.isMediaLoading) { + // if (type == "img") { + // uni.showToast({ + // title: "请等待图片获取完毕再进行切换", + // icon: "none" + // }); + // } else { + // uni.showToast({ + // title: "请等待视频获取完毕再进行切换", + // icon: "none" + // }); + // } + // return + // } + + // if (type == "img") { + // this.getType = "img"; + // this.sendWsCommand("IMAGE"); + // } else { + // this.getType = "video"; + // this.sendWsCommand("OPEN_VIDEO"); + // } + // }, + getVideoImg (type) { + // 如果正在请求媒体资源,提示并阻止操作 + if (this.isMediaRequesting) { + const tipText = this.getType === "img" + ? "请等待图片获取完毕再切换" + : "请等待视频获取完毕再切换"; + uni.showToast({ + title: tipText, + icon: "none", + duration: 2000 + }); + return; + } + + // 开始新的媒体请求,锁定状态 + this.isMediaRequesting = true; this.isMediaLoading = true; - if (type == "img") { - this.getType = "img"; + this.getType = type; + + // 根据类型发送对应指令 + if (type === "img") { this.sendWsCommand("IMAGE"); } else { - this.getType = "video"; this.sendWsCommand("OPEN_VIDEO"); } }, // 获取状态文字 - getStatusText(status) { + getStatusText (status) { if (status == -1) { return "断开"; } return this.statusMap[status]?.text || ""; }, - getStatusText2(status) { + getStatusText2 (status) { //如果状态为-1就算断开 if (status === -1) { return "断开"; @@ -660,13 +710,13 @@ export default { return this.childStatusMap[status]?.text || ""; }, // 获取状态颜色 - getStatusColor(status) { + getStatusColor (status) { if (status == -1) { return "#999999"; } return this.childStatusMap[status]?.color; // 默认灰色 }, - getCurrentTime() { + getCurrentTime () { const date = new Date(); const year = date.getFullYear(); const month = String(date.getMonth() + 1).padStart(2, "0"); // 月份补零 @@ -677,10 +727,10 @@ export default { // 格式:YYYY.MM.DD HH:MM:SS return `${year}.${month}.${day} ${hours}:${minutes}:${seconds}`; }, - goBack() { + goBack () { uni.navigateBack(); }, - async getDeviceDetail() { + async getDeviceDetail () { try { const res = await uni.request({ url: BASE_API_URL + '/api/front/device/get', @@ -725,7 +775,7 @@ export default { }); } }, - onDeviceNameInput(e) { + onDeviceNameInput (e) { this.deviceName = e.detail.value; // console.log('输入内容:', e.detail.value); }, @@ -896,7 +946,8 @@ export default { } .deviceN_input { - width: 419rpx; + /* width: 419rpx; */ + width: 347rpx; height: 74rpx; background: #ffffff; border-radius: 10rpx; @@ -904,6 +955,7 @@ export default { font-weight: 400; font-size: 28rpx; color: #666666; + padding-right: 72rpx; } .label_text { @@ -1044,10 +1096,9 @@ export default { .img_video_warp { width: 100%; - height: 321; + height: 321px; background: rgba(0, 0, 0, 0.3); border-radius: 20rpx; - margin: 22rpx 0 32rpx 0; } .back_button_icon { diff --git a/pages/index/index.vue b/pages/index/index.vue index 71dd53f..ad16d5e 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -265,7 +265,7 @@ --> - + 暂无设备预警