import React, { useRef, useEffect, useState } from 'react';
|
import * as THREE from 'three';
|
import { useTranslate } from 'react-admin';
|
import {
|
Box,
|
CircularProgress,
|
Grid,
|
Typography,
|
Paper,
|
Button,
|
Divider,
|
Stack,
|
} from '@mui/material';
|
import ShelfThree from './ShelfThree';
|
|
const ShelfMain = (props) => {
|
const { data, curFloor, curLocNo, setCurLocNo } = props;
|
const translate = useTranslate();
|
const containerRef = useRef();
|
const [loading, setLoading] = useState(true);
|
const [shelfThree, setShelfThree] = useState(null);
|
const [info, setInfo] = 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();
|
}
|
};
|
}, []);
|
|
useEffect(() => {
|
if (curLocNo) {
|
fetchShelfInfo(curLocNo);
|
}
|
}, [curLocNo]);
|
|
const fetchShelfInfo = async (locNo) => {
|
// 假设有一个函数来获取货架信息
|
const res = await fetchShelfData(locNo);
|
if (res?.data) {
|
setInfo(res.data);
|
}
|
};
|
|
return (
|
<Box display="flex" height="500px">
|
<Box
|
position="relative"
|
width="60%"
|
height="100%"
|
ref={containerRef}
|
style={{ backgroundColor: '#7a7a7a' }}
|
>
|
{loading && (
|
<Box
|
position="absolute"
|
top="50%"
|
left="50%"
|
style={{ transform: 'translate(-50%, -50%)' }}
|
>
|
<CircularProgress />
|
</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>
|
</Grid>
|
<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: '库位操作' })}
|
</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: '解锁' })}
|
</Button>
|
<Button variant="contained" fullWidth>
|
{translate('map.loc.reset', { defaultMessage: '清除库位' })}
|
</Button>
|
</Stack>
|
</Grid>
|
</Grid>
|
</Paper>
|
</Box>
|
</Box>
|
);
|
};
|
|
export default ShelfMain;
|