From 54e6a31dcfe2f102e1a516f779627dea507a97fc Mon Sep 17 00:00:00 2001 From: ysCha Date: Wed, 10 Jun 2026 13:10:54 +0900 Subject: [PATCH] =?UTF-8?q?[1189=5F2]=20=E6=89=8B=E5=8B=95=E5=9B=9E?= =?UTF-8?q?=E8=B7=AF=E5=89=B2=E3=82=8A=E5=BD=93=E3=81=A6(=EC=88=98?= =?UTF-8?q?=EB=8F=99=20=ED=9A=8C=EB=A1=9C=20=ED=95=A0=EB=8B=B9)=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20=EB=93=9C=EB=9E=98?= =?UTF-8?q?=EA=B7=B8=20=EB=B0=95=EC=8A=A4=20=EB=B3=B5=EC=88=98=EC=84=A0?= =?UTF-8?q?=ED=83=9D=20=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 작업내용 : - PassivityCircuitAllocation.jsx: canvas.selection=true (화면 한정) + selection:created/updated 이벤트로 handleBoxSelect 등록 - handleBoxSelect: activeSelection 의 모듈만 targetModules 에 가산 병합, 이후 discard (단일 클릭 토글 보존) - cleanup: 이벤트 해제 + canvas.selection 복원 + discardActiveObject Co-Authored-By: Claude Opus 4 --- .../step/type/PassivityCircuitAllocation.jsx | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx index 2a6cb226..dc85d1c6 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -49,7 +49,16 @@ export default function PassivityCircuitAllocation(props) { obj.on('mousedown', (e) => handleTargetModules(obj)) }) + // [CIRCUIT-BOX-SELECT 2026-06-10] 手動回路割り当て 에서만 드래그 박스 복수선택 활성화 (이 화면 한정) + const prevSelection = canvas.selection + canvas.selection = true + canvas.on('selection:created', handleBoxSelect) + canvas.on('selection:updated', handleBoxSelect) + return () => { + canvas.off('selection:created', handleBoxSelect) + canvas.off('selection:updated', handleBoxSelect) + canvas.selection = prevSelection canvas .getObjects() .filter((obj) => obj.name === POLYGON_TYPE.MODULE) @@ -57,6 +66,7 @@ export default function PassivityCircuitAllocation(props) { obj.set({ strokeWidth: 0.3 }) obj.off('mousedown') }) + canvas.discardActiveObject() canvas.renderAll() } }, []) @@ -84,6 +94,28 @@ export default function PassivityCircuitAllocation(props) { canvas.renderAll() } + // [CIRCUIT-BOX-SELECT 2026-06-10] 드래그 박스(activeSelection) 로 잡힌 모듈을 targetModules 에 가산 병합 후 fabric 선택 해제 + const handleBoxSelect = () => { + const active = canvas.getActiveObject() + if (!active || active.type !== 'activeSelection') return + const boxModules = active.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE) + if (boxModules.length === 0) return + + setTargetModules((prev) => { + const next = Array.isArray(prev) ? [...prev] : [] + boxModules.forEach((obj) => { + if (!next.includes(obj.id)) { + obj.set({ strokeWidth: 2 }) + next.push(obj.id) + } + }) + return next + }) + + canvas.discardActiveObject() + canvas.renderAll() + } + const handleCircuitNumberFix = () => { const pcsTpCd = selectedPcs.pcsTpCd // 실내집중형, 옥외멀티형 let uniqueCircuitNumbers = [