forked from drone/command-center-dashboard

shuishen
2025-04-16 0fd2c8cdc1f95d6f03c804f0062340134cace01d
feat:新增事件列表---点位上图及调用
3 files modified
256 ■■■■■ changed files
src/api/home/machineNest.js 83 ●●●●● patch | view | raw | blame | history
src/hooks/useSingleDroneMap/useSingleDroneMap.js 4 ●●● patch | view | raw | blame | history
src/views/SignMachineNest/SignMachineNest.vue 169 ●●●●● patch | view | raw | blame | history
src/api/home/machineNest.js
@@ -2,60 +2,69 @@
// 机巢统计
export const getDeviceInfoNum = params => {
    return request({
        url: '/drone-device-core/manage/api/v1/devices/getDeviceInfoNum',
        method: 'get',
        params,
    })
  return request({
    url: '/drone-device-core/manage/api/v1/devices/getDeviceInfoNum',
    method: 'get',
    params,
  })
}
// 机巢列表
export const selectDevicePage = ({ nickname, ...params }) => {
    return request({
        url: `/drone-device-core/manage/api/v1/devices/selectDevicePage?type=${params.type}&current=${params.current}&size=${params.size}`,
        method: 'post',
        data: {
            nickname,
        },
    })
  return request({
    url: `/drone-device-core/manage/api/v1/devices/selectDevicePage?type=${params.type}&current=${params.current}&size=${params.size}`,
    method: 'post',
    data: {
      nickname,
    },
  })
}
// 机巢数据
export const getFlightStatistics = dockSn => {
    return request({
        url: `/drone-device-core/manage/api/v1/devices/getFlightStatistics?dockSn=${dockSn}`,
        method: 'get',
        params: {},
    })
  return request({
    url: `/drone-device-core/manage/api/v1/devices/getFlightStatistics?dockSn=${dockSn}`,
    method: 'get',
    params: {},
  })
}
// 机巢直播/无人机直播 均可使用
export const liveStart = (deviceSn, quality) => {
    return request({
        url: `/drone-device-core/manage/api/v1/live/streams/liveStart?deviceSn=${deviceSn}&quality=${quality}`,
        method: 'post',
        data: {},
        headers: {
            areaCode: '',
        },
    })
  return request({
    url: `/drone-device-core/manage/api/v1/live/streams/liveStart?deviceSn=${deviceSn}&quality=${quality}`,
    method: 'post',
    data: {},
    headers: {
      areaCode: '',
    },
  })
}
// 单个机巢获取机巢详情
export const getDeviceDetail = deviceSn => {
    return request({
        url: `/drone-device-core/manage/api/v1/devices/getDeviceDetail?deviceSn=${deviceSn}`,
        method: 'get',
        params: {},
    })
  return request({
    url: `/drone-device-core/manage/api/v1/devices/getDeviceDetail?deviceSn=${deviceSn}`,
    method: 'get',
    params: {},
  })
}
// 设备-事件列表
export const getDeviceEventList = (data,params) => {
    return request({
        url: `/drone-device-core/jobEvent/eventPage`,
        method: 'post',
        data,
        params
    })
export const getDeviceEventList = (data, params) => {
  return request({
    url: `/drone-device-core/jobEvent/eventPage`,
    method: 'post',
    data,
    params
  })
}
// 事件列表---点位上图
export const getEventList = (data, params) => {
  return request({
    url: '/drone-device-core/jobEvent/eventList',
    method: 'post',
    data,
    params
  })
}
src/hooks/useSingleDroneMap/useSingleDroneMap.js
@@ -2,7 +2,7 @@
 * @Author: shuishen 1109946754@qq.com
 * @Date: 2025-04-15 22:41:40
 * @LastEditors: shuishen 1109946754@qq.com
 * @LastEditTime: 2025-04-16 18:31:11
 * @LastEditTime: 2025-04-16 18:38:00
 * @FilePath: \command-center-dashboard\src\hooks\useSingleDroneMap\useSingleDroneMap.js
 * @Description: 
 * 
@@ -212,8 +212,6 @@
  const init = () => {
    viewer = window.$viewer
    console.log(viewer, window, 111111)
    handlerInit()
  }
src/views/SignMachineNest/SignMachineNest.vue
@@ -1,98 +1,119 @@
<template>
  <MachineLeft></MachineLeft>
  <MachineRight></MachineRight>
    <MachineLeft></MachineLeft>
    <MachineRight></MachineRight>
</template>
<script setup>
import MachineLeft from '@/views/SignMachineNest/MachineLeft/MachineLeft.vue'
import MachineRight from '@/views/SignMachineNest/MachineRight/MachineRight.vue';
import { useConnectWebSocket } from '@/utils/websocket/connect-websocket';
import { getWebsocketUrl } from '@/websocket/util/config';
import { EBizCode } from '@/utils/staticData/enums.js';
import { EModeCode } from '@/utils/staticData/device.js';
import { useStore } from 'vuex';
import { getDeviceDetail, getFlightStatistics } from '@/api/home/machineNest';
import MachineRight from '@/views/SignMachineNest/MachineRight/MachineRight.vue'
import { useConnectWebSocket } from '@/utils/websocket/connect-websocket'
import { getWebsocketUrl } from '@/websocket/util/config'
import { EBizCode } from '@/utils/staticData/enums.js'
import { EModeCode } from '@/utils/staticData/device.js'
import { useStore } from 'vuex'
import { getDeviceDetail, getFlightStatistics, getEventList } from '@/api/home/machineNest'
import { useSingleDroneMap } from '@/hooks/useSingleDroneMap/useSingleDroneMap'
const store = useStore();
let connectWs = ref(null);
const store = useStore()
let connectWs = ref(null)
// 单个机巢信息
const singleUavHome = computed(() => store.state.home.singleUavHome);
const singleUavHome = computed(() => store.state.home.singleUavHome)
const selectedAreaCode = computed(() => store.state.user.selectedAreaCode)
let osdVisible = ref({});
let osdVisible = ref({})
let workspaceId = ref('');
let workspaceId = ref('')
// 进入单个机巢开始连接ws
const createWsConntect = () => {
  let webSorketUrl = getWebsocketUrl() + '&workspace-id=' + workspaceId.value;
  // 监听ws 消息
  connectWs.value = useConnectWebSocket(messageHandler, webSorketUrl);
};
    let webSorketUrl = getWebsocketUrl() + '&workspace-id=' + workspaceId.value
    // 监听ws 消息
    connectWs.value = useConnectWebSocket(messageHandler, webSorketUrl)
}
const messageHandler = (result) => {
  let payload = JSON.parse(result) // 为了兼容聊天消息
  if (!payload) return
  switch (payload.biz_code) {
    case EBizCode.GatewayOsd: {
      store.commit('setGatewayInfo', payload.data)
      break
    }
    case EBizCode.DeviceOsd: {
      // console.log(payload, 'DeviceOsd')
      store.commit('setDeviceInfo', payload)
      store.commit('setWsMessage', payload)
      break
    }
    case EBizCode.DockOsd: {
      store.commit('setDockOnfo', payload.data)
      break
    }
    default:
          break
  }
};
const messageHandler = result => {
    let payload = JSON.parse(result) // 为了兼容聊天消息
    if (!payload) return
    switch (payload.biz_code) {
        case EBizCode.GatewayOsd: {
            store.commit('setGatewayInfo', payload.data)
            break
        }
        case EBizCode.DeviceOsd: {
            // console.log(payload, 'DeviceOsd')
            store.commit('setDeviceInfo', payload)
            store.commit('setWsMessage', payload)
            break
        }
        case EBizCode.DockOsd: {
            store.commit('setDockOnfo', payload.data)
            break
        }
        default:
            break
    }
}
// 单机巢初始化及事件撒点
const { init, initEventLayer, initDroneEntity } = useSingleDroneMap({
    eventApi: getEventList,
    eventApiParams: {
        device_sn: singleUavHome.value.device_sn,
    },
})
// 获取单个机巢信息
const getSingleDetails = () => {
  getDeviceDetail(singleUavHome.value.device_sn).then((res) => {
    if (res.data.code !== 0) return;
    const result = res.data.data;
    const child = result.children;
    // 对应store 里面数据结构
    osdVisible.value.sn = child?.device_sn || ''
    osdVisible.value.callsign = child?.nickname || '--'
    osdVisible.value.model = EModeCode.Disconnected || ''
    osdVisible.value.visible = true
    osdVisible.value.gateway_sn = result?.device_sn || ''
    osdVisible.value.is_dock = true
    osdVisible.value.gateway_callsign = result?.callsign || '--'
    osdVisible.value.payloads = child?.payloads_list || []
    osdVisible.value.device_domain = child.domain || 0
    osdVisible.value.device_sub_type = child.sub_type || 1
    osdVisible.value.device_type = child.type || 0
    // osdVisible.value.latest_wayline_job = result?.latest_wayline_job || {}
    store.commit('setOsdVisibleInfo', osdVisible.value);
    store.commit('setSelectedWorkSpaceId', result.workspace_id);
    workspaceId.value = result.workspace_id;
    createWsConntect();
  });
};
    getDeviceDetail(singleUavHome.value.device_sn).then(res => {
        if (res.data.code !== 0) return
        const result = res.data.data
        initDroneEntity({
            lng: result.longitude,
            lat: result.latitude,
            status: result.status,
        })
        const child = result.children
        // 对应store 里面数据结构
        osdVisible.value.sn = child?.device_sn || ''
        osdVisible.value.callsign = child?.nickname || '--'
        osdVisible.value.model = EModeCode.Disconnected || ''
        osdVisible.value.visible = true
        osdVisible.value.gateway_sn = result?.device_sn || ''
        osdVisible.value.is_dock = true
        osdVisible.value.gateway_callsign = result?.callsign || '--'
        osdVisible.value.payloads = child?.payloads_list || []
        osdVisible.value.device_domain = child.domain || 0
        osdVisible.value.device_sub_type = child.sub_type || 1
        osdVisible.value.device_type = child.type || 0
        // osdVisible.value.latest_wayline_job = result?.latest_wayline_job || {}
        store.commit('setOsdVisibleInfo', osdVisible.value)
        store.commit('setSelectedWorkSpaceId', result.workspace_id)
        workspaceId.value = result.workspace_id
        createWsConntect()
    })
}
// 获取机巢统计数据 提供给左右侧组件使用
const getMachineData = () => {
  getFlightStatistics(singleUavHome.value.device_sn).then(res => {
    if (res.data.code !== 0) return;
    const result = res.data.data;
    store.commit('setSingleTotal', result);
  })
};
    getFlightStatistics(singleUavHome.value.device_sn).then(res => {
        if (res.data.code !== 0) return
        const result = res.data.data
        store.commit('setSingleTotal', result)
    })
}
onMounted(() => {
  getSingleDetails();
  getMachineData();
});
    nextTick(() => {
        init()
    })
    initEventLayer()
    getSingleDetails()
    getMachineData()
})
onUnmounted(() => {
  connectWs?.value?.close();
});
    connectWs?.value?.close()
})
</script>