|  |  |  | 
|---|
|  |  |  | import CloseIcon from '@mui/icons-material/Close'; | 
|---|
|  |  |  | import * as Common from '@/utils/common'; | 
|---|
|  |  |  | import { PAGE_DRAWER_WIDTH } from '@/config/setting'; | 
|---|
|  |  |  | import * as Tool from './tool'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import shelf from '/map/shelf.svg'; | 
|---|
|  |  |  | import charge from '/map/charge.svg'; | 
|---|
|  |  |  | 
|---|
|  |  |  | width = PAGE_DRAWER_WIDTH, | 
|---|
|  |  |  | children | 
|---|
|  |  |  | } = props; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const theme = useTheme(); | 
|---|
|  |  |  | const themeMode = theme.palette.mode; | 
|---|
|  |  |  | const translate = useTranslate(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const [dragging, setDragging] = useState(false); | 
|---|
|  |  |  | const [dragSprite, setDragSprite] = useState(null); | 
|---|
|  |  |  | const [dragSpriteType, setDragSpriteType] = useState(null); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const handleClose = () => { | 
|---|
|  |  |  | onCancel(); | 
|---|
|  |  |  | 
|---|
|  |  |  | closeCallback(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const onDragStart = (e, type) => { | 
|---|
|  |  |  | setDragging(true); | 
|---|
|  |  |  | const sprite = Tool.generateSprite(type); | 
|---|
|  |  |  | setDragSprite(sprite); | 
|---|
|  |  |  | setDragSpriteType(type); | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | useEffect(() => { | 
|---|
|  |  |  | const handleMouseMove = (e) => { | 
|---|
|  |  |  | if (dragging) { | 
|---|
|  |  |  | props.onDrop(dragSprite, dragSpriteType, e.clientX, e.clientY); | 
|---|
|  |  |  | setDragging(false); | 
|---|
|  |  |  | setDragSpriteType(null); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | }; | 
|---|
|  |  |  | window.addEventListener('mousemove', handleMouseMove); | 
|---|
|  |  |  | return () => window.removeEventListener('mousemove', handleMouseMove); | 
|---|
|  |  |  | }, [dragging, props.onDrop, props.onCancel]); | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return ( | 
|---|
|  |  |  | <Drawer | 
|---|
|  |  |  | 
|---|
|  |  |  | <CloseIcon /> | 
|---|
|  |  |  | </IconButton> | 
|---|
|  |  |  | </Stack> | 
|---|
|  |  |  | <DeviceContent /> | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | )} | 
|---|
|  |  |  | </Drawer> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const DeviceContent = (props) => { | 
|---|
|  |  |  | const theme = useTheme(); | 
|---|
|  |  |  | const themeMode = theme.palette.mode; | 
|---|
|  |  |  | const translate = useTranslate(); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const onDragStart = (e, type) => { | 
|---|
|  |  |  | // setDragging(true); | 
|---|
|  |  |  | // setDragSpriteType(type); | 
|---|
|  |  |  | // 根据需要处理拖拽逻辑 | 
|---|
|  |  |  | }; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | return ( | 
|---|
|  |  |  | <Box p={3}> | 
|---|
|  |  |  | <Grid container spacing={0} sx={{ | 
|---|
|  |  |  | borderTop: themeMode === 'light' ? '1px solid #f0f0f0' : '1px solid #303030', | 
|---|
|  |  |  | 
|---|
|  |  |  | })} | 
|---|
|  |  |  | </Grid> | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | </Box> | 
|---|
|  |  |  | )} | 
|---|
|  |  |  | </Drawer> | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | }, [mode]); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const onDrop = (sprite, type, x, y) => { | 
|---|
|  |  |  | console.log(sprite, type, x, y); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | const { mapX, mapY } = Tool.getRealPosition(x, y); | 
|---|
|  |  |  | sprite.x = mapX; | 
|---|
|  |  |  | sprite.y = mapY; | 
|---|
|  |  |  | 
|---|
|  |  |  | sx={{ mr: 1 }} | 
|---|
|  |  |  | onClick={() => setDeviceVisible(!deviceVisible)} | 
|---|
|  |  |  | > | 
|---|
|  |  |  | 添加模型 | 
|---|
|  |  |  | {translate('page.map.devices.title')} | 
|---|
|  |  |  | </Button> | 
|---|
|  |  |  | </> | 
|---|
|  |  |  | )} | 
|---|
| New file | 
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const DEVICE_TYPE = Object.freeze({ | 
|---|
|  |  |  | SHELF: "SHELF", | 
|---|
|  |  |  | AGV: "AGV", | 
|---|
|  |  |  | CHARGE: 'CHARGE', | 
|---|
|  |  |  | DIRECTION: 'DIRECTION', | 
|---|
|  |  |  | POINT: "POINT", | 
|---|
|  |  |  | }) | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const DEVICE_Z_INDEX = Object.freeze({ | 
|---|
|  |  |  | SHELF: 1, | 
|---|
|  |  |  | AGV: 1, | 
|---|
|  |  |  | CHARGE: 1, | 
|---|
|  |  |  | DIRECTION: 1, | 
|---|
|  |  |  | POINT: 1 | 
|---|
|  |  |  | }) | 
|---|
|  |  |  | 
|---|
|  |  |  | import * as PIXI from 'pixi.js'; | 
|---|
|  |  |  | import * as TWEEDLE from 'tweedle.js'; | 
|---|
|  |  |  | import { | 
|---|
|  |  |  | DEVICE_TYPE, | 
|---|
|  |  |  | DEVICE_Z_INDEX, | 
|---|
|  |  |  | } from './constants'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import shelf from '/map/shelf.svg'; | 
|---|
|  |  |  | import charge from '/map/charge.svg'; | 
|---|
|  |  |  | import direction from '/map/direction.svg'; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | let app, mapContainer; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const generateSprite = (deviceType) => { | 
|---|
|  |  |  | let sprite; | 
|---|
|  |  |  | switch (deviceType) { | 
|---|
|  |  |  | case DEVICE_TYPE.SHELF: | 
|---|
|  |  |  | sprite = new PIXI.Sprite(PIXI.Texture.from(shelf, { resourceOptions: { scale: 5 } })); | 
|---|
|  |  |  | sprite.width = 50; | 
|---|
|  |  |  | sprite.height = 50; | 
|---|
|  |  |  | sprite.zIndex = DEVICE_Z_INDEX.SHELF; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case DEVICE_TYPE.CHARGE: | 
|---|
|  |  |  | sprite = new PIXI.Sprite(PIXI.Texture.from(charge, { resourceOptions: { scale: 1 } })); | 
|---|
|  |  |  | sprite.width = 60; | 
|---|
|  |  |  | sprite.height = 60; | 
|---|
|  |  |  | sprite.zIndex = DEVICE_Z_INDEX.CHARGE; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | case DEVICE_TYPE.DIRECTION: | 
|---|
|  |  |  | sprite = new PIXI.Sprite(PIXI.Texture.from(direction, { resourceOptions: { scale: 5 } })); | 
|---|
|  |  |  | sprite.width = 112; | 
|---|
|  |  |  | sprite.height = 63; | 
|---|
|  |  |  | sprite.zIndex = DEVICE_Z_INDEX.DIRECTION; | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | default: | 
|---|
|  |  |  | break; | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return sprite; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | export const patchRaLayout = (param) => { | 
|---|
|  |  |  | const parentElement = document.getElementById('main-content'); | 
|---|