diff --git a/pages/100J/HBY100-J.vue b/pages/100J/HBY100-J.vue index 6a9a235..86eeb89 100644 --- a/pages/100J/HBY100-J.vue +++ b/pages/100J/HBY100-J.vue @@ -22,7 +22,9 @@ - {{ Math.floor((Number(deviceInfo.batteryRemainingTime)||0)/60) }}小时 {{ (Number(deviceInfo.batteryRemainingTime)||0)%60 }}分钟 + + {{ Math.floor((Number(deviceInfo.batteryRemainingTime) || 0) / 60) }}小时 + {{ (Number(deviceInfo.batteryRemainingTime) || 0) % 60 }}分钟 续航时间 @@ -43,24 +45,24 @@ {{ deviceInfo.onlineStatus === 0 ? '离线' : deviceInfo.onlineStatus === 2 ? '故障' : '在线' }} - - 定位信息 - - - {{ deviceInfo && deviceInfo.longitude ? Number(deviceInfo.longitude).toFixed(4) : '' }} - {{ deviceInfo && deviceInfo.latitude ? Number(deviceInfo.latitude).toFixed(4) : '' }} + + 定位信息 + + + {{ deviceInfo && deviceInfo.longitude ? Number(deviceInfo.longitude).toFixed(4) : '' }} + {{ deviceInfo && deviceInfo.latitude ? Number(deviceInfo.latitude).toFixed(4) : '' }} + + + + {{ deviceInfo.address }} + - - - {{ deviceInfo.address }} - - + - - {{ deviceInfo.voiceStrobeAlarm === 1 ? '报警中' : '强制报警' }} @@ -161,7 +163,7 @@ {{ formData.strobeFrequency }}HZ - @@ -236,6 +238,7 @@ data() { return { mqttClient: null, + activePermissions: [], // 存储当前设备的权限数组 Status: { isRightIconVisible: false, navTitle: '', @@ -244,6 +247,7 @@ curr: 0, total: 0, pageHide: false, + Pop: { showPop: false, //是否显示弹窗 popType: 'custom', @@ -312,7 +316,6 @@ lightBrightness: 10, sta_system: '', warnTime: 0, - sta_SOSType: 0 }, dic: { sta_VoiceType: { @@ -453,32 +456,138 @@ these.Status.apiType = data.apiType; these.Status.isRightIconVisible = these.Status.apiType === 'listA'; - if (data.apiType !== 'listA') { - Common.getdeviceShareId(data.data.id).then(res => { - if (res.code == 200) { - if (res.data.permission) { - these.permissions = res.data.permission.split(','); - } - } - }); - - } this.mqttClient = new MqttClient(); - // this.mqttClient.connect(() => { - // // 订阅来自设备的状态更新 - // const statusTopic = `status/894078/HBY100/${data.data.deviceImei}`; - // this.mqttClient.subscribe(statusTopic, (payload) => { - // try { - // // 解析MQTT返回的payload - // const payloadObj = typeof payload === 'string' ? JSON.parse( - // payload) : payload; - // } catch (e) { - - // } - // }) - // }) + + this.mqttClient.connect(() => { + // 订阅来自设备的状态更新 + const statusTopic = `status/894078/HBY100/${data.data.deviceImei}`; + this.mqttClient.subscribe(statusTopic, (payload) => { + try { + // 解析MQTT返回的payload + const payloadObj = typeof payload === 'string' ? JSON.parse( + payload) : payload; + console.log(payloadObj, '这是我的数据类型么'); + const data = payloadObj.data ?? {}; + const funcType = payloadObj.funcType ?? ''; // 从顶层获取funcType + const { + siren_alarm = { + enable: 0, + mode: 0 + }, + led_strobe = { + enable: 0, + mode: 0, + frequency: 0 + }, + volume = 0, + brightness = { + red: 0, + green: 0, + blue: 0 + }, + + } = data; + // 3. 赋值对应的字段 + // 续航时间相关 + if (funcType == '4') { + these.deviceInfo.batteryPercentage = data.level //电量 + these.deviceInfo.batteryRemainingTime = data + .battery_remaining_time //续航时间 + // 设备按键, app同步 + } else if (funcType == '14') { + // 调节亮度,音量,频率相关字段 + these.formData.strobeFrequency = led_strobe.frequency || + 0.5; //频率 + these.formData.volume = volume || 10; //音量 + these.formData.lightBrightness = brightness.red || + 10; //亮度值 + // 警示灯 + const enable1 = led_strobe.enable ?? 0; // 开关:1=开,0=关 + const mode1 = led_strobe.mode ?? 0; // 模式:0/1/2/3/4/5/6 + if (enable1 === 1) { + // 开启状 + these.formData.sta_LightType = mode1 + ''; + } else { + // 关闭状态:赋值-1,表示关闭 + these.formData.sta_LightType = '-1'; + } + // 报警模式,选中,首次上报值,或者切换设备按键上报值 + const enable = siren_alarm.enable ?? 0; // 报警开关:1=开,0=关 + const mode = siren_alarm.mode ?? 0; // 模式:0/1/2/3/4/5/6 + if (these.formData.sta_VoiceType != 7) { + if (enable === 1) { + // 开启状态 + these.formData.sta_VoiceType = mode + ''; + } else { + // 关闭状态:赋值-1,表示关闭 + these.formData.sta_VoiceType = mode + ''; + } + } else { + // 播放语音,上报消息 + const voiceStrobeAlarm = data.voice_broadcast ?? 0; + if (voiceStrobeAlarm === 1) { + these.formData.sta_VoiceType = '7' + } else { + these.formData.sta_VoiceType = '-1' + } + } + } + // 报警模式相关字段赋值,是语音播放根据这个字段 + if (funcType === '6') { + console.log('我是谁', data.voice_broadcast); + // 语音频闪报警:0=关闭,1=开启 ui7是播放的状态 + const voiceStrobeAlarm = data.voice_broadcast ?? 0; + if (voiceStrobeAlarm === 1) { + these.formData.sta_VoiceType = '7' + } else { + these.formData.sta_VoiceType = '-1' + } + // 强制报警按键解除报警状态,app同步 + } else if (funcType === '12') { + const enable_alarm = data.voice_strobe_alarm ?? + 0; // 报警开关:1=开,0=关 + const mode_alarm = data.mode ?? 0; // 模式:0/1/2/3/4/5/6 + if (enable_alarm === 1) { + // 开启状 + these.deviceInfo.voiceStrobeAlarm = 1; + these.formData.sta_VoiceType = mode_alarm + '' + } else { + // 关闭状态:赋值-1,表示关闭 + these.deviceInfo.voiceStrobeAlarm = -1; + // 模式还是选中的,模式,解除也是 + these.formData.sta_VoiceType = mode_alarm + '' + } + } + // 警示灯模式选中切换 + if (funcType === '10') { + const enable = data.enable ?? 0; // 开关:1=开,0=关 + const mode = data.mode ?? 0; // 模式:0/1/2/3/4/5/6 + if (enable === 1) { + // 开启状 + these.formData.sta_LightType = mode + ''; + } else { + // 关闭状态:赋值-1,表示关闭 + these.formData.sta_LightType = '-1'; + } + } + // 报警模式相关字段 + console.log('formData赋值完成:', these.formData); + } catch (e) { + // 捕获异常并打印,方便排查问题(不要空catch) + console.log('解析MQTT payload失败:', e); + } + }) + }) console.log(data, 'datatatatat'); - these.fetchDeviceDetail(data.data.id) + // 分享接口 + if (these.Status.apiType === 'listA') { + these.fetchDeviceDetail(data.data.id) + } else { + this.activePermissions = data.data.permission ? data.data.permission.split(',') : []; + console.log(this.activePermissions,'this.activePermissions'); + these.fetchDeviceDetail(data.data.deviceId) + } + }); this.createThrottledFunctions(); @@ -502,6 +611,7 @@ }, // 获取设备详情(普通详情) fetchDeviceDetail(id) { + let that = this deviceDetail(id).then((res) => { if (res.code == 200) { const validData = Object.fromEntries( @@ -511,13 +621,17 @@ }) ); Object.assign(this.formData, validData); - this.deviceInfo = res.data; - // 0 红色爆闪,1 蓝色爆闪,2 黄色爆闪,3,红色顺时针旋转爆闪,4黄色顺时针旋转爆闪,5,红蓝顺时针旋转爆闪,6 红蓝交替爆闪 - this.formData.sta_LightType = (res.data.strobeMode ?? 0) + '' - // 0爆闪关闭, 1爆闪开启 - const strobeEnable = res.data.strobeEnable ?? 0; - this.formData.sta_LightType = strobeEnable === 1 ? 1 : -1; - if (res.data.alarmMode == 7) { + that.deviceInfo = res.data; + const strobeEnable = res.data.strobeEnable ?? 0; // 0=关闭,1=开启 + const strobeMode = res.data.strobeMode ?? 0; // 0=红闪、1=蓝闪、3=红色顺时针... + if (strobeEnable === 1) { + // 开启状态 + that.formData.sta_LightType = strobeMode + ''; + } else { + // 关闭状态 + that.formData.sta_LightType = '-1'; + } + if (this.formData_VoiceType == 7) { this.formData.sta_VoiceType = res.data.voiceStrobeAlarm ?? 0; } else { this.formData.sta_VoiceType = res.data.alarmMode + '' @@ -525,6 +639,14 @@ } }) }, + // 检查权限的方法 + hasPermission(permissionCode) { + // 如果还在加载中,直接返回false + if (this.pageLoading) return false + // 如果不是分享设备,默认有全部权限 + if (!this.isSharedDevice) return true + return this.activePermissions.includes(permissionCode) + }, handleRightClick(item, s) { if (item && item.callback) { item.callback(item, s); @@ -553,7 +675,6 @@ }, // 语音管理 audioManager(item) { - this.formData.sta_VoiceType = -1 if (this.Status.apiType !== 'listA') {} uni.navigateTo({ url: '/pages/100J/audioManager/AudioList', @@ -687,6 +808,7 @@ }, // 警示灯开关闭 lightTypeSet(item, index) { + console.log('走了么'); let val = item.key; // 切换选中/取消选中逻辑 if (this.formData.sta_LightType === val) { @@ -731,9 +853,32 @@ val = '-1'; } this.formData.sta_VoiceType = val; - console.log(this.formData.sta_VoiceType, 'this.formData.sta_VoiceType') // 模式类型为7时才去判断 - if (val === '7' || val === '-1') { + console.log(val, 'valllll'); + const isVoiceOperate = val === '7' || val === '-1'; // 标记是否是语音开启/关闭操作 + if (this.deviceInfo.voiceStrobeAlarm == 1) { + // 如果强制报警已经开启了,那么切换下面的模式需要时,需要触发报警指令 + const data = { + deviceIds: [this.deviceInfo.deviceId], + // 声光报警开关开启传1 + voiceStrobeAlarm: 1, + mode: this.formData.sta_VoiceType + }; + deviceForceAlarmActivation(data).then((res) => { + if (res.code === 200) { + uni.showToast({ + title: '强制报警已开启', + icon: 'none' + }); + } else { + uni.showToast({ + title: res.msg, + icon: 'none' + }); + } + }) + } else if (isVoiceOperate) { + console.log('我是谁'); let data = { deviceId: this.deviceInfo.deviceId, voiceBroadcast: Number(this.formData.sta_VoiceType) === -1 ? 0 : 1 @@ -752,7 +897,6 @@ } }) } - }, // 报警模式 sosSetting(item) { @@ -775,8 +919,7 @@ showCancel: true, buttonCancelText: '取消', okCallback: () => { - console.log(this.formData.sta_SOSType, 'this.formData.sta_SOSType'); - this.formData.sta_SOSType = isClose ? 0 : 1; + this.deviceInfo.voiceStrobeAlarm = isClose ? 0 : 1; //强制报警,报警中 0是强制报警,1是报警中 const data = { deviceIds: [this.deviceInfo.deviceId], // 声光报警开关:关闭传0,开启传1 @@ -789,18 +932,16 @@ title: isClose ? '声光报警已解除' : '强制报警已开启', icon: 'none' }); + if (isClose && this.formData.sta_VoiceType === '7') { + this.formData.sta_VoiceType = '-1'; + } } else { uni.showToast({ title: res.msg, icon: 'none' }); } - }).catch((err) => { - uni.showToast({ - title: '请求失败,请重试', - icon: 'none' - }); - }); + }).catch((err) => {}); } }; }, @@ -814,7 +955,7 @@ if (receive.deviceId !== this.formData.deviceId) { return; } - if (this.formData.sta_battery <= 20) { + if (this.deviceInfo.batteryPercentage <= 20) { this.showMsg("设备电量低"); } }, @@ -1307,8 +1448,6 @@ .proinfo .item .img { width: 50rpx; height: 50rpx; - - } .proinfo .item .txt { @@ -1321,14 +1460,10 @@ text-align: left; } - .slider-container { padding: 0px; } - - - .addIco { width: 100%; height: 360rpx; @@ -1749,27 +1884,28 @@ width: 100%; font-size: 32rpx; } + .info-row { display: flex; justify-content: space-between; } - + .info-label { font-size: 28rpx; color: rgba(255, 255, 255, 0.87); white-space: nowrap; } - + .info-value { font-size: 28rpx; color: rgba(255, 255, 255, 0.6); } - + .status-running { /* color: rgba(255, 255, 255, 0.6); */ text-align: end; } - + .locationGPS { width: 88%; text-align: end; diff --git a/pages/100J/audioManager/AudioList.vue b/pages/100J/audioManager/AudioList.vue index 0ddca29..cedf3e5 100644 --- a/pages/100J/audioManager/AudioList.vue +++ b/pages/100J/audioManager/AudioList.vue @@ -469,12 +469,11 @@ }, Apply(item, index) { this.mqttClient = new MqttClient(); - this.updateProgress = 0; - this.isUpdating = true; let data = { id: item.id } deviceUpdateVoice(data).then((RES) => { + console.log(RES,'RES'); if (RES.code == 200) { this.updateProgress = 0; this.isUpdating = true; diff --git a/pages/common/index/index.vue b/pages/common/index/index.vue index a267d5e..d5e4473 100644 --- a/pages/common/index/index.vue +++ b/pages/common/index/index.vue @@ -40,15 +40,15 @@ 设备:{{item.deviceName}} - ID:{{item.deviceImei}} + ID:{{item.deviceImei}} ID:{{item.deviceMac}} 在线 + v-if="item.onlineStatus==1">在线 离线 + v-if="item.onlineStatus==0">离线 电量:{{item.battery || '0'}}% @@ -386,7 +386,7 @@ import BleReceive from '@/utils/BleReceive'; if (res.code == 200) { //console.log("deviceTypeList=" + JSON.stringify(res.data)); this.tabs = [{ - id: '', + id: '', name: '全部设备', typeName: '全部设备' }, @@ -405,9 +405,6 @@ import BleReceive from '@/utils/BleReceive'; this.deviceList = []; this.activeTab = index; this.activeTabInfo = tab - - - this.downCallback(); }, // 获取设备列表 diff --git a/pages/common/shareDevices/index.vue b/pages/common/shareDevices/index.vue index 55bbeca..553f302 100644 --- a/pages/common/shareDevices/index.vue +++ b/pages/common/shareDevices/index.vue @@ -216,7 +216,7 @@ const res = await deviceShareAdd({ phonenumber: this.phone, smsCode: this.code, - deviceId: this.itemInfo.id, + deviceId: this.itemInfo.id || this.itemInfo.deviceId, permission: selectedPermissions.join(',') }) @@ -250,8 +250,8 @@ const eventChannel = this.getOpenerEventChannel(); // 监听 'shareDevice' 事件,获取传过来的数据 eventChannel.on('shareDevice', (data) => { - console.log(data, 'data1t111'); this.itemInfo = data.data; + console.log(this.itemInfo,'this.itemInfo'); this.permissions=Common.getPermissions(this.itemInfo.persissonType); console.log(this.itemInfo.persissonType,'this.itemInfo.persissonType'); }) diff --git a/pages/common/shareManagement/index.vue b/pages/common/shareManagement/index.vue index 2bd6487..b2e7669 100644 --- a/pages/common/shareManagement/index.vue +++ b/pages/common/shareManagement/index.vue @@ -86,7 +86,9 @@ }, getData(val) { let data = { - deviceId: val + deviceId: val, + pageNum: 1, + pageSize: 500 } deviceShareList(data).then((res) => { if (res.code == 200) { @@ -117,7 +119,7 @@ eventChannel.on('shareManagement', (data) => { console.log(data, 'data1t111'); this.itemInfo = data.data; - this.getData(this.itemInfo.id) + this.getData(this.itemInfo.id ||this.itemInfo.deviceId) }) } } @@ -179,12 +181,13 @@ border-radius: 32px; background: rgba(255, 200, 78, 0.06); display: inline-block; - width: 152rpx; - height: 60rpx; + width: 100rpx; + height: 50rpx; text-align: center; - line-height: 60rpx; + line-height: 50rpx; color: rgba(224, 52, 52, 1); cursor: pointer; + margin-top: 30rpx; } .IMG {