From 22a23b05b25e4b5c616f65989ac0ca16324f4c29 Mon Sep 17 00:00:00 2001
From: 罗广辉 <guanghui.luo@foxmail.com>
Date: Mon, 21 Apr 2025 18:23:41 +0800
Subject: [PATCH] Merge branch 'dev' into test
---
src/utils/cesium/mapUtil.js | 14 ++++
src/components/DeviceJobDetails/DeviceJobDetails.vue | 14 ++--
src/const/drc.js | 7 ++
src/store/modules/home.js | 4 +
src/components/CommonWeather.vue | 22 +++---
src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue | 3
src/views/SignMachineNest/SignMachineNest.vue | 21 ------
src/hooks/useMapAggregation/useMapAggregation.js | 21 +-----
Dockerfile.prod | 2
src/api/home/index.js | 6 +-
src/views/Home/Home.vue | 33 +++++++++++
11 files changed, 90 insertions(+), 57 deletions(-)
diff --git a/Dockerfile.prod b/Dockerfile.prod
index 56e4385..ca8b2b3 100644
--- a/Dockerfile.prod
+++ b/Dockerfile.prod
@@ -10,7 +10,7 @@
RUN rm -rf node_modules package-lock.json && npm install --registry=https://registry.npmmirror.com
# 构建项目
-RUN npm run build:test
+RUN npm run build:prod
# 查看
RUN ls /app/dist
\ No newline at end of file
diff --git a/src/api/home/index.js b/src/api/home/index.js
index e5c8ed3..cd3b5d6 100644
--- a/src/api/home/index.js
+++ b/src/api/home/index.js
@@ -124,9 +124,9 @@
// 根据经纬度获取区域code
export const getAreaCodeApi = (params) => {
- return axios({
- url: `https://restapi.amap.com/v3/geocode/regeo`,
- method: 'post',
+ return request({
+ url: `/drone-device-core/map/amap/searchByLatLng?`,
+ method: 'get',
params
})
}
diff --git a/src/components/CommonWeather.vue b/src/components/CommonWeather.vue
index abec0ec..9e260c7 100644
--- a/src/components/CommonWeather.vue
+++ b/src/components/CommonWeather.vue
@@ -6,8 +6,8 @@
<img src="@/assets/images/home/homeLeft/tq.png" alt="" />
<span class="tq">{{ weather }}</span>
<span class="tq">风速:{{ windVelocity }} </span>
- <span v-if="flylevel >= 5" :class="[isFly === '适合飞行' ? 'qk' : isFly === '禁止飞行' ? 'redqk' : 'yellowqk']">{{
- isFly
+ <span v-if="flightAdvice" :class="[flightAdvice === '适合飞行' ? 'qk' : flightAdvice === '禁止飞行' ? 'redqk' : 'yellowqk']">{{
+ flightAdvice
}}</span>
</div>
</div>
@@ -16,6 +16,11 @@
<script setup>
import dayjs from 'dayjs'
import { getDroneSuggest } from '@/api/home/common'
+import { useStore } from 'vuex'
+import { ElMessage } from 'element-plus'
+
+const store = useStore()
+const flySuggest = computed(() => store.state.home.flySuggest)
const time = ref('')
const updateTime = () => {
@@ -24,26 +29,21 @@
// 天气
const weather = ref('')
-// 是否适合飞行
-const isFly = ref('')
+
// 风速
const windVelocity = ref('')
// 区县级
-const flylevel = ref('')
+const flightAdvice = computed(() => flySuggest.value?.flightAdvice)
+
// 获取天气建议
const getWeatherSuggest = () => {
+ // ElMessage.success('wobeichonghzil')
getDroneSuggest().then(res => {
if (res.data.code !== 0) return
weather.value = res.data.data.weather
- isFly.value = res.data.data.flightAdvice
windVelocity.value = res.data.data.windPower
- flylevel.value = res.data.data.adcode.replace(/0+$/, "").length
})
}
-
-
-
-
let intervalTime
onMounted(() => {
diff --git a/src/components/DeviceJobDetails/DeviceJobDetails.vue b/src/components/DeviceJobDetails/DeviceJobDetails.vue
index 4f432ca..3accea9 100644
--- a/src/components/DeviceJobDetails/DeviceJobDetails.vue
+++ b/src/components/DeviceJobDetails/DeviceJobDetails.vue
@@ -18,7 +18,7 @@
<div v-for="(item, index) in infoList" :key="index">
<div class="itemBox">
<div class="itemTitle">{{ item.name }}:</div>
- <div class="itemValue">{{ item.value ? item.value : '' }}</div>
+ <div class="itemValue">{{ item.value ? item.value : '--' }}</div>
</div>
</div>
</div>
@@ -74,7 +74,7 @@
{ name: '任务名称', value: '', field: 'name' },
{ name: '所属单位', value: '', field: 'dept_name' },
{ name: '任务类型', value: '', field: 'industry_type_str' },
- { name: '任务时间', value: '', field: 'begin_time' + ' - ' + 'end_time' },
+ { name: '任务时间', value: '', field: 'cycle_time_value' },
{ name: '飞行事件', value: '', field: 'event_number' },
{ name: '任务频次', value: '', field: 'rep_rule_type rep_rule_val' },
{ name: '任务描述', value: '', field: 'remark' },
@@ -123,14 +123,16 @@
const getDetails = () => {
getJobDetails({ wayLineJobInfoId: wayLineJodInfoId.value }).then(res => {
detailsData.value = res.data.data
+
infoList.value.forEach(item => {
- if (item.name === '任务时间') {
- item.value = detailsData.value.begin_time.slice(0, 10) + '-' + detailsData.value.end_time.slice(0, 10)
- } else if (item.name === '任务频次') {
+ // if (item.name === '任务时间') {
+ // item.value = detailsData.value.begin_time.slice(0, 10) + '-' + detailsData.value.end_time.slice(0, 10)
+ // } else
+ if (item.name === '任务频次') {
const { rep_rule_type = '', rep_rule_val = '' } = detailsData?.value || {}
item.value = rep_rule_type + ' -- ' + rep_rule_val
} else {
- item.value = detailsData.value?.[item.field] || ''
+ item.value = detailsData.value?.[item.field] || '--'
}
})
flystatus.value = res.data.data.ai_type_str
diff --git a/src/const/drc.js b/src/const/drc.js
index 29c7a56..e264b8c 100644
--- a/src/const/drc.js
+++ b/src/const/drc.js
@@ -38,3 +38,10 @@
{name:'悬停',value:'hover',img:hoverImg},
{name:'拍照',value:'takePhoto',img:takePhotoImg},
]
+
+// 地图层级
+export const MAP_LEVEL = [
+ { name: '县',heightRange: [0, 48651], height: 31753},
+ { name: '市',heightRange: [48651, 314863], height: 257731},
+ { name: '省',heightRange: [314863, 3796280000], height: 1987280},
+]
diff --git a/src/hooks/useMapAggregation/useMapAggregation.js b/src/hooks/useMapAggregation/useMapAggregation.js
index d46d74a..739da34 100644
--- a/src/hooks/useMapAggregation/useMapAggregation.js
+++ b/src/hooks/useMapAggregation/useMapAggregation.js
@@ -1,8 +1,7 @@
import * as Cesium from 'cesium'
import aggregationImg from '@/assets/images/home/useUavHome/aggregation.png'
import eventAggregationImg from '@/assets/images/home/useUavHome/eventAggregationImg.png'
-import uavImg from '@/assets/images/home/useUavHome/uavImg.png'
-
+import _ from 'lodash'
import { getEventImage } from '@/utils/stateToImageMap/event'
import { getDroneStatusImage } from '@/utils/stateToImageMap/drone'
@@ -15,6 +14,7 @@
// hook
import { useMapHandlerClick } from '@/hooks/components/useMapHandlerClick'
+import { MAP_LEVEL } from '@/const/drc'
/**
* 机巢聚合功能
@@ -56,19 +56,8 @@
}
})
- let scalingJudgment = [
- { name: '县', splashedList: [], gJson: null, show: false, outline: {}, value: [0, 48651], height: 31753 },
- { name: '市', splashedList: [], gJson: null, show: false, outline: {}, value: [48651, 314863], height: 257731 },
- {
- name: '省',
- splashedList: [],
- gJson: null,
- show: false,
- outline: {},
- value: [314863, 3796280000],
- height: 1987280,
- },
- ]
+ let scalingJudgment = _.cloneDeep(MAP_LEVEL).map(i => ({...i,gJson: null,splashedList:[], show: false, outline: {}}))
+
let viewer = null
let active = null
@@ -100,7 +89,7 @@
// 根据高度展示对应的 gJson
for (let [index, item] of scalingJudgment.entries()) {
if (!item.show) return
- if (height > item.value[0] && height <= item.value[1]) {
+ if (height > item.heightRange[0] && height <= item.heightRange[1]) {
if (active === item.name) return
active = item.name
removeEntities()
diff --git a/src/store/modules/home.js b/src/store/modules/home.js
index 73aa14f..a19f23c 100644
--- a/src/store/modules/home.js
+++ b/src/store/modules/home.js
@@ -15,9 +15,13 @@
eventTimeType: 'day',
eventTimeParams: 'CURRENT_WEEK',
eventTimeRang: '',
+ flySuggest:{},//飞行建议
},
actions: {},
mutations: {
+ setFlySuggest: (state, data) => {
+ state.flySuggest = data;
+ },
setUserAreaPosition: (state, data) => {
setStore({ name: 'userAreaPosition', content: data })
state.userAreaPosition = data;
diff --git a/src/utils/cesium/mapUtil.js b/src/utils/cesium/mapUtil.js
index 73b9fbf..e0230e2 100644
--- a/src/utils/cesium/mapUtil.js
+++ b/src/utils/cesium/mapUtil.js
@@ -366,3 +366,17 @@
offset: new Cesium.HeadingPitchRange(0, 0, boundingSphere.radius * rangeMultiple),
})
}
+
+// 获取视口地图中心点
+export function getMapCenterPoint(viewer) {
+ const centerResult = viewer.camera.pickEllipsoid(
+ new Cesium.Cartesian2(
+ viewer.canvas.clientWidth / 2,
+ viewer.canvas.clientHeight / 2
+ )
+ );
+ const curPosition = Cesium.Ellipsoid.WGS84.cartesianToCartographic(centerResult);
+ const longitude = (curPosition.longitude * 180) / Math.PI;
+ const latitude = (curPosition.latitude * 180) / Math.PI;
+ return { longitude, latitude };
+}
diff --git a/src/views/Home/Home.vue b/src/views/Home/Home.vue
index 0c697e8..e050f03 100644
--- a/src/views/Home/Home.vue
+++ b/src/views/Home/Home.vue
@@ -32,6 +32,11 @@
import cesiumOperation from '@/utils/cesium-tsa'
import EventOverviewDetail from '@/views/Home/EventOverviewDetail/EventOverviewDetail.vue'
import AINowFly from '@/views/Home/AINowFly.vue'
+import { getMapCenterPoint } from '@/utils/cesium/mapUtil'
+import { getAreaCodeApi } from '@/api/home'
+import { getDroneSuggest } from '@/api/home/common'
+import { MAP_LEVEL } from '@/const/drc'
+import _ from 'lodash'
const store = useStore()
const { _init, viewerDestory } = cesiumOperation()
@@ -52,7 +57,35 @@
viewerDestory()
})
+// 获取飞行建议
+function getFlySuggestion(){
+ const viewer = window.$viewer
+ const {longitude,latitude} = getMapCenterPoint(viewer)
+ let height = viewer.camera.positionCartographic.height;
+ if (height > MAP_LEVEL[0].heightRange[1]) {
+ store.commit('setFlySuggest', {})
+ return
+ }
+ const params = { location: longitude + ',' + latitude}
+ getAreaCodeApi(params).then(res => {
+ const { adcode:areaCode } = res.data.data.regeocode.addressComponent
+ if (!areaCode) return
+ return getDroneSuggest({areaCode})
+ }).then(res => {
+ const setFlySuggest = _.pick(res.data.data,['windPower','flightAdvice']) || {}
+ store.commit('setFlySuggest', setFlySuggest)
+ })
+}
+
+onBeforeUnmount(() =>{
+ window.$viewer.camera.moveEnd.removeEventListener(getFlySuggestion);
+})
+
onMounted(() => {
_init('cesium')
+ nextTick(() => {
+ getFlySuggestion()
+ window.$viewer.camera.moveEnd.addEventListener(getFlySuggestion);
+ })
})
</script>
diff --git a/src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue b/src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue
index 860834d..591a78a 100644
--- a/src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue
+++ b/src/views/Home/HomeLeft/InspectionRaskDetails/InspectionRaskDetailsDialog.vue
@@ -107,7 +107,7 @@
</template>
</el-table-column>
<el-table-column show-overflow-tooltip prop="industry_type_str" label="任务类型" />
- <el-table-column prop="begin_time" label="任务时间" width="150" />
+ <el-table-column prop="cycle_time_value" label="任务时间" width="150" />
<el-table-column prop="event_number" label="关联事件">
<template #default="scope">
<span>{{ scope.row.event_number ? scope.row.event_number : '/' }}</span>
@@ -241,6 +241,7 @@
if (res.data.code !== 0) return
taskDetailData.value = res.data.data.records
total.value = res.data.data.total
+
})
}
// 机巢列表数据
diff --git a/src/views/SignMachineNest/SignMachineNest.vue b/src/views/SignMachineNest/SignMachineNest.vue
index 48913f7..2bcff88 100644
--- a/src/views/SignMachineNest/SignMachineNest.vue
+++ b/src/views/SignMachineNest/SignMachineNest.vue
@@ -40,8 +40,8 @@
getDeviceDetail(singleUavHome.value.device_sn).then(res => {
const result = res.data.data
dockDetails.value = result
- const storageObj = _.pick(result, ['latitude', 'longitude'])
- setSingleUavAreaCode(storageObj)
+ const storageObj = _.pick(result, ['latitude', 'longitude']) || {}
+ store.commit('setSingleUavHome',{...singleUavHome.value, ...storageObj})
initDroneEntity({
lng: result.longitude,
lat: result.latitude,
@@ -50,23 +50,6 @@
workspaceId.value = result.workspace_id
})
}
-
-// 设置单机巢得位置信息
-const setSingleUavAreaCode = (position) =>{
- store.commit('setSingleUavHome',{...singleUavHome.value, ...position})
- const params = {
- output:'json',
- location: position.longitude+','+position.latitude,
- key:'6c3ea75b215f0c0efcbcfdf13273991b',
- radius:'0',
- extensions:'base',
- }
- // todo 2025年4月23号 后端提供接口然后对接
- // getAreaCodeApi(params).then(res => {
- // console.log(res,66666666)
- // })
-}
-
// 获取机巢统计数据 提供给左右侧组件使用
const getMachineData = () => {
--
Gitblit v1.9.3