吉安感知网项目-前端
罗广辉
2026-02-04 22872822d964e4eb611ebab43ff6a78818c475be
Merge remote-tracking branch 'origin/master'
6 files modified
1 files added
173 ■■■■■ changed files
applications/drone-command/src/components/map-container/device-map-container.vue 116 ●●●●● patch | view | raw | blame | history
applications/drone-command/src/utils/cesium/publicCesium.js 27 ●●●● patch | view | raw | blame | history
applications/task-work-order/src/api/zkxt/index.js 8 ●●●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue 2 ●●● patch | view | raw | blame | history
applications/task-work-order/src/views/orderView/flyingHand/index.vue 16 ●●●● patch | view | raw | blame | history
uniapps/work-wx/src/pages/login/index.vue 4 ●●●● patch | view | raw | blame | history
uniapps/work-wx/src/static/fonts/PANGMENZHENGDAOBIAOTITIMIANFEIBAN-2.TTF patch | view | raw | blame | history
applications/drone-command/src/components/map-container/device-map-container.vue
@@ -525,38 +525,43 @@
    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
            },
        ],
@@ -578,24 +583,29 @@
                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
            },
        ]
    ]
@@ -667,7 +677,9 @@
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
@@ -892,32 +904,26 @@
        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)
@@ -926,6 +932,9 @@
            addCockpitPrimitive(primitive)
            deviceRingFillPrimitives.push(primitive)
        })
    }
    if (selectedTargetType.value === 'device' && selectedDeviceBillboard && !devicePickMap.has(selectedDeviceBillboard.id)) {
        closePopup()
    }
    reorderCockpitPrimitives()
}
@@ -1273,22 +1282,37 @@
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()
}
@@ -1308,9 +1332,9 @@
        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([])
    }
}
applications/drone-command/src/utils/cesium/publicCesium.js
@@ -166,11 +166,7 @@
        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 })
@@ -904,4 +900,25 @@
            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()
    }
}
applications/task-work-order/src/api/zkxt/index.js
@@ -28,6 +28,14 @@
    })
}
// 获取飞手详情
export const deviceFlyerDetailApi = (id) => {
    return request({
        url: `/webservice/webservice/deviceFlyer/queryById/${id}`,
        method: 'get',
    })
}
// 获取航线列表
export const airlineListApi = (data) => {
    return request({
applications/task-work-order/src/views/orderView/flyingHand/FlyingHandDialog.vue
@@ -269,7 +269,7 @@
        { 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: [
applications/task-work-order/src/views/orderView/flyingHand/index.vue
@@ -113,7 +113,7 @@
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'
@@ -178,8 +178,18 @@
// 查看飞手
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
    }
}
// 编辑飞手
uniapps/work-wx/src/pages/login/index.vue
@@ -159,7 +159,6 @@
// 从本地存储加载记住的密码
onMounted(() => {
  const savedUserInfo = uni.getStorageSync("rememberedUser");
  console.log("记住密码", savedUserInfo);
  if (savedUserInfo) {
    loginForm.value.username = savedUserInfo.username;
    loginForm.value.password = savedUserInfo.password;
@@ -206,7 +205,8 @@
  }
  .title {
    font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
    // font-family: YouSheBiaoTiHei, YouSheBiaoTiHei;
    font-family: "PangMen";
    font-weight: 400;
    font-size: 52rpx;
    line-height: 82rpx;
uniapps/work-wx/src/static/fonts/PANGMENZHENGDAOBIAOTITIMIANFEIBAN-2.TTF
Binary files differ