diff --git a/manifest.json b/manifest.json index 7fe5bd7..5e1e02f 100644 --- a/manifest.json +++ b/manifest.json @@ -2,7 +2,7 @@ "name" : "星汉物联", "appid" : "__UNI__A21EF43", "description" : "设备管控", - "versionName" : "1.0.2", + "versionName" : "1.0.3", "versionCode" : "100", "transformPx" : false, /* 5+App特有相关 */ diff --git a/pages/650/HBY650.vue b/pages/650/HBY650.vue index ec02911..9d82461 100644 --- a/pages/650/HBY650.vue +++ b/pages/650/HBY650.vue @@ -1246,14 +1246,14 @@ these.setBleFormData(); - let json = { - deviceId: these.device.id, - name: these.formData.company, - position: these.formData.name, - unitName: these.formData.job, - code: these.formData.id - }; - usrApi.sendUsr(json) + // let json = { + // deviceId: these.device.id, + // name: these.formData.company, + // position: these.formData.name, + // unitName: these.formData.job, + // code: these.formData.id + // }; + // usrApi.sendUsr(json) return; } diff --git a/pages/670/HBY670.vue b/pages/670/HBY670.vue index ec4f0e6..8bb9956 100644 --- a/pages/670/HBY670.vue +++ b/pages/670/HBY670.vue @@ -282,7 +282,7 @@ request, baseURL } from '../../utils/request'; - + import lnglatConvert from '@/utils/wgs84_to_gcj02.js' const pagePath = "pages/670/HBY670"; var ble = null; @@ -369,6 +369,7 @@ showClose: false }, usrToggle: true, + bleLinkCnt:0 }, formData: { battary: "", //电量 @@ -380,9 +381,9 @@ modeCurr: "", //档位 SOS: "", //sos lightCurr: "qiang", //照明模式 - company: "", //单位 - usrname: "", //姓名 - job: "", //职位 + company: "湖北消防总队", //单位 + usrname: "胡红军", //姓名 + job: "中队长", //职位 usrid: "", //id msgTxt: "", //消息1 qzwarn: false, //是否强制报警 @@ -469,6 +470,7 @@ var device = data.data; these.Status.apiType = data.apiType; these.device = device; + these.formData.usrid = device.deviceImei; if (data.apiType !== 'listA') { Common.getdeviceShareId(data.data.id).then(res => { if (res.code == 200) { @@ -523,7 +525,10 @@ }, methods: { showBleUnConnect() { - + this.Status.bleLinkCnt++; + if(this.Status.bleLinkCnt>3){ + return; + } this.showPop({ message: "蓝牙未连接过该设备,请使用蓝牙重新添加该设备", iconUrl: "/static/images/6155/DeviceDetail/uploadErr.png", @@ -557,8 +562,9 @@ }); }, gotoMap() { - this.detailData.longitude = this.formData.Lon; - this.detailData.latitude = this.formData.Lat; + let lnglat=lnglatConvert.wgs84_to_gcj02(this.formData.Lon,this.formData.Lat); + this.detailData.longitude = lnglat[0]; + this.detailData.latitude = lnglat[1]; uni.navigateTo({ url: '/pages/common/map/index', events: { @@ -2196,14 +2202,14 @@ hideLoading(these); - let json = { - deviceId: these.device.id, - name: these.formData.company, - position: these.formData.usrname, - unitName: these.formData.job, - code: these.formData.usrid - }; - api.sendUsr(json) + // let json = { + // deviceId: these.device.id, + // name: these.formData.company, + // position: these.formData.usrname, + // unitName: these.formData.job, + // code: these.formData.usrid + // }; + // api.sendUsr(json) return; } @@ -2221,7 +2227,7 @@ let s = (text.length * 2).toString(16); let len = String(s).padStart(4, '0') len = len.match(/.{1,2}/g); - + // 填充头部 dataView.setUint8(0, 0x55); // 帧头 dataView.setUint8(1, 0x03); // 帧类型:文字 @@ -2251,10 +2257,10 @@ // 发送下一个包 currentPacket++; - setTimeout(sendNextPacket, 0); + setTimeout(sendNextPacket, 2000); }).catch(err => { if (err.code == '10007') { - setTimeout(sendNextPacket, 0); + setTimeout(sendNextPacket,2000); } else { requestSend(); } @@ -2276,7 +2282,7 @@ these.HoldYouHand("word transmit start", 120, f.deviceId, f.writeServiceId, f .wirteCharactId).then( () => { - setTimeout(sendText, 200); + setTimeout(sendText, 2000); }).catch((ex) => { requestSend(); // console.log("握手没有成功", ex); diff --git a/pages/7305/BJQ7305.vue b/pages/7305/BJQ7305.vue index c91f7de..6f8c24c 100644 --- a/pages/7305/BJQ7305.vue +++ b/pages/7305/BJQ7305.vue @@ -67,7 +67,7 @@ 泛光模式 --> - + @@ -611,7 +611,7 @@ let clength = 0; for (let j = 0; j < item.length; j++) { const element = item[j]; - console.log("第" + i + "包,第" + j + "小包,长度:" + element.length) + // console.log("第" + i + "包,第" + j + "小包,长度:" + element.length) length += element.length; clength += element.length; @@ -714,7 +714,7 @@ //发送数据包 ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, - 30) + 1000) .then(() => { let curr = childPacket + (currentPacket - 1) * @@ -732,10 +732,10 @@ childPacket++; } - setTimeout(sendNextPacket, 100); + setTimeout(sendNextPacket, 1000); }).catch(err => { if (err.code == 10007) { - setTimeout(sendNextPacket, 100); + setTimeout(sendNextPacket, 1000); return; } @@ -927,7 +927,7 @@ text: "请稍候..." }); - ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 30).then(() => { + ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 100).then(() => { this.formData.mode = mode; this.setBleFormData(); }).catch((ex) => { @@ -1091,7 +1091,7 @@ let inteval = parseInt(this.inteval ? this.inteval : 50); console.log("inteval=", inteval) ble.sendData(f.deviceId, buffer, f.writeServiceId, f - .wirteCharactId, 30).then(() => { + .wirteCharactId, 100).then(() => { curr++; setTimeout(sendNext, inteval); @@ -1259,7 +1259,7 @@ if (f) { // 发送数据 - ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 30); + ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 100); } @@ -1301,7 +1301,7 @@ if (f) { // 发送数据 - ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 30); + ble.sendData(f.deviceId, buffer, f.writeServiceId, f.wirteCharactId, 100); } diff --git a/pages/common/addBLE/addEquip.vue b/pages/common/addBLE/addEquip.vue index be789a4..2ae01f3 100644 --- a/pages/common/addBLE/addEquip.vue +++ b/pages/common/addBLE/addEquip.vue @@ -10,7 +10,7 @@ - + @@ -44,19 +44,31 @@ - 搜索设备 + + 搜索设备 + 刷新 + - + - - + + {{item.name?item.name:'Unnamed'}} + + + + 信号强度:{{110+item.RSSI>100?100:110+item.RSSI}}% + + + + + @@ -154,34 +166,34 @@ these = this; ble = bleTool.getBleTool(); //已连接过但删除了设备 - let delArr = ble.data.deletedEqs.map(v => { - return { - "deviceId": v.deviceId, - "name": v.name, - "RSSI": -99, - "localName": v.name, - } - }); - //已连接过但没绑定过的设备 - let noDev = ble.data.LinkedList.filter(v => { - return !(v.device && v.device.id); - }).map(v => { - return { - "deviceId": v.deviceId, - "name": v.name, - "RSSI": -99, - "localName": v.name, - } - }); - delArr = delArr.concat(noDev); + // let delArr = ble.data.deletedEqs.map(v => { + // return { + // "deviceId": v.deviceId, + // "name": v.name, + // "RSSI": -99, + // "localName": v.name, + // } + // }); + // //已连接过但没绑定过的设备 + // let noDev = ble.data.LinkedList.filter(v => { + // return !(v.device && v.device.id); + // }).map(v => { + // return { + // "deviceId": v.deviceId, + // "name": v.name, + // "RSSI": -99, + // "localName": v.name, + // } + // }); + // delArr = delArr.concat(noDev); - console.log("可能搜不到的设备=", delArr); - this.EquipMents = delArr; + // console.log("可能搜不到的设备=", delArr); + this.EquipMents = []; //delArr; ble.addDeviceFound((arr) => { - // console.log("发现新设备,",arr); + arr = arr.devices; for (var i = 0; i < arr.length; i++) { @@ -190,15 +202,18 @@ continue; } - let f = these.EquipMents.find(function(v) { - return v.deviceId == arr[i].deviceId; + let f = these.EquipMents.find((v, index) => { + if (v.deviceId == arr[i].deviceId) { + // v.RSSI=arr[i].RSSI;//同一设备上报更新信号强度 + these.$set(these.EquipMents[index], 'RSSI', arr[i].RSSI); + return true; + } + return false; }); if (!f) { - if (arr[i].deviceId == '35:06:00:EF:46:51') { - console.log("EquipMents=", these.EquipMents); - console.log("arr[i]=", arr[i]); - } + console.log("发现新设备,", arr[i]); + arr[i].name=arr[i].name.replace('JQZM-',''); these.EquipMents.push(arr[i]); } else { @@ -237,7 +252,7 @@ // this.EquipMents = []; - this.PairEquip = []; + // this.PairEquip = []; ble && ble.StartSearch().then(res => { console.log("开始搜索成功", res); }).catch((ex) => { @@ -248,6 +263,23 @@ }); }, methods: { + refreshBleList() { + if (!ble) { + return; + } + console.log("111111"); + ble.StopSearch().then(res => { + console.log("停止搜索成功"); + this.EquipMents = []; + ble.StartSearch().then(result => { + console.log("开始搜索成功"); + }).catch(err => { + console.log("err=", err); + }); + }).catch(ex => { + console.log("ex=", ex); + }); + }, isItemLink: function(item, index) { let src = '/static/images/BLEAdd/noLink.png'; @@ -458,7 +490,7 @@ } .content { - background-color: #1d1d1d; + background-color: #121212; color: #ffffffde; box-sizing: border-box; overflow: hidden; @@ -533,6 +565,7 @@ .animate .titleIco { width: 36rpx; height: 36rpx; + } .circle { @@ -542,7 +575,7 @@ animation: expand 4s infinite ease-out; display: inline-block; transform: translate(-50%, -50%); - + border:1rpx solid #bbe6003d; } .circle:nth-child(2) { @@ -561,7 +594,7 @@ } - + 100% { width: 18.75rem; @@ -575,10 +608,10 @@ padding: 30rpx; box-sizing: border-box; width: 100%; - height: calc(100% - 400rpx); + height: calc(100% - 300rpx); overflow-y: scroll; position: absolute; - top: 400rpx; + top: 300rpx; left: 0rpx; } @@ -594,6 +627,13 @@ width: 100%; height: 28rpx; line-height: 28rpx; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-content: center; + align-items: center; + justify-content: space-between; + margin-bottom: 20rpx; } .list { @@ -608,9 +648,10 @@ .list .item { width: 100%; - height: 120rpx; + min-height: 120rpx; + height: auto; box-sizing: border-box; - padding: 30rpx; + padding: 20rpx; border-radius: 8px; background: #1a1a1a; display: flex; @@ -627,7 +668,7 @@ } .list .item .centertxt { - width: calc(100% - 150rpx); + width: calc(100% - 100rpx); height: 100%; padding-left: 10rpx; display: flex; @@ -640,14 +681,21 @@ } .list .item .rightIco { - width: 50rpx; + width: 40rpx; height: 100%; + display: flex; + flex-direction: row; + flex-wrap: nowrap; + align-content: center; + justify-content: space-between; + align-items: center; } .list .item .leftImg .titleIco { width: 100%; height: 100%; + filter:invert(100%); } .list .item .name { @@ -662,7 +710,7 @@ .list .item .id { color: #ffffff99; font-family: "PingFang SC"; - font-size: 24rpx; + font-size: 26rpx; font-weight: 400; line-height: 36rpx; text-align: left; @@ -670,8 +718,8 @@ .list .item .rightIco .img { - width: 45rpx; - height: 45rpx; + width: 40rpx; + height: 40rpx; } .openBlue { diff --git a/static/images/670/jieN.png b/static/images/670/jieN.png index 0919bf8..5c8228a 100644 Binary files a/static/images/670/jieN.png and b/static/images/670/jieN.png differ diff --git a/static/images/670/jieNActive.png b/static/images/670/jieNActive.png index c43abfe..9c68ba2 100644 Binary files a/static/images/670/jieNActive.png and b/static/images/670/jieNActive.png differ diff --git a/static/images/670/qiang.png b/static/images/670/qiang.png index 6f4df40..6fc8bad 100644 Binary files a/static/images/670/qiang.png and b/static/images/670/qiang.png differ diff --git a/static/images/670/qiangActive.png b/static/images/670/qiangActive.png index 84c4169..b4930b5 100644 Binary files a/static/images/670/qiangActive.png and b/static/images/670/qiangActive.png differ diff --git a/static/images/670/ruo.png b/static/images/670/ruo.png index 3070db2..20c1435 100644 Binary files a/static/images/670/ruo.png and b/static/images/670/ruo.png differ diff --git a/static/images/670/ruoActive.png b/static/images/670/ruoActive.png index 24b0b68..5c6f7d8 100644 Binary files a/static/images/670/ruoActive.png and b/static/images/670/ruoActive.png differ diff --git a/static/images/BLEAdd/bluetooth.png b/static/images/BLEAdd/bluetooth.png new file mode 100644 index 0000000..2a1ec40 Binary files /dev/null and b/static/images/BLEAdd/bluetooth.png differ diff --git a/utils/BleHelper.js b/utils/BleHelper.js index 3eaf028..8f89504 100644 --- a/utils/BleHelper.js +++ b/utils/BleHelper.js @@ -453,7 +453,7 @@ class BleHelper { uni.openBluetoothAdapter({ success: (args) => { - // console.log("蓝牙初始化成功:" + JSON.stringify(args)); + console.log("蓝牙初始化成功:" + JSON.stringify(args)); this.data.isOpenBlue = true; this.data.available = true; resolve(true); @@ -461,7 +461,7 @@ class BleHelper { if (this.data.isSubscribe) { //整个App生命周期,只订阅一次 return; } - // console.log("开始订阅各类变化消息"); + console.log("开始订阅各类变化消息"); this.data.isSubscribe = true; @@ -519,14 +519,29 @@ class BleHelper { } }); - uni.onBluetoothDeviceFound((devices) => { + uni.onBluetoothDeviceFound((res) => { // console.log("发现新设备:" + JSON.stringify(devices)); + let arr=[]; + for (var i = 0; i < res.devices.length; i++) { + let item = res.devices[i]; + let f=serviceDic.find(v=>{ + return item.advertisServiceUUIDs.includes(v.serviceId); + }); + if(f){ + arr.push(item); + } + + } + if(arr.length===0){ + return; + } + res.devices=arr; this.data.searchList = this.data.searchList.concat( - devices); + res); if (this.cfg.onDeviceFound) { if (this.cfg.onDeviceFound.length > 0) { this.cfg.onDeviceFound.forEach((found) => { - found.callback(devices); + found.callback(res); }); } @@ -779,19 +794,40 @@ class BleHelper { //停止搜索 StopSearch() { - return new Promise((resolve, reject) => { + let p1= new Promise((resolve, reject) => { uni.stopBluetoothDevicesDiscovery({ success: (res) => { - //console.log("停止搜索蓝牙设备成功"); + console.log("停止搜索蓝牙设备成功"); resolve(); }, fail: (ex) => { - //console.log("无法停止蓝牙搜索"); + console.log("无法停止蓝牙搜索"); reject(this.getError(ex)); } }); - }) + }); + + let p2 = new Promise((succ, err) => { + setTimeout(() => { + err({ + code: -1 + }); + }, 50); + }); + + + return new Promise((resolve,reject)=>{ + Promise.race([p1,p2]).then(resolve).catch(ex=>{ + if (ex.code == -1) { + resolve(); + return; + } + reject(ex); + }); + }); + + } //获取已连接的设备 diff --git a/utils/update.js b/utils/update.js index 2b30437..41726bf 100644 --- a/utils/update.js +++ b/utils/update.js @@ -12,26 +12,25 @@ function checkAndUpdateWgt(updateUrl) { } // 显示加载提示 - let urls = ['http://114.55.111.217/app/CheckUpdate', 'https://t3v3e2xsjv.by.takin.cc/app/CheckUpdate']; - - - + let urls = ['https://dmsapp.skf.com.cn/HummerService/app/CheckUpdate']; // 1. 获取当前应用版本信息 plus.runtime.getProperty(plus.runtime.appid, (widgetInfo) => { const currentVersion = widgetInfo.version; console.log("当前版本:" + currentVersion); - - + + let callbck = (res) => { + let flag = false; uni.hideLoading(); - // console.log("检查更新成功=", res) + console.log("检查更新成功=", res) if (res.statusCode === 200) { - + const updateInfo = res.data.data; if (!updateInfo.hasUpdate) { - return; + return true; } + flag = true; // 3. 显示更新提示 uni.showModal({ title: '检测到更新', @@ -45,16 +44,14 @@ function checkAndUpdateWgt(updateUrl) { } }); } else { - uni.showToast({ - title: '当前已是最新版本', - icon: 'none', - duration: 2000 - }); + console.log('当前已是最新版本'); } + + return flag; }; - + let Update = (url) => { - console.log("url=",url); + console.log("url=", url); return new Promise((resolve, reject) => { uni.request({ url: url, @@ -62,42 +59,57 @@ function checkAndUpdateWgt(updateUrl) { data: { currentVersion: currentVersion, platform: uni.getSystemInfoSync().platform, - appId:"xhyc" + appId: "xhyc" }, success: (res) => { // console.log("res=>",res) - res.type='1'; - resolve(res); + if (res.statusCode === 200) { + res.type = '1'; + resolve(res); + } else { + reject(res); + } + }, fail: (err) => { - console.log("err=",err); + console.log("err=", err); reject(err); }, - complete:()=>{ + complete: () => { console.log("complete"); } }); }); - + } - + let Callback1 = (res) => { console.log("检查版本更新:", res); let os = plus.os.name.toLowerCase(); + + let flag = false; if (res.code != 200) { - return; + return flag; } let f = res.data.find(v => { + if (v.dictLabel.toLowerCase() == os) { + return true; } return false; }); + console.log("f=", f) if (f) { if (f.dictValue == currentVersion) { + flag = false; + return flag; + } + if(!f.dictValue || !f.remark){ + flag=false; return; } - + flag = true; uni.showModal({ title: '检测到更新', content: '当前版本“' + currentVersion + '”,发现新版本“' + f.dictValue + '”,是否立即更新?', @@ -109,17 +121,20 @@ function checkAndUpdateWgt(updateUrl) { } } }); + } else { + flag = false; } + return flag; } - + let Update1 = () => { return request({ url: '/app/auth/version', method: 'get' }); } - - + + let promises = []; for (var i = 0; i < urls.length; i++) { promises.push(Update(urls[i])); @@ -128,25 +143,25 @@ function checkAndUpdateWgt(updateUrl) { Promise.allSettled(promises).then(results => { let length = results.length; - let flag=false; + let flag = false; for (var i = 0; i < length; i++) { - console.log('results['+i+']=',results[i]); - if (results[i].status == 'fulfilled' && results[i].value.type==='1' && !flag ) { - flag=true; - callbck(results[i].value) - + console.log('results[' + i + ']=', results[i]); + if (results[i].status == 'fulfilled' && results[i].value.type === '1' && !flag) { + if (results[i].value.statusCode === 200) { + flag = callbck(results[i].value) + } // break; } - - if(results[i].status == 'fulfilled' && results[i].value.type!=='1' && !flag){ - flag=true; - Callback1(results[i].value); + + if (results[i].status == 'fulfilled' && results[i].value.type !== '1' && !flag) { + + flag = Callback1(results[i].value); // break; } } - if(!flag){ + if (!flag) { console.log("检查更新失败了"); - }else{ + } else { console.log("检查更新成功"); } }); diff --git a/utils/wgs84_to_gcj02.js b/utils/wgs84_to_gcj02.js new file mode 100644 index 0000000..0f9baa4 --- /dev/null +++ b/utils/wgs84_to_gcj02.js @@ -0,0 +1,122 @@ + +//地标 转 国测 常量 +var x_PI = (3.14159265358979324 * 3000.0) / 180.0; +var PI = 3.1415926535897932384626; +var a = 6378245.0; //卫星椭球坐标投影到平面地图坐标系的投影因子。 +var ee = 0.00669342162296594323; //椭球的偏心率。 + + +//判断是否在国内,在中国国内的经纬度才需要做偏移 +function out_of_china(lng, lat) { + return ( + lng < 72.004 || + lng > 137.8347 || + (lat < 0.8293 || lat > 55.8271 || false) + ); +} + +//转化经度 +function transformlng(lng, lat) { + var ret = + 300.0 + + lng + + 2.0 * lat + + 0.1 * lng * lng + + 0.1 * lng * lat + + 0.1 * Math.sqrt(Math.abs(lng)); + ret += + ((20.0 * Math.sin(6.0 * lng * PI) + + 20.0 * Math.sin(2.0 * lng * PI)) * + 2.0) / + 3.0; + ret += + ((20.0 * Math.sin(lng * PI) + + 40.0 * Math.sin((lng / 3.0) * PI)) * + 2.0) / + 3.0; + ret += + ((150.0 * Math.sin((lng / 12.0) * PI) + + 300.0 * Math.sin((lng / 30.0) * PI)) * + 2.0) / + 3.0; + return ret; +} + +//转化纬度 +function transformlat(lng, lat) { + var ret = + -100.0 + + 2.0 * lng + + 3.0 * lat + + 0.2 * lat * lat + + 0.1 * lng * lat + + 0.2 * Math.sqrt(Math.abs(lng)); + ret += + ((20.0 * Math.sin(6.0 * lng * PI) + + 20.0 * Math.sin(2.0 * lng * PI)) * + 2.0) / + 3.0; + ret += + ((20.0 * Math.sin(lat * PI) + + 40.0 * Math.sin((lat / 3.0) * PI)) * + 2.0) / + 3.0; + ret += + ((160.0 * Math.sin((lat / 12.0) * PI) + + 320 * Math.sin((lat * PI) / 30.0)) * + 2.0) / + 3.0; + return ret; +} + +//wgs84 to gcj02 地球坐标系 转 火星坐标系 + function wgs84_to_gcj02(lng, lat) { + if (out_of_china(lng, lat)) { + return [lng, lat]; + } else { + var dlat = transformlat(lng - 105.0, lat - 35.0); + var dlng = transformlng(lng - 105.0, lat - 35.0); + var radlat = (lat / 180.0) * PI; + var magic = Math.sin(radlat); + magic = 1 - ee * magic * magic; + var sqrtmagic = Math.sqrt(magic); + dlat = + (dlat * 180.0) / + (((a * (1 - ee)) / (magic * sqrtmagic)) * PI); + dlng = + (dlng * 180.0) / ((a / sqrtmagic) * Math.cos(radlat) * PI); + var mglat = lat + dlat; + var mglng = lng + dlng; + + return [mglng, mglat]; + } +} + + +//gcj02 to wgs84 火星坐标系 转 地球坐标系 + function gcj02_to_wgs84(lng, lat) { + if (out_of_china(lng, lat)) { + return [lng, lat] + } + else { + var dlat = transformlat(lng - 105.0, lat - 35.0); + var dlng = transformlng(lng - 105.0, lat - 35.0); + var radlat = lat / 180.0 * PI; + var magic = Math.sin(radlat); + magic = 1 - ee * magic * magic; + var sqrtmagic = Math.sqrt(magic); + dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * PI); + dlng = (dlng * 180.0) / (a / sqrtmagic * Math.cos(radlat) * PI); + var mglat = lat + dlat; + var mglng = lng + dlng; + return [lng * 2 - mglng, lat * 2 - mglat] + } +} + +export default { + gcj02_to_wgs84, + wgs84_to_gcj02 +} + + +