From ff2b7ebf99e8aedccb3859ed9f049e49a9a613f1 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期三, 03 四月 2024 16:56:56 +0800
Subject: [PATCH] #

---
 zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx |   72 ++++++++++++++++++++++++++++--------
 1 files changed, 56 insertions(+), 16 deletions(-)

diff --git a/zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx b/zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx
index aa3a476..3a313fc 100644
--- a/zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx
+++ b/zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx
@@ -1,4 +1,5 @@
 import React, { useState, useRef, useEffect } from 'react';
+import * as THREE from 'three'
 import { Spin, Descriptions, Button } from 'antd';
 import { FormattedMessage, useIntl, useModel } from '@umijs/max';
 import { LoadingOutlined } from '@ant-design/icons';
@@ -43,34 +44,73 @@
 
 let shelfThree;
 
+const startThree = (dom) => {
+    shelfThree = new ShelfThree(dom);
+    shelfThree.startup();
+}
+
+const endThree = () => {
+    if (shelfThree) {
+        shelfThree.destroy();
+        shelfThree = null;
+    }
+}
+
+const fetchShelfInfo = async (locNo) => {
+    const res = await Http.doGet('/api/map/shelf/info', { locNo: locNo });
+    if (res?.data && shelfThree) {
+        shelfThree.generateMesh((addObject) => {
+            for (const item of res.data) {
+                const { row, bay, lev } = Utils.parseLocNo(item.locNo);
+                // shelf
+                const shelfMesh = new THREE.Mesh(new THREE.BoxGeometry(100, 40, 100), new THREE.MeshStandardMaterial({
+                    color: '#006266',
+                }));
+                shelfMesh.name = item.locNo;
+                shelfMesh.position.set(0, 20 + 100 * (lev - 1), 0);
+                addObject(shelfMesh)
+
+                // pallet
+                const palletMesh = new THREE.Mesh(new THREE.BoxGeometry(100, 60, 100), new THREE.MeshStandardMaterial({
+                    color: '#2c2c54',
+                }));
+                palletMesh.name = item.locNo;
+                palletMesh.position.set(0, 70 + 100 * (lev - 1), 0);
+                addObject(palletMesh)
+            }
+        }).then(() => {
+            shelfThree.setNewSelectedMesh(locNo);
+        });
+    }
+}
+
 const ShelfView = (props) => {
     const intl = useIntl();
     const { styles } = useStyles();
     const refContainer = useRef();
+
+    const { data, curFloor, curLocNo, setCurLocNo } = props;
     const [loading, setLoading] = React.useState(false);
 
-    const startThree = () => {
-        shelfThree = new ShelfThree(refContainer.current);
-        shelfThree.startup();
-    }
-
-    const endThree = () => {
-        if (shelfThree) {
-            shelfThree.destroy();
-            shelfThree = null;
-        }
-    }
-
     useEffect(() => {
-        setLoading(true);
+        // init curLocNo
+        const originLocNo = data.no + '-' + curFloor;
+        setCurLocNo(originLocNo);
+
         endThree();
+        setLoading(true);
+
         setTimeout(() => {
+            startThree(refContainer.current);
+            shelfThree.handleClick = (objName) => {
+                setCurLocNo(objName);
+            };
+            fetchShelfInfo(originLocNo);
             setLoading(false);
-            startThree();
         }, 300)
 
         return endThree;
-    }, [props.data.uuid]);
+    }, [data]);
 
     return (
         <>
@@ -95,7 +135,7 @@
                                 {
                                     key: '1',
                                     label: intl.formatMessage({ id: 'map.loc.no', defaultMessage: '搴撲綅鍙�' }),
-                                    children: props.locNo,
+                                    children: curLocNo,
                                 },
                                 {
                                     key: '2',

--
Gitblit v1.9.1