You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
140 lines
3.1 KiB
140 lines
3.1 KiB
|
2 weeks ago
|
/**
|
||
|
|
* 地图状态监听相关的 composable
|
||
|
|
*/
|
||
|
|
import { watch, type Ref } from 'vue'
|
||
|
|
|
||
|
|
interface WatchOptions {
|
||
|
|
showMarkers: Ref<boolean>
|
||
|
|
showTrajectories: Ref<boolean>
|
||
|
|
showFences: Ref<boolean>
|
||
|
|
showDrawFences: Ref<boolean>
|
||
|
|
setMarkersVisible: (visible: boolean) => void
|
||
|
|
setTrajectoriesVisible: (visible: boolean, markers?: any[]) => void
|
||
|
|
setFencesVisible: (visible: boolean) => void
|
||
|
|
toggleFenceDrawing: (
|
||
|
|
isDrawing: boolean,
|
||
|
|
onComplete?: (coordinates: [number, number][]) => void
|
||
|
|
) => void
|
||
|
|
updateMarkers: (markers: any[]) => void
|
||
|
|
markers: any[]
|
||
|
|
}
|
||
|
|
|
||
|
|
export const useMapWatchers = (options: WatchOptions) => {
|
||
|
|
const {
|
||
|
|
showMarkers,
|
||
|
|
showTrajectories,
|
||
|
|
showFences,
|
||
|
|
showDrawFences,
|
||
|
|
setMarkersVisible,
|
||
|
|
setTrajectoriesVisible,
|
||
|
|
setFencesVisible,
|
||
|
|
toggleFenceDrawing,
|
||
|
|
updateMarkers,
|
||
|
|
markers
|
||
|
|
} = options
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置标记显示状态监听器
|
||
|
|
*/
|
||
|
|
const setupMarkersWatcher = () => {
|
||
|
|
return watch(showMarkers, (show) => {
|
||
|
|
if (show) {
|
||
|
|
// 显示标记时,隐藏轨迹
|
||
|
|
if (showTrajectories.value) {
|
||
|
|
showTrajectories.value = false
|
||
|
|
}
|
||
|
|
}
|
||
|
|
setMarkersVisible(show)
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置轨迹显示状态监听器
|
||
|
|
*/
|
||
|
|
const setupTrajectoriesWatcher = () => {
|
||
|
|
return watch(showTrajectories, (show) => {
|
||
|
|
if (show) {
|
||
|
|
// 显示轨迹时,隐藏标记
|
||
|
|
if (showMarkers.value) {
|
||
|
|
showMarkers.value = false
|
||
|
|
}
|
||
|
|
setTrajectoriesVisible(true, markers)
|
||
|
|
} else {
|
||
|
|
setTrajectoriesVisible(false)
|
||
|
|
// 隐藏轨迹时,显示标记
|
||
|
|
if (!showMarkers.value) {
|
||
|
|
showMarkers.value = true
|
||
|
|
}
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置围栏显示状态监听器
|
||
|
|
*/
|
||
|
|
const setupFencesWatcher = () => {
|
||
|
|
return watch(showFences, (show) => {
|
||
|
|
setFencesVisible(show)
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置围栏绘制状态监听器
|
||
|
|
*/
|
||
|
|
const setupDrawFencesWatcher = () => {
|
||
|
|
return watch(showDrawFences, (isDrawing) => {
|
||
|
|
if (!isDrawing) {
|
||
|
|
// 当关闭绘制时,停止绘制操作
|
||
|
|
toggleFenceDrawing(false)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 设置标记数据变化监听器
|
||
|
|
*/
|
||
|
|
const setupMarkersDataWatcher = () => {
|
||
|
|
return watch(
|
||
|
|
markers,
|
||
|
|
(newMarkers) => {
|
||
|
|
if (newMarkers && newMarkers.length > 0) {
|
||
|
|
console.log('Markers data changed, updating markers:', newMarkers.length)
|
||
|
|
updateMarkers(newMarkers)
|
||
|
|
}
|
||
|
|
},
|
||
|
|
{ deep: true, immediate: false }
|
||
|
|
)
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 初始化所有监听器
|
||
|
|
*/
|
||
|
|
const setupAllWatchers = () => {
|
||
|
|
const watchers = [
|
||
|
|
setupMarkersWatcher(),
|
||
|
|
setupTrajectoriesWatcher(),
|
||
|
|
setupFencesWatcher(),
|
||
|
|
setupDrawFencesWatcher(),
|
||
|
|
setupMarkersDataWatcher()
|
||
|
|
]
|
||
|
|
|
||
|
|
// 返回清理函数
|
||
|
|
return () => {
|
||
|
|
watchers.forEach((stopWatcher) => {
|
||
|
|
if (typeof stopWatcher === 'function') {
|
||
|
|
stopWatcher()
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
return {
|
||
|
|
setupMarkersWatcher,
|
||
|
|
setupTrajectoriesWatcher,
|
||
|
|
setupFencesWatcher,
|
||
|
|
setupDrawFencesWatcher,
|
||
|
|
setupMarkersDataWatcher,
|
||
|
|
setupAllWatchers
|
||
|
|
}
|
||
|
|
}
|