@@ -329,22 +329,25 @@ const Placement = forwardRef((props, refs) => {
|
{selectedModules &&
- selectedModules.itemList.map((item) => (
-
+ selectedModules.itemList?.map((item) => (
+ // |
+ |
{item.itemNm}
|
))}
+ {colspan > 1 && {getMessage('modal.module.basic.setting.module.placement.max.rows.multiple')} | }
- {selectedModules.itemList.map((item) => (
- <>
- | {getMessage('modal.module.basic.setting.module.placement.max.row')} |
- {colspan > 1 && {getMessage('modal.module.basic.setting.module.placement.max.rows.multiple')} | }
- >
- ))}
+ {selectedModules &&
+ selectedModules.itemList?.map((item) => (
+ <>
+ {getMessage('modal.module.basic.setting.module.placement.max.row')} |
+ {/* {colspan > 1 && {getMessage('modal.module.basic.setting.module.placement.max.rows.multiple')} | } */}
+ >
+ ))}
@@ -356,10 +359,11 @@ const Placement = forwardRef((props, refs) => {
{item.addRoof?.roofMatlNmJp}
- {moduleRowColArray[index]?.map((item) => (
+ {moduleRowColArray[index]?.map((item, index2) => (
<>
{item.moduleMaxRows} |
- {colspan > 1 && {item.mixModuleMaxRows} | }
+ {/* {colspan > 1 && {item.mixModuleMaxRows} | } */}
+ {colspan > 1 && index2 === moduleRowColArray[index].length - 1 && {item.maxRow} | }
>
))}
diff --git a/src/components/floor-plan/modal/basic/step/Trestle.jsx b/src/components/floor-plan/modal/basic/step/Trestle.jsx
index b184670e..44a68236 100644
--- a/src/components/floor-plan/modal/basic/step/Trestle.jsx
+++ b/src/components/floor-plan/modal/basic/step/Trestle.jsx
@@ -92,7 +92,7 @@ const Trestle = forwardRef((props, ref) => {
useEffect(() => {
if (raftBaseList.length > 0) {
- setSelectedRaftBase(raftBaseList.find((raft) => raft.clCode === trestleState?.raftBaseCd) ?? null)
+ setSelectedRaftBase(raftBaseList.find((raft) => raft.clCode === selectedRoof?.raft) ?? null)
} else {
setSelectedRaftBase(null)
}
@@ -124,8 +124,13 @@ const Trestle = forwardRef((props, ref) => {
useEffect(() => {
if (constructionList.length > 0) {
- console.log(constructionList)
setSelectedConstruction(constructionList.find((construction) => construction.constTp === trestleState?.construction?.constTp) ?? null)
+ if (constructionList.filter((construction) => construction.constPossYn === 'Y').length === 0) {
+ Swal.fire({
+ title: getMessage('modal.module.basic.settting.module.error4', [selectedRoof?.nameJp]), // 시공법법을 선택해주세요.
+ icon: 'warning',
+ })
+ }
} else {
setSelectedConstruction(null)
}
@@ -144,6 +149,19 @@ const Trestle = forwardRef((props, ref) => {
return 'no-click'
}
+ const onChangeLength = (e) => {
+ setLengthBase(e)
+ dispatch({
+ type: 'SET_LENGTH',
+ roof: {
+ length: e,
+ moduleTpCd: selectedModules.itemTp ?? '',
+ roofMatlCd: selectedRoof?.roofMatlCd ?? '',
+ raft: selectedRaftBase?.clCode,
+ },
+ })
+ }
+
const onChangeRaftBase = (e) => {
setSelectedRaftBase(e)
dispatch({
@@ -151,7 +169,7 @@ const Trestle = forwardRef((props, ref) => {
roof: {
moduleTpCd: selectedModules.itemTp ?? '',
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
- raftBaseCd: e.clCode,
+ raft: e.clCode,
},
})
}
@@ -163,7 +181,7 @@ const Trestle = forwardRef((props, ref) => {
roof: {
moduleTpCd: selectedModules.itemTp ?? '',
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
- raftBaseCd: selectedRaftBase?.clCode,
+ raft: selectedRaftBase?.clCode,
trestleMkrCd: e.trestleMkrCd,
},
})
@@ -176,7 +194,7 @@ const Trestle = forwardRef((props, ref) => {
roof: {
moduleTpCd: selectedModules.itemTp ?? '',
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
- raftBaseCd: selectedRaftBase?.clCode,
+ raft: selectedRaftBase?.clCode,
trestleMkrCd: selectedTrestle.trestleMkrCd,
constMthdCd: e.constMthdCd,
},
@@ -190,7 +208,7 @@ const Trestle = forwardRef((props, ref) => {
roof: {
moduleTpCd: selectedModules.itemTp ?? '',
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
- raftBaseCd: selectedRaftBase?.clCode,
+ raft: selectedRaftBase?.clCode,
trestleMkrCd: selectedTrestle.trestleMkrCd,
constMthdCd: selectedConstMthd.constMthdCd,
roofBaseCd: e.roofBaseCd,
@@ -211,7 +229,7 @@ const Trestle = forwardRef((props, ref) => {
roof: {
moduleTpCd: selectedModules.itemTp ?? '',
roofMatlCd: selectedRoof?.roofMatlCd ?? '',
- raftBaseCd: selectedRaftBase?.clCode,
+ raft: selectedRaftBase?.clCode,
trestleMkrCd: selectedTrestle.trestleMkrCd,
constMthdCd: selectedConstMthd.constMthdCd,
roofBaseCd: selectedRoofBase.roofBaseCd,
@@ -225,7 +243,8 @@ const Trestle = forwardRef((props, ref) => {
snowGdPossYn: constructionList[index].snowGdPossYn,
cvrYn: constructionList[index].cvrYn,
mixMatlNo: selectedModules.mixMatlNo,
- workingWidth: selectedRoof?.length?.toString() ?? '',
+ // workingWidth: selectedRoof?.length?.toString() ?? '',
+ workingWidth: lengthBase,
},
})
@@ -242,11 +261,12 @@ const Trestle = forwardRef((props, ref) => {
return {
...selectedRoof,
hajebichi,
- lenBase: lengthBase,
+ length: lengthBase,
eavesMargin,
ridgeMargin,
kerabaMargin,
roofIndex: selectedRoof.index,
+ raft: selectedRaftBase?.clCode,
trestle: {
hajebichi: hajebichi,
length: lengthBase,
@@ -283,6 +303,7 @@ const Trestle = forwardRef((props, ref) => {
ridgeMargin,
kerabaMargin,
roofIndex: roof.index,
+ raft: selectedRaftBase?.clCode,
trestle: {
length: lengthBase,
hajebichi: hajebichi,
@@ -329,7 +350,7 @@ const Trestle = forwardRef((props, ref) => {
}
if (!roof.trestle?.roofBaseCd) {
Swal.fire({
- title: getMessage('modal.module.basic.settting.module.error3', [roof.nameJp]), // 지붕밑바탕탕을 선택해주세요.
+ title: getMessage('modal.module.basic.settting.module.error3', [roof.nameJp]), // 지붕밑바탕을 선택해주세요.
icon: 'warning',
})
result = false
@@ -337,7 +358,7 @@ const Trestle = forwardRef((props, ref) => {
}
if (!roof.construction?.constTp) {
Swal.fire({
- title: getMessage('modal.module.basic.settting.module.error4', [roof.nameJp]), // 시공법법을 선택해주세요.
+ title: getMessage('modal.module.basic.settting.module.error12', [roof.nameJp]), // 시공법법을 선택해주세요.
icon: 'warning',
})
result = false
@@ -355,7 +376,7 @@ const Trestle = forwardRef((props, ref) => {
}
}
if (['C', 'R'].includes(roof.raftAuth)) {
- if (!roof?.raftBaseCd) {
+ if (!roof?.raft) {
Swal.fire({
title: getMessage('modal.module.basic.settting.module.error6', [roof.nameJp]), // 서까래 간격을 입력해주세요.
icon: 'warning',
@@ -458,7 +479,7 @@ const Trestle = forwardRef((props, ref) => {
addRoof: newRoofs[index],
trestle: {
...roof.trestle,
- raftBaseCd: roof.raftBaseCd,
+ raft: roof.raftBaseCd,
},
construction: {
// ...constructionList.find((construction) => newAddedRoofs[index].construction.constTp === construction.constTp),
@@ -483,8 +504,6 @@ const Trestle = forwardRef((props, ref) => {
return false
}
- const onMarginCheck = (target, data) => {}
-
useImperativeHandle(ref, () => ({
isComplete,
}))
@@ -518,7 +537,7 @@ const Trestle = forwardRef((props, ref) => {
type="text"
className="input-origin block"
value={lengthBase}
- onChange={(e) => setLengthBase(e.target.value)}
+ onChange={(e) => onChangeLength(e.target.value)}
disabled={selectedRoof.lenAuth === 'R'}
/>
diff --git a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx
index 4a4d72a2..281ae5a8 100644
--- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx
+++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx
@@ -86,6 +86,26 @@ export default function PassivityCircuitAllocation(props) {
.map((obj) => obj.circuitNumber),
),
]
+
+ const surfaceList = targetModules.map((module) => {
+ return canvas.getObjects().filter((obj) => obj.id === canvas.getObjects().filter((obj) => obj.id === module)[0].surfaceId)[0]
+ })
+
+ if (surfaceList.length > 1) {
+ let surfaceType = {}
+
+ surfaceList.forEach((surface) => {
+ surfaceType[`${surface.direction}-${surface.roofMaterial.pitch}`] = surface
+ })
+ if (Object.keys(surfaceType).length > 1) {
+ swalFire({
+ text: getMessage('module.circuit.fix.not.same.roof.error'),
+ type: 'alert',
+ icon: 'warning',
+ })
+ return
+ }
+ }
if (!circuitNumber || circuitNumber === 0) {
swalFire({
text: getMessage('module.circuit.minimun.error'),
diff --git a/src/components/floor-plan/modal/grid/GridCopy.jsx b/src/components/floor-plan/modal/grid/GridCopy.jsx
index e1a6f9f9..805cf186 100644
--- a/src/components/floor-plan/modal/grid/GridCopy.jsx
+++ b/src/components/floor-plan/modal/grid/GridCopy.jsx
@@ -4,9 +4,11 @@ import { usePopup } from '@/hooks/usePopup'
import { useRecoilValue } from 'recoil'
import { contextPopupPositionState } from '@/store/popupAtom'
import { useState } from 'react'
-import { currentObjectState } from '@/store/canvasAtom'
+import { canvasState, currentObjectState } from '@/store/canvasAtom'
import { useGrid } from '@/hooks/common/useGrid'
-
+import { gridColorState } from '@/store/gridAtom'
+import { gridDisplaySelector } from '@/store/settingAtom'
+const GRID_PADDING = 5
export default function GridCopy(props) {
const contextPopupPosition = useRecoilValue(contextPopupPositionState)
const { id, pos = contextPopupPosition } = props
@@ -15,9 +17,39 @@ export default function GridCopy(props) {
const [length, setLength] = useState('0')
const [arrow, setArrow] = useState(null)
const currentObject = useRecoilValue(currentObjectState)
- const { copy } = useGrid()
+ const canvas = useRecoilValue(canvasState)
+ const gridColor = useRecoilValue(gridColorState)
+ const isGridDisplay = useRecoilValue(gridDisplaySelector)
const handleApply = () => {
- copy(currentObject, ['↑', '←'].includes(arrow) ? +length * -1 : +length)
+ copy(currentObject, ['↑', '←'].includes(arrow) ? (+length * -1) / 10 : +length / 10)
+ }
+
+ const copy = (object, length) => {
+ const lineStartX = object.direction === 'vertical' ? object.x1 + length : 0
+ const lineEndX = object.direction === 'vertical' ? object.x2 + length : canvas.width
+ const lineStartY = object.direction === 'vertical' ? 0 : object.y1 + length
+ const lineEndY = object.direction === 'vertical' ? canvas.width : object.y1 + length
+
+ const line = new fabric.Line([lineStartX, lineStartY, lineEndX, lineEndY], {
+ stroke: gridColor,
+ strokeWidth: 1,
+ selectable: true,
+ lockMovementX: true,
+ lockMovementY: true,
+ lockRotation: true,
+ lockScalingX: true,
+ lockScalingY: true,
+ strokeDashArray: [5, 2],
+ opacity: 0.3,
+ padding: GRID_PADDING,
+ direction: object.direction,
+ visible: isGridDisplay,
+ name: object.name,
+ })
+
+ canvas.add(line)
+ canvas.setActiveObject(line)
+ canvas.renderAll()
}
return (
diff --git a/src/components/floor-plan/modal/grid/GridMove.jsx b/src/components/floor-plan/modal/grid/GridMove.jsx
index 4aa27851..52084e00 100644
--- a/src/components/floor-plan/modal/grid/GridMove.jsx
+++ b/src/components/floor-plan/modal/grid/GridMove.jsx
@@ -6,7 +6,6 @@ import { contextPopupPositionState } from '@/store/popupAtom'
import { useCanvas } from '@/hooks/useCanvas'
import { canvasState, currentObjectState } from '@/store/canvasAtom'
import { useEffect, useState } from 'react'
-import { useGrid } from '@/hooks/common/useGrid'
import { useSwal } from '@/hooks/useSwal'
import { set } from 'react-hook-form'
@@ -17,7 +16,6 @@ export default function GridMove(props) {
const { getMessage } = useMessage()
const { closePopup } = usePopup()
const { swalFire } = useSwal()
- const { move } = useGrid()
const [currentObject, setCurrentObject] = useRecoilState(currentObjectState)
const [isAll, setIsAll] = useState(false)
const [verticalSize, setVerticalSize] = useState('0')
@@ -54,21 +52,31 @@ export default function GridMove(props) {
.forEach((grid) => {
move(
grid,
- arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize),
- arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize),
+ arrow2 === '←' ? (Number(horizonSize) * -1) / 10 : Number(horizonSize) / 10,
+ arrow1 === '↑' ? (Number(verticalSize) * -1) / 10 : Number(verticalSize) / 10,
)
})
} else {
move(
currentObject,
- arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize),
- arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize),
+ arrow2 === '←' ? (Number(horizonSize) * -1) / 10 : Number(horizonSize) / 10,
+ arrow1 === '↑' ? (Number(verticalSize) * -1) / 10 : Number(verticalSize) / 10,
)
}
canvas.renderAll()
handleClose()
}
+ const move = (object, x, y) => {
+ object.set({
+ ...object,
+ x1: object.direction === 'vertical' ? object.x1 + x : 0,
+ x2: object.direction === 'vertical' ? object.x1 + x : canvas.width,
+ y1: object.direction === 'vertical' ? 0 : object.y1 + y,
+ y2: object.direction === 'vertical' ? canvas.height : object.y1 + y,
+ })
+ }
+
const handleClose = () => {
closePopup(id)
}
diff --git a/src/components/floor-plan/modal/movement/type/FlowLine.jsx b/src/components/floor-plan/modal/movement/type/FlowLine.jsx
index 565a9ff8..3c23a30a 100644
--- a/src/components/floor-plan/modal/movement/type/FlowLine.jsx
+++ b/src/components/floor-plan/modal/movement/type/FlowLine.jsx
@@ -15,13 +15,18 @@ export default function FlowLine({ FLOW_LINE_REF }) {
const currentObject = useRecoilValue(currentObjectState)
const handleFocus = () => {
if (currentObject === null) {
+ FLOW_LINE_REF.POINTER_INPUT_REF.current.value = ''
FLOW_LINE_REF.FILLED_INPUT_REF.current.value = ''
FLOW_LINE_REF.FILLED_INPUT_REF.current.blur()
}
}
const handleInput = (e) => {
- const value = e.target.value.replace(/^0+/, '')
- setFilledInput(value.replace(/[^0-9]/g, ''))
+ const regex = /^-?\d*$/
+ let value = e.target.value
+ if (!regex.test(value) && value !== '') return
+ if (value.startsWith('0') || value === '-0') return
+
+ setFilledInput(value.replace(/[^0-9-]/g, ''))
}
return (
<>
@@ -47,7 +52,7 @@ export default function FlowLine({ FLOW_LINE_REF }) {
diff --git a/src/components/floor-plan/modal/movement/type/Updown.jsx b/src/components/floor-plan/modal/movement/type/Updown.jsx
index bcc45590..786c7017 100644
--- a/src/components/floor-plan/modal/movement/type/Updown.jsx
+++ b/src/components/floor-plan/modal/movement/type/Updown.jsx
@@ -15,6 +15,7 @@ export default function Updown({ UP_DOWN_REF }) {
const currentObject = useRecoilValue(currentObjectState)
const handleFocus = () => {
if (currentObject === null) {
+ UP_DOWN_REF.POINTER_INPUT_REF.current.value = ''
UP_DOWN_REF.FILLED_INPUT_REF.current.value = ''
UP_DOWN_REF.FILLED_INPUT_REF.current.blur()
}
@@ -48,7 +49,7 @@ export default function Updown({ UP_DOWN_REF }) {
diff --git a/src/components/floor-plan/modal/setting01/GridOption.jsx b/src/components/floor-plan/modal/setting01/GridOption.jsx
index b5b61acc..5931b561 100644
--- a/src/components/floor-plan/modal/setting01/GridOption.jsx
+++ b/src/components/floor-plan/modal/setting01/GridOption.jsx
@@ -105,6 +105,16 @@ export default function GridOption(props) {
initEvent()
}, [gridOptions])
+ useEffect(() => {
+ return () => {
+ setAdsorptionPointAddMode(false)
+ setTempGridMode(false)
+ setTimeout(() => {
+ initEvent()
+ }, 100)
+ }
+ }, [])
+
const dotLineGridProps = {
id: dotLineId,
setIsShow: setShowDotLineGridModal,
diff --git a/src/components/floor-plan/modal/setting01/SecondOption.jsx b/src/components/floor-plan/modal/setting01/SecondOption.jsx
index f264edb2..d0acddb2 100644
--- a/src/components/floor-plan/modal/setting01/SecondOption.jsx
+++ b/src/components/floor-plan/modal/setting01/SecondOption.jsx
@@ -185,7 +185,7 @@ export default function SecondOption(props) {
const onClickOption = async (item) => {
let option4Data = settingModalSecondOptions?.option4
- let adsorpPointData = adsorptionPointMode.adsorptionPoint
+ let adsorpPointData = adsorptionPointMode
//흡착범위 설정(단 건 선택)
if (
@@ -203,11 +203,9 @@ export default function SecondOption(props) {
//흡착점 범위
setAdsorptionRange(item.range)
-
- setAdsorptionPointMode({ ...adsorptionPointMode, adsorptionPoint: adsorpPointData })
+ setAdsorptionPointMode(adsorpPointData)
} else if (item === 'adsorpPoint') {
- setAdsorptionPointMode({ ...adsorptionPointMode, adsorptionPoint: !adsorpPointData })
- adsorpPointData = !adsorpPointData
+ setAdsorptionPointMode(!adsorpPointData)
}
setSettingsData({ ...settingsData, option4: [...option4Data], adsorptionPoint: adsorpPointData })
@@ -257,7 +255,7 @@ export default function SecondOption(props) {
}}
>
{getMessage('modal.canvas.setting.font.plan.absorption.point')}
- {adsorptionPointMode.adsorptionPoint ? 'ON' : 'OFF'}
+ {adsorptionPointMode ? 'ON' : 'OFF'}
diff --git a/src/components/floor-plan/modal/setting01/SettingModal01.jsx b/src/components/floor-plan/modal/setting01/SettingModal01.jsx
index 4e6f91ea..71c19a83 100644
--- a/src/components/floor-plan/modal/setting01/SettingModal01.jsx
+++ b/src/components/floor-plan/modal/setting01/SettingModal01.jsx
@@ -6,16 +6,22 @@ import WithDraggable from '@/components/common/draggable/WithDraggable'
import SecondOption from '@/components/floor-plan/modal/setting01/SecondOption'
import { useMessage } from '@/hooks/useMessage'
import GridOption from '@/components/floor-plan/modal/setting01/GridOption'
-import { canGridOptionSeletor } from '@/store/canvasAtom'
-import { useRecoilValue } from 'recoil'
+import { adsorptionPointAddModeState, canGridOptionSeletor, tempGridModeState } from '@/store/canvasAtom'
+import { useRecoilState, useRecoilValue } from 'recoil'
import { usePopup } from '@/hooks/usePopup'
import { useCanvasSetting } from '@/hooks/option/useCanvasSetting'
+import { useTempGrid } from '@/hooks/useTempGrid'
+import { settingModalGridOptionsState } from '@/store/settingAtom'
+import { useEvent } from '@/hooks/useEvent'
export default function SettingModal01(props) {
const { id } = props
const [buttonAct, setButtonAct] = useState(1)
const { getMessage } = useMessage()
const canGridOptionSeletorValue = useRecoilValue(canGridOptionSeletor)
+ const [gridOptions, setGridOptions] = useRecoilState(settingModalGridOptionsState)
+ const [tempGridMode, setTempGridMode] = useRecoilState(tempGridModeState)
+ const [adsorptionPointAddMode, setAdsorptionPointAddMode] = useRecoilState(adsorptionPointAddModeState)
const { closePopup } = usePopup()
const {
@@ -71,9 +77,22 @@ export default function SettingModal01(props) {
setButtonAct(num)
}
+ const onClose = () => {
+ setTempGridMode(false)
+ setAdsorptionPointAddMode(false)
+ setGridOptions((prev) => {
+ const newSettingOptions = [...prev]
+ newSettingOptions[0].selected = false
+ newSettingOptions[2].selected = false
+ return [...newSettingOptions]
+ })
+
+ closePopup(id, true)
+ }
+
return (
- closePopup(id, true)} />
+
|