|  |  |  | 
|---|
|  |  |  | import * as Http from './http'; | 
|---|
|  |  |  | import WebSocketClient from './websocket' | 
|---|
|  |  |  | import ConfirmButton from "../page/components/ConfirmButton"; | 
|---|
|  |  |  | import { FitScreen } from '@mui/icons-material'; | 
|---|
|  |  |  | import { FitScreen, AltRoute } from '@mui/icons-material'; | 
|---|
|  |  |  | import MapSearch from "./header/MapSearch"; | 
|---|
|  |  |  | import { startupOrShutdown } from "./http"; | 
|---|
|  |  |  | import PulseSignal from "../page/components/PulseSignal"; | 
|---|
|  |  |  | 
|---|
|  |  |  | const [batchSprites, setBatchSprites] = useState([]); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const [rcsStatus, setRcsStatus] = useState(null); | 
|---|
|  |  |  | const [showRoutes, setShowRoutes] = useState(false); | 
|---|
|  |  |  | const [curZone, setCurZone] = useState(() => { | 
|---|
|  |  |  | const storedValue = localStorage.getItem('curZone'); | 
|---|
|  |  |  | return storedValue !== null ? JSON.parse(storedValue) : null; | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const switchMode = (mode) => { | 
|---|
|  |  |  | Tool.removeSelectedEffect(); | 
|---|
|  |  |  | player.hideGridLines(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | setInsightVisible(false); | 
|---|
|  |  |  | setDeviceVisible(false); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | switch (mode) { | 
|---|
|  |  |  | case MAP_MODE.OBSERVER_MODE: | 
|---|
|  |  |  | player.hideGridLines(); | 
|---|
|  |  |  | player.hideStarryBackground(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | player.activateMapMultiSelect((selectedSprites, restartFn) => { | 
|---|
|  |  |  | Tool.multipleSelectEnhancer(selectedSprites, setCurSprite, setBatchSprites); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case MAP_MODE.MOVABLE_MODE: | 
|---|
|  |  |  | player.showGridLines(); | 
|---|
|  |  |  | player.hideStarryBackground(); | 
|---|
|  |  |  | Tool.hideRoutes(curZone, setShowRoutes); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | player.activateMapMultiSelect((selectedSprites, restartFn) => { | 
|---|
|  |  |  | Tool.spriteListBeMovable(selectedSprites, () => { | 
|---|
|  |  |  | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case MAP_MODE.SETTINGS_MODE: | 
|---|
|  |  |  | player.hideGridLines(); | 
|---|
|  |  |  | // player.showStarryBackground(); // 0x2f68ac | 
|---|
|  |  |  |  | 
|---|
|  |  |  | player.activateMapMultiSelect((selectedSprites, restartFn) => { | 
|---|
|  |  |  | Tool.multipleSelectEnhancer(selectedSprites, setCurSprite, setBatchSprites); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | 
|---|
|  |  |  | gap: 1 | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | {mode !== MAP_MODE.MOVABLE_MODE && ( | 
|---|
|  |  |  | <Fab | 
|---|
|  |  |  | variant="extended" | 
|---|
|  |  |  | color={showRoutes ? 'inherit' : 'primary'} | 
|---|
|  |  |  | size="small" | 
|---|
|  |  |  | onClick={() => { | 
|---|
|  |  |  | showRoutes ? Tool.hideRoutes(curZone, setShowRoutes) : Tool.showRoutes(curZone, setShowRoutes) | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <AltRoute /> | 
|---|
|  |  |  | </Fab> | 
|---|
|  |  |  | )} | 
|---|
|  |  |  | <Fab | 
|---|
|  |  |  | variant="extended" | 
|---|
|  |  |  | color="primary" | 
|---|
|  |  |  | size="medium" | 
|---|
|  |  |  | size="small" | 
|---|
|  |  |  | onClick={() => { | 
|---|
|  |  |  | player.adaptScreen(); | 
|---|
|  |  |  | }} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | <FitScreen /> | 
|---|
|  |  |  |  {translate('page.map.action.adapt')} | 
|---|
|  |  |  | {/*  {translate('page.map.action.adapt')} */} | 
|---|
|  |  |  | </Fab> | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | </Box> | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  | import * as PIXI from 'pixi.js'; | 
|---|
|  |  |  | import { DEVICE_TYPE, POINT_ROUTE_DIRECTION } from "./constants"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export default class PointRoute extends PIXI.Graphics { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | startSprite; | 
|---|
|  |  |  | endSprite; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | direction; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | type; | 
|---|
|  |  |  | no; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | constructor(direction) { | 
|---|
|  |  |  | super(); | 
|---|
|  |  |  | this.direction = direction ? direction : POINT_ROUTE_DIRECTION.OUT_OF_ORDER; | 
|---|
|  |  |  | // this.data = { | 
|---|
|  |  |  | //     type: DEVICE_TYPE.ROUTE | 
|---|
|  |  |  | // }; | 
|---|
|  |  |  | this.type = DEVICE_TYPE.ROUTE; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | style() { | 
|---|
|  |  |  | const scale = 1; | 
|---|
|  |  |  | this.clear(); | 
|---|
|  |  |  | this.lineStyle(1.5, 0x2d3436); | 
|---|
|  |  |  | this.moveTo(this.startSprite.x * scale, this.startSprite.y * scale); | 
|---|
|  |  |  | this.lineTo(this.endSprite.x * scale, this.endSprite.y * scale); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | setPoint(startSprite, endSprite) { | 
|---|
|  |  |  | this.startSprite = startSprite; | 
|---|
|  |  |  | this.endSprite = endSprite; | 
|---|
|  |  |  | // this.data.no = this.startSprite?.data?.no + "-" + this.endSprite?.data?.no; | 
|---|
|  |  |  | this.no = this.startSprite?.data?.no + "-" + this.endSprite?.data?.no; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | update(dragSprite) { | 
|---|
|  |  |  | const scale = 1; | 
|---|
|  |  |  | this.clear(); | 
|---|
|  |  |  | this.lineStyle(1.5, 0x2d3436); | 
|---|
|  |  |  | if (dragSprite === this.startSprite) { | 
|---|
|  |  |  | this.moveTo(dragSprite.position.x * scale, dragSprite.position.y * scale); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.moveTo(this.startSprite.position.x * scale, this.startSprite.position.y * scale); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (dragSprite === this.endSprite) { | 
|---|
|  |  |  | this.lineTo(dragSprite.position.x * scale, dragSprite.position.y * scale); | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | this.lineTo(this.endSprite.position.x * scale, this.endSprite.position.y * scale); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | about(sprite) { | 
|---|
|  |  |  | return sprite === this.startSprite || sprite === this.endSprite; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | has(startSprite, endSprite) { | 
|---|
|  |  |  | let res = false; | 
|---|
|  |  |  | switch (this.direction) { | 
|---|
|  |  |  | case POINT_ROUTE_DIRECTION.OUT_OF_ORDER: | 
|---|
|  |  |  | if (startSprite === this.startSprite) { | 
|---|
|  |  |  | if (endSprite === this.endSprite) { | 
|---|
|  |  |  | res = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (startSprite === this.endSprite) { | 
|---|
|  |  |  | if (endSprite === this.startSprite) { | 
|---|
|  |  |  | res = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case POINT_ROUTE_DIRECTION.ORDER: | 
|---|
|  |  |  | if (startSprite === this.startSprite) { | 
|---|
|  |  |  | if (endSprite === this.endSprite) { | 
|---|
|  |  |  | res = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break | 
|---|
|  |  |  | case POINT_ROUTE_DIRECTION.REVERSE_ORDER: | 
|---|
|  |  |  | if (startSprite === this.endSprite) { | 
|---|
|  |  |  | if (endSprite === this.startSprite) { | 
|---|
|  |  |  | res = true; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | break | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return res; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | OBSERVER_MODE: "1", | 
|---|
|  |  |  | MOVABLE_MODE: "2", | 
|---|
|  |  |  | SETTINGS_MODE: "3", | 
|---|
|  |  |  | ROADMAP_MODE: "4", | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const DEVICE_TYPE = Object.freeze({ | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | AGV: "AGV", | 
|---|
|  |  |  | POINT: "POINT", | 
|---|
|  |  |  |  | 
|---|
|  |  |  | ROUTE: "ROUTE", | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const DEVICE_Z_INDEX = Object.freeze({ | 
|---|
|  |  |  | 
|---|
|  |  |  | LOADED_NO_BATTERY: 4, | 
|---|
|  |  |  | LOADED_HALF_BATTERY: 5, | 
|---|
|  |  |  | LOADED_FULL_BATTERY: 6, | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const POINT_ROUTE_DIRECTION = Object.freeze({ | 
|---|
|  |  |  | OUT_OF_ORDER: 0, | 
|---|
|  |  |  | ORDER: 1, | 
|---|
|  |  |  | REVERSE_ORDER: 2, | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | 
|---|
|  |  |  | mapContainer.children.forEach(child => { | 
|---|
|  |  |  | if (child.data?.uuid) { | 
|---|
|  |  |  | const { type, uuid, no, ...property } = child.data; | 
|---|
|  |  |  | if (type !== DEVICE_TYPE.AGV && type !== DEVICE_TYPE.POINT) { | 
|---|
|  |  |  | if (type !== DEVICE_TYPE.AGV && type !== DEVICE_TYPE.POINT && type !== DEVICE_TYPE.ROUTE) { | 
|---|
|  |  |  | sprites.push({ | 
|---|
|  |  |  | // graph | 
|---|
|  |  |  | positionX: child.position.x, | 
|---|
|  |  |  | 
|---|
|  |  |  | DEVICE_SPRITE_TINT, | 
|---|
|  |  |  | DEVICE_SELECTED_EFFECT_PADDING, | 
|---|
|  |  |  | DEVICE_SELECTED_EFFECT_COLOR, | 
|---|
|  |  |  | POINT_ROUTE_DIRECTION, | 
|---|
|  |  |  | } from './constants'; | 
|---|
|  |  |  | import { getRouteList } from './http'; | 
|---|
|  |  |  | import PointRoute from "./PointRoute"; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import shelf from '/map/shelf.svg'; | 
|---|
|  |  |  | import charge from '/map/charge.svg'; | 
|---|
|  |  |  | 
|---|
|  |  |  | effectCircle.position.set(selectedSprite.x, selectedSprite.y); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const showRoutes = (curZone, setShowRoutes) => { | 
|---|
|  |  |  | setShowRoutes(true); | 
|---|
|  |  |  | getRouteList(curZone, (routeList) => { | 
|---|
|  |  |  | routeList.forEach(route => { | 
|---|
|  |  |  | const startPoint = querySprite(DEVICE_TYPE.POINT, route.startCodeStr); | 
|---|
|  |  |  | const endPoint = querySprite(DEVICE_TYPE.POINT, route.endCodeStr); | 
|---|
|  |  |  | const pointRoute = new PointRoute(POINT_ROUTE_DIRECTION[route.direction]); | 
|---|
|  |  |  | pointRoute.setPoint(startPoint, endPoint); | 
|---|
|  |  |  | pointRoute.clear(); | 
|---|
|  |  |  | pointRoute.lineStyle(10, 0x2d3436); | 
|---|
|  |  |  | pointRoute.moveTo(startPoint.position.x, startPoint.position.y); | 
|---|
|  |  |  | pointRoute.lineTo(endPoint.position.x, endPoint.position.y); | 
|---|
|  |  |  | pointRoute.alpha = 1; | 
|---|
|  |  |  | mapContainer.addChild(pointRoute); | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const hideRoutes = (curZone, setShowRoutes) => { | 
|---|
|  |  |  | setShowRoutes(false); | 
|---|
|  |  |  | for (let i = mapContainer.children.length - 1; i >= 0; i--) { | 
|---|
|  |  |  | const child = mapContainer.children[i]; | 
|---|
|  |  |  | if (child?.type === DEVICE_TYPE.ROUTE) { | 
|---|
|  |  |  | mapContainer.removeChild(child); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const multipleSelectEnhancer = (selectedSprites, setCurSprite, setBatchSprites) => { | 
|---|
|  |  |  | selectedSprites = selectedSprites.filter(sprite => sprite.data?.type); | 
|---|
|  |  |  |  | 
|---|