diff --git a/page_Beehive/Beehive_detail.vue b/page_Beehive/Beehive_detail.vue index a937b6b..5739abb 100644 --- a/page_Beehive/Beehive_detail.vue +++ b/page_Beehive/Beehive_detail.vue @@ -5,19 +5,14 @@ - - + :show-location='true' :markers="covers"> + + 未找到位置信息 + + {{obj.name}}-{{obj.sn}} @@ -340,8 +335,8 @@ backgroundColor: " #FAFDFD", }, title: "蜂箱详情", - latitude: '39.916527', - longitude: ' 116.397128', + latitude: '7', + longitude: '', isMap: false, zoomSize: 15, markers: [{ @@ -381,7 +376,8 @@ month: '', day:'' }, - daytime:'' + daytime:'', + covers: [], } }, onLoad(option) { @@ -398,8 +394,8 @@ this.$refs.canvas7.init(this.initChart7) }, 1000) this.getobj() - const now = new Date(); - const previousDay = new Date(now) + let now = new Date(); + let previousDay = new Date(now) this.yeartime.year = now.getFullYear() this.yeartime.month = String(previousDay.getMonth() + 1).padStart(2, '0') this.yeartime.day = String(now.getDate()).padStart(2, '0') @@ -440,7 +436,6 @@ getchartData1(){ let time = this.yeartime.year +'-' + this.yeartime.month + '-' + this.yeartime.day let times = this.yeartimes.year + '-' + this.yeartimes.month + '-' + this.yeartimes.day - console.log(this.yeartime,this.yeartimes); this.$u.get(`/farmer/report/tempN?dateRange=${times},${time}&beehiveId=${this.beehiveId}`).then(res => { if(res.code == 200){ this.chartData1 = res.data.map(item => item.value) @@ -625,8 +620,8 @@ this.$u.get(`/farm/beehive/${this.beehiveId}`).then(res => { if(res.code == 200){ this.obj = res.data - this.latitude = res.data.apiaryLat - this.longitude = res.data.apiaryLng + this.latitude = res.data.lat + this.longitude = res.data.lng if(res.data.enableFan == false){ this.fskx = '关' }else{ @@ -637,11 +632,21 @@ }else{ this.jrkg = '开' } + if(res.data.lat == 0 && res.data.lng == 0){ + console.log('未找到位置信息'); + this.zoomSize = 5 + }else{ + this.covers.push({ + id: parseFloat(res.data.beehiveId), + latitude: res.data.lat, + longitude: res.data.lng, + width: 25, + height: 30, + iconPath: 'https://api.ccttiot.com/smartmeter/img/static/ukbyhyrDcp3VzgyeJo2G', + }) + } this.gettq() - if(this.latitude == 0 && this.longitude == 0){ - this.zoomSize = 2 - } }else{ uni.showToast({ title: res.msg, @@ -661,7 +666,6 @@ let date = new Date(this.daytime); let formattedDate = this.formatDate(date) this.daytime = formattedDate - console.log(this.daytime); } }) }, @@ -1906,7 +1910,22 @@ height: 372rpx; border-radius: 20rpx; overflow: hidden; - + .fxmask{ + position: absolute; + top: 0; + left: 0; + width: 100%; + height: 100%; + background-color: #3D3D3D; + opacity: .5; + z-index: 99; + color: #fff; + text-align: center; + font-size: 36rpx; + padding-top: 288rpx; + box-sizing: border-box; + font-weight: 600; + } .num { width: 180rpx; position: absolute; diff --git a/pages/Apiary/Apiary_detail.vue b/pages/Apiary/Apiary_detail.vue index b45ddd3..3d1f7b0 100644 --- a/pages/Apiary/Apiary_detail.vue +++ b/pages/Apiary/Apiary_detail.vue @@ -28,7 +28,8 @@ {{daily[0].humidity}} % - + @@ -49,11 +50,11 @@ - 具体位置 + 具体位置 + :show-location='true' :polygons="polygons" :markers="covers"> 在线:{{apiaryobj.onlineBeehiveCount}} @@ -137,8 +138,9 @@ - - + + @@ -196,60 +198,101 @@ apiaryId: '', apiaryobj: {}, listmy: '', - listfz:'', - daily:[], - chartData7:[], - chartData8:[], - daytime:'' + listfz: '', + daily: [], + chartData7: [], + chartData8: [], + daytime: '', + covers: [], + polygons: [{ + //多边形的坐标数组 + points: [], + fillColor: "#cbdde9", + strokeColor: "#78addd", + strokeWidth: 1, + zIndex: 1, + }] + } - }, + }, onLoad(option) { setTimeout(() => { this.$refs.canvas7.init(this.initChart7) }, 1000) this.apiaryId = option.id this.getfcxq() + this.getMyLocation() }, onShow() { }, - methods: { - btnedfc(){ + methods: { + // 请求指定蜂场蜂箱 + getMyLocation() { + uni.getLocation({ + type: 'wgs84', + success: (res) => { + this.latitude = Number(res.latitude.toFixed(5)) - 0.004 + this.longitude = Number(res.longitude.toFixed(5)) + 0.004 + this.$u.get(`/farm/beehive/listByApiary/${this.apiaryId}`).then( + res => { + if (res.code == 200) { + res.data.forEach(item => { + this.covers.push({ + id: Number(item.storeId), + latitude: item.lat, + longitude: item.lng, + width: 25, + height: 30, + iconPath: 'https://api.ccttiot.com/smartmeter/img/static/ukbyhyrDcp3VzgyeJo2G', + }) + }) + } + }) + }, + fail: (err) => { + console.error('获取位置失败:', err) + } + }); + }, + + + btnedfc() { uni.navigateTo({ - url:'/pages/Apiary/Apiary_edit/Apiary_edit?apiaryId=' + this.apiaryId + url: '/pages/Apiary/Apiary_edit/Apiary_edit?apiaryId=' + this.apiaryId }) }, - btncaozuo(){ + btncaozuo() { uni.navigateTo({ - url:'/page_Beehive/Beehive_log?apiaryId=' + this.apiaryId + '&name=' + this.apiaryobj.name + url: '/page_Beehive/Beehive_log?apiaryId=' + this.apiaryId + '&name=' + this.apiaryobj.name }) }, - btnpage(){ + btnpage() { uni.switchTab({ - url:'/pages/Beehive' + url: '/pages/Beehive' }) }, - gettq(){ - console.log(this.latitude,this.longitude); + gettq() { + console.log(this.latitude, this.longitude); this.$u.get(`weather/7d?location=${this.longitude},${this.latitude}`).then(res => { - if(res.code == 200){ + if (res.code == 200) { this.daily = res.data.daily this.chartData7 = res.data.daily.map(item => item.tempMin) this.chartData8 = res.data.daily.map(item => item.tempMax) this.daytime = res.data.updateTime - let date = new Date(this.daytime); + let date = new Date(this.daytime); let formattedDate = this.formatDate(date) this.daytime = formattedDate } }) }, formatDate(date) { - let year = date.getFullYear() - let month = String(date.getMonth() + 1).padStart(2, '0') - let day = String(date.getDate()).padStart(2, '0') - let hours = String(date.getHours()).padStart(2, '0') - let minutes = String(date.getMinutes()).padStart(2, '0') - return `${year}-${month}-${day} ${hours}:${minutes}` + let year = date.getFullYear() + let month = String(date.getMonth() + 1).padStart(2, '0') + let day = String(date.getDate()).padStart(2, '0') + let hours = String(date.getHours()).padStart(2, '0') + let minutes = String(date.getMinutes()).padStart(2, '0') + return `${year}-${month}-${day} ${hours}:${minutes}` }, getfcxq() { this.$u.get(`/farm/apiary/${this.apiaryId}`).then(res => { @@ -257,6 +300,22 @@ this.apiaryobj = res.data this.latitude = res.data.lat this.longitude = res.data.lng + this.covers.push({ + id: Number(res.data.apiaryId), + latitude: res.data.lat, + longitude: res.data.lng, + width: 25, + height: 30, + iconPath: 'https://api.ccttiot.com/smartmeter/img/static/uYrX2QTRLdVVDTB3E5cp', + }) + let centerLat = res.data.lat + let centerLon = res.data.lng + let radius = res.data.radius + let circlePoints = this.calculateCirclePoints(centerLat, centerLon, radius) + this.polygons[0].points = circlePoints + + console.log(this.polygons[0].points, '圆形电子围栏点') + this.gettq() this.getmy() this.getfz() @@ -269,11 +328,44 @@ } }) }, + // 计算电子围栏 + calculateCirclePoints(lat, lon, radiusInKm, numPoints = 36) { + let earthRadiusKm = 6371; // 地球平均半径,单位:千米 + let radius = radiusInKm / earthRadiusKm; // 半径转换为弧度 + let points = []; + + for (let i = 0; i < numPoints; i++) { + let angle = (i / (numPoints - 1)) * 2 * Math.PI; // 角度从0到2π + let latRad = lat * Math.PI / 180; // 中心纬度转换为弧度 + let lonRad = lon * Math.PI / 180; // 中心经度转换为弧度 + + // 使用球面三角学计算新点的经纬度 + let newLatRad = Math.asin(Math.sin(latRad) * Math.cos(radius) + + Math.cos(latRad) * Math.sin(radius) * Math.cos(angle)); + let newLonRad = lonRad + Math.atan2( + Math.sin(angle) * Math.sin(radius) * Math.cos(latRad), + Math.cos(radius) - Math.sin(latRad) * Math.sin(newLatRad) + ); + + // 将弧度转换回度 + let newLat = newLatRad * 180 / Math.PI; + let newLon = (newLonRad + 3 * Math.PI) % (2 * Math.PI) - Math.PI; // 转换到-180到180的范围 + newLon = newLon * 180 / Math.PI; + + // 添加到点数组 + points.push({ + latitude: newLat, + longitude: newLon + }); + } + + return points; + }, getmy() { this.$u.get(`/common/getDictByType?dictType=apiary_honey_type`).then(res => { if (res.code == 200) { - for(let i = 0; i < res.data.length;i++){ - if(res.data[i].dictValue == this.apiaryobj.honeyType){ + for (let i = 0; i < res.data.length; i++) { + if (res.data[i].dictValue == this.apiaryobj.honeyType) { this.listmy = res.data[i].dictLabel } } @@ -283,8 +375,8 @@ getfz() { this.$u.get(`/common/getDictByType?dictType=apiary_bee_type`).then(res => { if (res.code == 200) { - for(let i = 0; i < res.data.length;i++){ - if(res.data[i].dictValue == this.apiaryobj.beeType){ + for (let i = 0; i < res.data.length; i++) { + if (res.data[i].dictValue == this.apiaryobj.beeType) { this.listfz = res.data[i].dictLabel } } @@ -454,7 +546,7 @@ .page { position: relative; width: 750rpx; - + .pops { position: fixed; left: 98rpx; @@ -789,6 +881,7 @@ // position: relative; margin-top: 42rpx; margin-left: 38rpx; + .tip_cont { display: flex; flex-wrap: nowrap; diff --git a/pages/index/index.vue b/pages/index/index.vue index 0a96fcf..943f074 100644 --- a/pages/index/index.vue +++ b/pages/index/index.vue @@ -323,8 +323,8 @@ this.$u.get('/farm/apiary/list?', data).then((res) => { if (res.code == 200) { if (res.total >= 1) { - this.getnum() - this.getnums() + // this.getnum() + // this.getnums() this.haveApiary = true } else { this.haveApiary = false diff --git a/pages/map.vue b/pages/map.vue index 5ef6ce2..6b310a3 100644 --- a/pages/map.vue +++ b/pages/map.vue @@ -167,8 +167,6 @@ this.jinweidu = res.longitude + ',' + res.latitude this.latitude = Number(res.latitude.toFixed(5)) - 0.004 this.longitude = Number(res.longitude.toFixed(5)) + 0.004 - // this.setMapScale() - // 请求附近的店铺 this.$u.get("/farm/apiary/listNearBy?center=" + this.jinweidu + '&radius=' + 1000).then( res => { if (res.code == 200) { @@ -208,11 +206,9 @@ textShadow: '2px 2px 0px white, -2px -2px 0px white, 2px -2px 0px white, -2px 2px 0px white', borderColor:'#fff', borderRadius:5, - // bgColor: 'rgba(255, 255, 255, 0.7)' } }) - // this.covers.push(shopCover) - }); + }) } }) },