일괄 복사, 이동 기능 추가

This commit is contained in:
yjnoh 2025-02-05 16:57:45 +09:00
parent 6010b4023a
commit 65fd3d348f
5 changed files with 107 additions and 97 deletions

View File

@ -57,13 +57,13 @@ export default function PanelEdit(props) {
moduleMove(length, direction) moduleMove(length, direction)
break break
case PANEL_EDIT_TYPE.MOVE_ALL: case PANEL_EDIT_TYPE.MOVE_ALL:
moduleMoveAll(length, direction) moduleMoveAll(length, direction, props.arrayData)
break break
case PANEL_EDIT_TYPE.COPY: case PANEL_EDIT_TYPE.COPY:
moduleCopy(length, direction) moduleCopy(length, direction)
break break
case PANEL_EDIT_TYPE.COPY_ALL: case PANEL_EDIT_TYPE.COPY_ALL:
moduleCopyAll(length, direction) moduleCopyAll(length, direction, props.arrayData)
break break
case PANEL_EDIT_TYPE.COLUMN_MOVE: case PANEL_EDIT_TYPE.COLUMN_MOVE:
moduleMultiMove('column', length, direction) moduleMultiMove('column', length, direction)

View File

@ -145,9 +145,12 @@ export function useModule() {
} }
} }
const moduleMoveAll = (length, direction) => { const moduleMoveAll = (length, direction, surfaceArray) => {
const moduleSetupSurface = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0] surfaceArray.forEach((surface) => {
const modules = canvas.getObjects().filter((obj) => obj.surfaceId === moduleSetupSurface.id && obj.name === POLYGON_TYPE.MODULE) const modules = canvas
.getObjects()
.filter((module) => module.name === POLYGON_TYPE.MODULE)
.filter((module) => module.surfaceId === surface.id)
const objects = getObjects() const objects = getObjects()
let isWarning = false let isWarning = false
@ -164,7 +167,7 @@ export function useModule() {
module.setCoords() module.setCoords()
canvas.renderAll() canvas.renderAll()
if (isOverlapObjects(module, objects) || isOutsideSurface(module, moduleSetupSurface)) { if (isOverlapObjects(module, objects) || isOutsideSurface(module, surface)) {
isWarning = true isWarning = true
module.set({ fill: 'red' }) module.set({ fill: 'red' })
} }
@ -185,13 +188,18 @@ export function useModule() {
}, },
}) })
} }
})
} }
const moduleCopyAll = (length, direction) => { const moduleCopyAll = (length, direction, surfaceArray) => {
const moduleSetupSurface = canvas.getObjects().filter((obj) => canvas.getActiveObjects()[0].id === obj.id)[0] surfaceArray.forEach((surface) => {
const modules = canvas.getObjects().filter((obj) => obj.surfaceId === moduleSetupSurface.id && obj.name === POLYGON_TYPE.MODULE) const modules = canvas
.getObjects()
.filter((module) => module.name === POLYGON_TYPE.MODULE)
.filter((module) => module.surfaceId === surface.id)
const objects = getObjects() const objects = getObjects()
const copyModules = [] const copyModules = []
let copyModule = null let copyModule = null
let isWarning = false let isWarning = false
let moduleLength = 0 let moduleLength = 0
@ -225,7 +233,7 @@ export function useModule() {
copyModules.push(obj) copyModules.push(obj)
obj.setCoords() obj.setCoords()
}) })
if (isOverlapObjects(copyModule, objects) || isOutsideSurface(copyModule, moduleSetupSurface)) { if (isOverlapObjects(copyModule, objects) || isOutsideSurface(copyModule, surface)) {
isWarning = true isWarning = true
copyModule.set({ fill: 'red' }) copyModule.set({ fill: 'red' })
} }
@ -243,6 +251,7 @@ export function useModule() {
}, },
}) })
} }
})
} }
const moduleCopy = (length, direction) => { const moduleCopy = (length, direction) => {

View File

@ -123,7 +123,7 @@ export function useModuleBasicSetting(tabNum) {
makeModuleInstArea(roof, detail.data) makeModuleInstArea(roof, detail.data)
//surface에 상세 데이터 추가 //surface에 상세 데이터 추가
} else { } else {
console.log('가대 데이터가 없네요...') swalFire({ text: getMessage('module.roof.not.exist'), icon: 'warning' })
} }
} }
}) })

View File

@ -747,18 +747,18 @@ export function useContextMenu() {
{ {
id: 'moduleMove', id: 'moduleMove',
name: getMessage('contextmenu.module.move'), name: getMessage('contextmenu.module.move'),
component: <PanelEdit id={popupId} type={PANEL_EDIT_TYPE.MOVE_ALL} />, component: <PanelEdit id={popupId} type={PANEL_EDIT_TYPE.MOVE_ALL} arrayData={currentObject.arrayData} />,
}, },
{ {
id: 'moduleCopy', id: 'moduleCopy',
name: getMessage('contextmenu.module.copy'), name: getMessage('contextmenu.module.copy'),
component: <PanelEdit id={popupId} type={PANEL_EDIT_TYPE.COPY_ALL} />, component: <PanelEdit id={popupId} type={PANEL_EDIT_TYPE.COPY_ALL} arrayData={currentObject.arrayData} />,
},
{
id: 'moduleCircuitNumberEdit',
name: getMessage('contextmenu.module.circuit.number.edit'),
component: <CircuitNumberEdit id={popupId} />,
}, },
// {
// id: 'moduleCircuitNumberEdit',
// name: getMessage('contextmenu.module.circuit.number.edit'),
// component: <CircuitNumberEdit id={popupId} />,
// },
], ],
]) ])
break break

View File

@ -998,5 +998,6 @@
"menu.validation.canvas.roof": "패널을 배치하려면 지붕면을 입력해야 합니다.", "menu.validation.canvas.roof": "패널을 배치하려면 지붕면을 입력해야 합니다.",
"batch.object.outside.roof": "오브젝트는 지붕내에 설치해야 합니다.", "batch.object.outside.roof": "오브젝트는 지붕내에 설치해야 합니다.",
"batch.object.notinstall.cross": "오브젝트는 겹쳐서 설치 할 수 없습니다.", "batch.object.notinstall.cross": "오브젝트는 겹쳐서 설치 할 수 없습니다.",
"module.not.batch.north": "북쪽에는 모듈을 배치할 수 없습니다." "module.not.batch.north": "북쪽에는 모듈을 배치할 수 없습니다.",
"module.trestleDetail.not.exist": "가대 상세 정보가 없습니다."
} }