| | |
| | | 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'); |