From b80ee8c883f279e843071e6b53ab9cddec3f88a0 Mon Sep 17 00:00:00 2001
From: 胡思旗 <931347610@qq.com>
Date: Tue, 29 Aug 2023 15:07:13 +0800
Subject: [PATCH] 登录流程对接、项目列表组件封装

---
 src/store/index.ts |  145 ++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 134 insertions(+), 11 deletions(-)

diff --git a/src/store/index.ts b/src/store/index.ts
index ac46e37..d3964db 100644
--- a/src/store/index.ts
+++ b/src/store/index.ts
@@ -1,7 +1,12 @@
 import { InjectionKey } from 'vue'
 import { ActionTree, createStore, GetterTree, MutationTree, Store, StoreOptions, useStore } from 'vuex'
+import { EDeviceTypeName } from '../types'
+import { Device, DeviceHms, DeviceOsd, DeviceStatus, DockOsd, GatewayOsd, OSDVisible } from '../types/device'
 import { getLayers } from '/@/api/layer'
 import { LayerType } from '/@/types/mapLayer'
+import { WaylineFile } from '/@/types/wayline'
+import { DevicesCmdExecuteInfo } from '/@/types/device-cmd'
+
 const initStateFunc = () => ({
   Layers: [
     {
@@ -23,12 +28,6 @@
       type: 2
     }
   ],
-  GatewayInfo: { // remote controller, dock
-
-  },
-  DeviceInfo: { // drone
-
-  },
   layerBaseInfo: {} as {
     [key:string]:string
   },
@@ -40,7 +39,57 @@
     mapElementCreat: {},
     mapElementUpdate: {},
     mapElementDelete: {}
-  }
+  },
+  deviceStatusEvent: {
+    deviceOnline: {} as DeviceStatus,
+    deviceOffline: {}
+  },
+  markerInfo: {
+    coverMap: {} as {
+      [sn: string]: any
+    },
+    pathMap: {} as {
+      [sn: string]: any[]
+    }
+  },
+  deviceState: {
+    // remote controller, dock
+    gatewayInfo: {} as {
+      [sn: string]: GatewayOsd
+    },
+    // drone
+    deviceInfo: {} as {
+      [sn: string]: DeviceOsd
+    },
+    dockInfo: {} as {
+      [sn: string]: DockOsd
+    },
+    currentSn: '',
+    currentType: -1
+  },
+  osdVisible: { // osd 显示设备相关信息
+    sn: '',
+    callsign: '',
+    model: '',
+    visible: false,
+    gateway_sn: '',
+    is_dock: false,
+    payloads: null
+  } as OSDVisible,
+  waylineInfo: {
+
+  } as WaylineFile,
+  dockInfo: {
+
+  } as Device,
+  hmsInfo: {} as {
+    [sn: string]: DeviceHms[]
+  },
+  // 机场指令执行状态信息
+  devicesCmdExecuteInfo: {
+  } as DevicesCmdExecuteInfo,
+  mqttState: null as any, // mqtt 实例
+  clientId: '', // mqtt 连接 唯一客户端id
 })
 
 export type RootStateType = ReturnType<typeof initStateFunc>
@@ -52,12 +101,36 @@
     state.Layers = info
   },
   SET_DEVICE_INFO (state, info) {
-    state.DeviceInfo = info
-    // console.log(state.DeviceInfo)
+    state.deviceState.deviceInfo[info.sn] = info.host
+    state.deviceState.currentSn = info.sn
+    state.deviceState.currentType = EDeviceTypeName.Aircraft
   },
   SET_GATEWAY_INFO (state, info) {
-    state.GatewayInfo = info
-    // console.log(state.GatewayInfo)
+    state.deviceState.gatewayInfo[info.sn] = info.host
+    state.deviceState.currentSn = info.sn
+    state.deviceState.currentType = EDeviceTypeName.Gateway
+  },
+  SET_DOCK_INFO (state, info) {
+    if (Object.keys(info.host).length === 0) {
+      return
+    }
+    if (!state.deviceState.dockInfo[info.sn]) {
+      state.deviceState.dockInfo[info.sn] = { } as DockOsd
+    }
+    state.deviceState.currentSn = info.sn
+    state.deviceState.currentType = EDeviceTypeName.Dock
+    const dock = state.deviceState.dockInfo[info.sn]
+    if (info.host.mode_code !== undefined) {
+      dock.basic_osd = info.host
+      return
+    }
+    if (info.host.sdr) {
+      dock.link_osd = info.host
+      return
+    }
+    if (info.host.job_number !== undefined) {
+      dock.work_osd = info.host
+    }
   },
   SET_DRAW_VISIBLE_INFO (state, bool) {
     state.drawVisible = bool
@@ -71,6 +144,56 @@
   SET_MAP_ELEMENT_DELETE (state, info) {
     state.wsEvent.mapElementDelete = info
   },
+  SET_DEVICE_ONLINE (state, info) {
+    state.deviceStatusEvent.deviceOnline = info
+  },
+  SET_DEVICE_OFFLINE (state, info) {
+    state.deviceStatusEvent.deviceOffline = info
+    delete state.deviceState.gatewayInfo[info.sn]
+    delete state.deviceState.deviceInfo[info.sn]
+    delete state.deviceState.dockInfo[info.sn]
+    delete state.hmsInfo[info.sn]
+    // delete state.markerInfo.coverMap[info.sn]
+    // delete state.markerInfo.pathMap[info.sn]
+  },
+  SET_OSD_VISIBLE_INFO (state, info) {
+    state.osdVisible = info
+  },
+  SET_SELECT_WAYLINE_INFO (state, info) {
+    state.waylineInfo = info
+  },
+  SET_SELECT_DOCK_INFO (state, info) {
+    state.dockInfo = info
+  },
+  SET_DEVICE_HMS_INFO (state, info) {
+    const hmsList: Array<DeviceHms> = state.hmsInfo[info.sn]
+    state.hmsInfo[info.sn] = info.host.concat(hmsList ?? [])
+  },
+  SET_DEVICES_CMD_EXECUTE_INFO (state, info) { // 保存设备指令ws消息推送
+    if (!info.sn) {
+      return
+    }
+    if (state.devicesCmdExecuteInfo[info.sn]) {
+      const index = state.devicesCmdExecuteInfo[info.sn].findIndex(cmdExecuteInfo => cmdExecuteInfo.biz_code === info.biz_code)
+      if (index >= 0) {
+        // 丢弃前面的消息
+        if (state.devicesCmdExecuteInfo[info.sn][index].timestamp > info.timestamp) {
+          return
+        }
+        state.devicesCmdExecuteInfo[info.sn][index] = info
+      } else {
+        state.devicesCmdExecuteInfo[info.sn].push(info)
+      }
+    } else {
+      state.devicesCmdExecuteInfo[info.sn] = [info]
+    }
+  },
+  SET_MQTT_STATE (state, mqttState) {
+    state.mqttState = mqttState
+  },
+  SET_CLIENT_ID (state, clientId) {
+    state.clientId = clientId
+  },
 }
 
 const actions: ActionTree<RootStateType, RootStateType> = {

--
Gitblit v1.9.3