플랜 복사 시 배치면초기설정 정보 복사(basicSettingCopySave) 처리

This commit is contained in:
changkyu choi 2025-02-20 16:07:48 +09:00
parent d9bb1deee8
commit c932808409
2 changed files with 117 additions and 38 deletions

View File

@ -501,6 +501,67 @@ export function useCanvasSetting() {
} }
} }
/**
* 기본설정(PlacementShapeSetting) 복사 저장
*/
const basicSettingCopySave = async (params) => {
try {
const patternData = {
objectNo: correntObjectNo,
planNo: Number(params.planNo),
roofSizeSet: Number(params.roofSizeSet),
roofAngleSet: params.roofAngleSet,
roofMaterialsAddList: params.roofsData.map((item) => ({
planNo: Number(item.planNo),
roofApply: item.roofApply,
roofSeq: item.roofSeq,
roofMatlCd: item.roofMatlCd,
roofWidth: item.roofWidth,
roofHeight: item.roofHeight,
roofHajebichi: item.roofHajebichi,
roofGap: item.roofGap,
roofLayout: item.roofLayout,
roofPitch: item.roofPitch,
roofAngle: item.roofAngle,
})),
}
await post({ url: `/api/canvas-management/canvas-basic-settings`, data: patternData }).then((res) => {
swalFire({ text: getMessage(res.returnMessage) })
})
/* CanvasSetting Recoil 설정 - roofSizeSet을 문자열로 변환 */
setCanvasSetting({
...basicSetting,
roofSizeSet: String(params.roofSizeSet),
})
/* 배치면초기설정 조회 */
fetchBasicSettings(Number(params.planNo), null)
/* 메뉴 설정 */
if (['2', '3'].includes(params?.roofSizeSet)) {
setMenuNumber(3)
setType('surface')
setCurrentMenu(MENU.BATCH_CANVAS.BATCH_DRAWING)
} else {
setMenuNumber(2)
setType('outline')
setCurrentMenu(MENU.ROOF_COVERING.EXTERIOR_WALL_LINE)
}
/* 모듈 선택 데이터 초기화 */
resetModuleSelectionData()
moduleSelectedDataTrigger({ common: {}, module: {}, roofConstructions: [] })
const isModuleExist = canvas.getObjects().some((obj) => obj.name === POLYGON_TYPE.MODULE)
if (!isModuleExist) {
resetSelectedModules()
}
} catch (error) {
swalFire({ text: error.message, icon: 'error' })
}
}
/** /**
* CanvasSetting 조회 초기화 * CanvasSetting 조회 초기화
*/ */
@ -915,6 +976,7 @@ export function useCanvasSetting() {
setAdsorptionRange, setAdsorptionRange,
fetchSettings, fetchSettings,
fetchBasicSettings, fetchBasicSettings,
basicSettingCopySave,
frontSettings, frontSettings,
globalFont, globalFont,
setGlobalFont, setGlobalFont,

View File

@ -5,7 +5,7 @@ import { usePathname, useRouter } from 'next/navigation'
import { useRecoilState, useResetRecoilState } from 'recoil' import { useRecoilState, useResetRecoilState } from 'recoil'
import { canvasState, currentCanvasPlanState, plansState } from '@/store/canvasAtom' import { canvasState, currentCanvasPlanState, plansState, canvasSettingState } from '@/store/canvasAtom'
import { useAxios } from '@/hooks/useAxios' import { useAxios } from '@/hooks/useAxios'
import { useMessage } from '@/hooks/useMessage' import { useMessage } from '@/hooks/useMessage'
import { useSwal } from '@/hooks/useSwal' import { useSwal } from '@/hooks/useSwal'
@ -39,7 +39,8 @@ export function usePlan(params = {}) {
const resetOuterLinePoints = useResetRecoilState(outerLinePointsState) const resetOuterLinePoints = useResetRecoilState(outerLinePointsState)
const resetPlacementShapeDrawingPoints = useResetRecoilState(placementShapeDrawingPointsState) const resetPlacementShapeDrawingPoints = useResetRecoilState(placementShapeDrawingPointsState)
const { fetchBasicSettings } = useCanvasSetting() const { fetchBasicSettings, basicSettingCopySave } = useCanvasSetting()
const [canvasSetting, setCanvasSetting] = useRecoilState(canvasSettingState)
/** /**
* 마우스 포인터의 가이드라인 제거 * 마우스 포인터의 가이드라인 제거
@ -184,41 +185,55 @@ export function usePlan(params = {}) {
objectNo: objectNo, objectNo: objectNo,
copyFlg: '0', copyFlg: '0',
} }
await promisePost({ url: '/api/object/add-plan', data: planData }) try {
.then((res) => { const res = await promisePost({ url: '/api/object/add-plan', data: planData })
let newPlan = { let newPlan = {
id: res.data.canvasId, id: res.data.canvasId,
objectNo: objectNo, objectNo: objectNo,
planNo: res.data.planNo, planNo: res.data.planNo,
userId: userId, userId: userId,
canvasStatus: '', canvasStatus: '',
isCurrent: true, isCurrent: true,
bgImageName: null, bgImageName: null,
mapPositionAddress: null, mapPositionAddress: null,
} }
if (isInitPlan) { if (isInitPlan) {
/* 초기 플랜 생성인 경우 플랜 목록 초기화 */ /* 초기 플랜 생성인 경우 플랜 목록 초기화 */
setCurrentCanvasPlan(newPlan) setCurrentCanvasPlan(newPlan)
setPlans([newPlan]) setPlans([newPlan])
} else {
if (isCopy) {
/* 복제 플랜 생성인 경우 현재 캔버스 데이터를 복제 */
newPlan.canvasStatus = currentCanvasData()
newPlan.bgImageName = currentCanvasPlan?.bgImageName ?? null
newPlan.mapPositionAddress = currentCanvasPlan?.mapPositionAddress ?? null
}
setCurrentCanvasPlan(newPlan)
setPlans((plans) => [...plans.map((plan) => ({ ...plan, isCurrent: false })), newPlan])
swalFire({ text: getMessage('plan.message.save') })
}
/* 플랜 추가 시 배치면초기설정 정보 조회 */ /* 플랜 추가 시 배치면초기설정 정보 조회 */
fetchBasicSettings(newPlan.planNo, null) fetchBasicSettings(newPlan.planNo, null)
}) } else {
.catch((error) => { if (isCopy) {
swalFire({ text: error.response.data.message, icon: 'error' }) /* 복제 플랜 생성인 경우 현재 캔버스 데이터를 복제 */
}) newPlan.canvasStatus = currentCanvasData()
newPlan.bgImageName = currentCanvasPlan?.bgImageName ?? null
newPlan.mapPositionAddress = currentCanvasPlan?.mapPositionAddress ?? null
/* 복제 시 배치면 초기설정 복사 */
basicSettingCopySave({
...canvasSetting,
planNo: newPlan.planNo,
selectedRoofMaterial: {
...canvasSetting.selectedRoofMaterial,
planNo: newPlan.planNo,
},
roofsData: canvasSetting.roofsData.map((roof) => ({
...roof,
planNo: newPlan.planNo,
})),
})
}
setCurrentCanvasPlan(newPlan)
setPlans((plans) => [...plans.map((plan) => ({ ...plan, isCurrent: false })), newPlan])
swalFire({ text: getMessage('plan.message.save') })
}
} catch (error) {
swalFire({ text: error.response.data.message, icon: 'error' })
}
} }
/** /**
@ -275,7 +290,6 @@ export function usePlan(params = {}) {
const objectNo = floorPlanState.objectNo const objectNo = floorPlanState.objectNo
//견적서 or 발전시뮬 //견적서 or 발전시뮬
if (pathname !== '/floor-plan') { if (pathname !== '/floor-plan') {
await promiseGet({ url: `/api/estimate/${objectNo}/${planNo}/detail` }) await promiseGet({ url: `/api/estimate/${objectNo}/${planNo}/detail` })
.then((res) => { .then((res) => {
@ -304,9 +318,6 @@ export function usePlan(params = {}) {
// 클릭한 플랜 탭으로 이동 // 클릭한 플랜 탭으로 이동
setCurrentCanvasPlan(plans.find((plan) => plan.id === newCurrentId)) setCurrentCanvasPlan(plans.find((plan) => plan.id === newCurrentId))
setPlans((plans) => plans.map((plan) => ({ ...plan, isCurrent: plan.id === newCurrentId }))) setPlans((plans) => plans.map((plan) => ({ ...plan, isCurrent: plan.id === newCurrentId })))
/* 플랜 이동 시 배치면초기설정 정보 조회 (견적서 메뉴 제외) */
fetchBasicSettings(planNo, null)
} else { } else {
swalFire({ text: getMessage('estimate.menu.move.valid1') }) swalFire({ text: getMessage('estimate.menu.move.valid1') })
} }
@ -494,7 +505,13 @@ export function usePlan(params = {}) {
* @param {string} planNo - 플랜번호 * @param {string} planNo - 플랜번호
*/ */
const deleteBasicSettings = async (objectNo, planNo) => { const deleteBasicSettings = async (objectNo, planNo) => {
await promiseDel({ url: `/api/canvas-management/canvas-basic-settings/delete-basic-settings/${objectNo}/${planNo}` }) try {
await promiseDel({ url: `/api/canvas-management/canvas-basic-settings/delete-basic-settings/${objectNo}/${planNo}` })
} catch (error) {
/* 오류를 무시하고 계속 진행 */
console.log('Basic settings delete failed or not found:', error)
// swalFire({ text: error.message, icon: 'error' })
}
} }
return { return {