From 57c58f09ea772fe06390a03d5ae9c73d6d6d9e56 Mon Sep 17 00:00:00 2001 From: luxiaotao1123 <t1341870251@163.com> Date: 星期六, 12 十月 2024 10:07:53 +0800 Subject: [PATCH] # --- zy-acs-flow/src/map/constants.js | 4 zy-acs-flow/src/map/settings/MapSettings.jsx | 14 ++++ zy-acs-flow/src/map/settings/CopyDrawer.jsx | 108 +++++++++++++++++++++++++++++++++++ zy-acs-flow/src/map/tool.js | 28 +++++++++ zy-acs-flow/src/map/MapPage.jsx | 2 zy-acs-flow/src/map/settings/ConfigSettings.jsx | 4 6 files changed, 151 insertions(+), 9 deletions(-) diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx index b05430e..2e50171 100644 --- a/zy-acs-flow/src/map/MapPage.jsx +++ b/zy-acs-flow/src/map/MapPage.jsx @@ -205,7 +205,7 @@ padding: '0 16px', height: '64px', flexShrink: 0, // keep height - zIndex: 200 + zIndex: 200, }} > <TextField diff --git a/zy-acs-flow/src/map/constants.js b/zy-acs-flow/src/map/constants.js index 9d41518..e5cd9f9 100644 --- a/zy-acs-flow/src/map/constants.js +++ b/zy-acs-flow/src/map/constants.js @@ -2,18 +2,18 @@ export const DEVICE_TYPE = Object.freeze({ SHELF: "SHELF", + STATION: 'STATION', AGV: "AGV", CHARGE: 'CHARGE', - STATION: 'STATION', DIRECTION: 'DIRECTION', POINT: "POINT", }) export const DEVICE_Z_INDEX = Object.freeze({ SHELF: 1, + STATION: 1, AGV: 1, CHARGE: 1, - STATION: 1, DIRECTION: 1, POINT: 1 }) diff --git a/zy-acs-flow/src/map/settings/ConfigSettings.jsx b/zy-acs-flow/src/map/settings/ConfigSettings.jsx index a7d7b4f..2ac2917 100644 --- a/zy-acs-flow/src/map/settings/ConfigSettings.jsx +++ b/zy-acs-flow/src/map/settings/ConfigSettings.jsx @@ -90,7 +90,7 @@ value={field.value ?? ''} fullWidth onChange={(e) => { - field.onChange(e); + field.onChange(e.target.value === '' ? '' : Number(e.target.value)); }} /> )} @@ -108,7 +108,7 @@ value={field.value ?? ''} fullWidth onChange={(e) => { - field.onChange(e); + field.onChange(e.target.value === '' ? '' : Number(e.target.value)); }} /> )} diff --git a/zy-acs-flow/src/map/settings/CopyDrawer.jsx b/zy-acs-flow/src/map/settings/CopyDrawer.jsx index f72ab02..72b3f5a 100644 --- a/zy-acs-flow/src/map/settings/CopyDrawer.jsx +++ b/zy-acs-flow/src/map/settings/CopyDrawer.jsx @@ -77,7 +77,16 @@ }); const CopyDrawer = (props) => { - const { open, onCancel, sprite, value, width = PAGE_DRAWER_WIDTH, handleOnCopy } = props; + const { + open, + onCancel, + sprite, + value, + width = PAGE_DRAWER_WIDTH, + handleOnCopy, + setLastCopiedSprites, + setSpriteSettings, + } = props; const notify = useNotification(); const translate = useTranslate(); const theme = useTheme(); @@ -114,7 +123,99 @@ } const onFormSubmit = (data) => { - console.log(data); + if (!sprite || !data || Object.keys(data).length === 0) { + return; + } + setLastCopiedSprites([]); + for (let i = 0; i < data.copyCount; i++) { + const copiedSprite = Tool.copySprite(sprite); + // copy + switch (data.copyDirect) { + case 'left': + copiedSprite.position.x -= (i + 1) * (data.gap + copiedSprite.width); + break; + case 'right': + copiedSprite.position.x += (i + 1) * (data.gap + copiedSprite.width); + break; + case 'up': + copiedSprite.position.y -= (i + 1) * (data.gap + copiedSprite.height); + break; + case 'down': + copiedSprite.position.y += (i + 1) * (data.gap + copiedSprite.height); + break; + default: + break; + } + // auto-increment-value + if (data.autoIncrement && deviceType) { + switch (deviceType) { + case DEVICE_TYPE.SHELF: + if (data.incrementValue === 'row') { + if (data.incrementMode === 'descending') { + copiedSprite.data.row = sprite.data.row - i - 1; + } else { + copiedSprite.data.row = sprite.data.row + i + 1; + } + } + if (data.incrementValue === 'bay') { + if (data.incrementMode === 'descending') { + copiedSprite.data.bay = sprite.data.bay - i - 1; + } else { + copiedSprite.data.bay = sprite.data.bay + i + 1; + } + } + if (copiedSprite.data.row && copiedSprite.data.bay) { + copiedSprite.data.no = copiedSprite.data.row + '-' + copiedSprite.data.bay; + } + break; + case DEVICE_TYPE.STATION: + if (data.incrementValue === 'no') { + if (data.incrementMode === 'descending') { + copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, - i - 1); + } else { + copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, + i + 1); + } + } + break; + case DEVICE_TYPE.CHARGE: + if (data.incrementValue === 'no') { + if (data.incrementMode === 'descending') { + copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, - i - 1); + } else { + copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, + i + 1); + } + } + break; + case DEVICE_TYPE.DIRECTION: + if (data.incrementValue === 'no') { + if (data.incrementMode === 'descending') { + copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, - i - 1); + } else { + copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, + i + 1); + } + } + break; + case DEVICE_TYPE.POINT: + if (data.incrementValue === 'no') { + if (data.incrementMode === 'descending') { + copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, - i - 1); + } else { + copiedSprite.data.no = Tool.incrementSpriteNo(sprite.data.no, + i + 1); + } + } + break; + case DEVICE_TYPE.AGV: + break; + default: + break; + } + } + + Tool.getMapContainer().addChild(copiedSprite); + Tool.beSettings(copiedSprite, setSpriteSettings); + setLastCopiedSprites(prevArr => [...prevArr, copiedSprite]); + } + onCancel(); handleOnCopy?.(data); notify.info(translate('common.response.success')); }; @@ -205,6 +306,9 @@ min: 0, step: 1, }} + onChange={(e) => { + field.onChange(e.target.value === '' ? '' : Number(e.target.value)); + }} /> )} /> diff --git a/zy-acs-flow/src/map/settings/MapSettings.jsx b/zy-acs-flow/src/map/settings/MapSettings.jsx index e414696..233d4b3 100644 --- a/zy-acs-flow/src/map/settings/MapSettings.jsx +++ b/zy-acs-flow/src/map/settings/MapSettings.jsx @@ -24,6 +24,7 @@ const { sprite, setSpriteSettings, onSubmit, width } = props; const translate = useTranslate(); const [copyVisible, setCopyVisible] = useState(false); + const [lastCopiedSprites, setLastCopiedSprites] = useState([]); const { control, handleSubmit, reset, watch } = useForm({ defaultValues: { @@ -313,7 +314,14 @@ }}> {translate('page.map.settings.map.copy.execute')} </Button> - <Button variant="text" color="primary"> + <Button variant="text" color="primary" onClick={() => { + if (lastCopiedSprites && lastCopiedSprites.length > 0) { + lastCopiedSprites.forEach(copiedSprite => { + Utils.getMapContainer().removeChild(copiedSprite); + }) + setLastCopiedSprites([]); + } + }}> {translate('page.map.settings.map.copy.reverse')} </Button> </Stack> @@ -343,7 +351,7 @@ </Stack> </Grid> </Grid> - </Box> + </Box > <CopyDrawer open={copyVisible} @@ -359,6 +367,8 @@ handleOnCopy={() => { }} + setLastCopiedSprites={setLastCopiedSprites} + setSpriteSettings={setSpriteSettings} /> </> ); diff --git a/zy-acs-flow/src/map/tool.js b/zy-acs-flow/src/map/tool.js index ec7e16f..7bcd534 100644 --- a/zy-acs-flow/src/map/tool.js +++ b/zy-acs-flow/src/map/tool.js @@ -189,6 +189,17 @@ } } +export const copySprite = (sprite) => { + const copiedSprite = generateSprite(sprite.data.type) + initSprite(copiedSprite); + copiedSprite.position.set(sprite.position.x, sprite.position.y); + copiedSprite.scale.set(sprite.scale.x, sprite.scale.y); + copiedSprite.rotation = sprite.rotation; + copiedSprite.data = deepCopy(sprite.data); + copiedSprite.data.uuid = generateID(); + return copiedSprite; +} + export const isSpriteInSelectionBox = (sprite, selectionBox) => { const spriteBounds = sprite.getBounds(); const boxBounds = selectionBox.getBounds(); @@ -313,10 +324,27 @@ effectHalfCircle.position.set(sprite.x, sprite.y); } +export const incrementSpriteNo = (str, incrementValue) => { + const match = str.match(/(\D*)(\d+)/); + if (match) { + const prefix = match[1]; + const numberPart = match[2]; + const newNumber = parseInt(numberPart, 10) + incrementValue; + const paddedNumber = newNumber.toString().padStart(numberPart.length, '0'); + return `${prefix}${paddedNumber}`; + } else { + return str; + } +} + export const generateID = () => { return Date.now().toString(36) + Math.random().toString(36).substring(2); } +export const deepCopy = (data) => { + return JSON.parse(JSON.stringify(data)); +} + export const patchRaLayout = (param) => { const parentElement = document.getElementById('main-content'); if (parentElement && parentElement.classList.contains('RaLayout-content')) { -- Gitblit v1.9.1