You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
242 lines
6.4 KiB
242 lines
6.4 KiB
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: [ |
|
{ |
|
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: {} as { |
|
[key:string]:string |
|
}, |
|
drawVisible: false, |
|
coverList: [ |
|
|
|
] as any, |
|
wsEvent: { |
|
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: '' |
|
}, |
|
osdVisible: { |
|
sn: '', |
|
callsign: '', |
|
model: '', |
|
visible: false, |
|
gateway_sn: '', |
|
is_dock: false, |
|
} as OSDVisible, |
|
waylineInfo: { |
|
|
|
} as WaylineFile, |
|
dockInfo: { |
|
|
|
} as Device, |
|
hmsInfo: {} as { |
|
[sn: string]: DeviceHms[] |
|
}, |
|
// 机场指令执行状态信息 |
|
devicesCmdExecuteInfo: { |
|
} as DevicesCmdExecuteInfo |
|
}) |
|
|
|
export type RootStateType = ReturnType<typeof initStateFunc> |
|
|
|
const getters: GetterTree<RootStateType, RootStateType> = { |
|
} |
|
const mutations: MutationTree<RootStateType> = { |
|
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) { |
|
state.deviceState.currentSn = info.sn |
|
state.deviceState.currentType = EDeviceTypeName.Dock |
|
const dock = state.deviceState.dockInfo[info.sn] |
|
if (info.host.sdr && state.deviceState.dockInfo[info.sn]) { |
|
dock.sdr = info.host.sdr |
|
dock.media_file_detail = info.host.media_file_detail |
|
return |
|
} |
|
const sdr = dock?.sdr |
|
const mediaFileDetail = dock?.media_file_detail |
|
state.deviceState.dockInfo[info.sn] = info.host |
|
state.deviceState.dockInfo[info.sn].sdr = sdr |
|
state.deviceState.dockInfo[info.sn].media_file_detail = mediaFileDetail |
|
}, |
|
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: 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] |
|
} |
|
} |
|
} |
|
|
|
const actions: ActionTree<RootStateType, RootStateType> = { |
|
async getAllElement ({ commit }) { |
|
const result = await getLayers({ |
|
groupId: '', |
|
isDistributed: true |
|
}) |
|
commit('SET_LAYER_INFO', result.data?.list) |
|
console.log(result) |
|
}, |
|
updateElement ({ state }, content: {type: 'is_check' | 'is_select', id: string, bool:boolean}) { |
|
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 |
|
} |
|
}, |
|
setLayerInfo ({ state }, layers) { |
|
// const layers = state.Layers |
|
const obj:{ |
|
[key:string]:string |
|
} = {} |
|
layers.forEach(layer => { |
|
if (layer.type === LayerType.Default) { |
|
obj.default = layer.id |
|
} else { |
|
if (layer.type === LayerType.Share) { |
|
obj.share = layer.id |
|
} |
|
} |
|
}) |
|
state.layerBaseInfo = obj |
|
console.log('state.layerBaseInfo', state.layerBaseInfo) |
|
}, |
|
getLayerInfo ({ state }, id:string) { |
|
return state.layerBaseInfo[id] |
|
} |
|
} |
|
|
|
const storeOptions: StoreOptions<RootStateType> = { |
|
state: initStateFunc, |
|
getters, |
|
mutations, |
|
actions |
|
} |
|
|
|
const rootStore = createStore(storeOptions) |
|
|
|
export default rootStore |
|
|
|
export const storeKey: InjectionKey<Store<RootStateType>> = Symbol('') |
|
|
|
type AllStateStoreTypes = RootStateType & { |
|
// moduleName: moduleType |
|
} |
|
|
|
export function useMyStore<T = AllStateStoreTypes> () { |
|
return useStore<T>(storeKey) |
|
}
|
|
|