Merge remote-tracking branch 'origin/qcast-pub' into qcast-pub

# Conflicts:
#	src/locales/ja.json
#	src/locales/ko.json
This commit is contained in:
김민식 2025-02-10 15:15:24 +09:00
commit 94b97215e5
8 changed files with 77 additions and 17 deletions

View File

@ -74,7 +74,7 @@ export default function CanvasMenu(props) {
const [estimateCopyPopupOpen, setEstimateCopyPopupOpen] = useState(false)
const { getMessage } = useMessage()
const { saveCanvas } = usePlan()
const { saveCanvas, reloadCanvasStatus } = usePlan()
const { swalFire } = useSwal()
const { initEvent, addCanvasMouseEventListener, addDocumentEventListener } = useEvent()
// const { initEvent, addCanvasMouseEventListener, addDocumentEventListener } = useContext(EventContext)
@ -149,7 +149,7 @@ export default function CanvasMenu(props) {
setIsGlobalLoading(false)
}
const onClickNav = (menu) => {
const onClickNav = async (menu) => {
switch (menu.index) {
case 0:
swalFire({
@ -164,17 +164,45 @@ export default function CanvasMenu(props) {
case 1:
setType('placementShape')
onClickPlacementInitialMenu()
await reloadCanvasStatus(objectNo, pid)
break
case 2:
setType('outline')
await reloadCanvasStatus(objectNo, pid)
break
case 3:
setType('surface')
break
case 4:
console.log('🚀 ~ onClickNav ~ menu:', menu)
console.log('🚀 ~ onClickNav ~ menuNumber:', menuNumber)
if (menuNumber > menu.index) {
const modules = canvas.getObjects().filter((module) => module.name === POLYGON_TYPE.MODULE)
if (modules.length > 0) {
swalFire({
text: getMessage('module.delete.confirm'),
type: 'confirm',
confirmFn: () => {
//
const moduleSurfacesArray = canvas
.getObjects()
.filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE || obj.name === POLYGON_TYPE.MODULE)
if (moduleSurfacesArray.length > 0) {
moduleSurfacesArray.forEach((moduleSurface) => {
canvas.remove(moduleSurface)
})
canvas.renderAll()
}
setType('surface')
},
denyFn: () => {
setType('surface')
},
})
}
} else {
setType('surface')
}
await reloadCanvasStatus(objectNo, pid)
break
case 4:
if (menuNumber < menu.index) {
if (!checkMenuAndCanvasState()) {
swalFire({ text: getMessage('menu.validation.canvas.roof') })
@ -185,7 +213,7 @@ export default function CanvasMenu(props) {
} else {
router.push(`/floor-plan?pid=${pid}&objectNo=${objectNo}`)
}
await reloadCanvasStatus(objectNo, pid)
break
case 5:
setIsGlobalLoading(true)
@ -591,10 +619,10 @@ export default function CanvasMenu(props) {
<li
key={`canvas-menu-${menu.index}`}
className={`canvas-menu-item ${menuNumber === menu.index ? 'active' : ''}`}
onClick={() => {
onClick={async () => {
if (['2', '3'].includes(canvasSetting?.roofSizeSet) && menu.index === 2) return
if (menuNumber === 4 && [1, 2].includes(menu.index)) return
onClickNav(menu)
await onClickNav(menu)
}}
>
<button className={checkMenuState(menu) ? 'no-click' : ''}>

View File

@ -108,6 +108,7 @@ export default function BasicSetting({ id, pos = { x: 50, y: 230 } }) {
.some((obj) => obj.modules?.length > 0)
if (hasModules) {
orientationRef.current.handleNextStep()
setTabNum(3)
}
}, [])

View File

@ -458,11 +458,8 @@ export default function CircuitTrestleSetting({ id }) {
swalFire({
title: getMessage('not.allocation.exist.module'),
type: 'alert',
confirmFn: () => {},
})
return
// canvas.remove(...notAllocationModules)
// canvas.renderAll()
}
setTabNum(2)
}

View File

@ -21,6 +21,7 @@ import { useMasterController } from '@/hooks/common/useMasterController'
import { v4 as uuidv4 } from 'uuid'
// import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle'
import { isObjectNotEmpty } from '@/util/common-utils'
import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle'
export function useModuleBasicSetting(tabNum) {
const canvas = useRecoilValue(canvasState)
@ -49,6 +50,7 @@ export function useModuleBasicSetting(tabNum) {
const [saleStoreNorthFlg, setSaleStoreNorthFlg] = useState(false)
const [currentObject, setCurrentObject] = useRecoilState(currentObjectState)
const { setModuleStatisticsData } = useCircuitTrestle()
useEffect(() => {
// console.log('basicSetting', basicSetting)
@ -275,10 +277,23 @@ export function useModuleBasicSetting(tabNum) {
//바로 들어올때
const setupModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE)
const eaveBars = canvas.getObjects().filter((obj) => obj.name === 'eaveBar' || obj.name === 'halfEaveBar')
const racks = canvas.getObjects().filter((obj) => obj.name === 'rack' || obj.name === 'smartRack')
const brackets = canvas.getObjects().filter((obj) => obj.name === 'brackets')
setupModules.forEach((obj) => {
canvas.bringToFront(obj)
})
eaveBars.forEach((obj) => {
canvas.bringToFront(obj)
})
racks.forEach((obj) => {
canvas.bringToFront(obj)
})
brackets.forEach((obj) => {
canvas.bringToFront(obj)
})
//모듈설치면 클릭이벤트
addTargetMouseEventListener('mousedown', setupSurface, function () {
toggleSelection(setupSurface)

View File

@ -61,8 +61,7 @@ export function useCircuitTrestle() {
// 사용된 모듈아이템 목록
const getUseModuleItemList = () => {
console.log('🚀 ~ getUseModuleItemList ~ selectedModules:', selectedModules)
return moduleSelectionData.module?.itemList?.map((m) => {
return selectedModules?.itemList?.map((m) => {
return {
itemId: m.itemId,
mixMatlNo: m.mixMatlNo,

View File

@ -134,7 +134,7 @@ export function usePlan(params = {}) {
/**
* objectNo에 해당하는 canvas 목록을 조회
*/
const getCanvasByObjectNo = async (userId, objectNo, planNo) => {
const getCanvasByObjectNo = async (objectNo, planNo) => {
return await get({ url: `/api/canvas-management/canvas-statuses/by-object/${objectNo}` }).then((res) =>
res.map((item) => ({
id: item.id,
@ -397,7 +397,7 @@ export function usePlan(params = {}) {
*/
const loadCanvasPlanData = async (userId, objectNo, planNo) => {
console.log('🚀 ~ loadCanvasPlanData ~ userId, objectNo, planNo:', userId, objectNo, planNo)
await getCanvasByObjectNo(userId, objectNo, planNo).then(async (res) => {
await getCanvasByObjectNo(objectNo, planNo).then(async (res) => {
if (res.length > 0) {
setCurrentCanvasPlan(res.find((plan) => plan.planNo === planNo))
setPlans(res)
@ -415,6 +415,22 @@ export function usePlan(params = {}) {
setPlans((plans) => plans.map((plan) => ({ ...plan, canvasStatus: null })))
}
/**
* plan canvasStatus 불러오기
*
* 견적서/발전시뮬레이션에서 플랜 이동 현재 플랜의 canvasStatus를 불러오기 위해 사용
*/
const reloadCanvasStatus = async (objectNo, planNo) => {
if (pathname === '/floor-plan/estimate/5' || pathname === '/floor-plan/simulator/6') {
await getCanvasByObjectNo(objectNo, planNo).then((res) => {
if (res.length > 0) {
setCurrentCanvasPlan((prev) => ({ ...prev, canvasStatus: res.find((plan) => plan.planNo === planNo).canvasStatus }))
setPlans((plans) => plans.map((plan) => ({ ...plan, canvasStatus: res.find((plan) => plan.planNo === planNo).canvasStatus })))
}
})
}
}
/**
* 현재 plan 이동 -> 새로운 링크로 이동
*/
@ -434,5 +450,6 @@ export function usePlan(params = {}) {
handleDeletePlan,
loadCanvasPlanData,
resetCanvasStatus,
reloadCanvasStatus,
}
}

View File

@ -1010,7 +1010,9 @@
"batch.object.outside.roof": "オブジェクトは屋根に設置する必要があります。",
"batch.object.notinstall.cross": "オブジェクトは重複してインストールできません。",
"module.not.batch.north": "북쪽에는 모듈을 배치할 수 없습니다.",
"module.trestleDetail.not.exist": "가대 상세 정보가 없습니다.",
"max.select": "최대 {0}개까지 선택할 수 있습니다.(JA)",
"not.allocation.exist.module": "할당하지 않은 모듈이 있습니다.(JA)",
"roof.is.not.selected": "지붕을 선택해주세요.(JA)"
"roof.is.not.selected": "지붕을 선택해주세요.(JA)",
"module.delete.confirm": "パネルを削除して面入力に戻ります。正しいですか?\nはいを選択すると削除し、面入力に戻ります。\nいいえ」を選択すると、削除せずに現在の状態を維持します。"
}

View File

@ -1013,6 +1013,7 @@
"module.not.batch.north": "북쪽에는 모듈을 배치할 수 없습니다.",
"module.trestleDetail.not.exist": "가대 상세 정보가 없습니다.",
"max.select": "최대 {0}개까지 선택할 수 있습니다.",
"module.delete.confirm": "패널을 삭제하고 면입력으로 돌아갑니다. 맞습니까?\n[예]를 선택하면 삭제하고, 면 입력으로 돌아갑니다.\n[아니오]를 선택하면 삭제하지 않고 현재 상태를 유지합니다.",
"not.allocation.exist.module": "할당하지 않은 모듈이 있습니다.",
"roof.is.not.selected": "지붕을 선택해주세요."
}