From b6de988979952b5084ec2563181acc34612928fe Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@163.com>
Date: 星期四, 17 十月 2024 08:29:53 +0800
Subject: [PATCH] #
---
zy-acs-flow/src/map/insight/shelf/ShelfMain.jsx | 226 ++++++++++++++++++++++++++++++++++++++++----------------
1 files changed, 161 insertions(+), 65 deletions(-)
diff --git a/zy-acs-flow/src/map/insight/shelf/ShelfMain.jsx b/zy-acs-flow/src/map/insight/shelf/ShelfMain.jsx
index e05fec1..fe2b0fb 100644
--- a/zy-acs-flow/src/map/insight/shelf/ShelfMain.jsx
+++ b/zy-acs-flow/src/map/insight/shelf/ShelfMain.jsx
@@ -10,58 +10,123 @@
Button,
Divider,
Stack,
+ Card,
+ CardContent,
} from '@mui/material';
import ShelfThree from './ShelfThree';
+import { getLocGroup } from '../../http';
+import { grey } from '@mui/material/colors';
+import { styled } from '@mui/system';
+
+let shelfThree;
+
+const startThree = (dom) => {
+ shelfThree = new ShelfThree(dom);
+ shelfThree.startup();
+}
+
+const endThree = () => {
+ if (shelfThree) {
+ shelfThree.destroy();
+ shelfThree = null;
+ }
+}
+
+const renderThree = (info, curLocNo) => {
+ if (info && shelfThree) {
+ shelfThree.generateMesh((loader, addObject) => {
+ const promises = [];
+ const singleHeight = 123;
+ for (const item of info) {
+ const { lev } = item;
+ 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((child) => {
+ if (child.isMesh) {
+ switch (child.name) {
+ case '璐ф灦':
+ child.material.color.set(0x4680BF);
+ break;
+ case '鎵樼洏':
+ child.visible = item.locStsEl === 'STOCK' || item.locStsEl === 'PAKOUT';
+ child.material.color.set(0xBEBEBE);
+ break;
+ case '涓嶈鍒�':
+ child.visible = item.locStsEl === 'STOCK' || item.locStsEl === 'PAKOUT';
+ child.material.color.set(0xE8B67E);
+ break;
+ default:
+ break;
+ }
+ child.name = item.locNo
+ child.castShadow = true;
+ child.receiveShadow = true;
+ }
+ });
+ addObject(mesh);
+ resolve();
+ })
+ }));
+
+ }
+
+ Promise.all(promises).then(() => {
+ shelfThree.setNewSelectedMesh(curLocNo);
+ shelfThree.rePerspective(singleHeight * info.length, 500);
+ }).catch(error => {
+ console.error(error);
+ });
+ })
+ }
+}
const ShelfMain = (props) => {
const { data, curLocNo, setCurLocNo } = props;
const translate = useTranslate();
const containerRef = useRef();
const [loading, setLoading] = useState(true);
- const [shelfThree, setShelfThree] = useState(null);
const [info, setInfo] = useState(null);
+ const [selectedLoc, setSelectedLoc] = useState(null);
useEffect(() => {
- const initThree = () => {
- const shelfThreeInstance = new ShelfThree(containerRef.current);
- shelfThreeInstance.startup();
- shelfThreeInstance.handleClick = (objName) => {
- setCurLocNo(objName);
- };
- setShelfThree(shelfThreeInstance);
- setLoading(false);
- // Fetch initial data
- fetchShelfInfo(curLocNo);
- };
-
- initThree();
-
- return () => {
- if (shelfThree) {
- shelfThree.destroy();
- }
- };
- }, []);
+ if (data) {
+ getLocGroup(data.row, data.bay, (response) => {
+ setInfo(response);
+ setCurLocNo(response[0]?.locNo);
+ setSelectedLoc(response[0]);
+ });
+ }
+ }, [data]);
useEffect(() => {
- if (curLocNo) {
- fetchShelfInfo(curLocNo);
+ if (info) {
+ endThree();
+ setLoading(true);
+ setTimeout(() => {
+ startThree(containerRef.current);
+ shelfThree.handleClick = (objName) => {
+ setCurLocNo(objName);
+ setSelectedLoc(info.find(loc => objName === loc.locNo));
+ };
+ renderThree(info, curLocNo);
+ setLoading(false);
+ }, 300)
}
- }, [curLocNo]);
+ return endThree;
+ }, [info]);
- const fetchShelfInfo = async (locNo) => {
- // 鍋囪鏈変竴涓嚱鏁版潵鑾峰彇璐ф灦淇℃伅
- const res = await fetchShelfData(locNo);
- if (res?.data) {
- setInfo(res.data);
- }
- };
+ useEffect(() => {
+ console.log(selectedLoc);
+ }, [selectedLoc])
return (
- <Box display="flex" height="500px">
+ <Box display="flex" height="100%">
<Box
position="relative"
- width="60%"
+ width="50%"
height="100%"
ref={containerRef}
style={{ backgroundColor: '#7a7a7a' }}
@@ -73,47 +138,58 @@
left="50%"
style={{ transform: 'translate(-50%, -50%)' }}
>
- <CircularProgress />
+ <CircularProgress sx={{ color: grey[50] }} />
</Box>
)}
</Box>
- <Box width="40%" height="100%" overflow="auto" p={2}>
- <Paper elevation={3} style={{ padding: '16px' }}>
- <Typography variant="h6" gutterBottom>
- {translate('map.loc.no', { defaultMessage: '搴撲綅鍙�' })}: {curLocNo}
- </Typography>
- <Divider />
- <Grid container spacing={2} style={{ marginTop: '16px' }}>
- <Grid item xs={12}>
- <Typography variant="subtitle1">
- {translate('map.loc.sts', { defaultMessage: '搴撲綅鐘舵��' })}
- </Typography>
- <Typography variant="body1">{info?.locSts}</Typography>
+ <Box width="50%" height="100%" overflow="auto" pl={1}>
+ <Paper elevation={1} style={{
+ height: "100%",
+ padding: '16px',
+ display: 'flex',
+ flexDirection: 'column',
+ justifyContent: 'space-between',
+ }}>
+ <Box>
+ <Grid container spacing={2} style={{ marginTop: '0px' }}>
+ <Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.loc.locNo')} value={selectedLoc?.locNo || 'N/A'} />
+ </Grid>
+ <Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.loc.row')} value={selectedLoc?.row || 'N/A'} />
+ </Grid>
+ <Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.loc.bay')} value={selectedLoc?.bay || 'N/A'} />
+ </Grid>
+ <Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.loc.lev')} value={selectedLoc?.lev || 'N/A'} />
+ </Grid>
+ <Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.loc.offset')} value={selectedLoc?.offset || 'N/A'} />
+ </Grid>
+ <Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.loc.locSts')} value={selectedLoc?.locSts$ || 'N/A'} />
+ </Grid>
+ <Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.loc.zoneId')} value={selectedLoc?.zoneId$ || 'N/A'} />
+ </Grid>
+ <Grid item xs={12}>
+ <KeyValuePair label={translate('table.field.loc.code')} value={selectedLoc?.code$ || 'N/A'} />
+ </Grid>
</Grid>
+ </Box>
+
+ <Grid container spacing={2} style={{ marginTop: '0px' }}>
<Grid item xs={12}>
<Typography variant="subtitle1">
- {translate('map.pallet.barcode', { defaultMessage: '鎵樼洏鏉$爜' })}
- </Typography>
- <Typography variant="body1">{info?.zpallet}</Typography>
- </Grid>
- <Grid item xs={12}>
- <Typography variant="subtitle1">
- {translate('map.is.enable', { defaultMessage: '鏄惁鍚敤' })}
- </Typography>
- </Grid>
- <Grid item xs={12}>
- <Typography variant="subtitle1">
- {translate('map.loc.operation', { defaultMessage: '搴撲綅鎿嶄綔' })}
+ {translate('common.field.opt')}
</Typography>
<Stack spacing={2} mt={2}>
- <Button variant="contained" color="error" fullWidth>
- {translate('map.loc.lock', { defaultMessage: '閿佸畾' })}
- </Button>
- <Button variant="contained" disabled fullWidth>
- {translate('map.loc.unlock', { defaultMessage: '瑙i攣' })}
- </Button>
<Button variant="contained" fullWidth>
- {translate('map.loc.reset', { defaultMessage: '娓呴櫎搴撲綅' })}
+ {translate('page.map.insight.shelf.updateStatus')}
+ </Button>
+ <Button variant="contained" color="error" disabled={selectedLoc?.locStsEl !== 'STOCK'} fullWidth>
+ {translate('page.map.insight.shelf.outbound')}
</Button>
</Stack>
</Grid>
@@ -124,4 +200,24 @@
);
};
+const KeyValuePair = ({ label, value }) => (
+ <>
+ <Stack direction="row" alignItems="center" spacing={1} sx={{ mb: 1 }}>
+ <Typography
+ variant="body2"
+ sx={{ width: '80px', fontWeight: 'bold', color: 'text.secondary', textAlign: 'left' }}
+ >
+ {label}:
+ </Typography>
+ <Typography
+ variant="body2"
+ sx={{ flexGrow: 1, color: 'text.primary', whiteSpace: 'nowrap', overflow: 'hidden', textOverflow: 'ellipsis' }}
+ >
+ {value}
+ </Typography>
+ </Stack>
+ <Divider />
+ </>
+);
+
export default ShelfMain;
--
Gitblit v1.9.1