import { EDeviceTypeName } from '@/types'; const initStateFunc = () => ({ Layers: [ { name: 'default', id: '', is_distributed: true, elements: [], is_check: false, is_select: false, type: 1, }, { name: 'share', id: '', is_distributed: true, elements: [], is_check: false, is_select: false, type: 2, }, ], layerBaseInfo: {}, drawVisible: false, coverList: [], wsEvent: { mapElementCreat: {}, mapElementUpdate: {}, mapElementDelete: {}, }, deviceStatusEvent: { deviceOnline: {}, deviceOffline: {}, }, markerInfo: { coverMap: {}, pathMap: {}, }, deviceState: { // remote controller, dock gatewayInfo: {}, // drone deviceInfo: {}, dockInfo: {}, currentSn: '', currentType: -1, }, osdVisible: { // osd 显示设备相关信息 sn: '', callsign: '', model: '', visible: false, gateway_sn: '', is_dock: false, payloads: null, device_domain: '', device_sub_type: '', device_type: '', }, waylineInfo: {}, dockInfo: {}, hmsInfo: {}, hmsInfoDetailSn: '', // 机场指令执行状态信息 devicesCmdExecuteInfo: {}, mqttState: null, // mqtt 实例 clientId: '', // mqtt 连接 唯一客户端id, waylineTool: { isShow: false, selectedPoint: undefined, selectedAction: undefined, kmzPath: '', }, }); const mutations = { SET_LAYER_INFO(state, info) { state.Layers = info; }, SET_DEVICE_INFO(state, info) { state.deviceState.deviceInfo[info.sn] = info.host; state.deviceState.currentSn = info.sn; state.deviceState.currentType = EDeviceTypeName.Aircraft; }, SET_GATEWAY_INFO(state, info) { 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] = {}; } 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_HMSInfo_DetailSn(state, data) { state.hmsInfoDetailSn = data; }, SET_DRAW_VISIBLE_INFO(state, bool) { state.drawVisible = bool; }, SET_MAP_ELEMENT_CREATE(state, info) { state.wsEvent.mapElementCreat = info; }, SET_MAP_ELEMENT_UPDATE(state, info) { state.wsEvent.mapElementUpdate = info; }, 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 = 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; }, // 设置wayline中的信息 SET_WAYLINE_INFO(state, { isShow, selectedPoint, selectedAction }) { isShow !== undefined && (state.waylineTool.isShow = isShow); state.waylineTool.selectedPoint = selectedPoint; selectedAction !== undefined && (state.waylineTool.selectedAction = selectedAction); }, SET_WAYLINE_KMZPATH(state, kmzPath) { state.waylineTool.kmzPath = kmzPath; }, }; const actions = { updateElement({ state }, content) { const key = content.id.replaceAll('resource__', ''); const type = content.type; const layers = state.Layers; const layer = layers.find(item => item.id === key); if (layer) { layer[type] = content.bool; } }, getLayerInfo({ state }, id) { return state.layerBaseInfo[id]; }, }; const device = { state: initStateFunc, mutations, actions, }; export default device;