Compare commits

...

11 Commits

Author SHA1 Message Date
김민식
b74f847f76 [1105] : [【HANASYS DESIGN】混合モジュールでの回路構成について]
[작업내용] : sub module 일 경우 0.66으로 계산하게 수정
2025-06-11 18:18:12 +09:00
fed817c6d0 설치면에 module이 없는 경우 처리 2025-06-11 11:13:18 +09:00
657d971a2b 사진 찍기 전후 처리 추가 2025-06-10 17:02:21 +09:00
765cc9c43f 처마커버 최대 단수 적용 2025-06-10 14:04:19 +09:00
08606adae6 처마커버 최대 단수 적용 2025-06-10 13:58:59 +09:00
68980a8aca seq는 1부터 시작 2025-06-10 13:16:41 +09:00
4ca3e4eae6 [1085] : 【HANASYS DESIGN】架台表示の位置について
가대의 경우도 25% 적용할 수 있도록 수정
2025-06-10 11:06:17 +09:00
6d78a45ebf [1099] : 【HANASYS DESIGN】強化施工・多雪施工で千鳥配置できるモジュールの積算がおかしい。
지지금구 설치 이상 수정
2025-06-10 11:01:53 +09:00
a0cca5fbca [1092] : [特定の組み合わせの時、回路割付後のデータローディングが終わらない]
[작업내용] : 가대 생성시 api 호출 부분에 try catch로 로딩바 제거 로직 추가
2025-06-10 10:34:51 +09:00
b2ff662335 Merge pull request '물건정보에서 저장이후 그림으로 클릭시 에러발생' (#104) from feature/ysCha into dev
Reviewed-on: #104
2025-06-09 17:09:26 +09:00
6f755b8f07 물건정보에서 저장이후 그림으로 클릭시 에러발생 2025-06-09 17:07:51 +09:00
5 changed files with 93 additions and 36 deletions

View File

@ -16,7 +16,7 @@ import { useSwal } from '@/hooks/useSwal'
import { canvasState, canvasZoomState } from '@/store/canvasAtom'
import { useTrestle } from '@/hooks/module/useTrestle'
import { selectedModuleState } from '@/store/selectedModuleOptions'
import { moduleSelectionDataState, selectedModuleState } from '@/store/selectedModuleOptions'
import { v4 as uuidv4 } from 'uuid'
import { useEstimate } from '@/hooks/useEstimate'
@ -60,7 +60,7 @@ export default function CircuitTrestleSetting({ id }) {
const [seletedSubOption, setSeletedSubOption] = useState(null)
const { setModuleStatisticsData } = useCircuitTrestle()
const { handleCanvasToPng } = useImgLoader()
const moduleSelectionData = useRecoilValue(moduleSelectionDataState)
const passivityCircuitAllocationRef = useRef()
const { setIsGlobalLoading } = useContext(QcastContext)
@ -340,8 +340,15 @@ export default function CircuitTrestleSetting({ id }) {
const target = pcsCheck.max ? moduleMaxQty : moduleStdQty
const placementModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE)
let moduleAmount = placementModules.reduce((acc, module) => {
if (moduleSelectionData.module.itemList.length === 1 || module.moduleInfo.itemId === moduleSelectionData.module.itemList[0].itemId) {
return acc + 1
} else {
return acc + 0.66
}
}, 0)
if (placementModules.length > target) {
if (moduleAmount > target) {
swalFire({
title: getMessage('modal.circuit.trestle.setting.circuit.allocation.passivity.all.power.conditional.validation.error01'),
type: 'alert',

View File

@ -56,19 +56,20 @@ export default function StuffSubHeader({ type }) {
*/
const moveFloorPlan = () => {
setFloorPlanObjectNo({ floorPlanObjectNo: objectNo })
const param = {
pid: managementState?.planList?.length === 0 ? '1' : managementState?.planList[0].planNo,
pid: managementState?.planList?.length > 0 ? managementState?.planList[0].planNo : '1',
objectNo: objectNo,
}
if (managementState?.planList?.length === 0) {
setSelectedMenu('surface')
} else {
if (managementState?.planList?.length > 0) {
if (managementState?.planList[0].estimateDate) {
setSelectedMenu('module')
} else {
setSelectedMenu('surface')
}
} else {
setSelectedMenu('surface')
}
const url = `/floor-plan?${queryStringFormatter(param)}`

View File

@ -212,9 +212,14 @@ export function useMasterController() {
}
const getQuotationItem = async (params) => {
return await post({ url: '/api/v1/master/getQuotationItem', data: params }).then((res) => {
return res
})
return await post({ url: '/api/v1/master/getQuotationItem', data: params })
.then((res) => {
return res
})
.catch((error) => {
console.log('🚀 ~ getQuotationItem ~ error:', error)
setIsGlobalLoading(false)
})
}
/**

View File

@ -53,6 +53,7 @@ export const useTrestle = () => {
}
})
surfaces.forEach((surface) => {
getSameLineModules(surface)
const parent = canvas.getObjects().find((obj) => obj.id === surface.parentId)
const roofMaterialIndex = parent.roofMaterial.index
if (+roofSizeSet === 3) {
@ -67,6 +68,7 @@ export const useTrestle = () => {
let moduleRowsTotCnt = 0
let isEaveBar = construction.setupCover
let isSnowGuard = construction.setupSnowCover
let cvrLmtRow = construction.cvrLmtRow
const direction = parent.direction
const rack = surface.trestleDetail.rack
let { rackQty, rackIntvlPct, rackYn, cvrPlvrYn, lessSupFitIntvlPct, lessSupFitQty } = surface.trestleDetail
@ -149,6 +151,10 @@ export const useTrestle = () => {
if (isEaveBar) {
// 처마력바설치 true인 경우 설치
exposedBottomModules.forEach((module) => {
const level = module.level
if (level > cvrLmtRow) {
return
}
const bottomPoints = findTopTwoPoints([...module.getCurrentPoints()], direction)
if (!bottomPoints) return
const eaveBar = new fabric.Line([bottomPoints[0].x, bottomPoints[0].y, bottomPoints[1].x, bottomPoints[1].y], {
@ -167,6 +173,10 @@ export const useTrestle = () => {
if (isChidory && cvrPlvrYn === 'Y') {
leftExposedHalfBottomModules.forEach((module) => {
const level = module.level
if (level > cvrLmtRow) {
return
}
const bottomPoints = findTopTwoPoints([...module.getCurrentPoints()], direction)
let barPoints = []
//설치해야할 반처마커버 포인트를 방향에 따라 설정
@ -197,6 +207,10 @@ export const useTrestle = () => {
})
rightExposedHalfBottomPoints.forEach((module) => {
const level = module.level
if (level > cvrLmtRow) {
return
}
const bottomPoints = findTopTwoPoints([...module.points], direction)
let barPoints = []
//설치해야할 반처마커버 포인트를 방향에 따라 설정
@ -1059,7 +1073,8 @@ export const useTrestle = () => {
const roof = canvas.getObjects().find((obj) => obj.id === surface.parentId)
const degree = getDegreeByChon(roof.roofMaterial.pitch)
rackIntvlPct = rackIntvlPct === 0 ? 1 : rackIntvlPct // 0인 경우 1로 변경
rackIntvlPct = 100 / rackIntvlPct // 퍼센트로 변경
const moduleLeft = lastX ?? left
const moduleTop = lastY ?? top
@ -1573,7 +1588,9 @@ export const useTrestle = () => {
drawBracketWithOutRack(module, rackIntvlPct, module.leftRows + 1, 'L', surface.direction, moduleIntvlHor, moduleIntvlVer)
if (rackQty === 3 && !findSamePointInBottom(exposedBottomModules, module)) {
// 해당 모듈과 같은 위치 맨 아래에 모듈이 없는 경우 하나 더 설치 필요
drawBracketWithOutRack(module, rackIntvlPct / 3, module.leftRows + 1, 'L', surface.direction, moduleIntvlHor, moduleIntvlVer)
if (module.level % 2 !== 0) {
drawBracketWithOutRack(module, rackIntvlPct / 3, module.leftRows + 1, 'L', surface.direction, moduleIntvlHor, moduleIntvlVer)
}
}
if (rackQty === 4) {
drawBracketWithOutRack(module, rackIntvlPct / 3, module.leftRows + 1, 'L', surface.direction, moduleIntvlHor, moduleIntvlVer)
@ -1581,10 +1598,13 @@ export const useTrestle = () => {
})
rightExposedHalfBottomPoints.forEach((module) => {
console.log('rightmodule.level', module.level)
drawBracketWithOutRack(module, rackIntvlPct, module.rightRows + 1, 'R', surface.direction, moduleIntvlHor, moduleIntvlVer)
if (rackQty === 3 && !findSamePointInBottom(exposedBottomModules, module, direction)) {
// 해당 모듈과 같은 위치 맨 아래에 모듈이 없는 경우 하나 더 설치 필요
drawBracketWithOutRack(module, rackIntvlPct / 3, module.rightRows + 1, 'R', surface.direction, moduleIntvlHor, moduleIntvlVer)
if (module.level % 2 === 0) {
drawBracketWithOutRack(module, rackIntvlPct / 3, module.rightRows + 1, 'R', surface.direction, moduleIntvlHor, moduleIntvlVer)
}
}
if (rackQty === 4) {
drawBracketWithOutRack(module, rackIntvlPct / 3, module.rightRows + 1, 'R', surface.direction, moduleIntvlHor, moduleIntvlVer)
@ -2545,23 +2565,15 @@ export const useTrestle = () => {
return result
}
// 가장 왼쪽에 있는 모듈을 기준으로 같은 단에 있는 모듈들 파라미터 생성
const getMostLeftModules = (surface, exposedBottomModules) => {
const getSameLineModules = (surface) => {
const { direction, modules, isChidory } = surface
const parent = canvas.getObjects().find((obj) => obj.id === surface.parentId)
const roofMaterialIndex = parent.roofMaterial.index
const construction = moduleSelectionData?.roofConstructions?.find((construction) => construction.roofIndex === roofMaterialIndex).construction
let isEaveBar = construction.setupCover
let isSnowGuard = construction.setupSnowCover
let { rackYn, cvrPlvrYn, moduleIntvlHor, moduleIntvlVer, rackQty, lessSupFitQty } = surface.trestleDetail
if (rackYn === 'N') {
rackQty = lessSupFitQty
if (!modules || modules.length === 0) {
return
}
// 같은 단에 있는 모듈들의 리스트
let sameLineModuleList = []
let result = []
if (direction === 'south') {
// 모듈의 top으로 groupBy
@ -2612,9 +2624,34 @@ export const useTrestle = () => {
sameLineModuleList = Object.values(groupedByLeft).sort((a, b) => a[0].left - b[0].left)
}
sameLineModuleList.forEach((modules, index) => {
modules.forEach((module) => {
module.set({ level: index + 1 }) // 각 모듈에 level 속성 추가
})
})
return sameLineModuleList
}
// 가장 왼쪽에 있는 모듈을 기준으로 같은 단에 있는 모듈들 파라미터 생성
const getMostLeftModules = (surface, exposedBottomModules) => {
const { direction, modules, isChidory } = surface
const parent = canvas.getObjects().find((obj) => obj.id === surface.parentId)
const roofMaterialIndex = parent.roofMaterial.index
const construction = moduleSelectionData?.roofConstructions?.find((construction) => construction.roofIndex === roofMaterialIndex).construction
let isEaveBar = construction.setupCover
let isSnowGuard = construction.setupSnowCover
let cvrLmtRow = construction.cvrLmtRow
let { rackYn, cvrPlvrYn, moduleIntvlHor, moduleIntvlVer, rackQty, lessSupFitQty } = surface.trestleDetail
let result = []
if (rackYn === 'N') {
rackQty = lessSupFitQty
}
const sameLineModuleList = getSameLineModules(surface, exposedBottomModules)
sameLineModuleList.forEach((modules, index) => {
const moduleRowResultData = {
seq: index,
seq: index + 1,
moduleItemId: modules[0].moduleInfo.itemId,
moduleTpCd: modules[0].moduleInfo.itemTp,
moduleCnt: modules.length,
@ -2646,6 +2683,7 @@ export const useTrestle = () => {
}
// 모듈 하면,최하면 등 구해야함
modules.forEach((module, index) => {
const level = module.level
// 해당 모듈 주변에 다른 모듈이 있는지 확인
let {
bottomModule,
@ -2659,6 +2697,7 @@ export const useTrestle = () => {
bottomLeftModule,
bottomRightModule,
} = findSideModule(module, surface)
if (bottomModule) {
moduleRowResultData.touchedSurfaceCnt++
if (rackYn === 'N') {
@ -2702,10 +2741,12 @@ export const useTrestle = () => {
}
if (cvrPlvrYn === 'Y') {
moduleRowResultData.eavesHalfCnt++
if (bottomLeftModule || bottomRightModule || halfBottomLeftModule || halfBottomRightModule) {
//처마커버 한개 노출 추가
moduleRowResultData.exposedSideEavesCnt++
if (level <= cvrLmtRow) {
moduleRowResultData.eavesHalfCnt++
if (bottomLeftModule || bottomRightModule || halfBottomLeftModule || halfBottomRightModule) {
//처마커버 한개 노출 추가
moduleRowResultData.exposedSideEavesCnt++
}
}
}
} else {
@ -2714,13 +2755,15 @@ export const useTrestle = () => {
moduleRowResultData.exposedBottomBracketCnt += rackQty
}
if (isEaveBar) {
moduleRowResultData.eavesCnt++
if ((rightModule && !leftModule) || (!rightModule && leftModule)) {
// 둘중 하나가 없는경우는 처마커버 노출 추가
moduleRowResultData.exposedSideEavesCnt++
} else if (!rightModule && !leftModule) {
// 양쪽 둘다 없는경우는 처마커버 노출 2개 추가
moduleRowResultData.exposedSideEavesCnt += 2
if (level <= cvrLmtRow) {
moduleRowResultData.eavesCnt++
if ((rightModule && !leftModule) || (!rightModule && leftModule)) {
// 둘중 하나가 없는경우는 처마커버 노출 추가
moduleRowResultData.exposedSideEavesCnt++
} else if (!rightModule && !leftModule) {
// 양쪽 둘다 없는경우는 처마커버 노출 2개 추가
moduleRowResultData.exposedSideEavesCnt += 2
}
}
}
}

View File

@ -343,6 +343,7 @@ export function usePlan(params = {}) {
})
.catch((error) => {
swalFire({ text: error.message, icon: 'error' })
setIsGlobalLoading(false)
})
return rtn
}