dev #520

Merged
ysCha merged 3 commits from dev into prd-deploy 2025-12-24 10:42:53 +09:00
3 changed files with 52 additions and 18 deletions

View File

@ -1,13 +1,10 @@
import { GlobalDataContext } from '@/app/GlobalDataProvider'
import QSelectBox from '@/components/common/select/QSelectBox' import QSelectBox from '@/components/common/select/QSelectBox'
import { useMessage } from '@/hooks/useMessage' import { useMessage } from '@/hooks/useMessage'
import { canvasState } from '@/store/canvasAtom' import { canvasState } from '@/store/canvasAtom'
import { modelState, pcsCheckState } from '@/store/circuitTrestleAtom' import { pcsCheckState } from '@/store/circuitTrestleAtom'
import { selectedModuleState } from '@/store/selectedModuleOptions' import { selectedModuleState } from '@/store/selectedModuleOptions'
import { useContext, useEffect, useState } from 'react' import { useEffect, useState } from 'react'
import { useRecoilState, useRecoilValue } from 'recoil' import { useRecoilState, useRecoilValue } from 'recoil'
import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController'
import { canvasPopupStatusStore } from '@/store/canvasPopupStatusAtom'
import { useMasterController } from '@/hooks/common/useMasterController' import { useMasterController } from '@/hooks/common/useMasterController'
import { v4 as uuidv4 } from 'uuid' import { v4 as uuidv4 } from 'uuid'
import { globalLocaleStore } from '@/store/localeAtom' import { globalLocaleStore } from '@/store/localeAtom'
@ -15,7 +12,6 @@ import { POLYGON_TYPE } from '@/common/common'
import { useSwal } from '@/hooks/useSwal' import { useSwal } from '@/hooks/useSwal'
import { circuitNumDisplaySelector } from '@/store/settingAtom' import { circuitNumDisplaySelector } from '@/store/settingAtom'
import { fontSelector } from '@/store/fontAtom' import { fontSelector } from '@/store/fontAtom'
import { PCS_MKR_MULTI_TYPE } from './PowerConditionalSelect'
export default function StepUp(props) { export default function StepUp(props) {
const { const {
@ -109,7 +105,7 @@ export default function StepUp(props) {
/** 캔버스에 회로 정보 적용 */ /** 캔버스에 회로 정보 적용 */
// pcs setSubOpsions, setMainOptions // pcs setSubOpsions, setMainOptions
console.log('stepUpListData', stepUpListData) console.log('stepUpListData', stepUpListData)
let mChk = 0; let mChk = 0
stepUpListData[0].pcsItemList.forEach((pcsItem, index) => { stepUpListData[0].pcsItemList.forEach((pcsItem, index) => {
const optionList = formatOptionCodes(pcsItem.optionList) const optionList = formatOptionCodes(pcsItem.optionList)
if (isMultiOptions()) { if (isMultiOptions()) {
@ -166,7 +162,7 @@ export default function StepUp(props) {
targetModule.circuitNumber = module.circuit targetModule.circuitNumber = module.circuit
canvas.add(moduleCircuitText) canvas.add(moduleCircuitText)
} else { } else {
mChk++; mChk++
} }
}) })
}) })
@ -399,10 +395,14 @@ export default function StepUp(props) {
})) }))
} }
const handleChangeApplyParalQty = (mainIdx, subIdx, applyParalQty) => {
handleRowClick(mainIdx, subIdx, applyParalQty)
}
/** /**
* 선택 핸들러 함수 추가 * 선택 핸들러 함수 추가
*/ */
const handleRowClick = (mainIdx, subIdx) => { const handleRowClick = (mainIdx, subIdx, applyParalQty = null) => {
/** 자동 승압 설정인 경우만 실행 */ /** 자동 승압 설정인 경우만 실행 */
if (allocationType !== 'auto') return if (allocationType !== 'auto') return
@ -434,7 +434,13 @@ export default function StepUp(props) {
/** 선택된 serQty 찾기 */ /** 선택된 serQty 찾기 */
const selectedSerQty = matchingPcsItem?.serQtyList.find((serQty) => serQty.selected)?.serQty || 0 const selectedSerQty = matchingPcsItem?.serQtyList.find((serQty) => serQty.selected)?.serQty || 0
if (index === 0) {
return {
...pcsItem,
applySerQty: selectedSerQty,
applyParalQty: +applyParalQty,
}
}
return { return {
...pcsItem, ...pcsItem,
applySerQty: selectedSerQty, applySerQty: selectedSerQty,
@ -474,7 +480,7 @@ export default function StepUp(props) {
module.pcsItemId = null module.pcsItemId = null
}) })
/** 선택된 모듈 목록 추가 */ /** 선택된 모듈 목록 추가 */
selectedData.roofSurfaceList.forEach((roofSurface) => { selectedData.roofSurfaceList.forEach((roofSurface) => {
const targetSurface = canvas.getObjects().filter((obj) => obj.id === roofSurface.roofSurfaceId)[0] const targetSurface = canvas.getObjects().filter((obj) => obj.id === roofSurface.roofSurfaceId)[0]
const moduleIds = targetSurface.modules.map((module) => { const moduleIds = targetSurface.modules.map((module) => {
@ -523,7 +529,7 @@ export default function StepUp(props) {
canvas.renderAll() canvas.renderAll()
setModuleStatisticsData() setModuleStatisticsData()
} }
/** /**
* 현재 선택된 값들을 가져오는 함수 추가 * 현재 선택된 값들을 가져오는 함수 추가
@ -645,15 +651,39 @@ export default function StepUp(props) {
<tr <tr
key={`row-${serQtyIdx}`} key={`row-${serQtyIdx}`}
className={`${item.selected ? 'on' : ''}`} className={`${item.selected ? 'on' : ''}`}
onClick={() => handleRowClick(idx, serQtyIdx)} onClick={() => {
if (idx === 0) return
handleRowClick(idx, serQtyIdx)
}}
style={{ cursor: allocationType === 'auto' ? 'pointer' : 'default' }} style={{ cursor: allocationType === 'auto' ? 'pointer' : 'default' }}
> >
<td className="al-r">{item.serQty}</td> <td className="al-r">{item.serQty}</td>
<td className="al-r"> <td className="al-r">
{/* 2025.12.04 select 추가 */} {/* 2025.12.04 select 추가 */}
<select className="select-light dark table-select" name="" id=""> {idx === 0 ? (
<option value="">{item.paralQty}</option> <select
</select> className="select-light dark table-select"
defaultValue={item.paralQty}
name=""
id=""
onChange={(e) => {
handleChangeApplyParalQty(idx, serQtyIdx, e.target.value)
}}
>
{item.paralQty === 0 && (
<option key="0" value="0">
0
</option>
)}
{Array.from({ length: item.paralQty }, (_, i) => i + 1).map((num) => (
<option key={num} value={num}>
{num}
</option>
))}
</select>
) : (
<>{item.paralQty}</>
)}
</td> </td>
{/* <td className="al-r">{item.paralQty}</td> */} {/* <td className="al-r">{item.paralQty}</td> */}
</tr> </tr>

View File

@ -267,14 +267,14 @@ export function useModuleBasicSetting(tabNum) {
//도머일때 //도머일때
if (obj.name === BATCH_TYPE.TRIANGLE_DORMER || obj.name === BATCH_TYPE.PENTAGON_DORMER) { if (obj.name === BATCH_TYPE.TRIANGLE_DORMER || obj.name === BATCH_TYPE.PENTAGON_DORMER) {
const groupPoints = obj.getCurrentPoints() const groupPoints = obj.getCurrentPoints()
const offsetObjects = offsetPolygon(groupPoints, 10) const offsetObjects = offsetPolygon(groupPoints, 30)
const dormerOffset = new QPolygon(offsetObjects, batchObjectOptions) const dormerOffset = new QPolygon(offsetObjects, batchObjectOptions)
dormerOffset.setViewLengthText(false) dormerOffset.setViewLengthText(false)
canvas.add(dormerOffset) //모듈설치면 만들기 canvas.add(dormerOffset) //모듈설치면 만들기
} else { } else {
//개구, 그림자일때 //개구, 그림자일때
const points = obj.getCurrentPoints() const points = obj.getCurrentPoints()
const offsetObjects = offsetPolygon(points, 10) const offsetObjects = offsetPolygon(points, 30)
const offset = new QPolygon(offsetObjects, batchObjectOptions) const offset = new QPolygon(offsetObjects, batchObjectOptions)
offset.setViewLengthText(false) offset.setViewLengthText(false)
canvas.add(offset) //모듈설치면 만들기 canvas.add(offset) //모듈설치면 만들기

View File

@ -50,6 +50,10 @@ export function useCanvasEvent() {
if (target) { if (target) {
// settleDown(target) // settleDown(target)
// roof 이동 후 좌표 재계산
if (target.name === POLYGON_TYPE.ROOF && target.type === 'QPolygon') {
target.fire('polygonMoved')
}
} }
}, },
addEvent: (e) => { addEvent: (e) => {