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 | 109 +++++++++++++++++++++++++++++++++++++++++++++++++-----
1 files changed, 99 insertions(+), 10 deletions(-)
diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx
index 01df102..a0688d7 100644
--- a/zy-acs-flow/src/map/MapPage.jsx
+++ b/zy-acs-flow/src/map/MapPage.jsx
@@ -22,15 +22,20 @@
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 theme = useTheme();
- const themeMode = theme.palette.mode;
const notify = useNotification();
const translate = useTranslate();
+ const theme = useTheme();
+ const themeMode = theme.palette.mode;
const mapRef = useRef();
const contentRef = useRef();
@@ -38,8 +43,12 @@
const [mapContainer, setMapContainer] = useState(null);
const [mode, setMode] = useState(MapMode.OBSERVER_MODE);
- const [deviceVisible, setDeviceVisible] = React.useState(false);
+ const [insightVisible, setInsightVisible] = useState(false);
+ const [deviceVisible, setDeviceVisible] = useState(false);
+ const [settingsVisible, setSettingsVisible] = useState(false);
+ const [spriteSettings, setSpriteSettings] = useState(null);
+ const prevSpriteSettingsRef = React.useRef();
useEffect(() => {
Tool.patchRaLayout('0px');
@@ -49,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();
@@ -66,6 +84,10 @@
notify('Welcome to Rcs', 'info');
return () => {
+ if (websocket) {
+ websocket.onMessage = () => { }
+ websocket.close();
+ }
player.destroy();
window.removeEventListener('resize', handleResize);
Tool.patchRaLayout('');
@@ -73,14 +95,44 @@
}, [themeMode])
const switchMode = (mode) => {
+ Tool.removeSelectedEffect();
+
+ setDeviceVisible(false);
+ setSettingsVisible(false);
+
+ setSpriteSettings(null);
+
switch (mode) {
case MapMode.OBSERVER_MODE:
- setDeviceVisible(false);
+ player.hideGridLines();
+ player.hideStarryBackground();
+
+ player.activateMapMultiSelect((selectedSprites, restartFn) => {
+ console.log(selectedSprites);
+ });
+
break
case MapMode.MOVABLE_MODE:
+ player.showGridLines();
+ player.hideStarryBackground();
+
+ player.activateMapMultiSelect((selectedSprites, restartFn) => {
+ Tool.spriteListBeMovable(selectedSprites, () => {
+ restartFn();
+ });
+ });
break
case MapMode.SETTINGS_MODE:
- setDeviceVisible(false);
+ player.hideGridLines();
+ player.showStarryBackground(); // 0x2f68ac
+
+ player.activateMapMultiSelect((selectedSprites, restartFn) => {
+ console.log(selectedSprites);
+ });
+
+ mapContainer.children.forEach(child => {
+ Tool.beSettings(child, setSpriteSettings);
+ })
break
default:
break
@@ -92,17 +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;
- // Utils.initSprite(sprite, type);
- // mapContainer.addChild(sprite);
- // Utils.beMovable(sprite);
+ 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: '澶嶅埗' },
@@ -168,7 +238,7 @@
sx={{ mr: 1 }}
onClick={() => setDeviceVisible(!deviceVisible)}
>
- 娣诲姞妯″瀷
+ {translate('page.map.devices.title')}
</Button>
</>
)}
@@ -238,6 +308,14 @@
</SpeedDial>
</Box>
+ <Insight
+ open={insightVisible}
+ onCancel={() => {
+ setInsightVisible(false);
+ }}
+ width={378}
+ />
+
<Device
open={deviceVisible}
onCancel={() => {
@@ -247,6 +325,17 @@
width={378}
/>
+ <Settings
+ open={settingsVisible}
+ onCancel={() => {
+ setSpriteSettings(null);
+ setSettingsVisible(false);
+ }}
+ sprite={spriteSettings}
+ setSpriteSettings={setSpriteSettings}
+ width={570}
+ />
+
</Box>
);
}
--
Gitblit v1.9.1