Merge branch 'qcast-pub' into dev
This commit is contained in:
commit
3cc0eb2b82
@ -20,8 +20,9 @@ import { useTrestle } from '@/hooks/module/useTrestle'
|
||||
import { selectedModuleState } from '@/store/selectedModuleOptions'
|
||||
import { v4 as uuidv4 } from 'uuid'
|
||||
|
||||
import { stepUpListDataState } from '@/store/circuitTrestleAtom'
|
||||
import { useEstimate } from '@/hooks/useEstimate'
|
||||
import { useCircuitTrestle } from '@/hooks/useCirCuitTrestle'
|
||||
import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupStatusController'
|
||||
|
||||
const ALLOCATION_TYPE = {
|
||||
AUTO: 'auto',
|
||||
@ -35,13 +36,6 @@ export default function CircuitTrestleSetting({ id }) {
|
||||
const { saveEstimate } = useEstimate()
|
||||
const canvas = useRecoilValue(canvasState)
|
||||
|
||||
const [makers, setMakers] = useRecoilState(makersState)
|
||||
const [selectedMaker, setSelectedMaker] = useRecoilState(selectedMakerState)
|
||||
const [series, setSeries] = useRecoilState(seriesState)
|
||||
const [models, setModels] = useRecoilState(modelsState)
|
||||
const [selectedModels, setSelectedModels] = useRecoilState(selectedModelsState)
|
||||
const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState)
|
||||
|
||||
const [tabNum, setTabNum] = useState(1)
|
||||
const [allocationType, setAllocationType] = useState(ALLOCATION_TYPE.AUTO)
|
||||
const [circuitAllocationType, setCircuitAllocationType] = useState(1)
|
||||
@ -52,15 +46,44 @@ export default function CircuitTrestleSetting({ id }) {
|
||||
// 회로할당(승합설정)에서 선택된 값들을 저장할 상태 추가
|
||||
const [selectedStepUpValues, setSelectedStepUpValues] = useState({})
|
||||
const [getStepUpSelections, setGetStepUpSelections] = useState(null)
|
||||
|
||||
const { trigger: setCircuitData } = useCanvasPopupStatusController(4)
|
||||
// const [stepUpListData, setStepUpListData] = useRecoilState(stepUpListDataState)
|
||||
const [stepUpListData, setStepUpListData] = useState([])
|
||||
const [seletedOption, setSeletedOption] = useState(null)
|
||||
const {
|
||||
makers,
|
||||
setMakers,
|
||||
selectedMaker,
|
||||
setSelectedMaker,
|
||||
series,
|
||||
setSeries,
|
||||
models,
|
||||
setModels,
|
||||
selectedModels,
|
||||
setSelectedModels,
|
||||
pcsCheck,
|
||||
setPcsCheck,
|
||||
getOptYn,
|
||||
getPcsItemList,
|
||||
getSelectedPcsItemList,
|
||||
getUseModuleItemList,
|
||||
getRoofSurfaceList,
|
||||
getModuleList,
|
||||
removeNotAllocationModules,
|
||||
} = useCircuitTrestle()
|
||||
|
||||
useEffect(() => {
|
||||
if (!managementState) {
|
||||
setManagementState(managementStateLoaded)
|
||||
}
|
||||
setCircuitData({
|
||||
makers,
|
||||
selectedMaker,
|
||||
series,
|
||||
models,
|
||||
selectedModels,
|
||||
pcsCheck,
|
||||
})
|
||||
}, [])
|
||||
|
||||
// 수동할당 시 모듈 삭제
|
||||
@ -95,12 +118,17 @@ export default function CircuitTrestleSetting({ id }) {
|
||||
getPcsAutoRecommendList(params).then((res) => {
|
||||
if (res.data?.pcsItemList) {
|
||||
let pcsItemList = []
|
||||
let pcsObj = {}
|
||||
|
||||
models.forEach((model) => {
|
||||
pcsObj[model.itemId] = model
|
||||
})
|
||||
res.data?.pcsItemList.forEach((item) => {
|
||||
if (models.map((model) => model.itemId).includes(item.itemId)) {
|
||||
if (pcsObj[item.itemId]) {
|
||||
pcsItemList.push({
|
||||
...item,
|
||||
id: uuidv4(),
|
||||
...pcsObj[item.itemId],
|
||||
isUsed: false,
|
||||
id: uuidv4(),
|
||||
})
|
||||
}
|
||||
})
|
||||
@ -160,147 +188,6 @@ export default function CircuitTrestleSetting({ id }) {
|
||||
}
|
||||
}
|
||||
|
||||
// 옵션 Y/N
|
||||
const getOptYn = () => {
|
||||
return {
|
||||
maxConnYn: pcsCheck.max ? 'Y' : 'N',
|
||||
smpCirYn: pcsCheck.division ? 'Y' : 'N',
|
||||
coldZoneYn: managementState?.coldRegionFlg === '1' ? 'Y' : 'N',
|
||||
}
|
||||
}
|
||||
|
||||
// PCS 아이템 목록
|
||||
const getPcsItemList = () => {
|
||||
return models.map((model) => {
|
||||
return {
|
||||
itemId: model.itemId,
|
||||
pcsMkrCd: model.pcsMkrCd,
|
||||
pcsSerCd: model.pcsSerCd,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 선택된 PCS 아이템 목록
|
||||
const getSelectedPcsItemList = () => {
|
||||
return selectedModels.map((model) => {
|
||||
return {
|
||||
itemId: model.itemId,
|
||||
pcsMkrCd: model.pcsMkrCd,
|
||||
pcsSerCd: model.pcsSerCd,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 사용된 모듈아이템 목록
|
||||
const getUseModuleItemList = () => {
|
||||
return selectedModules?.itemList?.map((m) => {
|
||||
return {
|
||||
itemId: m.itemId,
|
||||
mixMatlNo: m.mixMatlNo,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 지붕면 목록
|
||||
const getRoofSurfaceList = () => {
|
||||
const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
|
||||
roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top)
|
||||
return roofSurfaceList
|
||||
.map((obj) => {
|
||||
return {
|
||||
roofSurfaceId: obj.id,
|
||||
roofSurface: canvas
|
||||
.getObjects()
|
||||
.filter((o) => o.id === obj.parentId)[0]
|
||||
.directionText.replace(/[0-9]/g, ''),
|
||||
roofSurfaceIncl: canvas.getObjects().filter((o) => o.id === obj.parentId)[0].roofMaterial.pitch,
|
||||
moduleList: getModuleList(obj).map((module) => {
|
||||
return {
|
||||
itemId: module.moduleInfo.itemId,
|
||||
circuit: module.circuitNumber ? module.circuitNumber : null,
|
||||
pcsItemId: module.circuit ? module.circuit?.pcsItemId : null,
|
||||
uniqueId: module.id ? module.id : null,
|
||||
}
|
||||
}),
|
||||
}
|
||||
})
|
||||
.filter((surface) => surface.moduleList.length > 0)
|
||||
}
|
||||
|
||||
// 모듈 목록
|
||||
const getModuleList = (surface) => {
|
||||
let moduleList = []
|
||||
let [xObj, yObj] = [{}, {}]
|
||||
let [xPoints, yPoints] = [[], []]
|
||||
surface.modules.forEach((module) => {
|
||||
if (!xObj[module.left]) {
|
||||
xObj[module.left] = module.left
|
||||
xPoints.push(module.left)
|
||||
}
|
||||
if (!yObj[module.top]) {
|
||||
yObj[module.top] = module.top
|
||||
yPoints.push(module.top)
|
||||
}
|
||||
})
|
||||
switch (surface.direction) {
|
||||
case 'south':
|
||||
xPoints.sort((a, b) => a - b)
|
||||
yPoints.sort((a, b) => b - a)
|
||||
yPoints.forEach((y, index) => {
|
||||
let temp = surface.modules.filter((m) => m.top === y)
|
||||
if (index % 2 === 0) {
|
||||
temp.sort((a, b) => a.left - b.left)
|
||||
} else {
|
||||
temp.sort((a, b) => b.left - a.left)
|
||||
}
|
||||
moduleList = [...moduleList, ...temp]
|
||||
})
|
||||
break
|
||||
case 'north':
|
||||
xPoints.sort((a, b) => b - a)
|
||||
yPoints.sort((a, b) => a - b)
|
||||
yPoints.forEach((y, index) => {
|
||||
let temp = surface.modules.filter((m) => m.top === y)
|
||||
if (index % 2 === 0) {
|
||||
temp.sort((a, b) => b.left - a.left)
|
||||
} else {
|
||||
temp.sort((a, b) => a.left - b.left)
|
||||
}
|
||||
moduleList = [...moduleList, ...temp]
|
||||
})
|
||||
break
|
||||
case 'west':
|
||||
xPoints.sort((a, b) => a - b)
|
||||
yPoints.sort((a, b) => a - b)
|
||||
xPoints.forEach((x, index) => {
|
||||
let temp = surface.modules.filter((m) => m.left === x)
|
||||
if (index % 2 === 0) {
|
||||
temp.sort((a, b) => a.top - b.top)
|
||||
} else {
|
||||
temp.sort((a, b) => b.top - a.top)
|
||||
}
|
||||
moduleList = [...moduleList, ...temp]
|
||||
})
|
||||
break
|
||||
case 'east':
|
||||
xPoints.sort((a, b) => b - a)
|
||||
yPoints.sort((a, b) => b - a)
|
||||
xPoints.forEach((x, index) => {
|
||||
let temp = surface.modules.filter((m) => m.left === x)
|
||||
if (index % 2 === 0) {
|
||||
temp.sort((a, b) => b.top - a.top)
|
||||
} else {
|
||||
temp.sort((a, b) => a.top - b.top)
|
||||
}
|
||||
moduleList = [...moduleList, ...temp]
|
||||
})
|
||||
break
|
||||
default:
|
||||
return []
|
||||
}
|
||||
return moduleList
|
||||
}
|
||||
|
||||
// 자동할당 버튼 클릭 시
|
||||
const onAutoAllocation = () => {
|
||||
let moduleStdQty = 0
|
||||
@ -464,12 +351,6 @@ export default function CircuitTrestleSetting({ id }) {
|
||||
// removeNotAllocationModules()
|
||||
}
|
||||
|
||||
const removeNotAllocationModules = () => {
|
||||
const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit)
|
||||
canvas.remove(...notAllocationModules)
|
||||
canvas.renderAll()
|
||||
}
|
||||
|
||||
// 이전 버튼 클릭 시
|
||||
const onClickPrev = () => {
|
||||
setAllocationType(ALLOCATION_TYPE.AUTO)
|
||||
|
||||
187
src/hooks/useCirCuitTrestle.js
Normal file
187
src/hooks/useCirCuitTrestle.js
Normal file
@ -0,0 +1,187 @@
|
||||
import { GlobalDataContext } from '@/app/GlobalDataProvider'
|
||||
import { POLYGON_TYPE } from '@/common/common'
|
||||
import { canvasState } from '@/store/canvasAtom'
|
||||
import { makersState, modelsState, pcsCheckState, selectedMakerState, selectedModelsState, seriesState } from '@/store/circuitTrestleAtom'
|
||||
import { selectedModuleState } from '@/store/selectedModuleOptions'
|
||||
import { useContext } from 'react'
|
||||
import { useRecoilState, useRecoilValue } from 'recoil'
|
||||
|
||||
export function useCircuitTrestle() {
|
||||
const [makers, setMakers] = useRecoilState(makersState)
|
||||
const [selectedMaker, setSelectedMaker] = useRecoilState(selectedMakerState)
|
||||
const [series, setSeries] = useRecoilState(seriesState)
|
||||
const [models, setModels] = useRecoilState(modelsState)
|
||||
const [selectedModels, setSelectedModels] = useRecoilState(selectedModelsState)
|
||||
const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState)
|
||||
const selectedModules = useRecoilValue(selectedModuleState)
|
||||
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
|
||||
const canvas = useRecoilValue(canvasState)
|
||||
const getOptYn = () => {
|
||||
return {
|
||||
maxConnYn: pcsCheck.max ? 'Y' : 'N',
|
||||
smpCirYn: pcsCheck.division ? 'Y' : 'N',
|
||||
coldZoneYn: managementState?.coldRegionFlg === '1' ? 'Y' : 'N',
|
||||
}
|
||||
}
|
||||
// PCS 아이템 목록
|
||||
const getPcsItemList = () => {
|
||||
return models.map((model) => {
|
||||
return {
|
||||
itemId: model.itemId,
|
||||
pcsMkrCd: model.pcsMkrCd,
|
||||
pcsSerCd: model.pcsSerCd,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 선택된 PCS 아이템 목록
|
||||
const getSelectedPcsItemList = () => {
|
||||
return selectedModels.map((model) => {
|
||||
return {
|
||||
itemId: model.itemId,
|
||||
pcsMkrCd: model.pcsMkrCd,
|
||||
pcsSerCd: model.pcsSerCd,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 사용된 모듈아이템 목록
|
||||
const getUseModuleItemList = () => {
|
||||
return selectedModules?.itemList?.map((m) => {
|
||||
return {
|
||||
itemId: m.itemId,
|
||||
mixMatlNo: m.mixMatlNo,
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
// 지붕면 목록
|
||||
const getRoofSurfaceList = () => {
|
||||
const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
|
||||
roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top)
|
||||
return roofSurfaceList
|
||||
.map((obj) => {
|
||||
return {
|
||||
roofSurfaceId: obj.id,
|
||||
roofSurface: canvas
|
||||
.getObjects()
|
||||
.filter((o) => o.id === obj.parentId)[0]
|
||||
.directionText.replace(/[0-9]/g, ''),
|
||||
roofSurfaceIncl: canvas.getObjects().filter((o) => o.id === obj.parentId)[0].roofMaterial.pitch,
|
||||
moduleList: getModuleList(obj).map((module) => {
|
||||
return {
|
||||
itemId: module.moduleInfo.itemId,
|
||||
circuit: module.circuitNumber ? module.circuitNumber : null,
|
||||
pcsItemId: module.circuit ? module.circuit?.pcsItemId : null,
|
||||
uniqueId: module.id ? module.id : null,
|
||||
}
|
||||
}),
|
||||
}
|
||||
})
|
||||
.filter((surface) => surface.moduleList.length > 0)
|
||||
}
|
||||
|
||||
// 모듈 목록
|
||||
const getModuleList = (surface) => {
|
||||
let moduleList = []
|
||||
let [xObj, yObj] = [{}, {}]
|
||||
let [xPoints, yPoints] = [[], []]
|
||||
surface.modules.forEach((module) => {
|
||||
if (!xObj[module.left]) {
|
||||
xObj[module.left] = module.left
|
||||
xPoints.push(module.left)
|
||||
}
|
||||
if (!yObj[module.top]) {
|
||||
yObj[module.top] = module.top
|
||||
yPoints.push(module.top)
|
||||
}
|
||||
})
|
||||
switch (surface.direction) {
|
||||
case 'south':
|
||||
xPoints.sort((a, b) => a - b)
|
||||
yPoints.sort((a, b) => b - a)
|
||||
yPoints.forEach((y, index) => {
|
||||
let temp = surface.modules.filter((m) => m.top === y)
|
||||
if (index % 2 === 0) {
|
||||
temp.sort((a, b) => a.left - b.left)
|
||||
} else {
|
||||
temp.sort((a, b) => b.left - a.left)
|
||||
}
|
||||
moduleList = [...moduleList, ...temp]
|
||||
})
|
||||
break
|
||||
case 'north':
|
||||
xPoints.sort((a, b) => b - a)
|
||||
yPoints.sort((a, b) => a - b)
|
||||
yPoints.forEach((y, index) => {
|
||||
let temp = surface.modules.filter((m) => m.top === y)
|
||||
if (index % 2 === 0) {
|
||||
temp.sort((a, b) => b.left - a.left)
|
||||
} else {
|
||||
temp.sort((a, b) => a.left - b.left)
|
||||
}
|
||||
moduleList = [...moduleList, ...temp]
|
||||
})
|
||||
break
|
||||
case 'west':
|
||||
xPoints.sort((a, b) => a - b)
|
||||
yPoints.sort((a, b) => a - b)
|
||||
xPoints.forEach((x, index) => {
|
||||
let temp = surface.modules.filter((m) => m.left === x)
|
||||
if (index % 2 === 0) {
|
||||
temp.sort((a, b) => a.top - b.top)
|
||||
} else {
|
||||
temp.sort((a, b) => b.top - a.top)
|
||||
}
|
||||
moduleList = [...moduleList, ...temp]
|
||||
})
|
||||
break
|
||||
case 'east':
|
||||
xPoints.sort((a, b) => b - a)
|
||||
yPoints.sort((a, b) => b - a)
|
||||
xPoints.forEach((x, index) => {
|
||||
let temp = surface.modules.filter((m) => m.left === x)
|
||||
if (index % 2 === 0) {
|
||||
temp.sort((a, b) => b.top - a.top)
|
||||
} else {
|
||||
temp.sort((a, b) => a.top - b.top)
|
||||
}
|
||||
moduleList = [...moduleList, ...temp]
|
||||
})
|
||||
break
|
||||
default:
|
||||
return []
|
||||
}
|
||||
return moduleList
|
||||
}
|
||||
|
||||
const removeNotAllocationModules = () => {
|
||||
const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit)
|
||||
canvas.remove(...notAllocationModules)
|
||||
canvas.renderAll()
|
||||
}
|
||||
|
||||
const setPowerConditionerData = () => {}
|
||||
|
||||
return {
|
||||
makers,
|
||||
setMakers,
|
||||
selectedMaker,
|
||||
setSelectedMaker,
|
||||
series,
|
||||
setSeries,
|
||||
models,
|
||||
setModels,
|
||||
selectedModels,
|
||||
setSelectedModels,
|
||||
pcsCheck,
|
||||
setPcsCheck,
|
||||
getOptYn,
|
||||
getPcsItemList,
|
||||
getSelectedPcsItemList,
|
||||
getUseModuleItemList,
|
||||
getRoofSurfaceList,
|
||||
getModuleList,
|
||||
removeNotAllocationModules,
|
||||
}
|
||||
}
|
||||
@ -535,7 +535,15 @@ input[type=text]{
|
||||
}
|
||||
}
|
||||
}
|
||||
input::-webkit-outer-spin-button,
|
||||
input::-webkit-inner-spin-button {
|
||||
-webkit-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
input[type=number] {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
|
||||
|
||||
// check-btn
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user