import store from '/@/store' import { getRoot } from '/@/root' import { EDeviceTypeName } from '/@/types' import { getDeviceBySn } from '/@/api/manage' import { message } from 'ant-design-vue' import dockIcon from '/@/assets/icons/dock.png' import rcIcon from '/@/assets/icons/rc.png' import droneIcon from '/@/assets/icons/drone.png' import { getWorkspaceId } from '/@/utils/index' export function deviceTsaUpdate() { const root = getRoot() let AMap = root.$aMap const icons = new Map([ [EDeviceTypeName.Aircraft, droneIcon], [EDeviceTypeName.Gateway, rcIcon], [EDeviceTypeName.Dock, dockIcon] ]) const markers = store.state.markerInfo.coverMap const paths = store.state.markerInfo.pathMap let trackLine = null as any function getTrackLineInstance() { if (!trackLine) { trackLine = new AMap.Polyline({ map: root.$map, strokeColor: '#939393' // 线颜色 }) } return trackLine } function initIcon(type: number) { return new AMap.Icon({ image: icons.get(type), imageSize: new AMap.Size(40, 40), size: new AMap.Size(40, 40) }) } function initMarker(type: number, name: string, sn: string, lng?: number, lat?: number) { if (markers[sn]) { return } if (root.$aMap === undefined) { return } AMap = root.$aMap if (type !== EDeviceTypeName.Aircraft) {// 加入判断屏蔽小飞机图标 markers[sn] = new AMap.Marker({ position: new AMap.LngLat(lng || 121.48, lat || 31.22), icon: initIcon(type), title: name, anchor: 'top-center', offset: [0, -20], }) root.$map.add(markers[sn]) } } const removeDeviceMarker = (sn: string) => { if (!markers[sn]) { return } root.$map.remove(markers[sn]) delete markers[sn] } function removeMarker(sn: string) { if (!markers[sn]) { return } root.$map.remove(markers[sn]) getTrackLineInstance().setPath([]) delete markers[sn] delete paths[sn] } function addMarker(sn: string, lng?: number, lat?: number) { getDeviceBySn(getWorkspaceId(), sn) .then(data => { if (data.code !== 0) { message.error(data.message) return } initMarker(data.data.domain, data.data.nickname, sn, lng, lat) }) } function moveTo(sn: string, lng: number, lat: number) { let marker = markers[sn] if (marker) { marker.moveTo([lng, lat], { duration: 1800, autoRotation: true }) } else { addMarker(sn, lng, lat) marker = markers[sn] } } return { marker: markers, initMarker, removeDeviceMarker, removeMarker, moveTo } }