From 1ad1ae0ac903b79154dedbefc510bcd505fae1fc Mon Sep 17 00:00:00 2001 From: liub Date: Mon, 10 Nov 2025 17:27:37 +0800 Subject: [PATCH 1/7] =?UTF-8?q?4877V1=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 2 +- components/MessagePopup/MessagePopup.vue | 2 + manifest.json | 22 +- pages.json | 13 + pages/100/HBY100.vue | 6 +- pages/4877/BJQ4877.vue | 438 ++++++++++++++++++----- pages/common/addBLE/LinkBle.vue | 1 + pages/common/audioManager/AudioList.vue | 4 +- utils/BleHelper.js | 10 +- 9 files changed, 396 insertions(+), 102 deletions(-) diff --git a/App.vue b/App.vue index eb826f1..022d225 100644 --- a/App.vue +++ b/App.vue @@ -113,7 +113,7 @@ } .green { - color: #4CAF50 !important; + color: #aed600 !important; } .red { diff --git a/components/MessagePopup/MessagePopup.vue b/components/MessagePopup/MessagePopup.vue index b638dd0..46291b3 100644 --- a/components/MessagePopup/MessagePopup.vue +++ b/components/MessagePopup/MessagePopup.vue @@ -393,4 +393,6 @@ padding-top: 40rpx; } + + \ No newline at end of file diff --git a/manifest.json b/manifest.json index 282ed38..7255c9c 100644 --- a/manifest.json +++ b/manifest.json @@ -22,7 +22,8 @@ "Bluetooth" : {}, "Camera" : {}, "Geolocation" : {}, - "Maps" : {} + "Maps" : {}, + "Record" : {} }, /* 应用发布信息 */ "distribute" : { @@ -89,7 +90,24 @@ "appkey_android" : "d7d852dbda2b95f6f796fb9a711a9fee" } }, - "push" : {} + "push" : { + "unipush" : { + "version" : "2", + "offline" : true, + "honor" : {}, + "meizu" : {}, + "mi" : {}, + "vivo" : {}, + "oppo" : {}, + "hms" : {}, + "icons" : { + "small" : { + "xxhdpi" : "", + "xhdpi" : "" + } + } + } + } }, "icons" : { "android" : { diff --git a/pages.json b/pages.json index 4498b63..ac5614a 100644 --- a/pages.json +++ b/pages.json @@ -329,11 +329,24 @@ "navigationBarTitleText": "BJQ 4877" } }, + { + "path": "pages/4877/BJQ4877V1", + "style": { + "navigationBarTitleText": "BJQ 4877" + } + }, { "path": "pages/100/HBY100", "style": { "navigationBarTitleText": "HBY 100" } + }, + { + "path" : "pages/4877/BJQ4877CheckColor", + "style" : + { + "navigationBarTitleText" : "选择配组" + } } diff --git a/pages/100/HBY100.vue b/pages/100/HBY100.vue index 4dcc609..9933740 100644 --- a/pages/100/HBY100.vue +++ b/pages/100/HBY100.vue @@ -172,7 +172,7 @@ @@ -184,7 +184,7 @@ @@ -196,7 +196,7 @@ diff --git a/pages/4877/BJQ4877.vue b/pages/4877/BJQ4877.vue index 6b197bd..8da16ab 100644 --- a/pages/4877/BJQ4877.vue +++ b/pages/4877/BJQ4877.vue @@ -2,8 +2,7 @@ - + @@ -28,27 +27,42 @@ {{device.deviceName}} - Mac地址 - {{device.deviceMac}} - + Mac地址 + {{device.deviceMac}} + 蓝牙名称 {{device.bluetoothName}} - + 蓝牙状态 {{formData.bleStatu?'已连接':'未连接'}} + + 信道:{{formData.sta_Channel}} + 修改 + - + 设备强制报警中! {{formData.warnTime}}s + @@ -85,25 +99,22 @@ 单色配组 - - + + 选择配组 - - - - - - - {{item['text']}} + + + + + + {{item.name}} @@ -213,19 +224,16 @@ :iconUrl="Status.Pop.iconUrl" :message="Status.Pop.message" :buttonText="Status.Pop.buttonText" @buttonClick="HidePop" :visiblePrompt="Status.Pop.visiblePrompt" :promptTitle="Status.Pop.promptTitle" v-model="Status.Pop.modelValue" @closePop="closePop" :buttonCancelText="Status.Pop.buttonCancelText" - :showCancel="Status.Pop.showCancel" @cancelPop="closePop" /> + :showCancel="Status.Pop.showCancel" @cancelPop="closePop" :showSlot="Status.Pop.showSlot"> + + 修改信道 + - - + + + @@ -244,18 +252,23 @@ request, baseURL } from '../../utils/request'; + import { + colors as groupColors + } from '@/api/4877/BJQ4877.js'; + - import usrApi from '@/api/670/HBY670.js' const pagePath = "/pages/4877/BJQ4877"; var ble = null; var these = null; var recei = null; var interval = null; + var slidTime = null; export default { data() { return { Status: { + ShowEditChannel: false, pageHide: false, Pop: { showPop: false, //是否显示弹窗 @@ -276,6 +289,7 @@ okCallback: null, buttonCancelText: '', showCancel: false, + showSlot: false }, BottomMenu: { show: false, @@ -327,13 +341,14 @@ macAddress: '', bleStatu: false, sta_SOSType: '', //sos - sta_GroupType: '', //配组 + sta_GroupType: -1, //配组 sta_ArrowType: '', //箭头方向 - warnTime: 0 + warnTime: 0, + sta_Channel: 80 }, dic: { SOS: [{ - text: '声光报警', + text: 'SOS报警', val: 'sos', img: '/static/images/4877/sg.png', activeImg: '/static/images/4877/sgActive.png' @@ -345,30 +360,7 @@ activeImg: '/static/images/4877/fanActive.png' } ], - gropus: [{ - text: '红配组', - val: 'red_group', - img: '/static/images/4877/light.png', - activeImg: '/static/images/4877/lightActive.png' - }, - { - text: '蓝配组', - val: 'blue_group', - img: '/static/images/4877/light.png', - activeImg: '/static/images/4877/lightActive.png' - }, - { - text: '绿配组', - val: 'green_group', - img: '/static/images/4877/light.png', - activeImg: '/static/images/4877/lightActive.png' - }, - { - text: '黄配组', - val: 'yellow_group', - img: '/static/images/4877/light.png', - activeImg: '/static/images/4877/lightActive.png' - } + groups: [ ] }, @@ -397,11 +389,14 @@ onUnload() { console.log("页面卸载,释放资源"); ble.removeAllCallback(pagePath); + clearInterval(interval); }, onLoad: function() { these = this; recei = BleReceive.getBleReceive(); ble = BleTool.getBleTool(); + this.dic.gropus = []; + ble.addReceiveCallback(this.bleValueNotify, pagePath); @@ -415,7 +410,23 @@ eventChannel.on('detailData', function(data) { - // console.log("收到父页面的参数:" + JSON.stringify(data)); + console.log("收到父页面的参数:" + JSON.stringify(data)); + + let checkIds = uni.getStorageSync("4877CheckColor_" + data.data.id); + if (checkIds && checkIds.length) { + let groups = groupColors.filter(v => { + let filt = checkIds.find(id => { + return id === v.id; + }); + if (filt) { + return true; + } + return false; + }); + + these.dic.groups = groups; + + } var device = data.data; these.device = device; let f = ble.data.LinkedList.find((v) => { @@ -443,7 +454,7 @@ } these.formData.blename = f.name ? f.name : "Unname"; these.formData.deviceName = device.deviceName; - + these.formData.bleStatu = false; these.formData.deviceId = f.deviceId; ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => { @@ -466,7 +477,71 @@ }, methods: { + ShowChannelEdit() { + this.Status.ShowEditChannel = true; + this.showPop({ + showPop: true, //是否显示弹窗 + popType: 'custom', + bgColor: '#383934bd', + borderColor: '#BBE600', + textColor: '#ffffffde', + buttonBgColor: '#BBE600', + buttonTextColor: '#232323DE', + iconUrl: '', + message: '', + buttonText: '确定', + clickEvt: '', + visiblePrompt: false, + promptTitle: '', + modelValue: '', + visibleClose: false, + okCallback: ()=>{ + this.onChannelChanging(); + this.Status.ShowEditChannel=false; + }, + showSlot: true, + buttonCancelText: '取消', + showCancel: true, + cancelCallback:()=>{ + this.Status.ShowEditChannel=false; + } + }); + }, + onChannelChanging() { + let regex = /^(0|([1-9]\d?)|1[01]\d|12[0-5])$/; + if (!regex.test(this.formData.sta_Channel)) { + this.showMsg("只能输入0-125整数"); + return; + } + let f = this.getDevice(); + + if (!f) { + this.showBleUnConnect(); + return; + } + clearTimeout(slidTime); + slidTime = setTimeout(() => { + console.log("11111"); + let json = { + ins_channel: this.formData.sta_Channel + } + json = JSON.stringify(json); + ble.sendString(f.deviceId, json, f.writeServiceId, f.wirteCharactId, 30).then(res => { + console.log("发送成功"); + this.setBleFormData(); + }).catch(ex => { + this.showMsg(ex.msg); + }); + }, 200) + + + }, ArrowSet(val) { + if (this.formData.sta_SOSType === 'sos') { + this.showMsg("设备强制报警中,请先关闭报警") + return; + } + let f = this.getDevice(); if (!f) { this.showBleUnConnect(); @@ -486,27 +561,54 @@ this.showMsg(ex.msg); }); }, - groupSetting(item, index) { + groupCheck() { + + uni.navigateTo({ + url: '/pages/4877/BJQ4877CheckColor', + events: { + CheckGroupOver: function(data) { + debugger; + let arr = groupColors.filter(v => { + + let f = data.checkIds.find(item => { + return item === v.id; + }) + if (f) { + return true; + } + return false; + }); + + these.dic.groups = arr; + these.CheckGroupOver(data.allFlag); + } + }, + success(res) { + res.eventChannel.emit("CheckGroup", these.device) + } + }); + }, + CheckGroupOver(arr) { //选择了某些配组 + debugger; let f = this.getDevice(); if (!f) { this.showBleUnConnect(); return; } - if (this.formData.sta_GroupType === item.val) { - this.formData.sta_GroupType = ''; - } else { - this.formData.sta_GroupType = item.val; - } + var json = { - ins_GroupType: this.formData.sta_GroupType + ins_GroupType: arr } json = JSON.stringify(json); - ble.sendString(f.deviceId, json, f.writeServiceId, f.wirteCharactId, 30) - .catch(ex => { - this.showMsg(ex.msg); - }); + ble.sendString(f.deviceId, json, f.writeServiceId, f.wirteCharactId, 30).then(res => { + + }).catch(ex => { + this.showMsg(ex.msg); + }); }, + + showUnWarn(val) { this.showPop({ message: '确定解除声光报警模式?', @@ -526,28 +628,57 @@ }); }, - sosSetting(item, index) { + groupSetting(item, index) { + if (this.formData.sta_SOSType === 'sos') { + this.showMsg("设备强制报警中,请先关闭报警") + return; + } + if (this.formData.sta_GroupType === item.id) { + return; + } let f = this.getDevice(); if (!f) { this.showBleUnConnect(); return; } + + let groupSet = () => { + setTimeout(() => { + let buffer = { + ins_statusType: [item.id] + } + buffer = JSON.stringify(buffer); + console.error("发送命令:", buffer); + ble.sendString(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 30).then( + result => { + this.formData.sta_GroupType = item.id; + this.formData.sta_SOSType = 'sos_off' + console.log("配组设置成功"); + }); + }, 0); + } + groupSet(); + }, + sosSetting(item, index) { + + let f = this.getDevice(); + if (!f) { + this.showBleUnConnect(); + + return; + } let task = () => { var json = { ins_SOSType: this.formData.sta_SOSType == item.val ? 'sos_off' : item.val } - json = JSON.stringify(json); + console.error("发送指令:", json); + // let f={deviceId:'111111'} ble.sendString(f.deviceId, json, f.writeServiceId, f.wirteCharactId, 30).then(res => { - - if (this.formData.sta_SOSType === item.val) { - this.formData.sta_SOSType = 'sos_off'; - } else { - this.formData.sta_SOSType = item.val; - } - + this.formData.sta_GroupType = -1; + this.formData.sta_SOSType = json.ins_SOSType if (this.formData.sta_SOSType == 'sos') { this.formData.warnTime = 0; clearInterval(interval); @@ -560,25 +691,32 @@ }) .catch(ex => { this.showMsg(ex.msg); + }); } if (item.val === 'sos') { this.showPop({ - message: '确定开启声光报警模式?', + message: '确定' + (this.formData.sta_SOSType === 'sos' ? '关闭' : '开启') + '声光报警模式?', iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", borderColor: "#e034344d", buttonBgColor: "#E03434", okCallback: task, - buttonText: "开启", + buttonText: (this.formData.sta_SOSType === 'sos' ? '关闭' : '开启'), showCancel: true, buttonCancelText: '取消' }); + } else if (item.val === 'sos_off') { + task(); } else { - if (index !== undefined && this.formData.sta_SOSType == 'sos') { - this.showUnWarn(item.val); + + if (this.formData.sta_SOSType === 'sos') { + this.showMsg("设备强制报警中,请先关闭报警"); + + return; } else { task(); + } } @@ -753,7 +891,7 @@ return false; }); - uni.setStorageSync(ble.StorageKey, ble.data.LinkedList); + ble.updateCache(); }, showBleUnConnect() { @@ -1345,7 +1483,7 @@ border-radius: 16rpx; background: rgba(26, 26, 26, 1); width: 100%; - padding: 30rpx 0rpx; + padding: 10rpx 0rpx; } .modeSetting { @@ -1381,8 +1519,8 @@ } .modeSetting .arrow .outCircle { - width: 150rpx; - height: 150rpx; + width: 120rpx; + height: 120rpx; box-sizing: border-box; display: flex; flex-direction: row; @@ -1593,4 +1731,124 @@ justify-content: space-between; align-items: center; } + + .checkgroup { + color: rgba(174, 214, 0, 1); + + font-family: PingFang SC; + font-size: 28rpx; + font-weight: 400; + + letter-spacing: 0.14px; + text-align: left; + } + + + .colorContent { + display: flex; + align-content: center; + justify-content: flex-start; + justify-items: center; + flex-direction: row; + flex-wrap: wrap; + align-items: center; + width: 100%; + box-sizing: border-box; + + } + + .colorContent .polygon { + width: 40rpx; + height: 40rpx; + border-radius: 8rpx; + + } + + .colorContent .text { + color: rgba(255, 255, 255, 0.87); + font-family: PingFang SC; + font-size: 30rpx; + font-weight: 400; + letter-spacing: 2rpx; + margin-left: 15rpx; + } + + .colorContent .item { + background-color: #1A1A1A; + margin-left: 36rpx; + width: calc(calc(100% - 72rpx) / 3); + height: 110rpx; + margin-top: 24rpx; + box-sizing: border-box; + padding-left: 25rpx; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + justify-content: flex-start; + align-items: center; + align-content: center; + border-width: 1rpx; + border-style: solid; + border-color: #00000000; + border-radius: 8rpx; + } + + .colorContent .item.active { + border-color: #AED600 !important; + } + + .colorContent .marginNoLeft { + margin-left: 0rpx !important; + } + + + + .popup-prompt { + width: 100%; + box-sizing: border-box; + padding: 30rpx 15%; + } + + + .popup-prompt-title { + + text-align: center; + width: 100%; + float: left; + box-sizing: border-box; + white-space: nowrap; + color: rgba(255, 255, 255, 0.87); + font-family: PingFang SC; + font-size: 28rpx; + font-weight: 400; + line-height: 40rpx; + letter-spacing: 0.14rpx; + + + } + + .popup-prompt-input { + + width: 100%; + height: 60rpx; + line-height: 60rpx; + color: rgba(255, 255, 255, 0.87); + box-sizing: border-box; + border-bottom: 2rpx solid rgba(255, 255, 255, 0.4); + font-size: 28rpx; + font-weight: 400; + letter-spacing: 0.14px; + } + + .popup-prompt-input-placeHolder { + color: rgba(255, 255, 255, 0.4); + + font-family: PingFang SC; + font-size: 28rpx; + font-weight: 400; + + letter-spacing: 0.14px; + text-align: center; + + } \ No newline at end of file diff --git a/pages/common/addBLE/LinkBle.vue b/pages/common/addBLE/LinkBle.vue index 9977b67..82c2791 100644 --- a/pages/common/addBLE/LinkBle.vue +++ b/pages/common/addBLE/LinkBle.vue @@ -173,6 +173,7 @@ } else{ try{ + console.log("str=",receive.str) let json=JSON.parse(receive.str); let key = "sta_address"; if (key in json) {//100 diff --git a/pages/common/audioManager/AudioList.vue b/pages/common/audioManager/AudioList.vue index 21f05f1..f3f379a 100644 --- a/pages/common/audioManager/AudioList.vue +++ b/pages/common/audioManager/AudioList.vue @@ -601,6 +601,8 @@ console.log("无文件删除"); return; } + + console.log("item=", item); let delFile = (tempFilePath) => { let promise = new Promise((resolve, reject) => { @@ -687,7 +689,7 @@ this.Status.isEdit = false; this.showMsg("操作成功", true); - }, 100) + }, 0) } diff --git a/utils/BleHelper.js b/utils/BleHelper.js index 6c77356..877b62b 100644 --- a/utils/BleHelper.js +++ b/utils/BleHelper.js @@ -1740,9 +1740,9 @@ class BleHelper { bufferHex = bytes.map(b => '0x' + b.toString(16).padStart(2, '0').toUpperCase()).join(' '); } } - console.log("准备发送蓝牙指令 - deviceId:", deviceid, "writeServiceId:", writeServiceId, "writeCharactId:", wirteCharactId); - console.log("发送数据(Hex):", bufferHex || "(空数据)"); - console.log("发送数据(原始buffer长度):", buffer ? (buffer.byteLength || buffer.length || 0) : 0); + // console.log("准备发送蓝牙指令 - deviceId:", deviceid, "writeServiceId:", writeServiceId, "writeCharactId:", wirteCharactId); + // console.log("发送数据(Hex):", bufferHex || "(空数据)"); + // console.log("发送数据(原始buffer长度):", buffer ? (buffer.byteLength || buffer.length || 0) : 0); if (ms === undefined) { ms = 50; } @@ -1831,10 +1831,10 @@ class BleHelper { } if (c.Linked) { - console.log("蓝牙已连接,直接发送数据"); + // console.log("蓝牙已连接,直接发送数据"); return sendBuffer(); } else { - console.log("蓝牙未连接,先连接蓝牙再发送数据"); + // console.log("蓝牙未连接,先连接蓝牙再发送数据"); return new Promise((resolve, reject) => { let f = this.data.LinkedList.find((v) => { return v.deviceId == deviceid; From cb9ed0b1da519bab3a536578a92db6f9d50c1b29 Mon Sep 17 00:00:00 2001 From: liub Date: Fri, 14 Nov 2025 17:28:20 +0800 Subject: [PATCH 2/7] =?UTF-8?q?=E6=B7=BB=E5=8A=A0102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/4877/BJQ4877.js | 110 ++ manifest.json | 3 +- pages.json | 7 + pages/100/HBY100.vue | 3 +- pages/102/HBY102.vue | 1694 ++++++++++++++++++++++++++ pages/4877/BJQ4877CheckColor.vue | 310 +++++ pages/4877/BJQ4877V1.vue | 1596 ++++++++++++++++++++++++ pages/6155/deviceDetail.vue | 117 +- pages/common/addBLE/addEquip.vue | 4 +- static/images/102/line.png | Bin 0 -> 1040 bytes static/images/102/lineActive.png | Bin 0 -> 1282 bytes static/images/102/liting.png | Bin 0 -> 1100 bytes static/images/102/litingActive.png | Bin 0 -> 1384 bytes static/images/102/lowFlash.png | Bin 0 -> 1200 bytes static/images/102/lowFlashActive.png | Bin 0 -> 1486 bytes static/images/102/redar.png | Bin 0 -> 2131 bytes static/images/102/redarActive.png | Bin 0 -> 2778 bytes utils/BleHelper.js | 16 +- utils/BleReceive.js | 2 +- 19 files changed, 3786 insertions(+), 76 deletions(-) create mode 100644 api/4877/BJQ4877.js create mode 100644 pages/102/HBY102.vue create mode 100644 pages/4877/BJQ4877CheckColor.vue create mode 100644 pages/4877/BJQ4877V1.vue create mode 100644 static/images/102/line.png create mode 100644 static/images/102/lineActive.png create mode 100644 static/images/102/liting.png create mode 100644 static/images/102/litingActive.png create mode 100644 static/images/102/lowFlash.png create mode 100644 static/images/102/lowFlashActive.png create mode 100644 static/images/102/redar.png create mode 100644 static/images/102/redarActive.png diff --git a/api/4877/BJQ4877.js b/api/4877/BJQ4877.js new file mode 100644 index 0000000..b380f50 --- /dev/null +++ b/api/4877/BJQ4877.js @@ -0,0 +1,110 @@ +export const colors=[ + { + r: 255, + g: 0, + b: 0, + name: '红色', + hex: '#FF0000', + check: false, + id: 1 + }, + { + r: 0, + g: 0, + b: 255, + name: '蓝色', + hex: '#0000FF', + check: false, + id: 2 + }, + { + r: 0, + g: 255, + b: 0, + name: '绿色', + hex: '#00FF00', + check: false, + id: 3 + }, + { + r: 255, + g: 255, + b: 0, + name: '黄色', + hex: '#FFFF00', + check: false, + id: 4 + }, + { + r: 0, + g: 255, + b: 255, + name: '青色', + hex: '#00FFFF', + check: false, + id: 5 + }, + { + r: 255, + g: 0, + b: 255, + name: '紫红色', + hex: '#FF00FF', + check: false, + id: 6 + }, + { + r: 51, + g: 255, + b: 153, + name: '薄荷绿', + hex: '#33FF99', + check: false, + id: 7 + }, + { + r: 255, + g: 102, + b: 102, + name: '珊瑚红', + hex: '#FF6666', + check: false, + id: 8 + }, + { + r: 153, + g: 255, + b: 0, + name: '柠绿', + hex: '#99FF00', + check: false, + id: 9 + }, + { + r: 128, + g: 0, + b: 128, + name: '紫色', + hex: '#800080', + check: false, + id: 10 + }, + { + r: 204, + g: 102, + b: 255, + name: '淡紫', + hex: '#CC66FF', + check: false, + id: 11 + }, + { + r: 102, + g: 204, + b: 255, + name: '浅蓝', + hex: '#66CCFF', + check: false, + id: 12 + } +] \ No newline at end of file diff --git a/manifest.json b/manifest.json index 7255c9c..7fccadd 100644 --- a/manifest.json +++ b/manifest.json @@ -23,7 +23,8 @@ "Camera" : {}, "Geolocation" : {}, "Maps" : {}, - "Record" : {} + "Record" : {}, + "VideoPlayer" : {} }, /* 应用发布信息 */ "distribute" : { diff --git a/pages.json b/pages.json index ac5614a..017af96 100644 --- a/pages.json +++ b/pages.json @@ -347,6 +347,13 @@ { "navigationBarTitleText" : "选择配组" } + }, + { + "path" : "pages/102/HBY102", + "style" : + { + "navigationBarTitleText" : "HBY102" + } } diff --git a/pages/100/HBY100.vue b/pages/100/HBY100.vue index 9933740..2f0265d 100644 --- a/pages/100/HBY100.vue +++ b/pages/100/HBY100.vue @@ -1118,7 +1118,7 @@ let json = recei.ReceiveData(receive, device, pagePath, recArr); - // console.log("收到设备的数据", json) + console.log("收到设备的数据", json) let key = 'sta_VoiceDate'; if (key in json) { @@ -1126,6 +1126,7 @@ console.log("22222", val) if (val === 'start') { //开始发包 + console.log("开始发送数据"); updateLoading(these, { text: "开始发送" }); diff --git a/pages/102/HBY102.vue b/pages/102/HBY102.vue new file mode 100644 index 0000000..ec3b20e --- /dev/null +++ b/pages/102/HBY102.vue @@ -0,0 +1,1694 @@ + + + + + \ No newline at end of file diff --git a/pages/4877/BJQ4877CheckColor.vue b/pages/4877/BJQ4877CheckColor.vue new file mode 100644 index 0000000..c258f59 --- /dev/null +++ b/pages/4877/BJQ4877CheckColor.vue @@ -0,0 +1,310 @@ + + + + + \ No newline at end of file diff --git a/pages/4877/BJQ4877V1.vue b/pages/4877/BJQ4877V1.vue new file mode 100644 index 0000000..6b197bd --- /dev/null +++ b/pages/4877/BJQ4877V1.vue @@ -0,0 +1,1596 @@ + + + + + \ No newline at end of file diff --git a/pages/6155/deviceDetail.vue b/pages/6155/deviceDetail.vue index 80af6e5..b92c4f6 100644 --- a/pages/6155/deviceDetail.vue +++ b/pages/6155/deviceDetail.vue @@ -617,25 +617,26 @@ var processAndSendImageData = function(pixels) { return new Promise((resolve, reject) => { // 创建RGB565格式的像素数据 + // console.log("pixels=",pixels); const arr = ble.convertToRGB565(pixels, 'bgr'); - + var list = []; let index = 0; // 用于追踪arr的当前位置 - let packetSize = 2048; - let cSize = 248; + let packetSize = 3200; + let cSize = 200; // 外层循环:7个主要元素(i从1到7) - for (let i = 1; i < 8; i++) { + for (let i = 1; i < 9; i++) { let secondLevel = []; let secondCnt = 0; // 中层循环:每个主要元素包含9个子数组(j从1到9) - for (let j = 1; j < 10; j++) { + for (let j = 1; j < 9; j++) { // 确定当前子数组的长度:前8个是254,第9个是64 - + let thirdLevel = []; - + // 从arr中提取相应数量的元素 for (let k = 0; k < cSize && index < arr.length; k++) { - + if (secondCnt == packetSize) { break; } @@ -643,14 +644,14 @@ secondCnt++; index++; } - + secondLevel.push(thirdLevel); } list.push(secondLevel); } - + console.log("list=", list); - + let length = 0; for (let i = 0; i < list.length; i++) { const item = list[i]; @@ -660,8 +661,8 @@ console.log("第" + i + "包,第" + j + "小包,长度:" + element.length) length += element.length; clength += element.length; - - + + } } // 分包发送 @@ -675,118 +676,102 @@ var sendImagePackets = function(imageData) { return new Promise((resolve, reject) => { // 总数据包数 - const totalPackets = 7; + const totalPackets = 8; let currentPacket = 1; let childPacket = 1; - let totalChildPacket = 9; - - + let totalChildPacket = 8; + + // 发送单个数据包 const sendNextPacket = () => { if (currentPacket > totalPackets) { + updateLoading(these,{text:'发送完成,等待设备30秒'}); setTimeout(() => { hideLoading(these); these.Status.BottomMenu.show = false; - + these.showPop({ message: "上传成功", iconUrl: "/static/images/6155/DeviceDetail/uploadSuccess.png", borderColor: '#BBE600', buttonBgColor: '#BBE600' }); - + resolve(); - }, 20000) - + }, 0) + return; } - + var packetData = imageData[currentPacket - 1][childPacket - 1]; - // if (packetData.length == 0) { - // hideLoading(these); - // these.Status.BottomMenu.show = false; - - // these.showPop({ - // message: "上传成功", - // iconUrl: "/static/images/6155/DeviceDetail/uploadSuccess.png" - // }); - - // resolve(); - // return; - // } + console.log("childPacket=", childPacket); + console.log("packetData=", packetData); let start = 0; let bufferSize = packetData.length * 2; - - if (currentPacket == 7) { - if (childPacket > 2 && childPacket < 9) { - bufferSize = 496; - } else if (childPacket == 9) { - bufferSize = 128; - } - } - + + + if (childPacket == 1) { bufferSize = bufferSize + 8 start = 8; } - if (childPacket == 9) { //|| (currentPacket==7 && childPacket==3 + if (childPacket == 8) { //|| (currentPacket==7 && childPacket==3 bufferSize = bufferSize + 1 } - - - //FA 09 10 04 FC 09 [00] [01] + 4096字节+FF 数据格式 + + + //FA 09 0C 84 FB 09 00 [01~08] + 3200字节 +FF 数据格式 var buffer = new ArrayBuffer(bufferSize); var dataView = new DataView(buffer); if (childPacket == 1) { dataView.setUint8(0, 0xFA); // 帧头 dataView.setUint8(1, 0x09); // 帧头 - dataView.setUint8(2, 0x10); // 帧头 - dataView.setUint8(3, 0x04); // 帧头 - dataView.setUint8(4, 0xFC); // 帧头 - dataView.setUint8(5, 0x09); // 帧头 - - dataView.setUint8(6, 0x00); // 图序号,图片固定0,视频的话要写序号 - dataView.setUint8(7, currentPacket); //子包序号 + dataView.setUint8(2, 0x0C); // 帧头 + dataView.setUint8(3, 0x84); // 帧头 + dataView.setUint8(4, 0xFB); // 帧头 + dataView.setUint8(5, 0x09); + dataView.setUint8(6, 0x00); // 帧头 + dataView.setUint8(7, currentPacket); //包序号 } - + for (let i = 0; i < packetData.length; i++) { dataView.setUint16(start + i * 2, packetData[i], false); //本包数据,大端字节序 } console.log("packetData.length=", packetData.length); console.log("bufferSize=", bufferSize) - if (childPacket == 9) { // || (currentPacket==7 && childPacket==3 + if (childPacket == 8) { // || (currentPacket==7 && childPacket==3 dataView.setUint8(bufferSize - 1, 0xFF); } - + //发送数据包 ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 30) .then(() => { - + let curr = childPacket + (currentPacket - 1) * totalChildPacket; console.log("第" + currentPacket + "大包,第" + childPacket + "小包发送完成,总计:" + curr); updateLoading(these, { - text: "正在发送" + curr + "/63" - + text: "正在发送" + curr + "/64" + }) - if (childPacket == 9) { + if (childPacket == 8) { currentPacket++; childPacket = 1; } else { childPacket++; } - + setTimeout(sendNextPacket, 100); }).catch(err => { if (err.code == 10007) { setTimeout(sendNextPacket, 100); return; } - + console.log("发送数据包失败了", err); - + these.Status.BottomMenu.show = false; these.showPop({ message: "发送数据包失败了" + err.msg, @@ -794,14 +779,14 @@ borderColor: "#e034344d", buttonBgColor: "#E03434", }); - + hideLoading(these); reject(err); }); } // 开始发送数据 sendNextPacket(); - + }); } diff --git a/pages/common/addBLE/addEquip.vue b/pages/common/addBLE/addEquip.vue index e5ae397..10d08c9 100644 --- a/pages/common/addBLE/addEquip.vue +++ b/pages/common/addBLE/addEquip.vue @@ -386,11 +386,11 @@ Promise.allSettled(promis).finally(() => { ble.StopSearch().finally(res => { - // console.log("停止搜索成功"); + console.log("停止搜索成功"); these.EquipMents = []; these.PairEquip = []; ble.StartSearch().then(result => { - // console.log("开始搜索成功"); + console.log("开始搜索成功"); }).catch(err => { console.error("开始搜索失败,err=", err); if (err.code === 10001) { diff --git a/static/images/102/line.png b/static/images/102/line.png new file mode 100644 index 0000000000000000000000000000000000000000..2e4ee749ddcd066f05e3db94e96ba815acc73879 GIT binary patch literal 1040 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+go5Fkkm{aSW+oeEWcLf{N!P6;Gk= zRWom;0XwS?RMV z=X?V{^F78L)Bf8$Z=BDzFYJ=t|D6-w_Osf}`EPY!{pIE#=Ua3B3l`}9FO~Wr;VJyT za>Co?ALHLYRf&CK&%f!f$-mco=Pc>|^W1UU{A2Zdr%x`K_}}Klx641)e=nM(_h~-+ z%{r<7U*r5Px&HgCaNGa!{(GlAcb%x0OZlDo=X$lJr})qF%{lhH|Eu)XUoLtp&yx2j z{`qy4S~-0gxY^t4#dmbp&z(Qv3+J8!xY4)jm=oH?&uTN~^Z#jC;{Tx48Sa33*4z2) zHIg5MC)qWM^C27{nzLW_L+Sy4k6$ct76=D~Z}?kwU^=6{;!EL*hX~)rAN+QkF`kV~ z!#y3I?!V^kdFwfvG4%`;qW@mo_+EPbd40<7w+;HtbxxPmKO9oLt@rE7a9#AAyo@3sx^HSzN+qV0BKa3uztJE^-%RH**L{|LKe#+bJ%ywPr zw;9VCY!mv^e{*`qA1-$K!=LthaYO$j*57)b^N)W9^3y>McwAZAyJY>tpU!{u6Mpjo z9aOgCQMO7guf7Dx+K^V#l6SRAdNSKSyt zu_W-1_=dky2h5qd|9yVT_+I%R_lL_}BD5s^fpkHh+ftgY~*JFix~WCgA7#;`Kj(VNu-h{lWfo*Sr5SZQI`1&vH)+ g;#qm-eGlasbw1c#Ij3eW3e4#Yp00i_>zopr0JpO!1ONa4 literal 0 HcmV?d00001 diff --git a/static/images/102/lineActive.png b/static/images/102/lineActive.png new file mode 100644 index 0000000000000000000000000000000000000000..73f7cc9b3082174e7c1d9e4752dbffd60b7003b3 GIT binary patch literal 1282 zcmeAS@N?(olHy`uVBq!ia0vp^W+2SL1|)l2v+go5u$=UCaSW+oeEWcLf{N!P6;Gk= zRWom;0XwS?RN= z?hAip$?=~d-QN%1IZ-cGEdSx}+-n!-L(%-Fa8GGR@*a*kd$t{^_OAJU+otXN z!&YY$my6bY`nX5@*>2T+zjNgd|Nd}jA&O79?0;6=^X^szW+{_1&`nV_;lwHtmZ#AH&}nVey;kyx5FJw(&f8vXXgB+L%MbZC>i-(g zPy3-0$8azl7&Jd6=7~S5-!cCO`#oS_ROp$_|6HbjEdBEz#ed>IJ|6#gEpZ=rq0E72 z#rNJF{gD%A0J8EI|DKZ8`$jcqZ|{|uf0n!bNBooJ|GFOMe>QsaN#FU;{gxm4pN#z< z--`LTEpy#d`_3lo#`!hCyi1< z`c3kGi~Fwfmi=6B+VwvL=r_N_b06cmKhA#xj4#bImjAL9|4jxaG|N`YNf!s z!E%G=Ki0SY@c#ykGm&R9|F;VKKM4%eIfv#v-Y@pZ{w6Tcf@c)}x$g8w{rAb^#azXG z|D!r+Z20|8&r8zHESR+Zm%bDF&kD@HHMSoT|A-6L?E9hrVR8Mrjk_KgH!#8_x-%@=RMw) z1EqUq$(hLj0Lb8C-9c{Lz_qQ5BwXKkB(oC$66COM*CC6DB1LT~xI+amzWV64d#_Gs zG#bkfbAj*?dH*k>o=>gU^Aw|T&mLW~yX$tcx5TJNP9sQ}mq(V|H)&F7EBU2yfK8Lp zb>zpI=p{@)i9Xb{Q@P?6_HL(1)5`X@Q4hno!WrMpM6@pZ8@BT8yd9{e{lUj3bWune zo0+QtpTwO+o+$BH%v+90VpqEHC9FG#L3YPxF4BHk*gDp*HdIKo#v*PxeF{bgX0-(h zpEA+9gq^jvb~^&wbFzu~JdtLQtx&3hqn53M;xQ(bw9)pjZj~+Dd(i^;3=&TkTNiKc zE+ao>q*q0Uv1e0gkG*Y9TCjXlWI~sP&cwXmhNQ5gI;tj- zvjIU%i6Eh}7ipi%jeT9g+%)+UV(X!C!O=UxNJ?aV2h)sZ@maet|Cg31FKp8%hSOsS zOcagSLyjg|@3hH7ZqG@jLO zDlSF7p`i^Vrg52eYFw95sAy*wp*EX~jLfy8Bh?U%g!l3(t< z=iGD7z4Ee>g6N3&2pkR<&3c#l9{BGEA2obC7*AEk58-g3sVwG!_eCL(?IE2>tga+h zOvl%QV+BkmkHV4P1$?I6jK}H~R8e{*tn=A|1B0+aQ z)-<9PC%C1li`@!WojnT`{!qXOi0Ewg^!`K81d39txw^YA>h5`in*~` zs}dVYns~}5-FWJ)1b} ziaQQD2&toM0B{Q0JtMw7J07bxcWn1*z131vO}|}3FhNz*7n}PbrRlSI#cHDVNQ4bw z5^pXX2D7vKwC+3^T(NRqYCpFRJx$EnkZrMC;nGA2%#mlkQ~~y(WJsE5H2eZY3!9}4 zZ<)5{A#wCA_FN*n+2-bi`Ltj$I6~=MYv;PQZ?3L8*m~@%dyuT(t_$2dfb0QX=v(t0 zh_VrY;&uNZ%3)Wd)sYPI(MAGR2)d+Ne*-&w!~Q$#?y=kNiiU-vmn6#npqJyM0O#u- zY+*-07C{zujzP(zdZfp30q`I_0hv3r859j|)~ezeJ0@$2#IIs6$YpwS_4mD-;V^Ct zJ}B=VEUR65PJM!g{|?H+CZD%g3yXFiB>e(1{~Fp00!;hO{SXQ37X1XmR=HV{0DhOR zbIo~eOVA#ZpR3gP$;Hn(24ldOYjvmne#`K(lk-r6o_49~&u-z=0^R{bsGf?|qbq#! z)Rb2%gEN8`jk{agnt9vMKQnA^T+1K2M8NWcYDbCtx^?*pbDXJ#6!=s7=g$D5vGBA> W&fdyX#}~j0ieu%KFfZnCoBsg-6A7#U literal 0 HcmV?d00001 diff --git a/static/images/102/lowFlash.png b/static/images/102/lowFlash.png new file mode 100644 index 0000000000000000000000000000000000000000..52ab71a661311fe6b3e0607879ab2600f252f453 GIT binary patch literal 1200 zcmcIk|4$QV7{9ynrLDySH$`xv7%F6AQZ~jAMGmA|jtOk&M5eaQG$k3$N&>7M!@H|4 zFoap{a74>sE@Vsg1L(+@6S|fuVm9U_Wf_uY^eAzJn66jYXn||r-T6Q4N!~AclF#RP zp3f)m+xcddIzgH$g&-&aFIUy@=j*}}$MJjj;rIT8pcoUbDm`w7{S16Xf!h@Lwytll zkEvBEyFnEtM1{ z^Epgb^a(gkL-TcfZmO(^@+UA^lsc$g>~wkX{XT4m4>pj+><~A*QHl>dB456rH%C-5 zW9xz7yp8Au`^2sfU}C#j3=Z~h9ltsFfRx4PHuqYF|8mZ%-`J>&o=t~57(6Zmj%bD3 z6O@bQh+Njr(d=E@`%k>+9Dy=T;emw_#d$d(9YZhA#7f*3HUeuD^4bMMXqHx0{prY3y(ymN#iX z8QX@kTWqOH%Ae;7Ay%K37I2!O5-wYCF4dI{S)n1(=#THp@5Gy5W$Rr5oL9`^uVkhy z>R@11Vk3|e4%KZoQ6a_~NHibAf9L{wp}&;qBKP%RC>i`_AVq8@H`RJJ=zX}B$&>Vf zlUikT*BsHpe6(&2CHtIL{UM~d3z)}*t2L(h1~BgcpBhLpE8(Vg-6u0V#)P&#AlScK zfbC=(xT(z#gWl=2VG;TS`$OHy*Yu*{*P@GkBF!jL0}sTdM>}ps`d#&_#?W!*3&j~I5nOys9AHK)mC=@{I4s7K?;t^}+i&Neo2HkX zD`cMTIj`gu#(Ml}#JF`_%H}dVa}kq>jOS9>2HS}uWi)BB9q(y`?9=>D1mTCPR6~b! G7ybjcCVKGz literal 0 HcmV?d00001 diff --git a/static/images/102/lowFlashActive.png b/static/images/102/lowFlashActive.png new file mode 100644 index 0000000000000000000000000000000000000000..e4cd9fbecdd4483c136b003eaaba63b071265ef5 GIT binary patch literal 1486 zcmcJPYfuwc6vq=11ThfMBGgA#93Vv?;Mk`hnI@kgl2OLo&L)!!l+3>J{ zimM{>G^h;L>L6nu#wmfI38s`_O6!!i2-y&bkBZqPq8nItyGuXzbI;7)J3D9Y@0@%7 z|GAaBc1nDGmiVw(EZ?MU3A^b%hWWhb(d(J5hlg1#&zhu!5BDh86A1fUXwrqyq=lz% z)^|t}60)61-5^V!S*RLs6Ff@6+shRJ#EppIMG8qH%+08WE`yiw zzpw$~+2&IZAzz~&5mLpXM5QmfjV#iXxo>ET)~V_#WknDop^Dp9b@A{lQd;CX7-w6a zd4@x}R%qbn0uRymW3|P#2xzj_AXU~E15bJ&KV!bTUU=MakvNOk2w}9ibzb{aD(qNG z+Cv2Y!bpF`d@`39KA15z2b0nXAz%`*0W;JlQw^CWLkQCr@o&i_M|K7eBRAKH3WkF0 zwQjhSrFwjES|RWfU!VlZ4FZGI`tb%*xUqNE?N!SVRf2A zKM3e2qy>Sb^h$Gq4`0Sfc0lT1T@~8G*kqfPKRaf}qmaMd%{GJe%^f9&Qaz)a;j^7) ziU$&R;qlM#xACAmmRwACor8C1i`GQ;>VfHROnLW@mr!hOkkxUgX^aLL?T1Pbh!x*8 zER7&$t~M){edJH@vwqT^SaT8rU#GzK5*wG|c(3j1mu_MZy(UcCy&VM&)=s*?By#qb zG8mmAET~O3^GR1R4O*XUvmHfx3I47^0hY>tN*4=J zH!GJxTwOHPNirvIp#X{s z{!{S0En=ghOA2J;@-|mSFn-9W0A{`J-c$rON><0Rc@;w` zM9&a-N{E((WT@v-cr;S#hNt?g-DPs+IzI(lMK~31@3=~&KWc$SFI?F*m4)mZaka*d zZ3-bhK{sEwZZuadnRL2B&63WE(^#L51y1vi?8SPz%dwTwPr@;cY$jM$o)fS0rk(U^ zzOJQT;?Zu_KLWNZC-6h6*UPusJ@Eku`EixXSCL2lkl+*d;;6tdnD057`8-GSz%bOk zl-=&9t3$4rNm=Y#o}5Lo2-S0U&77Sw(H5#ZHIP;!mhy{ny1tBjDCbmAY(~ZR(f!2C z#EH>X>#MMW23+>W4w?ESHVY2BT(qx8}XwznJif zR(9dC*R&qK>dbMl0q0=WXF{?VK8L51_RB$3m1+`GhCA|cID9vKu-D}3t&1E5N79)e zA$ly-YJs8*DMqLTfL6k1AKKmgY&-z7zNEdrNG-vD_p0TAR6j#m<5-Qu`7*gNz6biw zIlDAQv{@j$cambo0B-s|gO$v6Fx_Ibu@14u6ON&{uLe2(R6K1r_wmMdyY*-B{&ZJ^ z6aTi!)1N9Oj37F)Fmu5XS9^#mKYj8MlNk3gQc)nL74NBOXOA>Ne|E-Xq6{2sqDiwa zLG(b2BByfjzIaKV$NDA5yvPT=7IP|L-lr2w#F1n`?zP-2^Go-d=y#fxv~_2~?JZd) F{{Z1|GLZlP literal 0 HcmV?d00001 diff --git a/static/images/102/redar.png b/static/images/102/redar.png new file mode 100644 index 0000000000000000000000000000000000000000..6b6f4f3180a5c5181e425559dbeac7b73dc87762 GIT binary patch literal 2131 zcmcImeM}Q~7`|&O6%k6Tj);ST^5NnJe>m(6r4>ZsRA4UKFcF0LLE|{B3u;@wT1Cg4 zb6}Ygrz^>ZOWLNn`~BYM zectDJes}8Q@{;&P$%_yKiN{KdKY`zM%x7T?e1Es;%O?o3Fc~W@{8WWfB-)vQ=`ye- zr+>LHR8m}AS6BD>XK*Q*>)%KJ$90(5y0Vg~QdhTmbMc9xix(D|x7AfDk0_NDW~St} zpZ%s-k49(@XN`r+z6oDU42#o4ilVtVT(i_2LsXQ`=7d&QLaWKk+I+3@++n_1WIx#- zyh2#LxND`e!mp?eWRXg>F?u)7!} zWKH-CZW6ecORn~v_2o&j#~KD≷d9U_Q!s&**5sqAqY*+hJed(rKufwj`SG(gIH3 zqd^K)~5xG`nEFkkTDNhyd zLS%x+yyk9$d0N&Q7w~Y-A)%Sh)7}0WwiI&} z_XkI=8wx^g5ju>@v%YLel2weF9u7W9cjlqI+Q2!j$ZnyvlRsR)*Dw&=LI^x;HzBU2 zHJ^N_GUjKDWSQHkT<+8F<$*NJl!aJ(&|!g@uGUEz;4B>@rwy`a04;@d9J{D8R&@G= zP^XVKmuRMiI%y$d3@1-Lvpn52(c`YdO-tMxCDy(zv$guu&`l-hp#9_!*Pn+q!6F5} zdAa#$yJ7P0m;J#>BBAm**0|qtJJw&VKTt8T)jQuZ+l!VGBU0|oQ%U2gZnduUxMO!f z`5FKlXBaipGuMJrLhi<8=}w_4$EeiW79724XNE7RjVMF&Qvo@i`Q#3FD$;XJm#=Uh z3a!2tTuubscu$%$8QsA3GUea_l^#?bfd)>LRQ*`hKEbiR66r-^@l=x)lj;1DRT%h3J;c&e{$ zUz3{c99Ki_MgG;H1FU9%e@5_D2R54n{P*xvA1-UU7W{A?y9?2b4+aMe%73838!%&t z8*aR2m9rk2(Il$&^=>fsfM`KTP(i_I?Uo1jV6F$y&~~E4qwumi+|80?iI&#Hxnru1 z;o-dg(Y09PY7o{{58lz`n}H5Q3!0aP*G2bdjYN4fT9TrcTc*5EyEtMGp8Ek9W_Mt} z#Hu%R&%BNC^-*b3Rqt0mPPfVglJoMW2CQQmo@V_b?)H6@O3)>!=&os;u_q8A;_bTd z>M4dg7=vknimRupGlH>zLXNmb2V3+8mmS4TDeiqRhvSAG5(Rsj;(+`J99F4R_FgtN zEVs8#IKaRW#ZPC9tOwC#fk{$AM`db^Y_@?{k?S@8a ziu#zzi-uVqCcC3av*r_KE=(ahridFL(DVq)iNwk@31jWxNWYa2F`^aSXL)AA?Ute7 z712qUW+ei<)p##S3nwa=D61y3^wbqdJki)|v2tswHIr)AWDR-KgSTM08Tz z#+#G$b6Gn;`rJcgyypmuOp1ro+z%qri+HxN>U8*GnTQyr6SRDHQLtllYDpH%DQPo)vIBK#PoH%Nc}z#ooZyV>cY@SwXE&--TFBagWCu8X3>q2zm`F8*7+l z^1)j)j4=2UArS)X5V+A~oz_XuIs~4gDbQRYnMEc*h*2Kf7#%x6sG_x--#<21atCo3fQ*_m(rjuS9t z2sj;=eI_nDqVbznc~)j-X=&*P`@mC$J@Z5VkLNRN>->D|l+x0--_ATH7qte%xuyA4 zpI24o!Pt?xU)m#`12o%6g!G`jRaU*ZNW;G*v6HBD+i&Z8n>i90v`RMPj4iD9EE>Bw zU)|^YsfrWC6S4s9T8GAT{!-MIMNtsZ{QocUZXaW{_w{KP+f~b=3v_P z@&{RP&v)#FNmK0CXZf8Dw(cQ<$;jRrUMqg*nf5J_N zgOCE=6NK{cPEl+VS}uE6F|4JWpgWjzdxfUUt70_7tG6c={W&%*6dx~6<0MD#aJUU;v_A6twM`M`diW4xf*b&M1vw{g{H^Y ziK2N(9%+&X45TfA`V$O)1xqlt)CEy_PgvaZd_PL)6_1O(nwD`)C`d*U>sa+~e640@>&N}|nGDJnNQ*UqQOnTwya z8EAj^)eQ#6T-;B-g(7=}7J0cm-eS)k2_aaxdap@OVd*|lCTks4&|s7Ta%B~wwDdU3XS?(HQNE0 zbmKK;BSSu05u@JCq4H)}7ZzK`WHl*!9<`I|lA##gRDvXIauw>+*lIVVRqAv-)|3*Z@JILrpCv2_`3DP1^G0lGrM6taOT zB)3+0KW}G~G?lw`{zWTb`*=0@&^Hq}&i+USZ7%930(_z5p(>PFj8ZZFZw~`Au-r_~ zvy2?B(W+*`#p=8zVsZtNPdRJ2JPYR2zKW?yyQ3J=Dx&xrP^b#ocS2}xjU&%sS|l6d zT}R+%`({^2In^>%cnUUqMB*V?YYQZbG)Y14j*OwMrEY*Miuu+XANfYsTv59}%qrCeZq zp;fIH3nflc()uR$pqFf(v0?_nC*oAcCP2Mwy9XM(q&HvThQJf?F{+|~w!XZMd7L5|1fQV&%^E8zjd_9s#B;U&-*gLgP*-c`*by{Ey496u8X~8is4@?mi0cz zv2q>8D62WZXGxCj;oN6hO0#qvtN;TPx4+s1`qR%1X57S>3H+}e&5h7^;3=}&AJ z#PPCNEu=NcLhT#HQ!@SB6-B6@^+oEZhYYbyH1+8W!LJto+)YAL2a$J@5y8ERTb_7I zitVrpR^?Hf+KFM$D}k)aTB$tA5A-=aAQH7n|3aY%yzedhy3>m+n%jZwSim&TDEKMB zCnb#QV(Z@^ra0Ru*PBxmVemwj`$)_5Kv`_z#mL*vZAOO9oHBZs?eKbztVc3(uWz@` zeDL7}5FG|+G{MW^0Nh7$@5lTHOQ6rledZcWT8CZ4r5}q}qiL>SpvVJw8cwKOO%IZe z>y52(%EbzD|KbWv;PcJ)Bpf=>xRWSJM1GI^I{(i&+}-qR=7V@So}ly_C7pnuzizxj z=epwD`U?PENAaTl?&^1OmQR}mBp2+XRGV)=-E=Sq$}x)x!>H3nuQ%07L5j|#fXKk& z;bY}WR)Osv6WvceVKD)vGXtcWv=Qzw7LFn7#E*U6?hk2@Pv8P!j^>M0pC-72Foq4c znLNJhz!QCGsB<|mK9G|FjsR#|e-PCH96m(BWdKl!_8k}@N$Xr|D;D3er7-9BD=#L5 z`^eTC2)ruQ`AoaBSvJl;jb9slWMk|GW??7k=ten*;Ik}83 { - // console.log('蓝牙状态发生变化:' + JSON.stringify(state)); + console.log('蓝牙状态发生变化:' + JSON.stringify(state)); this.data.discovering = state.discovering; if (this.data.available !== state.available) { @@ -632,18 +632,23 @@ class BleHelper { }, 0); }); + console.log("111111111") uni.onBluetoothDeviceFound((res) => { - // console.log("发现新设备:" + JSON.stringify(devices)); + // console.log("发现新设备:" + JSON.stringify(res,'name')); let arr = []; for (var i = 0; i < res.devices.length; i++) { let item = res.devices[i]; + if(item.name){ + console.log("发现新设备",item.name+" "+item.RSSI); + } + let f = serviceDic.find(v => { return item.advertisServiceUUIDs .includes(v.serviceId); }); if (f) { - console.log("发现新设备:", item); + console.log("发现目标设备:", item); arr.push(item); } @@ -788,7 +793,7 @@ class BleHelper { if (isUpdate) { this.updateCache(); } - // console.log("str1=", str); + console.log("str1=", str); } catch (ex) { console.error("将数据转文本失败", ex); } @@ -927,7 +932,7 @@ class BleHelper { services: serviceId ? [serviceId] : [], allowDuplicatesKey: true, success: (res) => { - //console.log('开始搜索蓝牙设备成功'); + console.log('开始搜索蓝牙设备成功'); resolve(res); }, @@ -1888,6 +1893,7 @@ class BleHelper { } + } let instance = null; diff --git a/utils/BleReceive.js b/utils/BleReceive.js index 6f558ac..81cd560 100644 --- a/utils/BleReceive.js +++ b/utils/BleReceive.js @@ -536,7 +536,7 @@ class BleReceive { try { - // console.log("str=",receive.str); + console.log("str=",receive.str); receiveData = JSON.parse(receive.str); let recCnt = recArr.find(v => { From 18fd446b074e752385a5c6bcaa23b7228fbd80dd Mon Sep 17 00:00:00 2001 From: liub Date: Mon, 17 Nov 2025 15:30:57 +0800 Subject: [PATCH 3/7] =?UTF-8?q?=E5=AE=8C=E6=88=90HBY102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/102/HBY102.vue | 101 ++++++++++++++++++++++--------- pages/common/addBLE/addEquip.vue | 2 +- static/images/common/HBY102.png | Bin 0 -> 34918 bytes utils/BleHelper.js | 30 +++++---- utils/BleReceive.js | 41 ++++++++++++- utils/Common.js | 12 ++++ utils/request.js | 2 +- utils/update.js | 27 ++++++--- 8 files changed, 164 insertions(+), 51 deletions(-) create mode 100644 static/images/common/HBY102.png diff --git a/pages/102/HBY102.vue b/pages/102/HBY102.vue index ec3b20e..50dbec5 100644 --- a/pages/102/HBY102.vue +++ b/pages/102/HBY102.vue @@ -9,14 +9,14 @@ - {{formData.sta_battery}}% + {{formData.sta_PowerPercent}}% 电量 - {{formData.sta_system?dic.sta_system[formData.sta_system]:"" }} + {{formData.sta_charge?dic.sta_charge[formData.sta_charge]:"" }} 设备状态 @@ -42,10 +42,18 @@ - + + + 闯入报警! + + {{formData.sta_IntrusTime}}s + + + + + + @@ -174,15 +185,16 @@ } from '../../utils/request'; import Common from '@/utils/Common.js' - const pagePath = "/pages/100/HBY100"; + const pagePath = "/pages/102/HBY102"; var ble = null; var these = null; var recei = null; - var interval = null; - var brightnessTimer = null; - var volumeTimer = null; - var hzTimer = null; + + var instrusionTime = null; + + + export default { data() { return { @@ -240,21 +252,23 @@ usrToggle: false, }, formData: { - img: '/static/images/common/HBY100J.png', - sta_battery: '', + img: '/static/images/common/HBY102.png', + sta_PowerPercent: '', xuhang: '', blename: '', deviceId: '', deviceName: '', RSSI: '', statu: '', - macAddress: '', + sta_address: '', bleStatu: false, sta_LedType: '', sta_RadarType: '', sta_Online: '', - warnTime: '' + warnTime: '', + sta_Intrusion: 0, + sta_IntrusTime: '' }, dic: { @@ -317,11 +331,9 @@ group: 'sta_LedType' } ], - sta_system: { - "0": '关机', - "1": '仅充电', - "2": '开机未充电', - "3": '开机且充电', + sta_charge: { + "0": '未充电', + "1": '充电中' } }, @@ -355,6 +367,8 @@ onUnload() { console.log("页面卸载,释放资源"); ble.removeAllCallback(pagePath); + clearInterval(instrusionTime); + instrusionTime = 0; }, onLoad: function() { these = this; @@ -407,6 +421,8 @@ ble.LinkBlue(f.deviceId, f.writeServiceId, f.wirteCharactId, f.notifyCharactId).then(res => { these.formData.bleStatu = true; }); + these.formData.sta_IntrusTime=0; + these.formData.sta_Intrusion=0; these.setBleFormData(); @@ -536,7 +552,7 @@ reject(); }); }); - return promise(); + return promise; } @@ -568,11 +584,11 @@ if (item.key == 'led_alarm' && this.formData.sta_LedType == 'led_alarm') { return; } - + if (item.key == 'led_off' && this.formData.sta_LedType !== 'led_alarm') { return; } - + let f = this.getDevice(); @@ -595,8 +611,6 @@ } json = JSON.stringify(json); ble.sendString(f.deviceId, json, f.writeServiceId, f.wirteCharactId, 30).then(res => { - - this.formData.sta_LedType = val; these.setBleFormData(); resolve(); @@ -630,7 +644,7 @@ buttonBgColor: "#E03434", okCallback: () => { task(item.key).then(r => { - + }).catch(ex => { @@ -735,23 +749,50 @@ if (receive.deviceId !== this.formData.deviceId) { return; } + if (this.Status.pageHide) { + return; + } let json = recei.ReceiveData(receive, device, pagePath, recArr); - + console.log("json=",json) let keys = Object.keys(json); keys.forEach(key => { if (key in this.formData) { - // console.log("key=",key+",value=",json[key]); - this.formData[key] = json[key] + ""; + console.log("key=",key+",value=",json[key]); + this.formData[key] = json[key] ; } }); - - if (this.formData.sta_battery <= 20) { - this.showMsg("设备电量低"); + let msg = []; + if (this.formData.sta_PowerPercent <= 20) { + msg.push("设备电量低"); } + + if (this.formData.sta_Intrusion === 1) { + msg.push("闯入报警中"); + clearInterval(instrusionTime); + instrusionTime = 0; + setInterval(() => { + instrusionTime++; + if(instrusionTime>60){ + this.formData.sta_Intrusion=0; + clearInterval(instrusionTime); + return; + } + this.formData.sta_IntrusTime=instrusionTime; + }, 1000); + }else{ + clearInterval(instrusionTime); + instrusionTime=0; + this.formData.sta_IntrusTime=0; + } + if (msg.length > 0) { + this.showMsg(msg.join(',')); + } + + }, getDevice: function() { diff --git a/pages/common/addBLE/addEquip.vue b/pages/common/addBLE/addEquip.vue index 10d08c9..ec60d6f 100644 --- a/pages/common/addBLE/addEquip.vue +++ b/pages/common/addBLE/addEquip.vue @@ -328,7 +328,7 @@ these.EquipMents.push(arr[i]); } } - console.log("EquipMents=", these.EquipMents) + // console.log("EquipMents=", these.EquipMents) }, pagePath); //收到设备的消息回调 ble.addReceiveCallback((receivData, f, path, arr) => { diff --git a/static/images/common/HBY102.png b/static/images/common/HBY102.png new file mode 100644 index 0000000000000000000000000000000000000000..435eccee37aa4a4b4fc83bd63be71733f97450cf GIT binary patch literal 34918 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

i~UrFa=47|&Iex3Mtkgz<~xHues7;d!5l ze>^jVS-rwfYNNAjgD+qt(?7lGQM0Ueu}-@PIjRFZR4-hc)$#GlnLp>@O0dnZFT_t4 zF~%zJCV+^Mi69db!w~3PbjniVD#7U1LZ+g*IGbe{+fJPY70N^$zsTd8YaZySR$v-N zHZhHGn{!hpS_Fec&c0o@N5|-JFIw2Y$A{G#JRe+CL5|$CkY%#Yv##421(b0v$}f&2 z?5UrFVqudVYvf$0Ydm=ElV9K7Q ze)xuiBbs#d5DRrDa3d*%m=#O|<-+FBVo;`VMwqQJG3=<_<;)nr&SDZD5eaSqR|iOh zDx^XN%HR(l{Fl@Ce=z*v_l{)yi+W301s6W^EJt}A-QC^M<`rMPGb|;kD7Memz<iiWApT4*s;BR4XH8 zWEkqiBM>vZ{m}1)Ya!DTdWXkp6>XupU(`)4z57~=l}5=3u<^+udM{-u|H#tneUClb z=iP~E%>DP19}k~Vr_WQjS0fME3-xWvA5z9F<-ENb!9jV~w^E<|8T-m3OI&7_?O9TE zSs-4_XUHfnjrbZ#h+u5z$>%%Ap5sfJ+!PoGWzlP-U7ZwO&ehwV;a`8x*kbxiM%Y=G zZcUa@kk}PGreuw$Kk%(a7T6Ew2Y9*C?>pOGl(KS;TWcr0NxHY7bZlUIVn&X;ZA(Fg zAGBYe56qXWua)#4%J(r%@$m8*8sSw%^2Yxo?XIVqx|n6Ew-VVG(nR=KW2+_MXVv#h z)#+(YK}*^J3eugbcS}tQ;tg9>B!}?@nW6f_)S;dG%@5y>bW-?hvzXx{rJ~-q0Xw@! zCw^Sszar7$-J*mDi{DukUMyTLh`HkkXrkd6P?&6^r5;?{l(b6q&T||0o+FuKS95ye rPhi7yzl}G28@CjZQ2&<38d|UQw}MIOy(DcG{$u* { return item.advertisServiceUUIDs @@ -648,7 +653,7 @@ class BleHelper { }); if (f) { - console.log("发现目标设备:", item); + // console.log("发现目标设备:", item); arr.push(item); } @@ -1203,7 +1208,7 @@ class BleHelper { deviceId: id, success: (res) => { if (res.services && res.services.length > 0) { - // console.log("获取到服务:" + JSON.stringify(res)); + console.log("获取到服务:" + JSON.stringify(res)); this.data.LinkedList.find((v) => { if (v.deviceId == id) { @@ -1228,7 +1233,7 @@ class BleHelper { }); if (se) { - // console.log("合作供应商的", s) + console.log("合作供应商的", s) this.data.LinkedList.find((v) => { if (v.deviceId == id) { v.writeServiceId = s.serviceId; @@ -1246,7 +1251,9 @@ class BleHelper { // notifyCharId)); - } else { + } else + + { console.error("预设的蓝牙服务和特征中找不到"); for (var i = 0; i < res.services.length; i++) { let service = res.services[i]; @@ -1266,6 +1273,7 @@ class BleHelper { Promise.all(promises) .then(results => { + console.log("results= ",results); if (!s) { //非指定供应商的设备,走订阅消息 return this.subScribe(id, true); @@ -1326,10 +1334,10 @@ class BleHelper { serviceId: serviceId, success: (res) => { - // console.log("获取到特征:" + JSON.stringify(res)); - // res.characteristics.forEach((v) => { - // v.serviceId = serviceId; - // }); + console.log("获取到特征:" + JSON.stringify(res)); + res.characteristics.forEach((v) => { + v.serviceId = serviceId; + }); //写特征 let writeChar = res.characteristics.find(char => { diff --git a/utils/BleReceive.js b/utils/BleReceive.js index 81cd560..179cf98 100644 --- a/utils/BleReceive.js +++ b/utils/BleReceive.js @@ -7,7 +7,8 @@ class BleReceive { '/pages/650/HBY650': this.Receive_650.bind(this), '/pages/670/HBY670': this.Receive_670.bind(this), '/pages/4877/BJQ4877': this.Receive_4877.bind(this), - '/pages/100/HBY100': this.Receive_100.bind(this) + '/pages/100/HBY100': this.Receive_100.bind(this), + '/pages/102/HBY102':this.Receive_102.bind(this) }; } @@ -560,6 +561,44 @@ class BleReceive { } + + Receive_102(receive,f,path,recArr){ + let receiveData={}; + + try { + + console.log("str=",receive.str); + receiveData = JSON.parse(receive.str); + + let recCnt = recArr.find(v => { + return v.key.replace(/\//g, "").toLowerCase() == f.device.detailPageUrl + .replace(/\//g, "").toLowerCase(); + }); + if (!recCnt) { + if (receiveData.sta_PowerPercent<=20) { + uni.showModal({ + title: "提示", + content: "设备电量低", + showCancel: false + }); + } + if (receiveData.sta_Intrusion===1) { + uni.showModal({ + title: "提示", + content: "闯入报警中", + showCancel: false + }); + } + + } + } catch (error) { + receiveData = {}; + console.log("文本解析失败",error) + } + return receiveData; + + } + } diff --git a/utils/Common.js b/utils/Common.js index 5b95b4d..2d4a80d 100644 --- a/utils/Common.js +++ b/utils/Common.js @@ -363,4 +363,16 @@ export default { }); }, + getOSAndUpload(){ + let os=uni.getSystemInfoSync().platform; + let url='' + if(os==='ios'){ + url='https://apps.apple.com/cn/app/星汉物联/id6752555460' + } + + else if(os==='android'){ + url='https://www.pgyer.com/xhwl'; + } + return {os:os,url:url}; + } } \ No newline at end of file diff --git a/utils/request.js b/utils/request.js index 681b921..db503ab 100644 --- a/utils/request.js +++ b/utils/request.js @@ -1,5 +1,5 @@ import config from '../config/index.js'; -export const env = 'production'; //production development //开发of线上 改这里就行 +export const env = 'development'; //production development //开发of线上 改这里就行 const BASE = config[env]; const request = (options) => { console.log("options"+JSON.stringify(options),BASE.BASE_URL) diff --git a/utils/update.js b/utils/update.js index dbb7dee..100ac32 100644 --- a/utils/update.js +++ b/utils/update.js @@ -1,7 +1,7 @@ import request, { baseURL } from '@/utils/request.js' - +import Common from '@/utils/Common.js' /** * 检查并执行wgt热更新 * @param {String} updateUrl - 检查更新的接口地址 @@ -178,10 +178,20 @@ function downloadAndInstallWgt(wgtUrl) { var wating = plus.nativeUI.showWaiting({ title: "下载中0%" }); - // uni.showLoading({ - // title: '更新下载中...', - // mask: true - // }); + + //手动更新 + let ManualUpdate=()=>{ + setTimeout(()=>{ + + let url=Common.getOSAndUpload().url + plus.runtime.openURL(url, (res) => { + uni.showToast({ + title: '打开失败', + icon: 'none' + }); + }); + },1000); + } // 1. 下载wgt包 const downloadTask = uni.downloadFile({ @@ -219,20 +229,22 @@ function downloadAndInstallWgt(wgtUrl) { wating.close(); uni.showToast({ - title: '安装失败: ' + error.message, + title: '安装失败,请手动下载更新;' + error.message, icon: 'none', duration: 3000 }); console.error('wgt安装失败:', error); + ManualUpdate(); }); } else { wating.close(); uni.showToast({ - title: '下载失败', + title: '下载失败,请手动下载更新;', icon: 'none', duration: 2000 }); + ManualUpdate(); } }, fail: (err) => { @@ -243,6 +255,7 @@ function downloadAndInstallWgt(wgtUrl) { duration: 2000 }); console.error('wgt下载失败:', err); + ManualUpdate(); } }); From 547ec3f94bf2de01b3e806f4bdb532973e53f75c Mon Sep 17 00:00:00 2001 From: liub Date: Mon, 17 Nov 2025 15:31:44 +0800 Subject: [PATCH 4/7] =?UTF-8?q?=E5=AE=8C=E6=88=90HBY102?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/index.js b/config/index.js index a4c0eeb..93e0224 100644 --- a/config/index.js +++ b/config/index.js @@ -2,7 +2,7 @@ const config = { // 开发环境 development: { - BASE_URL: 'http://192.168.2.23:8000', + BASE_URL: 'https://www.cnxhyc.com/jq', API_PREFIX: '', // MQTT 配置 MQTT_HOST: 'www.cnxhyc.com', From c13cd92f8ca255f6b32af0e0274f88049fba253a Mon Sep 17 00:00:00 2001 From: liub Date: Mon, 17 Nov 2025 16:37:37 +0800 Subject: [PATCH 5/7] =?UTF-8?q?6155=E5=8F=91=E5=9B=BE=E7=89=87=E4=BF=AE?= =?UTF-8?q?=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pages/6155/deviceDetail.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pages/6155/deviceDetail.vue b/pages/6155/deviceDetail.vue index b92c4f6..25d0e73 100644 --- a/pages/6155/deviceDetail.vue +++ b/pages/6155/deviceDetail.vue @@ -728,7 +728,7 @@ dataView.setUint8(1, 0x09); // 帧头 dataView.setUint8(2, 0x0C); // 帧头 dataView.setUint8(3, 0x84); // 帧头 - dataView.setUint8(4, 0xFB); // 帧头 + dataView.setUint8(4, 0xFD); // 帧头 dataView.setUint8(5, 0x09); dataView.setUint8(6, 0x00); // 帧头 dataView.setUint8(7, currentPacket); //包序号 @@ -802,7 +802,7 @@ ImgCutOver: function(data) { showLoading(these, { - text: "正在发送0/52" + text: "正在发送0/64" }); these.Status.BottomMenu.show = false; From ea565276ee38e12ba4bba648e85745ad404bbcb7 Mon Sep 17 00:00:00 2001 From: liub Date: Tue, 18 Nov 2025 10:02:14 +0800 Subject: [PATCH 6/7] =?UTF-8?q?4877=E5=B0=8F=E4=BC=98=E5=8C=96=E4=B8=80?= =?UTF-8?q?=E4=B8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- et --hard id | 268 ----------------------------------------- manifest.json | 16 +-- pages/102/HBY102.vue | 2 +- pages/4877/BJQ4877.vue | 38 ++++-- 4 files changed, 31 insertions(+), 293 deletions(-) delete mode 100644 et --hard id diff --git a/et --hard id b/et --hard id deleted file mode 100644 index ef19f9c..0000000 --- a/et --hard id +++ /dev/null @@ -1,268 +0,0 @@ -commit c14da42ce5e3a1ce49d73681df28e66982dedba2 (HEAD -> main) -Author: fengerli <528575642@qq.com> -Date: Mon Nov 17 08:55:48 2025 +0800 - - 210页面开发 - -commit dadad6ed194f88dceff90dcaa6c20d6513bf0282 (origin/main, origin/HEAD) -Author: fengerli <528575642@qq.com> -Date: Wed Nov 12 09:51:35 2025 +0800 - - 添加token过期,跳转到登录页 - -commit 426fdeddee783a8a551d683fb88d6ce2d6a9b9a1 -Merge: 968d7a6 f835e25 -Author: fengerli <528575642@qq.com> -Date: Sat Nov 8 10:33:20 2025 +0800 - - Merge branch 'main' of http://47.107.152.87:3000/dyf/APP - -commit 968d7a613dfa6c8be53520c99c01d1a889110b13 -Author: fengerli <528575642@qq.com> -Date: Sat Nov 8 10:33:00 2025 +0800 - - 6075页面功能开发 - -commit f835e25bbb7497f6545713cade4b032de17e11d1 -Merge: b8ce162 012eca6 -Author: dyf <974332738@qq.com> -Date: Sat Nov 8 10:32:38 2025 +0800 - - Merge pull request 'new-20250827 一些小优化' (#22) from liubiao/APP:new-20250827 into main - - Reviewed-on: http://47.107.152.87:3000/dyf/APP/pulls/22 - -commit 012eca69853acd92a2bab85721ed99c85e0b7969 -Merge: 623a474 b8ce162 -Author: liub -Date: Fri Nov 7 13:08:05 2025 +0800 - - Merge branch 'new-20250827' of http://47.107.152.87:3000/liubiao/APP into new-20250827 - - # Conflicts: - # pages.json - # pages/100/HBY100.vue - # pages/6075/BJQ6075.vue - # pages/7305/BJQ7305.vue - # utils/BleReceive.js - -commit 623a47466a6fef7c3fe40cfe5c1d52f85ac8d478 -Author: liub -Date: Fri Nov 7 12:16:10 2025 +0800 - - 合并线上代码 - -commit 2493bb7113fd21e64836ed912ff9ff72ed0fcd1e -Author: liub -Date: Fri Nov 7 11:57:35 2025 +0800 - - 完成100 - -commit b8ce1621b45e40c3ff14d5d0ddaed3b362526d58 -Merge: c81a4d1 27d212e -Author: fengerli <528575642@qq.com> -Date: Thu Nov 6 08:47:45 2025 +0800 - - Merge branch 'main' of http://47.107.152.87:3000/dyf/APP - -commit c81a4d1903eb32ed784b97e33d29076e46fb1531 -Author: fengerli <528575642@qq.com> -Date: Thu Nov 6 08:46:27 2025 +0800 - - 6075设备控制页 - -commit 27d212e7dc9dcf61f361bd633482d5f26cde4886 -Author: 微微一笑 <709648985@qq.com> -Date: Wed Nov 5 19:18:05 2025 +0800 - - 继续优化7305 - -commit 9037ef6ac31cfdcbe273c47ed79b75bfccbf2877 -Merge: a30a631 2b72cc1 -Author: 微微一笑 <709648985@qq.com> -Date: Wed Nov 5 11:17:11 2025 +0800 - - Merge branch 'main' of http://47.107.152.87:3000/dyf/APP - -commit a30a631ea647b0a0615e0c78d06de90f872d4990 -Author: 微微一笑 <709648985@qq.com> -Date: Wed Nov 5 11:17:08 2025 +0800 - - 改成13*13符合设备端 - -commit 2b72cc1a5cbe2a9e5923a262ea6cafe0413cbc1c -Merge: 77be45f a0c883f -Author: fengerli <528575642@qq.com> -Date: Wed Nov 5 11:13:35 2025 +0800 - - Merge branch 'main' of http://47.107.152.87:3000/dyf/APP - -commit 77be45f1f3bf43dd7c5184a6ba196da7d5a92a02 -Author: fengerli <528575642@qq.com> -Date: Wed Nov 5 11:13:32 2025 +0800 - - 6075 - -commit a0c883f4e3dfafa6805090eaebaffec811f50aec -Author: 微微一笑 <709648985@qq.com> -Date: Wed Nov 5 10:22:17 2025 +0800 - - 优化蓝牙连接7305同步状态 - -commit 9313ec01060e32c7160f61e6a557ed53a4277e86 -Merge: ca6345e d06cd6c -Author: fengerli <528575642@qq.com> -Date: Wed Nov 5 08:48:15 2025 +0800 - - Merge branch 'main' of http://47.107.152.87:3000/dyf/APP - -commit ca6345ee3e8572415e1c3454f4fe9f696da8c303 -Author: fengerli <528575642@qq.com> -Date: Wed Nov 5 08:48:13 2025 +0800 - - 6075页面开发 - -commit d06cd6cdfdf94321f5257891a85516b066ff8014 -Author: 微微一笑 <709648985@qq.com> -Date: Tue Nov 4 19:30:47 2025 +0800 - - 修复复杂字体渲染设备端乱序问题 - -commit 2218ca06501de44ad9ffdb7fbbb09d0733a5ba9e -Author: 微微一笑 <709648985@qq.com> -Date: Sat Nov 1 17:32:03 2025 +0800 - - 修改输入框文本 - -commit 500b461bdd86a7c352e11af1e4827f9f1bb33ebb -Author: 微微一笑 <709648985@qq.com> -Date: Sat Nov 1 17:21:45 2025 +0800 - - 修复7305设备上报问题 - -commit 3526f28d067bbcfb1f91bd2f86faa478f5f23794 -Author: 微微一笑 <709648985@qq.com> -Date: Fri Oct 31 15:35:03 2025 +0800 - - 修复蓝牙传输数据 - -commit 3eeffdb62c82e61a3de86766e4ac1c075bf28287 -Merge: 317c762 bd56ca9 -Author: fengerli <528575642@qq.com> -Date: Fri Oct 31 11:15:39 2025 +0800 - - Merge branch 'liubiao-new-20250827' - -commit 317c762edc62551c2045415b0f4e598b0772a622 -Author: fengerli <528575642@qq.com> -Date: Fri Oct 31 11:13:07 2025 +0800 - - 7305文件报错 - -commit c39cbcb34d1929b2abb177f59538aaaae34dd292 -Author: liub -Date: Thu Oct 30 11:10:57 2025 +0800 - - 蓝牙开始、结束搜索添加状态判定 - -commit bd56ca997bb95078cf9b1ff7e32791af34dc3670 (liubiao-new-20250827) -Author: liub -Date: Mon Oct 27 13:00:34 2025 +0800 - - 修复7305标签未闭合问题 - -commit cf60414d7686194f35f41e6f1cf1dfe8f6e89765 -Author: liub -Date: Mon Oct 27 11:51:38 2025 +0800 - - 蓝牙断开连接变成异步操作 - -commit 61ed91695f15decff77a9fec9d7af3f7fae0226a -Author: liub -Date: Mon Oct 27 10:52:17 2025 +0800 - - 蓝牙模块添加在web平台默认成功方便调试功能,4877功能完成 - -commit d37ccfeabc9324872b686eb581ce33246fc1bb5d -Author: liub -Date: Fri Oct 24 17:21:18 2025 +0800 - - 完成BJQ4877功能开发 - -commit 0909d9f023c6e3db7d65c025954b2626d6f1615f -Merge: 1d8b3b4 b20a93d -Author: liubiao <3909916335@qq.com> -Date: Fri Oct 24 11:46:02 2025 +0800 - - merge upstream - -commit b20a93dd2854fef472eca51fd2a2934cba43ec59 -Author: 微微一笑 <709648985@qq.com> -Date: Fri Oct 24 11:42:56 2025 +0800 - - 修复传输时序问题 - -commit 1d8b3b4a9a7ed1030ce97b1ebb9121e1ceed365a -Merge: a5c6faa fa64e7f -Author: liub -Date: Fri Oct 24 11:08:32 2025 +0800 - - 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - # Conflicts: - # pages/7305/BJQ7305.vue - -commit a5c6faa9dac8cadbaf6ea9d745e43bca9d48395c -Author: liub -Date: Fri Oct 24 11:04:36 2025 +0800 - - * 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - * 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - * 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - * 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - * 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - * 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - * 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - * 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - - 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - -commit 15ba241317a9ecc46bbb7022b4ec3638bfa00a4e -Author: liub -Date: Fri Oct 24 11:00:35 2025 +0800 - - 修复蓝牙设备6155/7305全局弹窗与详情弹窗重复出现的问题 - -commit fa64e7f1fc9eb4b24e9bf6eab269e718299aabce -Merge: 0033649 1de958d -Author: liubiao <3909916335@qq.com> -Date: Fri Oct 24 10:57:08 2025 +0800 - - merge upstream - -commit 45328120c1b552b483b325cad2511ab274305006 -Author: liub -Date: Fri Oct 24 10:56:37 2025 +0800 - - 修复6155/7305全局订阅与详情订阅重复弹窗 - -commit 1de958df20014e6a858d1a0da9e277766518c96c -Author: 微微一笑 <709648985@qq.com> -Date: Fri Oct 24 10:29:46 2025 +0800 - - 修复优化7305设备屏幕点阵取模兼容设备端填坑 - -commit 0033649677964eb94ea930ba76f5f1a9020cffa3 -Author: liub -Date: Thu Oct 23 16:36:48 2025 +0800 - - 修改蓝牙接收数据处理逻辑,改成配置式,避免if无限增多 - -commit 738ce209a60 \ No newline at end of file diff --git a/manifest.json b/manifest.json index 7fccadd..9a059e7 100644 --- a/manifest.json +++ b/manifest.json @@ -95,18 +95,12 @@ "unipush" : { "version" : "2", "offline" : true, - "honor" : {}, - "meizu" : {}, - "mi" : {}, - "vivo" : {}, - "oppo" : {}, "hms" : {}, - "icons" : { - "small" : { - "xxhdpi" : "", - "xhdpi" : "" - } - } + "oppo" : {}, + "vivo" : {}, + "mi" : {}, + "meizu" : {}, + "honor" : {} } } }, diff --git a/pages/102/HBY102.vue b/pages/102/HBY102.vue index 50dbec5..61704d5 100644 --- a/pages/102/HBY102.vue +++ b/pages/102/HBY102.vue @@ -761,7 +761,7 @@ keys.forEach(key => { if (key in this.formData) { - console.log("key=",key+",value=",json[key]); + // console.log("key=",key+",value=",json[key]); this.formData[key] = json[key] ; } }); diff --git a/pages/4877/BJQ4877.vue b/pages/4877/BJQ4877.vue index 8da16ab..4beeee4 100644 --- a/pages/4877/BJQ4877.vue +++ b/pages/4877/BJQ4877.vue @@ -610,23 +610,23 @@ showUnWarn(val) { - this.showPop({ - message: '确定解除声光报警模式?', - iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", - borderColor: "#e034344d", - buttonBgColor: "#E03434", - okCallback: () => { + // this.showPop({ + // message: '确定解除声光报警模式?', + // iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", + // borderColor: "#e034344d", + // buttonBgColor: "#E03434", + // okCallback: () => { clearInterval(interval); this.sosSetting({ val: val }); - }, - buttonText: "解除", - showCancel: true, - buttonCancelText: '取消' + // }, + // buttonText: "解除", + // showCancel: true, + // buttonCancelText: '取消' - }); + // }); }, groupSetting(item, index) { if (this.formData.sta_SOSType === 'sos') { @@ -694,7 +694,9 @@ }); } - if (item.val === 'sos') { + + + let confirmTask=()=>{ this.showPop({ message: '确定' + (this.formData.sta_SOSType === 'sos' ? '关闭' : '开启') + '声光报警模式?', iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", @@ -705,9 +707,19 @@ showCancel: true, buttonCancelText: '取消' }); + } + if (item.val === 'sos') { + confirmTask(); } else if (item.val === 'sos_off') { - task(); + + if(this.formData.sta_SOSType === 'sos'){ + confirmTask(); + }else{ + task(); + } + + } else { if (this.formData.sta_SOSType === 'sos') { From 294d85486712b486d43ba1b88414850d999cd88d Mon Sep 17 00:00:00 2001 From: liub Date: Thu, 20 Nov 2025 16:40:14 +0800 Subject: [PATCH 7/7] =?UTF-8?q?670=E5=8A=A0=E5=85=A5=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E7=A1=AE=E8=AE=A4=E6=94=B6=E5=88=B0=E6=B6=88=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- manifest.json | 2 +- pages/6155/deviceDetail.vue | 427 ++++++++++++++++++++++++++++--- pages/650/HBY650.vue | 2 +- pages/670/HBY670.vue | 40 ++- pages/common/addBLE/addEquip.vue | 2 +- utils/BleHelper.js | 4 +- utils/BleReceive.js | 4 +- utils/request.js | 2 +- 8 files changed, 433 insertions(+), 50 deletions(-) diff --git a/manifest.json b/manifest.json index 9a059e7..a9d9a5c 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "name" : "星汉物联", "appid" : "__UNI__A21EF43", "description" : "设备管控", - "versionName" : "1.0.6", + "versionName" : "1.0.7", "versionCode" : "100", "transformPx" : false, /* 5+App特有相关 */ diff --git a/pages/6155/deviceDetail.vue b/pages/6155/deviceDetail.vue index 25d0e73..6c8b781 100644 --- a/pages/6155/deviceDetail.vue +++ b/pages/6155/deviceDetail.vue @@ -3,7 +3,7 @@ - + @@ -23,15 +23,15 @@ - + 设备名称 {{device.deviceName}} - Mac地址 - {{device.deviceMac}} - + Mac地址 + {{device.deviceMac}} + 设备状态 {{formData.statu}} @@ -86,6 +86,15 @@ 上传 + + + + + + 开机视频 + 上传 + + @@ -162,6 +171,10 @@ updateLoading } from '@/utils/loading.js' import BleReceive from '@/utils/BleReceive'; + import { + baseURL + } from '@/utils/request.js'; + var pagePath = "/pages/6155/HBY6155"; var ble = null; @@ -246,7 +259,7 @@ mode: '', bleStatu: '' }, - inteval: 200, + inteval: 80, device: { id: "", deviceName: "", @@ -360,7 +373,7 @@ } these.formData.blename = f.name ? f.name : "Unname"; these.formData.deviceName = device.deviceName; - + these.formData.id = device.id; these.formData.deviceId = f.deviceId; these.formData.bleStatu = false; @@ -619,7 +632,7 @@ // 创建RGB565格式的像素数据 // console.log("pixels=",pixels); const arr = ble.convertToRGB565(pixels, 'bgr'); - + var list = []; let index = 0; // 用于追踪arr的当前位置 let packetSize = 3200; @@ -631,12 +644,12 @@ // 中层循环:每个主要元素包含9个子数组(j从1到9) for (let j = 1; j < 9; j++) { // 确定当前子数组的长度:前8个是254,第9个是64 - + let thirdLevel = []; - + // 从arr中提取相应数量的元素 for (let k = 0; k < cSize && index < arr.length; k++) { - + if (secondCnt == packetSize) { break; } @@ -644,14 +657,14 @@ secondCnt++; index++; } - + secondLevel.push(thirdLevel); } list.push(secondLevel); } - + console.log("list=", list); - + let length = 0; for (let i = 0; i < list.length; i++) { const item = list[i]; @@ -661,8 +674,8 @@ console.log("第" + i + "包,第" + j + "小包,长度:" + element.length) length += element.length; clength += element.length; - - + + } } // 分包发送 @@ -680,37 +693,39 @@ let currentPacket = 1; let childPacket = 1; let totalChildPacket = 8; - - + + // 发送单个数据包 const sendNextPacket = () => { if (currentPacket > totalPackets) { - updateLoading(these,{text:'发送完成,等待设备30秒'}); + updateLoading(these, { + text: '发送完成,等待设备30秒' + }); setTimeout(() => { hideLoading(these); these.Status.BottomMenu.show = false; - + these.showPop({ message: "上传成功", iconUrl: "/static/images/6155/DeviceDetail/uploadSuccess.png", borderColor: '#BBE600', buttonBgColor: '#BBE600' }); - + resolve(); }, 0) - + return; } - + var packetData = imageData[currentPacket - 1][childPacket - 1]; console.log("childPacket=", childPacket); console.log("packetData=", packetData); let start = 0; let bufferSize = packetData.length * 2; - - - + + + if (childPacket == 1) { bufferSize = bufferSize + 8 start = 8; @@ -718,8 +733,8 @@ if (childPacket == 8) { //|| (currentPacket==7 && childPacket==3 bufferSize = bufferSize + 1 } - - + + //FA 09 0C 84 FB 09 00 [01~08] + 3200字节 +FF 数据格式 var buffer = new ArrayBuffer(bufferSize); var dataView = new DataView(buffer); @@ -733,7 +748,7 @@ dataView.setUint8(6, 0x00); // 帧头 dataView.setUint8(7, currentPacket); //包序号 } - + for (let i = 0; i < packetData.length; i++) { dataView.setUint16(start + i * 2, packetData[i], false); //本包数据,大端字节序 } @@ -742,19 +757,19 @@ if (childPacket == 8) { // || (currentPacket==7 && childPacket==3 dataView.setUint8(bufferSize - 1, 0xFF); } - + //发送数据包 ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 30) .then(() => { - + let curr = childPacket + (currentPacket - 1) * totalChildPacket; console.log("第" + currentPacket + "大包,第" + childPacket + "小包发送完成,总计:" + curr); updateLoading(these, { text: "正在发送" + curr + "/64" - + }) if (childPacket == 8) { currentPacket++; @@ -762,16 +777,16 @@ } else { childPacket++; } - + setTimeout(sendNextPacket, 100); }).catch(err => { if (err.code == 10007) { setTimeout(sendNextPacket, 100); return; } - + console.log("发送数据包失败了", err); - + these.Status.BottomMenu.show = false; these.showPop({ message: "发送数据包失败了" + err.msg, @@ -779,14 +794,14 @@ borderColor: "#e034344d", buttonBgColor: "#E03434", }); - + hideLoading(these); reject(err); }); } // 开始发送数据 sendNextPacket(); - + }); } @@ -828,6 +843,344 @@ } }); }, + + UploadOpenVideo: function() { //开机动画 + let f = these.getDevice(); + + if (!f) { + these.showBleUnConnect(); + return; + } + + let timeDelayCloseLoading = () => { + setTimeout(() => { + hideLoading(these); + }, 1500); + } + //视频上传 + let uplploadVideo = (videoPath) => { + + return new Promise((resolve, reject) => { + let start = new Date(); + + let token = uni.getStorageSync('token'); + let clientid = uni.getStorageSync('clientID'); + uni.uploadFile({ + + url: baseURL + "/app/video/upload", + filePath: videoPath, + name: 'file', + header: { + "Method": "POST", + "Content-Type": "multipart/form-data", + "Authorization": 'Bearer ' + token, + "clientid": clientid + }, + formData: { + code: 2 + }, + timeout: 600000, + fail: (ex) => { + + updateLoading(these, { + text: '视频文件上传失败了,请检查网络连接' + }); + + reject(ex); + }, + success: (res) => { + // console.error(res); + let end = new Date(); + var diff = (end.getTime() - start.getTime()) / 1000; + let s = diff % 60; + let m = parseInt((diff - s) / 60); + console.log("res.statusCode==", res.statusCode); + res.data = JSON.parse(res.data); + + if (res.statusCode === 200) { + if (res.data.code == 200) { + console.log("上传完成,耗时:" + m + "分" + s + "秒"); + updateLoading(these,{text:"上传完成,耗时:" + m + "分" + s + "秒,正在切片。"}) + resolve(res.data); + + return; + } + + } + console.error("上传完成,耗时:" + m + "分" + s + "秒"); + reject(res); + + } + + }); + + }); + + + + } + + //视频切片 + let videoCutPacket = (array) => { + return new Promise((resolve, reject) => { + try { + let imgSize = 25600; + let packetSize = 3200; + let tdSize = 500; + + let results = []; + for (let i = 0; i < 30; i++) { //先切出30张,每张25600字节 + let packet = array.slice(0, imgSize); + array.splice(0, imgSize) + + let secondLevel = []; + for (let j = 0; j < 8; j++) { //每张切8大包,每包3200字节 + let childPacket = packet.slice(0, packetSize); + + packet.splice(0, packetSize); + + let thirdLevel = []; + for (let k = 0; k < 7; k++) { //每1个大包切出7个小包,前6包500字节,第7包200字节,共计56小包 + + let arr = childPacket.slice(0, tdSize); + + childPacket.splice(0, tdSize) + thirdLevel.push(arr); + } + secondLevel.push(thirdLevel); + } + results.push(secondLevel); + } + updateLoading(these,{text:'切片完成,正在发送'}); + resolve(results); + } catch (error) { + updateLoading(these, { + text: '视频切片发生异常' + }); + reject(error); + } + }); + + + + + } + + //发送视频到设备 + let shotVideoClick = (array, type, ReSendNo) => { + var sendImagePackets = () => { + return new Promise((resolve, reject) => { + + + + this.currentPacket = 0; + + // 总数据包数 + var totalPackets = 1680; + this.totalPackets = totalPackets; + let currentPacket = 1; + + let imgIndex = 0; + let imgPackIndex = 0; + let childPacketIndex = 0; + if (ReSendNo) { + + this.currentPacket = ReSendNo - 1; + currentPacket = ReSendNo; + totalPackets = ReSendNo; + this.totalPackets = ReSendNo; + } + // 发送单个数据包 + const sendNextPacket = () => { + // console.log("111111") + if (currentPacket > totalPackets) { + resolve(); + + return; + } + // console.log("111111") + // 计算当前包的数据 + let packetSize = 500; + + if ((currentPacket - 1) % 56 === 0) { + + packetSize = 508; + + } + + if (childPacketIndex === 6) { + packetSize = 200; + } + + if ((currentPacket - 1) % 56 === 55) { + packetSize = 201; + } + + console.log("imgIndex=" + imgIndex + ",imgPackIndex=" + + imgPackIndex + + ",childPacketIndex=" + childPacketIndex) + + let packetData = array[imgIndex][imgPackIndex][childPacketIndex]; + + let buffer = new ArrayBuffer(packetSize); + let dataView = new DataView(buffer); + + let sortNo = currentPacket.toString(16).padStart(4, '0'); + // console.log("11111"); + let start = 0; + if ((currentPacket - 1) % 56 === 0) { + // 填充头部 + dataView.setUint8(0, 0xFA); // 帧头 + dataView.setUint8(1, 0x09); // 帧类型:开机画面 + dataView.setUint8(2, 0x0C); + dataView.setUint8(3, 0x84); + + + dataView.setUint8(4, 0xFD); + dataView.setUint8(5, 0x09); + dataView.setUint8(6, imgIndex); + dataView.setUint8(7, imgPackIndex + 1); + start = 8; + } + console.log("222222"); + for (let i = 0; i < packetData.length; i++) { + dataView.setUint8(start + i, '0x' + packetData[i]); + } + // console.log("333333333"); + if ((currentPacket - 1) % 56 === 55) { + dataView.setUint8(200, 0xFF); + } + // console.log("444444"); + let inteval = parseInt(this.inteval ? this.inteval : 80); + + ble.sendData(f.deviceId, buffer, f.writeServiceId, f + .wirteCharactId, ).then(() => { + if (ReSendNo) { + + resolve(); + return; + } + // 更新进度 + this.currentPacket = currentPacket; + + updateLoading(these,{ + text:'正在发送:'+currentPacket+"/"+totalPackets + }); + + + childPacketIndex++; + if (childPacketIndex == 7) { + imgPackIndex++; + if (imgPackIndex == 8) { + imgIndex++; + imgPackIndex = 0; + } + childPacketIndex = 0; + } + // 发送下一个包(添加延迟避免蓝牙缓冲区溢出) + currentPacket++; + + + + setTimeout(sendNextPacket, inteval); + }).catch(err => { + if (err.code == 10007) { + console.error(err.errMsg + ",发送失败了,正在补偿:" + + currentPacket); + setTimeout(sendNextPacket, 100); + return; + } + + console.error(err.errMsg + ",发送失败了" + currentPacket); + updateLoading(these,{text:"发送失败,"+err.errMsg}); + reject(err); + }); + }; + + + // console.log("111111") + + sendNextPacket(); + + }); + } + + return sendImagePackets(); + + + + } + + uni.chooseVideo({ + sourceType: ['album'], + success: function(res) { + console.log("res=",res); + let path = res.tempFilePath; + let width = res.width; + let height = res.height; + let duration = res.duration; + let err = []; + if (duration < 2) { + err.push("视频时长至少2秒"); + } + + if (width != 160 || height != 80) { + err.push("视频宽高必须是160*80"); + } + if (err.length > 0) { + err = err.join(";"); + these.showPop({ + message: err, + iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", + borderColor: "#e034344d", + buttonBgColor: "#E03434", + }); + return; + } + showLoading(these, { + text: '正在上传' + }); + setTimeout(() => { + uplploadVideo(path).then(result => { + + videoCutPacket(result.data).then(array => { + + let start = new Date(); + console.log("开始发送"); + shotVideoClick(array).then(() => { + console.log("发送完成"); + let end = new Date(); + var diff = (end.getTime() - start.getTime()) / 1000; + let s =parseInt(diff % 60); + let m =parseInt((diff - s) / 60); + console.log("发送完成,耗时:" + m + "分" + s + "秒"); + updateLoading(these,{ + text: "发送完成,耗时:" + m + "分" + s + "秒", + }); + + }).catch((ex1) => { + console.log("出现了异常", ex1) + }).finally(() => { + timeDelayCloseLoading(); + }); + + + + + }).catch(err => { + timeDelayCloseLoading(); + }); + + }).catch(ex => { + timeDelayCloseLoading(); + }); + }, 0); + + } + }); + + + }, UploadOpenImg: function() { //上传开机画面 this.Status.BottomMenu.menuItems = []; diff --git a/pages/650/HBY650.vue b/pages/650/HBY650.vue index 62eea59..c5be0eb 100644 --- a/pages/650/HBY650.vue +++ b/pages/650/HBY650.vue @@ -1007,7 +1007,7 @@ dataView.setUint8(6 + i, '0x' + packetData[i]); } - let inteval = 50; + let inteval = 30; console.log("开始发送一段视频"); // ble.sendData(f.deviceId, buffer, f.writeServiceId, f .wirteCharactId, 10).then(() => { diff --git a/pages/670/HBY670.vue b/pages/670/HBY670.vue index 6374408..6d78fae 100644 --- a/pages/670/HBY670.vue +++ b/pages/670/HBY670.vue @@ -309,6 +309,8 @@ data() { return { Status: { + msgOkIntval:null,//紧急通知等待的时间 + msgOkTime:null,// pageHide: false, apiType: "listA", navbar: { @@ -465,6 +467,8 @@ onUnload() { console.log("页面卸载,释放资源"); let statusTopic = `A/${this.formData.imei?this.formData.imei:this.device.deviceImei}`; + clearInterval(these.Status.staticWarn.inteval); + clearInterval(this.Status.msgOkIntval); ble.removeAllCallback(pagePath); if (mqttClient) { mqttClient.unsubscribe(statusTopic); @@ -863,10 +867,22 @@ // console.log("收到文本回复", payload); // // this.SendTxtMQ(json); // } - // else if (keys.indexOf('sta_BreakNews') > -1) { //紧急通知 - // console.log("收到紧急消息回复", payload); - // // this.sendUrgentMQ(json); - // } + if (keys.indexOf('sta_BreakNews') > -1) { //紧急通知 + if(json.sta_BreakNews==='I get it')// && this.Status.msgOkTime && this.Status.msgOkIntval){ + { + these.showPop({ + showPop: true, + message: "用户已确认收到紧急通知", + iconUrl: "/static/images/6155/DeviceDetail/uploadSuccess.png" + }); + + // this.Status.msgOkTime=null + // clearInterval(this.Status.msgOkIntval); + + } + + + } // else { // console.log("收到不能处理的数据", payload); // } @@ -2498,7 +2514,7 @@ buttonBgColor: '#BBE600', buttonTextColor: '#232323DE', iconUrl: '/static/images/6155/DeviceDetail/sendSucc.png', - message: '发送成功', + message: '发送成功,待用户确认', buttonText: '确定', clickEvt: 'SendUsr', visiblePrompt: false, @@ -2506,6 +2522,20 @@ modelValue: '', visibleClose: true }); + + // clearInterval(this.Status.msgOkIntval); + + // this.Status.msgOkTime=0; + // this.Status.msgOkIntval=setInterval(()=>{ + // this.Status.msgOkTime++; + // if(this.Status.msgOkTime>180){ + // this.Status.msgOkTime=null + // clearInterval(this.Status.msgOkIntval); + // this.Status.msgOkIntval=null; + // } + // }); + + } else { these.showPop({ message: res.msg, diff --git a/pages/common/addBLE/addEquip.vue b/pages/common/addBLE/addEquip.vue index ec60d6f..a9cac65 100644 --- a/pages/common/addBLE/addEquip.vue +++ b/pages/common/addBLE/addEquip.vue @@ -604,7 +604,7 @@ console.log("res=", res); linkCallback(res); }).catch(ex => { - console.log("ex=", ex) + console.error("ex=", ex) uni.showModal({ content: "连接失败:" + ex.msg }); diff --git a/utils/BleHelper.js b/utils/BleHelper.js index 646ac35..e7f4296 100644 --- a/utils/BleHelper.js +++ b/utils/BleHelper.js @@ -798,7 +798,7 @@ class BleHelper { if (isUpdate) { this.updateCache(); } - console.log("str1=", str); + // console.log("str1=", str); } catch (ex) { console.error("将数据转文本失败", ex); } @@ -1480,7 +1480,7 @@ class BleHelper { deviceId: deviceId, timeout: 30000, success: (info) => { - // console.log("新连接成功", this.data.LinkedList); + console.log("新连接成功", this.data.LinkedList); this.getLinkBlue().then((arr) => { let cr = arr.devices.find(c => { if (c.deviceId == deviceId) { diff --git a/utils/BleReceive.js b/utils/BleReceive.js index 179cf98..b5f85e7 100644 --- a/utils/BleReceive.js +++ b/utils/BleReceive.js @@ -59,10 +59,10 @@ class BleReceive { if (handler) { let data = handler(receive, f, path, recArr); - console.log("handler返回的数据:", data); + console.log("设备"+f.device.deviceName+"收到消息,handler返回的数据:", data); return data; } else { - console.log("已收到消息,但无指定处理程序, deviceUrl:", f.device.detailPageUrl, "可用handlers:", keys); + console.error("已收到消息,但无指定处理程序, deviceUrl:", f.device.detailPageUrl, "可用handlers:", keys); } } else { diff --git a/utils/request.js b/utils/request.js index 6faf71e..a25cc90 100644 --- a/utils/request.js +++ b/utils/request.js @@ -1,5 +1,5 @@ import config from '../config/index.js'; -export const env = 'development'; //production development //开发of线上 改这里就行 +export const env = 'production'; //production development //开发of线上 改这里就行 const BASE = config[env]; const request = (options) => { console.log("options" + JSON.stringify(options), BASE.BASE_URL)