Merge remote-tracking branch 'origin/master'
6 files modified
1 files added
| | |
| | | const basePoints = [ |
| | | [ |
| | | { |
| | | longitude: 114.963191, |
| | | latitude: 27.136716, |
| | | height: 120 |
| | | longitude: 114.964975, |
| | | latitude: 27.134855, |
| | | height: 200 |
| | | }, |
| | | { |
| | | longitude: 114.957308, |
| | | latitude: 27.138452, |
| | | height: 120 |
| | | longitude: 114.963966, |
| | | latitude: 27.132836, |
| | | height: 200 |
| | | }, |
| | | { |
| | | longitude: 114.952, |
| | | latitude: 27.136317, |
| | | height: 120 |
| | | longitude: 114.963966, |
| | | latitude: 27.132836, |
| | | height: 320 |
| | | }, |
| | | { |
| | | longitude: 114.949293, |
| | | latitude: 27.133864, |
| | | height: 120 |
| | | longitude: 114.963974, |
| | | latitude: 27.132677, |
| | | height: 320 |
| | | }, |
| | | { |
| | | longitude: 114.944666, |
| | | latitude: 27.130526, |
| | | height: 120 |
| | | longitude: 114.963432, |
| | | latitude: 27.131665, |
| | | height: 320 |
| | | }, |
| | | { |
| | | longitude: 114.945909, |
| | | latitude: 27.127845, |
| | | height: 120 |
| | | longitude: 114.962865, |
| | | latitude: 27.130377, |
| | | height: 320 |
| | | }, |
| | | { |
| | | longitude: 114.962974, |
| | | latitude: 27.136242, |
| | | longitude: 114.965318, |
| | | latitude: 27.129925, |
| | | height: 320 |
| | | }, |
| | | { |
| | | longitude: 114.960144, |
| | | latitude: 27.134902, |
| | | height: 120 |
| | | }, |
| | | ], |
| | |
| | | height: 120 |
| | | }, |
| | | { |
| | | longitude: 114.925958, |
| | | latitude: 27.096963, |
| | | height: 400 |
| | | }, |
| | | { |
| | | longitude: 114.925836, |
| | | latitude: 27.096102, |
| | | height: 120 |
| | | height: 400 |
| | | }, |
| | | { |
| | | longitude: 114.928384, |
| | | latitude: 27.095866, |
| | | height: 120 |
| | | height: 400 |
| | | }, |
| | | { |
| | | longitude: 114.929874, |
| | | latitude: 27.096095, |
| | | height: 120 |
| | | height: 400 |
| | | }, |
| | | { |
| | | longitude: 114.931048, |
| | | latitude: 27.097666, |
| | | height: 120 |
| | | height: 400 |
| | | }, |
| | | ] |
| | | ] |
| | |
| | | |
| | | const setupDroneTrackClock = () => { |
| | | if (!viewer) return |
| | | const startTime = Cesium.JulianDate.now() |
| | | const now = new Date() |
| | | const noon = new Date(now.getFullYear(), now.getMonth(), now.getDate(), 12, 0, 0, 0) |
| | | const startTime = Cesium.JulianDate.fromDate(noon) |
| | | const stopTime = Cesium.JulianDate.addSeconds(startTime, DRONE_TRACK_DURATION_S, new Cesium.JulianDate()) |
| | | viewer.clock.startTime = startTime |
| | | viewer.clock.stopTime = stopTime |
| | |
| | | const entityId = `online-device-${item.id ?? index}-${index}` |
| | | const rangeMeters = getDeviceRange(item) |
| | | devicePositions.push({ lng: position.longitude, lat: position.latitude }) |
| | | const billboard = deviceBillboardCollection.add({ |
| | | position: Cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, 0), |
| | | image: isOnline ? equipmentIcon : offlineEquipmentIcon, |
| | | width: 40, |
| | | height: 56, |
| | | verticalOrigin: Cesium.VerticalOrigin.BOTTOM, |
| | | }) |
| | | billboard.id = entityId |
| | | devicePickMap.set(entityId, { data: item, billboard }) |
| | | deviceEntries.push({ position, rangeMeters, billboard, isOnline }) |
| | | deviceEntries.push({ position, rangeMeters, isOnline, entityId, data: item }) |
| | | }) |
| | | if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) { |
| | | closePopup() |
| | | } |
| | | if (deviceEntries.length) { |
| | | const heights = await getPointPositionsHeight(devicePositions, viewer) |
| | | deviceEntries.forEach((entry, index) => { |
| | | const height = Number(heights?.[index]?.ASL) |
| | | const centerHeight = Number.isFinite(height) ? height : 0 |
| | | if (entry.billboard) { |
| | | entry.billboard.position = Cesium.Cartesian3.fromDegrees( |
| | | const billboard = deviceBillboardCollection.add({ |
| | | position: Cesium.Cartesian3.fromDegrees( |
| | | entry.position.longitude, |
| | | entry.position.latitude, |
| | | centerHeight |
| | | ) |
| | | } |
| | | ), |
| | | image: entry.isOnline ? equipmentIcon : offlineEquipmentIcon, |
| | | width: 40, |
| | | height: 56, |
| | | verticalOrigin: Cesium.VerticalOrigin.BOTTOM, |
| | | }) |
| | | billboard.id = entry.entityId |
| | | devicePickMap.set(entry.entityId, { data: entry.data, billboard }) |
| | | if (!entry.isOnline) return |
| | | if (!Number.isFinite(entry.rangeMeters) || entry.rangeMeters <= 0) return |
| | | const primitive = createDeviceRangePrimitiveWithHeight(entry.position, entry.rangeMeters, centerHeight) |
| | |
| | | addCockpitPrimitive(primitive) |
| | | deviceRingFillPrimitives.push(primitive) |
| | | }) |
| | | } |
| | | if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) { |
| | | closePopup() |
| | | } |
| | | reorderCockpitPrimitives() |
| | | } |
| | |
| | | const handleDroneSignal = () => emit('droneSignal', selectedDevice.value) |
| | | const handleDroneCounter = () => emit('droneCounter', selectedDevice.value) |
| | | |
| | | const renderCommandPosts = list => { |
| | | const renderCommandPosts = async list => { |
| | | if (!viewer) return |
| | | ensureCommandPostCollection() |
| | | commandPostBillboardCollection.removeAll() |
| | | commandPostBillboardCollection.show = detailVisible.value |
| | | const entries = [] |
| | | const positions = [] |
| | | ; (list || []).forEach((item, index) => { |
| | | const position = getDevicePosition(item) |
| | | if (!position) return |
| | | entries.push({ position, index }) |
| | | positions.push({ lng: position.longitude, lat: position.latitude }) |
| | | }) |
| | | if (positions.length) { |
| | | const heights = await getPointPositionsHeight(positions, viewer) |
| | | entries.forEach((entry, idx) => { |
| | | const height = Number(heights?.[idx]?.ASL) |
| | | const centerHeight = Number.isFinite(height) ? height : 0 |
| | | commandPostBillboardCollection.add({ |
| | | position: Cesium.Cartesian3.fromDegrees(position.longitude, position.latitude, 0), |
| | | position: Cesium.Cartesian3.fromDegrees( |
| | | entry.position.longitude, |
| | | entry.position.latitude, |
| | | centerHeight |
| | | ), |
| | | image: commandPostIcon, |
| | | width: 40, |
| | | height: 56, |
| | | verticalOrigin: Cesium.VerticalOrigin.BOTTOM, |
| | | }) |
| | | }) |
| | | } |
| | | reorderCockpitPrimitives() |
| | | } |
| | | |
| | |
| | | const res = await newDefenseSceneManageList({ |
| | | time: dayjs().format('YYYY-MM-DD HH:mm:ss') |
| | | }) |
| | | renderCommandPosts(res?.data?.data ?? []) |
| | | await renderCommandPosts(res?.data?.data ?? []) |
| | | } catch (error) { |
| | | renderCommandPosts([]) |
| | | await renderCommandPosts([]) |
| | | } |
| | | } |
| | | |
| | |
| | | this.viewer.shadows = false |
| | | this.viewer.shadowMap.darkness = 0.5 |
| | | |
| | | let time = new Date() |
| | | time.setHours(12, 0, 0, 0) |
| | | let utc = Cesium.JulianDate.fromDate(new Date(time)) |
| | | |
| | | this.viewer.clockViewModel.currentTime = Cesium.JulianDate.addHours(utc, 0, new Cesium.JulianDate()) |
| | | this.setFixedNoonLighting() |
| | | |
| | | // 边界,机巢 |
| | | this.boundary = useBoundary(this.viewer, { multiple, dockOptions, boundaryChange, boundaryColor, dockRangeType, useDockHeight }) |
| | |
| | | this.viewer?.imageryLayers.remove(imageryLayers) |
| | | } |
| | | } |
| | | |
| | | setFixedNoonLighting (utcOffsetHours = 8) { |
| | | if (!this.viewer) return |
| | | const now = new Date() |
| | | const utcNoon = Date.UTC( |
| | | now.getUTCFullYear(), |
| | | now.getUTCMonth(), |
| | | now.getUTCDate(), |
| | | 12 - Number(utcOffsetHours || 0), |
| | | 0, |
| | | 0, |
| | | 0 |
| | | ) |
| | | const julian = Cesium.JulianDate.fromDate(new Date(utcNoon)) |
| | | this.viewer.clock.currentTime = julian |
| | | this.viewer.clockViewModel.currentTime = julian |
| | | this.viewer.clock.shouldAnimate = false |
| | | this.viewer.clock.multiplier = 0 |
| | | this.viewer.clockViewModel.multiplier = 0 |
| | | this.viewer.scene.requestRender() |
| | | } |
| | | } |
| | |
| | | }) |
| | | } |
| | | |
| | | // 获取飞手详情 |
| | | export const deviceFlyerDetailApi = (id) => { |
| | | return request({ |
| | | url: `/webservice/webservice/deviceFlyer/queryById/${id}`, |
| | | method: 'get', |
| | | }) |
| | | } |
| | | |
| | | // 获取航线列表 |
| | | export const airlineListApi = (data) => { |
| | | return request({ |
| | |
| | | { required: true, message: '请输入', trigger: 'blur' } |
| | | ], |
| | | flyerPhone: [ |
| | | { required: false, message: '请输入', trigger: 'blur' }, |
| | | { required: true, message: '请输入', trigger: 'blur' }, |
| | | { pattern: /^1[3-9]\d{9}$/, message: '请输入正确的手机号', trigger: 'blur' } |
| | | ], |
| | | flightHours: [ |
| | |
| | | import { getDictionaryByCode } from '@/api/system/dictbiz' |
| | | import { getDictLabel } from '@ztzf/utils' |
| | | import { getFlyingHandPage, removeFlyingHand } from './flyingHandApi' |
| | | import { deviceFlyerApi } from '@/api/zkxt' |
| | | import { deviceFlyerApi,deviceFlyerDetailApi } from '@/api/zkxt' |
| | | import FlyingHandDialog from './FlyingHandDialog.vue' |
| | | import { ElMessage, ElMessageBox } from 'element-plus' |
| | | import { prod } from 'mathjs' |
| | |
| | | // 查看飞手 |
| | | function viewFlyingHand(row) { |
| | | dialogType.value = 'view' |
| | | flyingHandData.value = { ...row } |
| | | dialogVisible.value = true |
| | | if (row.flyerId) { |
| | | deviceFlyerDetailApi(row.flyerId).then(res => { |
| | | flyingHandData.value = { ...row } |
| | | flyingHandData.value.licenseFrontFileUrl = res.data.data.licenseFrontFileUrl |
| | | flyingHandData.value.licenseBackFileUrl = res.data.data.licenseBackFileUrl |
| | | flyingHandData.value.certification = [res.data.data.licenseFrontFileUrl, res.data.data.licenseBackFileUrl] |
| | | dialogVisible.value = true |
| | | }) |
| | | } else { |
| | | flyingHandData.value = { ...row } |
| | | dialogVisible.value = true |
| | | } |
| | | } |
| | | |
| | | // 编辑飞手 |
| | |
| | | // 从本地存储加载记住的密码 |
| | | onMounted(() => { |
| | | const savedUserInfo = uni.getStorageSync("rememberedUser"); |
| | | console.log("记住密码", savedUserInfo); |
| | | if (savedUserInfo) { |
| | | loginForm.value.username = savedUserInfo.username; |
| | | loginForm.value.password = savedUserInfo.password; |
| | |
| | | } |
| | | |
| | | .title { |
| | | font-family: YouSheBiaoTiHei, YouSheBiaoTiHei; |
| | | // font-family: YouSheBiaoTiHei, YouSheBiaoTiHei; |
| | | font-family: "PangMen"; |
| | | font-weight: 400; |
| | | font-size: 52rpx; |
| | | line-height: 82rpx; |