| | |
| | | v-model="formData.effectiveRangeKm" |
| | | :min="0" |
| | | :precision="0" |
| | | :step="1" |
| | | :controls="false" |
| | | placeholder="请输入" |
| | | /> |
| | |
| | | import * as Cesium from 'cesium' |
| | | import { saveOperationLog } from '@ztzf/apis' |
| | | import { useRoute } from 'vue-router' |
| | | import { MapTooltip } from '@/utils/cesium/shapeTools/Tooltip' |
| | | |
| | | import equipment from '@/assets/images/dataCockpit/legend/equipment.png' |
| | | |
| | |
| | | let viewer |
| | | let redPointEntity |
| | | let rangeCircleEntity |
| | | let mouseMoveBound = false |
| | | let mapTooltip |
| | | let publicCesium |
| | | const tooltipEventKey = 'detection-range-point-tip' |
| | | const formTitle = computed(() => { |
| | | if (dialogMode.value === 'edit') { |
| | | return '编辑侦测范围' |
| | |
| | | |
| | | function formatRange(value) { |
| | | if (value == null || value === '') return '-' |
| | | return `${value}` |
| | | const normalized = normalizeRange(value) |
| | | return normalized == null ? '-' : `${normalized}` |
| | | } |
| | | |
| | | function normalizeRange(value) { |
| | | const numeric = Number(value) |
| | | if (!Number.isFinite(numeric)) return null |
| | | return Math.trunc(numeric) |
| | | } |
| | | |
| | | // 关闭弹框 |
| | |
| | | submitting.value = true |
| | | try { |
| | | const {longitude, latitude} = parseDeployLocation(formData.value.deployLocation) |
| | | const normalizedRange = normalizeRange(formData.value.effectiveRangeKm) |
| | | |
| | | const payload = { |
| | | id: formData.value.id || formData.value.deviceId || undefined, |
| | | effectiveRangeKmIsNotNull: formData.value.effectiveRangeKm ? 1 : 2, |
| | | effectiveRangeKm: formData.value.effectiveRangeKm, |
| | | effectiveRangeKmIsNotNull: normalizedRange != null ? 1 : 2, |
| | | effectiveRangeKm: normalizedRange, |
| | | longitude, |
| | | latitude |
| | | } |
| | | formData.value.effectiveRangeKm = normalizedRange |
| | | delete payload.deviceId |
| | | await detectionRangeSubmitApi(payload) |
| | | |
| | |
| | | current: 1, |
| | | size: 200, |
| | | effectiveRangeKmIsNotNull: 2, |
| | | isTrack: 1 |
| | | }) |
| | | const records = res?.data?.data?.records ?? [] |
| | | deviceOptions.value = records.map(item => ({ |
| | |
| | | viewer = null |
| | | redPointEntity = null |
| | | rangeCircleEntity = null |
| | | clearPointTooltip() |
| | | } |
| | | |
| | | function setMapPoint(longitude, latitude) { |
| | |
| | | const map = mapRef.value?.getMap() |
| | | if (!map?.viewer) return |
| | | viewer = map.viewer |
| | | publicCesium = map.publicCesium |
| | | if (!dialogReadonly.value) { |
| | | map.publicCesium?.addLeftClickEvent?.(null, handleMapClick) |
| | | ensurePointTooltip() |
| | | } |
| | | } |
| | | |
| | | function ensurePointTooltip() { |
| | | if (!viewer || !publicCesium || mouseMoveBound) return |
| | | mapTooltip ||= new MapTooltip(viewer, { offset: { x: 28, y: 24 } }) |
| | | publicCesium.addMouseHandler?.( |
| | | null, |
| | | movement => { |
| | | if (!visible.value || dialogReadonly.value) return |
| | | mapTooltip?.show('点击地图选择设备位置', movement.endPosition) |
| | | }, |
| | | tooltipEventKey |
| | | ) |
| | | mouseMoveBound = true |
| | | } |
| | | |
| | | function clearPointTooltip() { |
| | | mapTooltip?.hide() |
| | | if (publicCesium && mouseMoveBound) { |
| | | publicCesium.removeMouseHandler?.(tooltipEventKey) |
| | | mouseMoveBound = false |
| | | } |
| | | } |
| | | |
| | |
| | | // 打开弹框 |
| | | async function open({ mode, row } = {}) { |
| | | dialogMode.value = mode || 'add' |
| | | clearPointTooltip() |
| | | await nextTick() |
| | | initMap() |
| | | if (dialogMode.value === 'add') { |
| | |
| | | watch( |
| | | () => formData.value.effectiveRangeKm, |
| | | value => { |
| | | const normalized = normalizeRange(value) |
| | | if (value != null && normalized == null) { |
| | | formData.value.effectiveRangeKm = null |
| | | return |
| | | } |
| | | if (value != null && normalized !== value) { |
| | | formData.value.effectiveRangeKm = normalized |
| | | return |
| | | } |
| | | const parsed = parseDeployLocation(formData.value.deployLocation) |
| | | if (!parsed) return |
| | | updateRangeCircle(parsed.longitude, parsed.latitude, value) |
| | | updateRangeCircle(parsed.longitude, parsed.latitude, normalized) |
| | | } |
| | | ) |
| | | </script> |