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