From 7c32ab19d3bf4c601212314a1617bbb51c5fdd2a Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期五, 29 三月 2024 16:01:36 +0800
Subject: [PATCH] #

---
 zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx |  129 ++++++++++++++++++++++++++++++++++++-------
 1 files changed, 108 insertions(+), 21 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 c23f742..6b5e680 100644
--- a/zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx
+++ b/zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx
@@ -1,5 +1,6 @@
 import React, { useState, useRef, useEffect } from 'react';
-import { Spin, Form, Button } from 'antd';
+import * as THREE from 'three'
+import { Spin, Descriptions, Button } from 'antd';
 import { FormattedMessage, useIntl, useModel } from '@umijs/max';
 import { LoadingOutlined } from '@ant-design/icons';
 import { createStyles } from 'antd-style';
@@ -16,21 +17,44 @@
         },
         threeInfo: {
             height: '100%',
-            width: '50%',
+            width: '60%',
+        },
+        spinWrapper: {
+            height: '100%',
         },
         threeContainer: {
             zIndex: 99,
             width: '100%',
-            height: '688.88px',
+            height: '100%',
         },
         tableInfo: {
             height: '100%',
-            width: '50%',
+            width: '40%',
+            padding: '0 10px 0 15px',
+            overflow: 'auto',
+        },
+        tableButton: {
+            width: '100%',
+            marginBottom: '10px',
+            fontWeight: 'bold',
+            letterSpacing: '1px',
         }
     }
 })
 
 let shelfThree;
+
+const startThree = (dom) => {
+    shelfThree = new ShelfThree(dom);
+    shelfThree.startup();
+}
+
+const endThree = () => {
+    if (shelfThree) {
+        shelfThree.destroy();
+        shelfThree = null;
+    }
+}
 
 const ShelfView = (props) => {
     const intl = useIntl();
@@ -38,46 +62,109 @@
     const refContainer = useRef();
     const [loading, setLoading] = React.useState(false);
 
-    const startThree = () => {
-        shelfThree = new ShelfThree(refContainer.current);
-        shelfThree.startup();
-    }
-
-    const endThree = () => {
-        if (shelfThree) {
-            shelfThree.destroy();
-            shelfThree = null;
-        }
-    }
+    const [shelfList, setShelfList] = React.useState([]);
+    const [curLocNo, setCurLocNo] = React.useState(props.locNo);
 
     useEffect(() => {
-        setLoading(true);
+        setCurLocNo(props.locNo)
         endThree();
+        setLoading(true);
+
+        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.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.position.set(0, 70 + 100 * (lev - 1), 0);
+                        addObject(palletMesh)
+                    }
+                });
+            }
+        }
+
         setTimeout(() => {
+            startThree(refContainer.current);
+
+            shelfThree.handleClick = (str) => {
+                console.log(str);
+            }
+
+            fetchShelfInfo(props.locNo);
             setLoading(false);
-            startThree();
         }, 300)
 
         return endThree;
-    }, [props.data.uuid]);
+    }, [props.data.uuid, props.locNo]);
 
     return (
         <>
             <div className={styles.infoBox}>
-                <div className={styles.threeInfo}>
+                <div className={`${styles.threeInfo} three-spin`}>
                     <Spin
                         spinning={loading}
                         indicator={<LoadingOutlined spin />}
                         size={'large'}
+                        wrapperClassName={styles.spinWrapper}
                     >
                         <div ref={refContainer} className={styles.threeContainer}></div>
                     </Spin>
                 </div>
                 <div className={styles.tableInfo}>
-
+                    <Descriptions
+                        bordered
+                        layout="vertical"
+                        column={1}
+                        items={
+                            [
+                                {
+                                    key: '1',
+                                    label: intl.formatMessage({ id: 'map.loc.no', defaultMessage: '搴撲綅鍙�' }),
+                                    children: curLocNo,
+                                },
+                                {
+                                    key: '2',
+                                    label: intl.formatMessage({ id: 'map.pallet.barcode', defaultMessage: '鎵樼洏鏉$爜' }),
+                                    children: '80000010',
+                                },
+                                {
+                                    key: '3',
+                                    label: intl.formatMessage({ id: 'map.is.enable', defaultMessage: '鏄惁鍚敤' }),
+                                    children: 'Disabled',
+                                },
+                                {
+                                    key: '4',
+                                    label: intl.formatMessage({ id: 'map.loc.operation', defaultMessage: '搴撲綅鎿嶄綔' }),
+                                    children: (
+                                        <>
+                                            <Button className={styles.tableButton} size='large' type="primary" danger>
+                                                <FormattedMessage id='map.loc.lock' defaultMessage='閿佸畾' />
+                                            </Button>
+                                            <Button className={styles.tableButton} size='large' disabled>
+                                                <FormattedMessage id='map.loc.unlock' defaultMessage='瑙i攣' />
+                                            </Button>
+                                            <Button className={styles.tableButton} size='large'>
+                                                <FormattedMessage id='map.loc.reset' defaultMessage='娓呴櫎搴撲綅' />
+                                            </Button>
+                                        </>
+                                    )
+                                },
+                            ]
+                        }
+                    />
                 </div>
             </div>
-
         </>
     )
 }

--
Gitblit v1.9.1