Merge branch 'dev' into feature/dev-yj

# Conflicts:
#	src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx
#	src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx
This commit is contained in:
yjnoh 2025-04-23 15:05:56 +09:00
commit abe0ddb731
12 changed files with 138 additions and 42 deletions

13
dev.ecosystem.config.js Normal file
View File

@ -0,0 +1,13 @@
module.exports = {
apps: [
{
name: 'qcast-front-development',
script: 'node_modules/next/dist/bin/next',
instances: 1,
exec_mode: 'fork',
env: {
NODE_ENV: 'development',
},
},
],
}

View File

@ -2,9 +2,12 @@ module.exports = {
apps: [
{
name: 'qcast-front-production',
script: 'npm run start:dev',
instance: 2,
script: 'node_modules/next/dist/bin/next',
instances: 2,
exec_mode: 'cluster',
env: {
NODE_ENV: 'production',
},
},
],
}

View File

@ -452,7 +452,7 @@ const Trestle = forwardRef((props, ref) => {
}),
new Promise((resolve) => {
const roofConstruction = newAddedRoofs.map((roof, index) => ({
const roofConstructions = newAddedRoofs.map((roof, index) => ({
roofIndex: newRoofs[index].index,
addRoof: newRoofs[index],
trestle: {
@ -468,9 +468,9 @@ const Trestle = forwardRef((props, ref) => {
trestleDetail: roof.trestleDetail,
}))
trestleTrigger({
roofConstruction,
roofConstructions,
})
setRoofsStore(roofConstruction)
setRoofsStore(roofConstructions)
resolve()
}),
]

View File

@ -41,7 +41,7 @@ export default function CircuitTrestleSetting({ id }) {
const [tabNum, setTabNum] = useState(1)
const [allocationType, setAllocationType] = useState(ALLOCATION_TYPE.AUTO)
const [circuitAllocationType, setCircuitAllocationType] = useState(1)
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const { managementState, setManagementState } = useContext(GlobalDataContext)
const selectedModules = useRecoilValue(selectedModuleState)
const { getPcsAutoRecommendList, getPcsVoltageChk, getPcsVoltageStepUpList, getPcsManualConfChk } = useMasterController()
@ -83,6 +83,8 @@ export default function CircuitTrestleSetting({ id }) {
} = useCircuitTrestle()
// const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2)
useEffect(() => {
if (!managementState) {
}
// setCircuitData({
// makers,
// selectedMaker,

View File

@ -44,7 +44,7 @@ export default function PowerConditionalSelect(props) {
const { getPcsMakerList, getPcsModelList } = useMasterController()
const selectedModules = useRecoilValue(selectedModuleState)
const { swalFire } = useSwal()
const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2)
// const { trigger: moduleSelectedDataTrigger } = useCanvasPopupStatusController(2)
const [moduleSelectionData, setModuleSelectionData] = useRecoilState(moduleSelectionDataState)
const modelHeader = [
{ name: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.series'), width: '15%', prop: 'pcsSerNm', type: 'color-box' },

View File

@ -42,7 +42,6 @@ export default function StepUp(props) {
const [arrayLength, setArrayLength] = useState(3) //module-table-inner
const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState)
const { getPcsVoltageStepUpList, getPcsAutoRecommendList, getPcsVoltageChk, getPcsConnOptionItemList } = useMasterController()
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const canvas = useRecoilValue(canvasState)
const selectedModules = useRecoilValue(selectedModuleState)
const [optCodes, setOptCodes] = useState([])

View File

@ -25,7 +25,7 @@ export default function PassivityCircuitAllocation(props) {
const { swalFire } = useSwal()
const { getMessage } = useMessage()
const canvas = useRecoilValue(canvasState)
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const { managementState } = useContext(GlobalDataContext)
const selectedModules = useRecoilValue(selectedModuleState)
const [selectedPcs, setSelectedPcs] = useState(selectedModels[0])
const { header, rows, footer } = useRecoilValue(moduleStatisticsState)
@ -37,7 +37,8 @@ export default function PassivityCircuitAllocation(props) {
const circuitNumberText = useRecoilValue(fontSelector('circuitNumberText'))
useEffect(() => {
setModuleStatisticsData()
if (!managementState) {
}
canvas
.getObjects()
.filter((obj) => obj.name === POLYGON_TYPE.MODULE)

View File

@ -9,9 +9,10 @@ import { compasDegAtom } from '@/store/orientationAtom'
import { canvasState, currentCanvasPlanState } from '@/store/canvasAtom'
import { POLYGON_TYPE } from '@/common/common'
import { useCircuitTrestle } from '../useCirCuitTrestle'
import { useEffect } from 'react'
import { useContext } from 'react'
import { addedRoofsState } from '@/store/settingAtom'
import { roofsState } from '@/store/roofAtom'
import { GlobalDataContext } from '@/app/GlobalDataProvider'
/**
* 캔버스 팝업 상태 관리
@ -22,13 +23,14 @@ export function useCanvasPopupStatusController(param = 1) {
const popupType = parseInt(param)
const setCompasDeg = useSetRecoilState(compasDegAtom)
const setModuleSelectionDataStore = useSetRecoilState(moduleSelectionDataState)
const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState)
const setSelectedModules = useSetRecoilState(selectedModuleState)
const { get, promiseGet, getFetcher, postFetcher } = useAxios()
const canvas = useRecoilValue(canvasState)
const currentCanvasPlan = useRecoilValue(currentCanvasPlanState)
const [addedRoofs, setAddedRoofs] = useRecoilState(addedRoofsState)
const [roofs, setRoofs] = useRecoilState(roofsState)
const { managementState, setManagementState } = useContext(GlobalDataContext)
/**
* 팝업 상태 조회
* @param {number} popupTypeParam
@ -54,6 +56,7 @@ export function useCanvasPopupStatusController(param = 1) {
* 조회 전체 데이터 recoil에 저장
*/
const handleModuleSelectionTotal = async () => {
let resultData = {}
for (let i = 1; i < 3; i++) {
const result = await getModuleSelection(i)
if (!result.objectNo) return
@ -63,7 +66,8 @@ export function useCanvasPopupStatusController(param = 1) {
if (data?.compasDeg) setCompasDeg(data.compasDeg)
if (data?.module) setSelectedModules(data.module)
setModuleSelectionDataStore(data)
// setModuleSelectionDataStore(data)
resultData = { ...data }
}
} else if (i === 2) {
const data = JSON.parse(unescapeString(result.popupStatus))
@ -72,13 +76,16 @@ export function useCanvasPopupStatusController(param = 1) {
roofSurfaceList.forEach((surface) => {
surface.modules = modules.filter((module) => module.surfaceId === surface.id)
})
if (data.roofConstruction) {
setRoofs(data.roofConstruction)
// setManagementState({ ...managementState, roofs: data.roofConstruction.map((roof) => roof.construction.managementState) })
if (data.roofConstructions) {
setRoofs(data.roofConstructions)
setManagementState({ ...managementState, roofs: data.roofConstructions.map((roof) => roof.construction.managementState) })
// setModuleSelectionDataStore({ ...moduleSelectionDataStore, roofConstructions: data.roofConstruction })
resultData = { ...resultData, roofConstructions: data.roofConstructions }
}
// if (data?.module) setManagementState(data.common.managementState)
}
}
setModuleSelectionDataStore(resultData)
}
/**

View File

@ -84,7 +84,7 @@ export function useModuleSelection(props) {
//새로고침시 데이터 날아가는거 방지
if (managementState === null) {
setManagementState(managementStateLoaded)
setManagementState(managementState)
} else {
bindInitData()
}

View File

@ -5,16 +5,6 @@ import { useEvent } from '@/hooks/useEvent'
import { useMouse } from '@/hooks/useMouse'
import { useLine } from '@/hooks/useLine'
import { useTempGrid } from '@/hooks/useTempGrid'
import {
outerLineAngle1State,
outerLineAngle2State,
outerLineArrow1State,
outerLineArrow2State,
outerLineDiagonalState,
outerLineLength1State,
outerLineLength2State,
outerLineTypeState,
} from '@/store/outerLineAtom'
import { calculateIntersection, distanceBetweenPoints, findClosestPoint, isPointOnLine } from '@/util/canvas-util'
import { fabric } from 'fabric'
import { useAdsorptionPoint } from '@/hooks/useAdsorptionPoint'
@ -23,6 +13,16 @@ import { usePopup } from '@/hooks/usePopup'
import { calculateAngle, isSamePoint } from '@/util/qpolygon-utils'
import { POLYGON_TYPE } from '@/common/common'
import { useMessage } from '../useMessage'
import {
auxiliaryLineAngle1State,
auxiliaryLineAngle2State,
auxiliaryLineArrow1State,
auxiliaryLineArrow2State,
auxiliaryLineDiagonalState,
auxiliaryLineLength1State,
auxiliaryLineLength2State,
auxiliaryLineTypeState,
} from '@/store/auxiliaryLineAtom'
// 보조선 작성
export function useAuxiliaryDrawing(id, isUseEffect = true) {
@ -49,20 +49,20 @@ export function useAuxiliaryDrawing(id, isUseEffect = true) {
const length2Ref = useRef(0)
const angle1Ref = useRef('')
const angle2Ref = useRef('')
const [length1, setLength1] = useRecoilState(outerLineLength1State)
const [length2, setLength2] = useRecoilState(outerLineLength2State)
const [arrow1, setArrow1] = useRecoilState(outerLineArrow1State)
const [arrow2, setArrow2] = useRecoilState(outerLineArrow2State)
const [type, setType] = useRecoilState(outerLineTypeState)
const [angle1, setAngle1] = useRecoilState(outerLineAngle1State)
const [angle2, setAngle2] = useRecoilState(outerLineAngle2State)
const [outerLineDiagonalLength, setOuterLineDiagonalLength] = useRecoilState(outerLineDiagonalState)
const [length1, setLength1] = useRecoilState(auxiliaryLineLength1State)
const [length2, setLength2] = useRecoilState(auxiliaryLineLength2State)
const [arrow1, setArrow1] = useRecoilState(auxiliaryLineArrow1State)
const [arrow2, setArrow2] = useRecoilState(auxiliaryLineArrow2State)
const [type, setType] = useRecoilState(auxiliaryLineTypeState)
const [angle1, setAngle1] = useRecoilState(auxiliaryLineAngle1State)
const [angle2, setAngle2] = useRecoilState(auxiliaryLineAngle2State)
const [auxiliaryLineDiagonalLength, setAuxiliaryLineDiagonalLength] = useRecoilState(auxiliaryLineDiagonalState)
const arrow1Ref = useRef(arrow1)
const arrow2Ref = useRef(arrow2)
const typeRef = useRef(type)
const outerLineDiagonalLengthRef = useRef(0)
const auxiliaryLineDiagonalLengthRef = useRef(0)
const intersectionPoints = useRef([])
const verticalHorizontalMode = useRecoilValue(verticalHorizontalModeState)
@ -124,7 +124,7 @@ export function useAuxiliaryDrawing(id, isUseEffect = true) {
setAngle1(0)
setAngle2(0)
setOuterLineDiagonalLength(0)
setAuxiliaryLineDiagonalLength(0)
}
const move = (object, x, y) => {
@ -408,7 +408,7 @@ export function useAuxiliaryDrawing(id, isUseEffect = true) {
//대각선 완료될 경우 확인
const checkDiagonal = (direction) => {
const activeElem = document.activeElement
const diagonalLength = outerLineDiagonalLengthRef.current.value // 대각선 길이
const diagonalLength = auxiliaryLineDiagonalLengthRef.current.value // 대각선 길이
const length1Value = length1Ref.current.value
@ -913,9 +913,9 @@ export function useAuxiliaryDrawing(id, isUseEffect = true) {
angle2,
setAngle2,
angle2Ref,
outerLineDiagonalLength,
setOuterLineDiagonalLength,
outerLineDiagonalLengthRef,
auxiliaryLineDiagonalLength,
setAuxiliaryLineDiagonalLength,
auxiliaryLineDiagonalLengthRef,
type,
setType,
handleFix,

View File

@ -24,7 +24,7 @@ export function useCircuitTrestle(executeEffect = false) {
const [selectedModels, setSelectedModels] = useRecoilState(selectedModelsState)
const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState)
const selectedModules = useRecoilValue(selectedModuleState)
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const { managementState } = useContext(GlobalDataContext)
const canvas = useRecoilValue(canvasState)
const setModuleStatistics = useSetRecoilState(moduleStatisticsState)
const resetModuleStatistics = useResetRecoilState(moduleStatisticsState)

View File

@ -0,0 +1,71 @@
import { atom } from 'recoil'
// 보조선 타입
export const AUXILIARY_LINE_TYPE = {
OUTER_LINE: 'outerLine', // 외벽선
RIGHT_ANGLE: 'rightAngle', // 직각
DOUBLE_PITCH: 'doublePitch',
ANGLE: 'angle', // 각도
DIAGONAL_LINE: 'diagonalLine', // 대각선
}
/**
* 보조선 작성에서 사용하는 recoilState
*/
export const auxiliaryLineLength1State = atom({
//길이1
key: 'auxiliaryLineLength1State',
default: 0,
})
export const auxiliaryLineLength2State = atom({
// 길이2
key: 'auxiliaryLineLength2State',
default: 0,
})
export const auxiliaryLineArrow1State = atom({
// 방향1
key: 'auxiliaryLineArrow1State',
default: '',
})
export const auxiliaryLineArrow2State = atom({
// 방향2
key: 'auxiliaryLineArrow2State',
default: '',
})
export const auxiliaryLineAngle1State = atom({
// 각도1
key: 'auxiliaryLineAngle1State',
default: 0,
})
export const auxiliaryLineAngle2State = atom({
// 각도2
key: 'auxiliaryLineAngle2State',
default: 0,
})
export const auxiliaryLineDiagonalState = atom({
// 대각선
key: 'auxiliaryLineDiagonalState',
default: 0,
})
export const auxiliaryLineTypeState = atom({
key: 'auxiliaryLineTypeState',
default: AUXILIARY_LINE_TYPE.OUTER_LINE,
})
export const auxiliaryLinePointsState = atom({
key: 'auxiliaryLinePointsState',
default: [],
})
export const auxiliaryLineFixState = atom({
key: 'auxiliaryLineFixState',
default: false,
})