From 4cbeb181378a123c1905fa318cf61bdcfb144b8e Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期五, 11 十月 2024 09:43:48 +0800
Subject: [PATCH] #
---
zy-acs-flow/src/map/MapPage.jsx | 176 ++++++++++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 158 insertions(+), 18 deletions(-)
diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx
index decde65..a0688d7 100644
--- a/zy-acs-flow/src/map/MapPage.jsx
+++ b/zy-acs-flow/src/map/MapPage.jsx
@@ -1,4 +1,5 @@
import React, { useState, useRef, useEffect, useMemo } from "react";
+import { useTranslate } from "react-admin";
import {
TextField,
Select,
@@ -21,20 +22,33 @@
import Player from './player';
import * as Tool from './tool';
import { NotificationProvider, useNotification } from './Notification';
+import Insight from "./insight";
+import Device from "./Device";
+import Settings from "./settings";
+import * as Http from './http';
+import WebSocketClient from './websocket'
let player;
+let websocket;
const Map = () => {
+ const notify = useNotification();
+ const translate = useTranslate();
+ const theme = useTheme();
+ const themeMode = theme.palette.mode;
+
const mapRef = useRef();
const contentRef = useRef();
const [app, setApp] = useState(null);
const [mapContainer, setMapContainer] = useState(null);
- const notify = useNotification();
const [mode, setMode] = useState(MapMode.OBSERVER_MODE);
+ const [insightVisible, setInsightVisible] = useState(false);
+ const [deviceVisible, setDeviceVisible] = useState(false);
+ const [settingsVisible, setSettingsVisible] = useState(false);
- const theme = useTheme();
- const themeMode = theme.palette.mode;
+ const [spriteSettings, setSpriteSettings] = useState(null);
+ const prevSpriteSettingsRef = React.useRef();
useEffect(() => {
Tool.patchRaLayout('0px');
@@ -44,6 +58,15 @@
setMapContainer(player.mapContainer);
Tool.setApp(player.app);
Tool.setMapContainer(player.mapContainer);
+ Tool.setThemeMode(themeMode);
+ Http.setNotify(notify);
+ // websocket = new WebSocketClient('/ws/map/websocket');
+
+ await Http.fetchMapData(0);
+ // websocket.connect();
+ // websocket.onMessage = (data) => {
+ // Tool.updateMapStatusInRealTime(data, () => curFloorRef.current, setCurSPrite);
+ // }
}
initialize();
@@ -61,6 +84,10 @@
notify('Welcome to Rcs', 'info');
return () => {
+ if (websocket) {
+ websocket.onMessage = () => { }
+ websocket.close();
+ }
player.destroy();
window.removeEventListener('resize', handleResize);
Tool.patchRaLayout('');
@@ -68,15 +95,44 @@
}, [themeMode])
const switchMode = (mode) => {
+ Tool.removeSelectedEffect();
+
+ setDeviceVisible(false);
+ setSettingsVisible(false);
+
+ setSpriteSettings(null);
+
switch (mode) {
case MapMode.OBSERVER_MODE:
- console.log('a');
+ player.hideGridLines();
+ player.hideStarryBackground();
+
+ player.activateMapMultiSelect((selectedSprites, restartFn) => {
+ console.log(selectedSprites);
+ });
+
break
case MapMode.MOVABLE_MODE:
- console.log('b');
+ player.showGridLines();
+ player.hideStarryBackground();
+
+ player.activateMapMultiSelect((selectedSprites, restartFn) => {
+ Tool.spriteListBeMovable(selectedSprites, () => {
+ restartFn();
+ });
+ });
break
case MapMode.SETTINGS_MODE:
- console.log('c');
+ player.hideGridLines();
+ player.showStarryBackground(); // 0x2f68ac
+
+ player.activateMapMultiSelect((selectedSprites, restartFn) => {
+ console.log(selectedSprites);
+ });
+
+ mapContainer.children.forEach(child => {
+ Tool.beSettings(child, setSpriteSettings);
+ })
break
default:
break
@@ -88,7 +144,35 @@
return
}
switchMode(mode);
- }, [mode]);
+ }, [mode, mapContainer]);
+
+ const onDrop = (sprite, type, x, y) => {
+ const { mapX, mapY } = Tool.getRealPosition(x, y);
+ sprite.x = mapX;
+ sprite.y = mapY;
+
+ Tool.initSprite(sprite, type);
+ mapContainer.addChild(sprite);
+ Tool.beMovable(sprite);
+ };
+
+ // watch spriteSettings
+ useEffect(() => {
+ if (!mapContainer) {
+ return;
+ }
+ prevSpriteSettingsRef.current = spriteSettings;
+ if (spriteSettings && prevSpriteSettings !== spriteSettings) {
+ Tool.removeSelectedEffect();
+ }
+ if (spriteSettings) {
+ Tool.showSelectedEffect(spriteSettings)
+ setSettingsVisible(true);
+ } else {
+ Tool.removeSelectedEffect();
+ }
+ }, [spriteSettings, mapContainer])
+ const prevSpriteSettings = prevSpriteSettingsRef.current;
const actions = [
{ icon: <FileCopyIcon />, name: '澶嶅埗' },
@@ -106,6 +190,7 @@
flexDirection: 'column',
}}
>
+ {/* header */}
<Box
sx={{
display: 'flex',
@@ -115,6 +200,7 @@
padding: '0 16px',
height: '64px',
flexShrink: 0, // keep height
+ zIndex: 200
}}
>
<TextField
@@ -128,6 +214,40 @@
}}
/>
<Box sx={{ flexGrow: 1 }} />
+
+ {mode === MapMode.OBSERVER_MODE && (
+ <>
+ <Button
+ variant="contained"
+ color="primary"
+ sx={{ mr: 1 }}
+ >
+ 鍋滄RCS杩愯浆
+ </Button>
+ <Button variant="contained" color="secondary">
+ 妯℃嫙AGV杩愯
+ </Button>
+ </>
+ )}
+
+ {mode === MapMode.MOVABLE_MODE && (
+ <>
+ <Button
+ variant="contained"
+ color="primary"
+ sx={{ mr: 1 }}
+ onClick={() => setDeviceVisible(!deviceVisible)}
+ >
+ {translate('page.map.devices.title')}
+ </Button>
+ </>
+ )}
+
+ {mode === MapMode.SETTINGS_MODE && (
+ <>
+ </>
+ )}
+
<Select
value={mode}
onChange={(event) => {
@@ -136,7 +256,7 @@
variant="outlined"
size="small"
sx={{
- mr: 2,
+ ml: 2,
backgroundColor: '#fff',
borderRadius: 1,
}}
@@ -145,17 +265,8 @@
<MenuItem value={MapMode.MOVABLE_MODE}>缂栬緫妯″紡</MenuItem>
<MenuItem value={MapMode.SETTINGS_MODE}>閰嶇疆妯″紡</MenuItem>
</Select>
- <Button
- variant="contained"
- color="primary"
- sx={{ mr: 1 }}
- >
- 鍋滄RCS杩愯浆
- </Button>
- <Button variant="contained" color="secondary">
- 妯℃嫙AGV杩愯
- </Button>
</Box>
+ {/* content */}
<Box
sx={{
flexGrow: 1, // fill remaining of map space
@@ -196,6 +307,35 @@
))}
</SpeedDial>
</Box>
+
+ <Insight
+ open={insightVisible}
+ onCancel={() => {
+ setInsightVisible(false);
+ }}
+ width={378}
+ />
+
+ <Device
+ open={deviceVisible}
+ onCancel={() => {
+ setDeviceVisible(false);
+ }}
+ onDrop={onDrop}
+ width={378}
+ />
+
+ <Settings
+ open={settingsVisible}
+ onCancel={() => {
+ setSpriteSettings(null);
+ setSettingsVisible(false);
+ }}
+ sprite={spriteSettings}
+ setSpriteSettings={setSpriteSettings}
+ width={570}
+ />
+
</Box>
);
}
--
Gitblit v1.9.1