From 8ef2bb5e46d84594e6ed632c07ea0b47a1bf6c4d Mon Sep 17 00:00:00 2001
From: Junjie <540245094@qq.com>
Date: 星期三, 11 十二月 2024 16:15:17 +0800
Subject: [PATCH] #path similarity
---
zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx | 208 +++++++++++++++++++++++++++++++++++++++++++++------
1 files changed, 183 insertions(+), 25 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 93b021f..ee7ac25 100644
--- a/zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx
+++ b/zy-asrs-flow/src/pages/map/drawer/shelf/view.jsx
@@ -1,62 +1,220 @@
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';
import * as Utils from '../../utils'
import Http from '@/utils/http';
import ShelfThree from './shelfThree'
+import BoolValueIcon from '@/components/BoolValueIcon';
const useStyles = createStyles(({ token, css }) => {
return {
+ infoBox: {
+ height: '100%',
+ display: 'flex',
+ gap: '0px',
+ },
+ threeInfo: {
+ height: '100%',
+ width: '60%',
+ },
+ spinWrapper: {
+ height: '100%',
+ },
threeContainer: {
zIndex: 99,
- width: '500px',
- height: '600px',
+ width: '100%',
+ height: '100%',
},
+ tableInfo: {
+ height: '100%',
+ 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 fetchShelfGroup = async (locNo) => {
+ const res = await Http.doGet('/api/map/shelf/group', { locNo: locNo });
+ if (res?.data && shelfThree) {
+ shelfThree.generateMesh((loader, addObject) => {
+ const promises = [];
+ const singleHeight = 123;
+ for (const item of res.data) {
+ const { lev } = Utils.parseLocNo(item.locNo);
+ promises.push(new Promise((resolve) => {
+ loader.load('model/shelf.fbx', (mesh) => {
+ mesh.position.set(0, singleHeight * (lev - 1), 0);
+ mesh.scale.set(5, 5, 5);
+ mesh.name = item.locNo;
+ mesh.traverse(function (child) {
+ if (child.isMesh) {
+ if (child.name === '璐ф灦') {
+ child.material.color.set(0x4680BF);
+ }
+ let palletVisible = true, cargoVisible = true;
+ switch (item.locSts) {
+ case 'D':
+ cargoVisible = false;
+ break;
+ case 'O':
+ palletVisible = false;
+ cargoVisible = false;
+ break;
+ default:
+ break;
+ }
+ if (child.name === '鎵樼洏') {
+ child.visible = palletVisible;
+ child.material.color.set(0xBEBEBE);
+ }
+ if (child.name === '涓嶈鍒�') {
+ child.visible = cargoVisible;
+ child.material.color.set(0xE8B67E);
+ }
+ child.name = item.locNo
+ child.castShadow = true;
+ child.receiveShadow = true;
+ }
+ });
+ addObject(mesh);
+ resolve();
+ })
+ }));
+ }
+
+ Promise.all(promises).then(() => {
+ shelfThree.setNewSelectedMesh(locNo);
+ shelfThree.rePerspective(singleHeight * res.data.length, 500);
+ }).catch(error => {
+ console.error(error);
+ });
+ })
+ }
+}
+
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;
- }
- }
+ const [info, setInfo] = React.useState(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);
+ };
+ fetchShelfGroup(originLocNo);
setLoading(false);
- startThree();
}, 300)
return endThree;
- }, [props.data.uuid]);
+ }, [data]);
+
+ useEffect(() => {
+ if (!curLocNo) {
+ return;
+ }
+ const fetchShelfInfo = async (locNo) => {
+ const res = await Http.doGet('/api/map/shelf/info', { locNo: locNo });
+ if (res?.data) {
+ setInfo(res.data);
+ }
+ }
+ fetchShelfInfo(curLocNo);
+ }, [curLocNo])
return (
<>
- <Spin
- spinning={loading}
- indicator={<LoadingOutlined spin />}
- size={'large'}
- >
- <div ref={refContainer} className={styles.threeContainer}></div>
- </Spin>
+ <div className={styles.infoBox}>
+ <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={
+ [
+ {
+ label: intl.formatMessage({ id: 'map.loc.no', defaultMessage: '搴撲綅鍙�' }),
+ children: curLocNo,
+ },
+ {
+ label: intl.formatMessage({ id: 'map.loc.sts', defaultMessage: '搴撲綅鐘舵��' }),
+ children: info?.locSts,
+ },
+ {
+ label: intl.formatMessage({ id: 'map.pallet.barcode', defaultMessage: '鎵樼洏鏉$爜' }),
+ children: info?.zpallet,
+ },
+ {
+ label: intl.formatMessage({ id: 'map.is.enable', defaultMessage: '鏄惁鍚敤' }),
+ children: <BoolValueIcon value={info?.enable} />,
+ },
+ {
+ 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