Merge pull request 'dev' (#742) from dev into dev-deploy

Reviewed-on: #742
This commit is contained in:
ysCha 2026-03-31 17:47:31 +09:00
commit 64c4ad3173
3 changed files with 44 additions and 2 deletions

View File

@ -359,6 +359,10 @@ export function useMasterController() {
}) })
} }
const quotationErrSave = async (params) => {
return await post({ url: '/api/v1/master/quotationErrSave', data: params })
}
return { return {
getRoofMaterialList, getRoofMaterialList,
getModuleTypeItemList, getModuleTypeItemList,
@ -374,5 +378,6 @@ export function useMasterController() {
updateObjectDate, updateObjectDate,
getQuotationItem, getQuotationItem,
getPcsConnOptionItemList, getPcsConnOptionItemList,
quotationErrSave,
} }
} }

View File

@ -1,5 +1,5 @@
import { useRecoilValue } from 'recoil' import { useRecoilValue } from 'recoil'
import { canvasState, currentAngleTypeSelector } from '@/store/canvasAtom' import { canvasState, currentAngleTypeSelector, currentCanvasPlanState } from '@/store/canvasAtom'
import { POLYGON_TYPE, TRESTLE_MATERIAL } from '@/common/common' import { POLYGON_TYPE, TRESTLE_MATERIAL } from '@/common/common'
import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { moduleSelectionDataState } from '@/store/selectedModuleOptions'
import { getDegreeByChon } from '@/util/canvas-util' import { getDegreeByChon } from '@/util/canvas-util'
@ -11,6 +11,7 @@ import { useContext } from 'react'
import { QcastContext } from '@/app/QcastProvider' import { QcastContext } from '@/app/QcastProvider'
import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle' import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle'
import { useMessage } from '@/hooks/useMessage' import { useMessage } from '@/hooks/useMessage'
import { loginUserStore } from '@/store/commonAtom'
// 모듈간 같은 행, 열의 마진이 10 이하인 경우는 같은 행, 열로 간주 // 모듈간 같은 행, 열의 마진이 10 이하인 경우는 같은 행, 열로 간주
const MODULE_MARGIN = 10 const MODULE_MARGIN = 10
@ -18,7 +19,9 @@ const MODULE_MARGIN = 10
export const useTrestle = () => { export const useTrestle = () => {
const canvas = useRecoilValue(canvasState) const canvas = useRecoilValue(canvasState)
const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //다음으로 넘어가는 최종 데이터 const moduleSelectionData = useRecoilValue(moduleSelectionDataState) //다음으로 넘어가는 최종 데이터
const { getQuotationItem } = useMasterController() const { getQuotationItem, quotationErrSave } = useMasterController()
const currentCanvasPlan = useRecoilValue(currentCanvasPlanState)
const loginUserState = useRecoilValue(loginUserStore)
const currentAngleType = useRecoilValue(currentAngleTypeSelector) const currentAngleType = useRecoilValue(currentAngleTypeSelector)
const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet
const isTrestleDisplay = useRecoilValue(trestleDisplaySelector) const isTrestleDisplay = useRecoilValue(trestleDisplaySelector)
@ -757,6 +760,12 @@ export const useTrestle = () => {
text: result.resultMsg || getMessage('common.message.noData'), text: result.resultMsg || getMessage('common.message.noData'),
icon: 'error' icon: 'error'
}) })
quotationErrSave({
objectNo: currentCanvasPlan.objectNo,
planNo: currentCanvasPlan.planNo,
rejectRsn: result.resultMsg,
regId: loginUserState.userId,
})
clear() clear()
setViewCircuitNumberTexts(true) setViewCircuitNumberTexts(true)
setIsGlobalLoading(false) setIsGlobalLoading(false)

View File

@ -489,6 +489,34 @@ export function useCanvasEvent() {
viewportTransform[5] += deltaY viewportTransform[5] += deltaY
canvas.setViewportTransform(viewportTransform) canvas.setViewportTransform(viewportTransform)
// 브라우저 스크롤을 중앙으로 조정하여 전체 canvas를 모니터 중앙에 위치
const canvasElement = canvas.getElement()
const canvasRect = canvasElement.getBoundingClientRect()
// 현재 스크롤 위치
const currentScrollTop = window.pageYOffset || document.documentElement.scrollTop
const currentScrollLeft = window.pageXOffset || document.documentElement.scrollLeft
// canvas의 현재 화면 위치
const canvasScreenTop = canvasRect.top + currentScrollTop
const canvasScreenLeft = canvasRect.left + currentScrollLeft
// 모니터 중앙
const monitorCenterX = window.innerWidth / 2
const monitorCenterY = window.innerHeight / 2
// canvas가 모니터 중앙에 오도록 스크롤 위치 계산
const targetScrollLeft = canvasScreenLeft + (canvasRect.width / 2) - monitorCenterX
const targetScrollTop = canvasScreenTop + (canvasRect.height / 2) - monitorCenterY + menuHeightOffset
// 스크롤을 중앙으로 이동
window.scrollTo({
top: targetScrollTop,
left: targetScrollLeft,
behavior: 'smooth' // 부드러운 스크롤
})
canvas.renderAll() canvas.renderAll()
} }