From 77ac6b72ed82d51d0d45bf156ac1b5bb3cb15782 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 19 三月 2024 14:01:43 +0800
Subject: [PATCH] #

---
 zy-asrs-flow/src/pages/map/index.jsx |  169 +++++++++++++++++++++++++++++++++++++++-----------------
 1 files changed, 118 insertions(+), 51 deletions(-)

diff --git a/zy-asrs-flow/src/pages/map/index.jsx b/zy-asrs-flow/src/pages/map/index.jsx
index 9ea2013..9e56171 100644
--- a/zy-asrs-flow/src/pages/map/index.jsx
+++ b/zy-asrs-flow/src/pages/map/index.jsx
@@ -1,7 +1,7 @@
 import * as React from 'react'
 import * as PIXI from 'pixi.js';
 import { FormattedMessage, useIntl, useModel } from '@umijs/max';
-import { Layout, Button, Flex, Row, Col, FloatButton, Select } from 'antd';
+import { Layout, Button, Flex, Row, Col, FloatButton, Select, Spin } from 'antd';
 const { Header, Content } = Layout;
 import {
     AppstoreAddOutlined,
@@ -15,6 +15,7 @@
 import Settings from './components/settings'
 import * as Utils from './utils'
 import Player from './player';
+import MapDrawer from './drawer';
 
 const useStyles = createStyles(({ token }) => {
     let dark = token.colorBgBase === '#000';
@@ -70,7 +71,8 @@
     const [app, setApp] = React.useState(null);
     const [mapContainer, setMapContainer] = React.useState(null);
     const [didClickSprite, setDidClickSprite] = React.useState(false);
-    const [currSpriteBySettings, setCurrSpriteBySettings] = React.useState(null);
+    const [spriteBySettings, setSpriteBySettings] = React.useState(null);
+    const prevSpriteBySettingsRef = React.useRef();
 
     // init func
     React.useEffect(() => {
@@ -97,6 +99,10 @@
         const width = contentRef.current.offsetWidth;
         const height = contentRef.current.offsetHeight;
         app.renderer.resize(width, height);
+        if (model !== MapModel.OBSERVER_MODEL) {
+            player.hideGridlines();
+            player.showGridlines();
+        }
     }, [app, mapContainer, windowSize])
 
     // model
@@ -112,6 +118,10 @@
 
                 player.activateMapEvent(null);
 
+                Utils.removeSelectedEffect();
+                setDeviceVisible(false);
+                setSettingsVisible(false);
+
                 mapContainer.children.forEach(child => {
                     child.off('pointerup');
                     child.off('pointermove');
@@ -126,6 +136,10 @@
 
                 player.activateMapEvent(Utils.MapEvent.SELECTION_BOX);
 
+                Utils.removeSelectedEffect();
+                setSpriteBySettings(null);
+                setSettingsVisible(false);
+
                 mapContainer.children.forEach(child => {
                     Utils.beMovable(child, setDidClickSprite);
                 })
@@ -137,8 +151,10 @@
 
                 player.activateMapEvent(null);
 
+                setDeviceVisible(false);
+
                 mapContainer.children.forEach(child => {
-                    Utils.beSettings(child, setCurrSpriteBySettings, setDidClickSprite);
+                    Utils.beSettings(child, setSpriteBySettings, setDidClickSprite);
                 })
                 break
             default:
@@ -147,12 +163,12 @@
     }, [model]);
 
     // Add New Device
-    const onDrop = (sprite, x, y) => {
+    const onDrop = (sprite, type, x, y) => {
         const { mapX, mapY } = Utils.getRealPosition(x, y, mapContainer);
         sprite.x = mapX;
         sprite.y = mapY;
 
-        Utils.initSprite(sprite);
+        Utils.initSprite(sprite, type);
         mapContainer.addChild(sprite);
         Utils.beMovable(sprite, setDidClickSprite);
     };
@@ -162,26 +178,66 @@
         player.updateDidClickSprite(didClickSprite);
     }, [didClickSprite])
 
+    // watch spriteBySettings
     React.useEffect(() => {
         if (!mapContainer) {
             return;
         }
-        console.log(currSpriteBySettings);
-        if (currSpriteBySettings) {
-            setSettingsVisible(true);
+        prevSpriteBySettingsRef.current = spriteBySettings;
+        if (spriteBySettings && prevSpriteBySettings !== spriteBySettings) {
+            Utils.removeSelectedEffect();
         }
-    }, [currSpriteBySettings])
+        if (spriteBySettings) {
+            Utils.showSelectedEffect(spriteBySettings)
+            setSettingsVisible(true);
+        } else {
+            Utils.removeSelectedEffect();
+        }
+    }, [spriteBySettings])
+    const prevSpriteBySettings = prevSpriteBySettingsRef.current;
 
     const settingsFinish = () => {
-        setCurrSpriteBySettings(null);
+        setSettingsVisible(false);
+        setSpriteBySettings(null);
     }
-    
+
     return (
         <>
             <Layout className={styles.layout}>
                 <Header className={styles.header}>
                     <Row style={{ height: '100%' }}>
-                        <Col span={8} style={{ backgroundColor: '#3C40C6' }}></Col>
+                        <Col span={8} style={{ backgroundColor: '#dcdde1' }}>
+
+
+                            <Select
+                                defaultValue="agv"
+                                style={{
+                                    width: 120,
+                                }}
+                                size={'large'}
+                                onChange={(value, option) => {
+                                    console.log(value, option);
+                                }}
+                                options={[
+                                    {
+                                        value: 'agv',
+                                        label: 'agv',
+                                    },
+                                    {
+                                        value: 'crn',
+                                        label: 'crn',
+                                    },
+                                ]}
+                            />
+
+                            <Select
+
+                            // notFoundContent={loading ? <Spin size="small" /> : null}
+
+                            />
+
+
+                        </Col>
                         <Col span={16} style={{ backgroundColor: '#3C40C6' }}>
                             <Flex className={styles.flex} gap={'large'} justify={'flex-end'} align={'center'}>
                                 <Select
@@ -208,46 +264,53 @@
                     </Row>
                 </Header>
                 <Content ref={contentRef} className={styles.content}>
-                    <div ref={mapRef} style={{ position: "relative" }} />
-
-                    <FloatButton.Group
-                        shape="square"
-                        style={{
-                            left: 35,
-                            bottom: 35
-                        }}
-                    >
-                        <FloatButton
-                            icon={<CompressOutlined />}
-                        />
-                        <FloatButton.BackTop visibilityHeight={0} />
-                    </FloatButton.Group>
-
-                    <FloatButton.Group
-                        hidden={model === MapModel.OBSERVER_MODEL}
-                        trigger="hover"
-                        style={{
-                            right: 35,
-                            bottom: 35
-                        }}
-                        icon={<AppstoreAddOutlined />}
-                    >
-                        <FloatButton
-                            tooltip={<div><FormattedMessage id='map.device.add' defaultMessage='娣诲姞璁惧' /></div>}
-                            icon={<FileAddOutlined />}
-                            onClick={() => {
-                                setDeviceVisible(true);
+                    <div ref={mapRef} style={{ position: "relative" }} >
+                        <FloatButton.Group
+                            shape="square"
+                            style={{
+                                left: 35,
+                                bottom: 35
                             }}
-                        />
-                        <FloatButton
-                            type={model === MapModel.SETTINGS_MODEL ? 'primary' : 'default'}
-                            tooltip={<div><FormattedMessage id='map.device.oper' defaultMessage='鍙傛暟璁剧疆' /></div>}
-                            icon={<SettingOutlined />}
-                            onClick={() => {
-                                setModel(model === MapModel.SETTINGS_MODEL ? MapModel.MOVABLE_MODEL : MapModel.SETTINGS_MODEL)
+                        >
+                            <FloatButton
+                                icon={<CompressOutlined />}
+                            />
+                            <FloatButton.BackTop visibilityHeight={0} />
+                        </FloatButton.Group>
+
+                        <FloatButton.Group
+                            hidden={model === MapModel.OBSERVER_MODEL}
+                            style={{
+                                left: 35,
+                                bottom: window.innerHeight / 2
                             }}
-                        />
-                    </FloatButton.Group>
+                            icon={<AppstoreAddOutlined />}
+                        >
+                            <FloatButton
+                                hidden={model === MapModel.OBSERVER_MODEL}
+                                type={deviceVisible ? 'primary' : 'default'}
+                                tooltip={<div><FormattedMessage id='map.device.add' defaultMessage='娣诲姞璁惧' /></div>}
+                                icon={<FileAddOutlined />}
+                                onClick={() => {
+                                    if (deviceVisible) {
+                                        setDeviceVisible(false);
+                                    } else {
+                                        setDeviceVisible(true);
+                                        setModel(MapModel.MOVABLE_MODEL);
+                                    }
+                                }}
+                            />
+                            <FloatButton
+                                hidden={model === MapModel.OBSERVER_MODEL}
+                                type={model === MapModel.SETTINGS_MODEL ? 'primary' : 'default'}
+                                tooltip={<div><FormattedMessage id='map.device.oper' defaultMessage='鍙傛暟璁剧疆' /></div>}
+                                icon={<SettingOutlined />}
+                                onClick={() => {
+                                    setModel(model === MapModel.SETTINGS_MODEL ? MapModel.MOVABLE_MODEL : MapModel.SETTINGS_MODEL)
+                                }}
+                            />
+                        </FloatButton.Group>
+                    </div>
                 </Content>
             </Layout>
 
@@ -262,11 +325,15 @@
 
             <Settings
                 open={settingsVisible}
+                curSprite={spriteBySettings}
                 onCancel={() => {
                     setSettingsVisible(false);
+                    setSpriteBySettings(null);
                 }}
+                setSpriteBySettings={setSpriteBySettings}
+                setDidClickSprite={setDidClickSprite}
                 refCurr={mapRef.current}
-                onDrop={settingsFinish}
+                onSubmit={settingsFinish}
             />
         </>
     )

--
Gitblit v1.9.1