Compare commits

..

No commits in common. "be9fb71e663466b39754bd0953e969260e67c07d" and "2ce3e8c27e80c7bdaf4c193286a3580cac87a3ed" have entirely different histories.

8 changed files with 2816 additions and 1006 deletions

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 96 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 33 KiB

View File

@ -8,8 +8,7 @@
import mapboxgl from 'mapbox-gl'
import { MapboxStyleSwitcherControl, FollowControl, CustomFullscreenControl, NoFlyControl, RestrictflyControl, SaveToFileControl, PolygonToggleControl } from '@/utils/mapboxgl_plugs'
import planeIcon from '@/assets/svg/plane.svg'
import planeRunIcon from '@/assets/svg/plane_run.svg'
import unlineIcon from '@/assets/svg/plane_unline.svg'
// import unlineIcon from '@/assets/svg/plane_unline.svg'
import civilIcon from '@/assets/svg/civil.svg'
export default {
@ -88,22 +87,6 @@ export default {
}
},
watch: {
/** 动态开关全屏控件enableZoom */
enableZoom (val) {
if (!this.map) return
if (val) {
if (!this.fullscreenControlRef) {
const control = new CustomFullscreenControl(this.handleResize)
this.map.addControl(control, 'top-right')
this.fullscreenControlRef = control
}
} else {
if (this.fullscreenControlRef) {
try { this.map.removeControl(this.fullscreenControlRef) } catch (e) { /* noop */ }
this.fullscreenControlRef = null
}
}
},
/** 动态开关地图样式切换控件 */
enableSwitch (val) {
if (!this.map) return
@ -119,6 +102,22 @@ export default {
this.styleSwitcherControlRef = null
}
}
},
/** 动态开关全屏控件enableZoom */
enableZoom (val) {
if (!this.map) return
if (val) {
if (!this.fullscreenControlRef) {
const control = new CustomFullscreenControl(this.handleResize)
this.map.addControl(control, 'top-right')
this.fullscreenControlRef = control
}
} else {
if (this.fullscreenControlRef) {
try { this.map.removeControl(this.fullscreenControlRef) } catch (e) { /* noop */ }
this.fullscreenControlRef = null
}
}
}
},
async mounted () {
@ -254,6 +253,13 @@ export default {
this.map.addControl(this.fullscreenControlRef, 'top-right')
}
//
//
if (this.enableSwitch) {
this.styleSwitcherControlRef = new MapboxStyleSwitcherControl(this.mapStyleList, 'iconfont icon-duozhang f-s-20', this.currentStyleIndex)
this.map.addControl(this.styleSwitcherControlRef, 'top-right')
}
//
if (this.enableFollow) {
this.map.addControl(new FollowControl({
@ -343,13 +349,6 @@ export default {
}
}), 'top-right')
}
//
//
if (this.enableSwitch) {
this.styleSwitcherControlRef = new MapboxStyleSwitcherControl(this.mapStyleList, 'iconfont icon-duozhang f-s-20', this.currentStyleIndex)
this.map.addControl(this.styleSwitcherControlRef, 'top-right')
}
},
/**
* @description 通用地图图层和数据源清除方法
@ -918,15 +917,7 @@ export default {
makePlane (plane, index = 0) {
const customIcon = document.createElement('div')
customIcon.className = 'custom-marker'
// 线
// : online === false 线( undefined/null) 线
const isOnline = !((plane && plane.planeState && plane.planeState.online) === false)
const hasGoods = !!(plane && plane.planeState && plane.planeState.hasGoods)
const iconToUse = !isOnline ? unlineIcon : (hasGoods ? planeRunIcon : planeIcon)
// 使 important
customIcon.style.setProperty('background-image', `url(${iconToUse})`, 'important')
customIcon.style.setProperty('background-repeat', 'no-repeat', 'important')
customIcon.style.setProperty('background-size', 'contain', 'important')
customIcon.style.backgroundImage = `url(${planeIcon})`
customIcon.style.width = '64px'
customIcon.style.height = '64px'
@ -1097,30 +1088,6 @@ export default {
popup.setHTML(popupContent)
}
},
/**
* @description 实时根据在线状态与载重更新指定飞机的图标
* @param {Object} stateObj 飞机状态对象需包含 online, loadweight
* @param {number} index 对应的飞机索引
*/
updatePlaneIcon (stateObj, index = 0) {
const marker = this.planes[index]
if (!marker) return
const el = marker.getElement()
if (!el) return
// : online === false 线( undefined/null) 线
const isOnline = !((stateObj && stateObj.online) === false)
const hasGoods = !!(stateObj && stateObj.hasGoods)
const iconToUse = !isOnline ? unlineIcon : (hasGoods ? planeRunIcon : planeIcon)
// 使 important
el.style.setProperty('background-image', `url(${iconToUse})`, 'important')
el.style.setProperty('background-repeat', 'no-repeat', 'important')
el.style.setProperty('background-size', 'contain', 'important')
//
try {
el.dataset.icon = !isOnline ? 'unline' : (hasGoods ? 'run' : 'normal')
console.debug('[updatePlaneIcon]', { index, online: stateObj && stateObj.online, hasGoods, chosen: el.dataset.icon })
} catch (e) { /* noop */ }
},
/**
* @description: 镜头跳转
* @param {obj} lonLat {lon:lon,lat:lat} 经纬度

View File

@ -394,7 +394,6 @@ const store = new Vuex.Store({
acceState: null, // 加速度计校准状态
getPlaneMode: null, // 飞机模式
loadweight: null, // 重量
hasGoods: false, // 是否有货
hookstatus: null, // 钩子状态
position: [], // [[经度,维度,相对高度]]累计数组
battCapacity: null, // 电池容量

View File

@ -43,19 +43,6 @@ export default {
return Array.isArray(posArr) ? posArr : []
})
},
/**
* @description: 派生出与图标选择强相关的轻量状态供独立 watcher 监控
* offline: 是否离线run: 载重是否超过阈值>300
*/
planeIconStates () {
return this.planeList.map(plane => {
const s = plane.planeState || {}
return {
offline: s.online === false,
run: !!s.hasGoods
}
})
},
/**
* @description: 侧边栏显隐
*/
@ -142,21 +129,6 @@ export default {
},
deep: true
},
// DOM
planeIconStates: {
handler (val, oldVal) {
val.forEach((iconState, index) => {
const prev = Array.isArray(oldVal) ? oldVal[index] : undefined
const changed = !prev || prev.offline !== iconState.offline || prev.run !== iconState.run
if (changed) {
// 使 planeState
const stateObj = this.planeList[index].planeState || {}
this.$refs.mapbox.updatePlaneIcon(stateObj, index)
}
})
},
deep: true
},
/**
* @description: 侧边栏缩进有变化时 地图重新自适应
*/

View File

@ -175,19 +175,8 @@ export default {
*/
isCollapse () {
return this.$store.state.app.isCollapse
},
/**
* @description: 与图标选择强相关的轻量状态仅当前选中飞机
*/
planeIconState () {
const s = this.planeState || {}
return {
offline: s.online === false,
run: !!s.hasGoods
}
}
},
methods: {
/** 切换主视图 */
toggleMainView () {
@ -347,18 +336,6 @@ export default {
},
deep: true
},
// 线/
planeIconState: {
handler (val, oldVal) {
const changed = !oldVal || oldVal.offline !== val.offline || oldVal.run !== val.run
if (changed) {
const stateObj = this.planeState || {}
// MapBox 0
this.$refs.mapbox.updatePlaneIcon(stateObj, 0)
}
},
deep: false
},
/**
* @description: 更新飞机位置 并画出轨迹 跟随飞机
*/

View File

@ -79,20 +79,6 @@ export default {
return Array.isArray(posArr) ? posArr : []
})
},
/**
* @description: 派生出与图标选择强相关的轻量状态供独立 watcher 监控
* offline: 是否离线run: 载重是否超过阈值>300
*/
planeIconStates () {
return this.planeList.map(plane => {
const s = plane.planeState || {}
const n = Number(s.loadweight)
return {
offline: s.online === false,
run: Number.isFinite(n) && n > 300
}
})
},
/**
* @description: 侧边栏显隐
*/
@ -307,20 +293,6 @@ export default {
},
deep: true
},
// DOM
planeIconStates: {
handler (val, oldVal) {
val.forEach((iconState, index) => {
const prev = Array.isArray(oldVal) ? oldVal[index] : undefined
const changed = !prev || prev.offline !== iconState.offline || prev.run !== iconState.run
if (changed) {
const stateObj = this.planeList[index].planeState || {}
this.$refs.mapbox.updatePlaneIcon(stateObj, index)
}
})
},
deep: true
},
//
planePositions: {
handler (allPositions) {

View File

@ -223,11 +223,6 @@ export default {
this.$store.dispatch('fetchLog', { content: `${plane.name}--${jsonData[key]}`, color: '#f57c00' })
} else {
plane.planeState[key] = jsonData[key] //
//
if (key === 'loadweight') {
const n = Number(jsonData[key])
plane.planeState.hasGoods = Number.isFinite(n) && n > 300
}
}
}
} catch (error) {