Merge branch 'dev' into dev-yj

This commit is contained in:
yjnoh 2025-02-04 20:19:44 +09:00
commit 716410008a
3 changed files with 261 additions and 31 deletions

View File

@ -47,7 +47,7 @@ export default function CircuitTrestleSetting({ id }) {
const [circuitAllocationType, setCircuitAllocationType] = useState(1) const [circuitAllocationType, setCircuitAllocationType] = useState(1)
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const selectedModules = useRecoilValue(selectedModuleState) const selectedModules = useRecoilValue(selectedModuleState)
const { getPcsAutoRecommendList, getPcsVoltageChk } = useMasterController() const { getPcsAutoRecommendList, getPcsVoltageChk, getPcsVoltageStepUpList } = useMasterController()
// () // ()
const [selectedStepUpValues, setSelectedStepUpValues] = useState({}) const [selectedStepUpValues, setSelectedStepUpValues] = useState({})
@ -63,6 +63,7 @@ export default function CircuitTrestleSetting({ id }) {
} }
}, []) }, [])
//
useEffect(() => { useEffect(() => {
if (allocationType === ALLOCATION_TYPE.PASSIVITY && tabNum === 2) { if (allocationType === ALLOCATION_TYPE.PASSIVITY && tabNum === 2) {
const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit) const notAllocationModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE && !obj.circuit)
@ -71,6 +72,7 @@ export default function CircuitTrestleSetting({ id }) {
} }
}, [tabNum]) }, [tabNum])
// PCS
const onAutoRecommend = () => { const onAutoRecommend = () => {
if (series.filter((s) => s.selected).length === 0) { if (series.filter((s) => s.selected).length === 0) {
swalFire({ swalFire({
@ -87,7 +89,9 @@ export default function CircuitTrestleSetting({ id }) {
pcsItemList: getPcsItemList(), pcsItemList: getPcsItemList(),
} }
//
if (selectedModels.length === 0) { if (selectedModels.length === 0) {
// PCS
getPcsAutoRecommendList(params).then((res) => { getPcsAutoRecommendList(params).then((res) => {
if (res.data?.pcsItemList) { if (res.data?.pcsItemList) {
const itemList = models.filter((model) => { const itemList = models.filter((model) => {
@ -100,15 +104,25 @@ export default function CircuitTrestleSetting({ id }) {
isUsed: false, isUsed: false,
} }
}) })
//
const pcsVoltageChkParams = { const pcsVoltageChkParams = {
...getOptYn(), ...getOptYn(),
useModuleItemList: getUseModuleItemList(), useModuleItemList: getUseModuleItemList(),
roofSurfaceList: getRoofSurfaceList(), roofSurfaceList: getRoofSurfaceList(),
pcsItemList: getPcsItemList(), pcsItemList: getPcsItemList(),
} }
//
setSelectedModels(selectedModels) setSelectedModels(selectedModels)
//
getPcsVoltageChk(pcsVoltageChkParams).then((res) => { getPcsVoltageChk(pcsVoltageChkParams).then((res) => {
setTabNum(2) if (res.resultCode === 'S') {
setTabNum(2)
} else {
swalFire({
title: res.resultMsg,
type: 'alert',
})
}
}) })
} else { } else {
// //
@ -126,12 +140,27 @@ export default function CircuitTrestleSetting({ id }) {
} }
}) })
} else { } else {
getPcsVoltageChk(params).then((res) => { //
setTabNum(2) getPcsVoltageChk({ ...params, pcsItemList: getSelectedPcsItemList() }).then((res) => {
if (res.resultCode === 'S') {
//
getPcsVoltageStepUpList({
...params,
pcsItemList: getSelectedPcsItemList(),
}).then((res) => {
setTabNum(2)
})
} else {
swalFire({
title: res.resultMsg,
type: 'alert',
})
}
}) })
} }
} }
// Y/N
const getOptYn = () => { const getOptYn = () => {
return { return {
maxConnYn: pcsCheck.max ? 'Y' : 'N', maxConnYn: pcsCheck.max ? 'Y' : 'N',
@ -140,6 +169,7 @@ export default function CircuitTrestleSetting({ id }) {
} }
} }
// PCS
const getPcsItemList = () => { const getPcsItemList = () => {
return models.map((model) => { return models.map((model) => {
return { return {
@ -150,6 +180,18 @@ export default function CircuitTrestleSetting({ id }) {
}) })
} }
// PCS
const getSelectedPcsItemList = () => {
return selectedModels.map((model) => {
return {
itemId: model.itemId,
pcsMkrCd: model.pcsMkrCd,
pcsSerCd: model.pcsSerCd,
}
})
}
//
const getUseModuleItemList = () => { const getUseModuleItemList = () => {
return selectedModules.itemList.map((m) => { return selectedModules.itemList.map((m) => {
return { return {
@ -159,6 +201,7 @@ export default function CircuitTrestleSetting({ id }) {
}) })
} }
//
const getRoofSurfaceList = () => { const getRoofSurfaceList = () => {
const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) 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) roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top)
@ -182,6 +225,7 @@ export default function CircuitTrestleSetting({ id }) {
}) })
} }
//
const getModuleList = (surface) => { const getModuleList = (surface) => {
let moduleList = [] let moduleList = []
let [xObj, yObj] = [{}, {}] let [xObj, yObj] = [{}, {}]
@ -255,6 +299,40 @@ export default function CircuitTrestleSetting({ id }) {
return moduleList return moduleList
} }
//
const onAutoAllocation = () => {
let moduleStdQty = 0
let moduleMaxQty = 0
const selectedModels = models.filter((m) => m.selected)
// PCS
if (selectedModels.length === 0) {
onAutoRecommend()
} else {
//
moduleStdQty = selectedModels.reduce((acc, model) => {
return acc + parseInt(model.moduleStdQty)
}, 0)
moduleMaxQty = selectedModels.reduce((acc, model) => {
return acc + parseInt(model.moduleMaxQty)
}, 0)
}
// const target = pcsCheck.max ? moduleMaxQty : moduleStdQty
// const placementModules = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE)
// if (placementModules.length > target) {
// swalFire({
// title: ' . .',
// type: 'alert',
// })
// return
// }
// setAllocationType(ALLOCATION_TYPE.AUTO)
// setTabNum(2)
}
//
const onPassivityAllocation = () => { const onPassivityAllocation = () => {
if (selectedModels.length === 0) { if (selectedModels.length === 0) {
const params = { const params = {
@ -264,6 +342,7 @@ export default function CircuitTrestleSetting({ id }) {
pcsItemList: getPcsItemList(), pcsItemList: getPcsItemList(),
} }
//
getPcsAutoRecommendList(params).then((res) => { getPcsAutoRecommendList(params).then((res) => {
if (res.data?.pcsItemList) { if (res.data?.pcsItemList) {
const itemList = models.filter((model) => { const itemList = models.filter((model) => {
@ -350,6 +429,7 @@ export default function CircuitTrestleSetting({ id }) {
canvas.renderAll() canvas.renderAll()
} }
//
const onClickPrev = () => { const onClickPrev = () => {
setAllocationType(ALLOCATION_TYPE.AUTO) setAllocationType(ALLOCATION_TYPE.AUTO)
swalFire({ swalFire({
@ -371,6 +451,7 @@ export default function CircuitTrestleSetting({ id }) {
}) })
} }
//
const powerConditionalSelectProps = { const powerConditionalSelectProps = {
tabNum, tabNum,
setTabNum, setTabNum,
@ -387,6 +468,7 @@ export default function CircuitTrestleSetting({ id }) {
managementState, managementState,
} }
//
const passivityProps = { const passivityProps = {
tabNum, tabNum,
setTabNum, setTabNum,
@ -398,13 +480,18 @@ export default function CircuitTrestleSetting({ id }) {
getRoofSurfaceList, getRoofSurfaceList,
} }
//
const stepUpProps = { const stepUpProps = {
tabNum, tabNum,
setTabNum, setTabNum,
models, models,
setModels, setModels,
allocationType,
circuitAllocationType, circuitAllocationType,
setCircuitAllocationType, setCircuitAllocationType,
selectedModels,
setSelectedModels,
getSelectedPcsItemList,
getOptYn, // Y/N getOptYn, // Y/N
getUseModuleItemList, // List getUseModuleItemList, // List
getRoofSurfaceList, // getRoofSurfaceList, //
@ -414,8 +501,10 @@ export default function CircuitTrestleSetting({ id }) {
setStepUpListData, setStepUpListData,
seletedOption, seletedOption,
setSeletedOption, setSeletedOption,
getModuleList,
} }
//
const getStepUpListData = () => { const getStepUpListData = () => {
return stepUpListData[0].pcsItemList.map((item) => { return stepUpListData[0].pcsItemList.map((item) => {
return item.serQtyList return item.serQtyList
@ -426,7 +515,6 @@ export default function CircuitTrestleSetting({ id }) {
pcsSerCd: item.pcsSerCd, pcsSerCd: item.pcsSerCd,
pcsItemId: item.itemId, pcsItemId: item.itemId,
pscOptCd: seletedOption.code, pscOptCd: seletedOption.code,
// pcsOptCd: 'CLC_RMC',
paralQty: serQty.paralQty, paralQty: serQty.paralQty,
connections: [ connections: [
{ {
@ -438,12 +526,65 @@ export default function CircuitTrestleSetting({ id }) {
}) })
} }
//
const handleClose = () => {
// //
// const circuitTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber')
// canvas.remove(...circuitTexts)
// //
// canvas
// .getObjects()
// .filter((obj) => obj.name === POLYGON_TYPE.MODULE)
// .forEach((obj) => {
// obj.circuit = null
// obj.pcsItemId = null
// obj.circuitNumber = null
// })
// canvas.renderAll()
// closePopup(id)
swalFire({
title: '변경사항을 저장하시겠습니까?',
//text: ' .',
type: 'confirm',
confirmButtonText: '저장',
cancelButtonText: '취소',
icon: 'warning',
confirmFn: async () => {
//
await onApply()
closePopup(id)
},
denyFn: () => {
//
const circuitTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber')
canvas.remove(...circuitTexts)
//
canvas
.getObjects()
.filter((obj) => obj.name === POLYGON_TYPE.MODULE)
.forEach((obj) => {
obj.circuit = null
obj.pcsItemId = null
obj.circuitNumber = null
})
canvas.renderAll()
closePopup(id)
},
})
}
return ( return (
<WithDraggable isShow={true} pos={{ x: 50, y: 230 }}> <WithDraggable isShow={true} pos={{ x: 50, y: 230 }}>
<div className={`modal-pop-wrap l-2`}> <div className={`modal-pop-wrap l-2`}>
<div className="modal-head modal-handle"> <div className="modal-head modal-handle">
<h1 className="title">{getMessage('modal.circuit.trestle.setting')} </h1> <h1 className="title">{getMessage('modal.circuit.trestle.setting')} </h1>
<button className="modal-close" onClick={() => closePopup(id)}> {/* <button className="modal-close" onClick={() => closePopup(id)}> */}
<button className="modal-close" onClick={handleClose}>
닫기 닫기
</button> </button>
</div> </div>

View File

@ -10,16 +10,29 @@ import { useCanvasPopupStatusController } from '@/hooks/common/useCanvasPopupSta
import { canvasPopupStatusStore } from '@/store/canvasPopupStatusAtom' 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 { POLYGON_TYPE } from '@/common/common'
export default function StepUp(props) { export default function StepUp(props) {
const { stepUpListData, setStepUpListData, seletedOption, setSeletedOption } = props const {
models,
allocationType,
stepUpListData,
setStepUpListData,
seletedOption,
setSeletedOption,
selectedModels,
setSelectedModels,
getSelectedPcsItemList,
getModuleList,
} = props
const { getMessage } = useMessage() const { getMessage } = useMessage()
const globalLocale = useRecoilValue(globalLocaleStore)
const [moduleTab, setModuleTab] = useState(1) const [moduleTab, setModuleTab] = useState(1)
const [moduleTabs, setModuleTabs] = useState({}) const [moduleTabs, setModuleTabs] = useState({})
const [arrayLength, setArrayLength] = useState(3) //module-table-inner const [arrayLength, setArrayLength] = useState(3) //module-table-inner
const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState) const [pcsCheck, setPcsCheck] = useRecoilState(pcsCheckState)
const { models } = props const { getPcsVoltageStepUpList, getPcsAutoRecommendList, getPcsVoltageChk } = useMasterController()
const { getPcsVoltageStepUpList, getPcsAutoRecommendList } = useMasterController()
const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext) const { managementState, setManagementState, managementStateLoaded } = useContext(GlobalDataContext)
const canvas = useRecoilValue(canvasState) const canvas = useRecoilValue(canvasState)
const selectedModules = useRecoilValue(selectedModuleState) const selectedModules = useRecoilValue(selectedModuleState)
@ -39,34 +52,55 @@ export default function StepUp(props) {
useEffect(() => { useEffect(() => {
// PCS // PCS
fetchStepUpData() if (allocationType === 'auto') {
fetchStepUpData()
} else {
// 1-1 2-2
canvas
.getObjects()
.filter((obj) => obj.name === POLYGON_TYPE.MODULE && obj.circuit)
.map((module) => module.circuitNumber)
}
}, []) }, [])
// PCS // PCS
const fetchStepUpData = async () => { const fetchStepUpData = async () => {
try { try {
const params = { const params = {
useYn: props.getOptYn(), // Y/N ...props.getOptYn(), // Y/N
useModuleItemList: props.getUseModuleItemList(), // List useModuleItemList: props.getUseModuleItemList(), // List
roofSurfaceList: props.getRoofSurfaceList(), // roofSurfaceList: props.getRoofSurfaceList(), //
pcsItemList: props.getPcsItemList(), // PCS pcsItemList: selectedModels.length === 0 ? props.getPcsItemList() : getSelectedPcsItemList(), // PCS
} }
// PCS //
const res = await getPcsVoltageStepUpList(params) getPcsVoltageChk({ ...params, pcsItemList: getSelectedPcsItemList() }).then((res) => {
if (res.resultCode === 'S') {
//
getPcsVoltageStepUpList(params).then((res) => {
if (res?.result.code === 200 && res?.data) {
if (selectedModels.length === 0) {
setSelectedModels(res.data.pcsItemList)
}
const dataArray = Array.isArray(res.data) ? res.data : [res.data]
const stepUpListData = formatStepUpListData(dataArray)
if (res?.result.code === 200 && res?.data) { // PCS SET
const dataArray = Array.isArray(res.data) ? res.data : [res.data] setStepUpListData(stepUpListData)
const stepUpListData = formatStepUpListData(dataArray)
// PCS SET // PCS
setStepUpListData(stepUpListData) const formattedOptCodes = formatOptionCodes(res.data.optionList)
setOptCodes(formattedOptCodes)
// PCS setSeletedOption(formattedOptCodes[0])
const formattedOptCodes = formatOptionCodes(res.data.optionList) }
setOptCodes(formattedOptCodes) })
setSeletedOption(formattedOptCodes[0]) } else {
} swalFire({
title: res.resultMsg,
type: 'alert',
})
}
})
} catch (error) { } catch (error) {
console.error('Error fetching step up data:', error) console.error('Error fetching step up data:', error)
} }
@ -121,6 +155,7 @@ export default function StepUp(props) {
}) })
}) })
// selectedValues
setSelectedValues(initialSelectedValues) setSelectedValues(initialSelectedValues)
return formattedData return formattedData
@ -212,17 +247,57 @@ export default function StepUp(props) {
} }
item.selected = index === subIdx item.selected = index === subIdx
}) })
//
setStepUpListData(tempStepUpListData) setStepUpListData(tempStepUpListData)
console.log('🚀 ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData) console.log('🚀 ~ handleRowClick ~ tempStepUpListData:', tempStepUpListData)
console.log('🚀 ~ handleRowClick ~ selectedData:', selectedData) console.log('🚀 ~ handleRowClick ~ selectedData:', selectedData)
//
const params = {
...props.getOptYn(), // Y/N
useModuleItemList: props.getUseModuleItemList(), // List
roofSurfaceList: props.getRoofSurfaceList(), //
pcsItemList: props.getSelectedPcsItemList().map((pcsItem) => {
// PCS
// tempStepUpListData PCS
const matchingPcsItem = tempStepUpListData[0].pcsItemList.find((item) => item.pcsId === pcsItem.pcsId && item.itemId === pcsItem.itemId)
// serQty
const selectedSerQty = matchingPcsItem?.serQtyList.find((serQty) => serQty.selected)?.serQty || 0
return {
...pcsItem,
applySerQty: selectedSerQty,
}
}),
}
// PCS
//const res = await getPcsVoltageStepUpList(params)
//getPcsManualConfChk(params).then((res) => {
getPcsVoltageStepUpList(params).then((res) => {
if (res?.result.code === 200 && res?.data) {
const dataArray = Array.isArray(res.data) ? res.data : [res.data]
const stepUpListData = formatStepUpListData(dataArray)
// PCS SET
setStepUpListData(stepUpListData)
// PCS
const formattedOptCodes = formatOptionCodes(res.data.optionList)
setOptCodes(formattedOptCodes)
setSeletedOption(formattedOptCodes[0])
}
})
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) => {
return module.id return module.id
}) })
//
canvas canvas
.getObjects() .getObjects()
.filter((obj) => moduleIds.includes(obj.parentId)) .filter((obj) => moduleIds.includes(obj.parentId))
@ -230,7 +305,9 @@ export default function StepUp(props) {
canvas.remove(text) canvas.remove(text)
}) })
//
canvas.renderAll() canvas.renderAll()
roofSurface.moduleList.forEach((module) => { roofSurface.moduleList.forEach((module) => {
const targetModule = canvas.getObjects().filter((obj) => obj.id === module.uniqueId)[0] const targetModule = canvas.getObjects().filter((obj) => obj.id === module.uniqueId)[0]
const moduleCircuitText = new fabric.Text(module.circuit, { const moduleCircuitText = new fabric.Text(module.circuit, {
@ -415,8 +492,11 @@ export default function StepUp(props) {
<div className="grid-select mr10"> <div className="grid-select mr10">
{/* <QSelectBox title={'電力検出ユニット (モニター付き)'} /> */} {/* <QSelectBox title={'電力検出ユニット (モニター付き)'} /> */}
<QSelectBox <QSelectBox
options={optCodes} //options={optCodes}
title={optCodes[0].name} options={optCodes.map((roof) => {
return { ...roof, name: globalLocale === 'ko' ? roof.name : roof.nameJp }
})}
title={globalLocale === 'ko' ? optCodes[0].name : optCodes[0].nameJp}
value={seletedOption} value={seletedOption}
sourceKey="code" sourceKey="code"
targetKey="code" targetKey="code"

View File

@ -201,13 +201,22 @@ export function useMasterController() {
* @returns * @returns
*/ */
const getPcsVoltageStepUpList = async (params2 = null) => { const getPcsVoltageStepUpList = async (params2 = null) => {
// roofSurfaceList의 moduleList에서 circuit 속성을 제외
const modifiedRoofSurfaceList = params2.roofSurfaceList.map((surface) => ({
...surface,
moduleList: surface.moduleList.map((module) => ({
itemId: module.itemId,
uniqueId: module.uniqueId,
})),
}))
const params = { const params = {
...params2, ...params2,
maxConnYn: params2.useYn.maxConnYn, maxConnYn: params2.maxConnYn,
smpCirYn: params2.useYn.smpCirYn, smpCirYn: params2.smpCirYn,
coldZoneYn: params2.useYn.coldZoneYn, coldZoneYn: params2.coldZoneYn,
useModuleItemList: params2.useModuleItemList, useModuleItemList: params2.useModuleItemList,
roofSurfaceList: params2.roofSurfaceList, roofSurfaceList: modifiedRoofSurfaceList,
pcsItemList: params2.pcsItemList, pcsItemList: params2.pcsItemList,
} }