diff --git a/public/static/images/canvas/estiment_arr.svg b/public/static/images/canvas/estiment_arr.svg new file mode 100644 index 00000000..bcdbb42b --- /dev/null +++ b/public/static/images/canvas/estiment_arr.svg @@ -0,0 +1,3 @@ + + + diff --git a/public/static/images/canvas/estiment_arr_color.svg b/public/static/images/canvas/estiment_arr_color.svg new file mode 100644 index 00000000..45588c74 --- /dev/null +++ b/public/static/images/canvas/estiment_arr_color.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/app/roof2/RoofSelect.jsx b/src/app/roof2/RoofSelect.jsx deleted file mode 100644 index d759398b..00000000 --- a/src/app/roof2/RoofSelect.jsx +++ /dev/null @@ -1,128 +0,0 @@ -'use client' - -import { Select, SelectItem } from '@nextui-org/react' -import { useEffect, useState } from 'react' -import { useAxios } from '@/hooks/useAxios' - -export default function RoofSelect() { - const [roofMaterials, setRoofMaterials] = useState([]) - const [manufacturers, setManufacturers] = useState([]) - const [trestles, setTrestles] = useState([]) - const [modules, setModules] = useState([]) - const [originTrestles, setOriginTrestles] = useState([]) - - const [roofMaterialId, setRoofMaterialId] = useState(null) - const [manufacturerId, setManufacturerId] = useState(null) - const [trestleId, setTrestleId] = useState(null) - - const { get } = useAxios() - - useEffect(() => { - get({ url: '/api/roof-material/roof-material-infos' }).then((res) => { - //TODO: error handling - if (!res) return - - setRoofMaterials(res) - }) - }, []) - - useEffect(() => { - if (!roofMaterialId) { - return - } - - get({ url: `/api/roof-material/roof-material-infos/${roofMaterialId}/trestles` }).then((res) => { - if (res.length === 0) { - return - } - setOriginTrestles(res) - const manufactural = res.map((trestle) => { - return { id: trestle.manufacturerId, name: trestle.manufacturerName } - }) - // Remove duplicates - const uniqueManufactural = Array.from(new Set(manufactural.map((a) => a.id))).map((id) => { - return manufactural.find((a) => a.id === id) - }) - - setManufacturers(uniqueManufactural) - }) - }, [roofMaterialId]) - - useEffect(() => { - if (!manufacturerId) { - return - } - - const trestles = originTrestles.filter((trestle) => trestle.manufacturerId === manufacturerId) - setTrestles(trestles) - }, [manufacturerId]) - - useEffect(() => { - if (!trestleId) { - return - } - get({ url: `/api/module/module-infos?roofMaterialId=${roofMaterialId}&trestleId=${trestleId}` }).then((res) => { - if (res.length === 0) { - return - } - setModules(res) - }) - }, [trestleId]) - - const handleRoofMaterialOnChange = (e) => { - const roofMaterialId = e.target.value - setRoofMaterialId(roofMaterialId) - setManufacturers([]) - setManufacturerId(null) - setTrestleId(null) - setTrestles([]) - setModules([]) - } - - const handleManufacturersOnChange = (e) => { - const manufacturerId = Number(e.target.value) - setTrestles([]) - setManufacturerId(manufacturerId) - setTrestleId(null) - setModules([]) - } - - const handleTrestlesOnChange = (e) => { - const trestleId = Number(e.target.value) - setTrestleId(trestleId) - setModules([]) - } - - return ( -
- {roofMaterials.length > 0 && ( - - )} - {manufacturers.length > 0 && ( - - )} - {trestles.length > 0 && ( - - )} - {modules.length > 0 && ( - - )} -
- ) -} diff --git a/src/app/roof2/page.jsx b/src/app/roof2/page.jsx index dce69910..94e86fbe 100644 --- a/src/app/roof2/page.jsx +++ b/src/app/roof2/page.jsx @@ -1,14 +1,8 @@ import Roof2 from '@/components/Roof2' -import RoofSelect from '@/app/roof2/RoofSelect' export default async function Roof2Page() { return ( <> -
-
- -
-
diff --git a/src/components/InitSettingsModal.jsx b/src/components/InitSettingsModal.jsx index 5f0837a8..52c82e86 100644 --- a/src/components/InitSettingsModal.jsx +++ b/src/components/InitSettingsModal.jsx @@ -29,13 +29,6 @@ export default function InitSettingsModal(props) { //const { get, post } = useAxios() useEffect(() => { - get({ url: '/api/roof-material/roof-material-infos' }).then((res) => { - //TODO: error handling - if (!res) return - - setRoofMaterials(res) - }) - get({ url: `/api/canvas-management/canvas-basic-settings/by-object/${objectNo}` }).then((res) => { if (res.length == 0) return diff --git a/src/components/common/color-picker/ColorPickerModal.jsx b/src/components/common/color-picker/ColorPickerModal.jsx index add20a7e..9d0074e0 100644 --- a/src/components/common/color-picker/ColorPickerModal.jsx +++ b/src/components/common/color-picker/ColorPickerModal.jsx @@ -8,7 +8,7 @@ import { contextPopupPositionState } from '@/store/popupAtom' export default function ColorPickerModal(props) { const contextPopupPosition = useRecoilValue(contextPopupPositionState) // 현재 메뉴 - const { isShow, setIsShow, pos = contextPopupPosition, color = '#ff0000', setColor, id } = props + const { isShow, setIsShow, pos = contextPopupPosition, color = '#ff0000', setColor, id, isConfig = false } = props const { getMessage } = useMessage() const [originColor, setOriginColor] = useState(color) const { closePopup } = usePopup() @@ -29,7 +29,7 @@ export default function ColorPickerModal(props) { setIsShow(false) } console.log(id) - closePopup(id) + closePopup(id, isConfig) }} > 닫기 @@ -49,7 +49,7 @@ export default function ColorPickerModal(props) { if (setColor) setColor(originColor) if (setIsShow) setIsShow(false) - closePopup(id) + closePopup(id, isConfig) }} > {getMessage('common.message.save')} diff --git a/src/components/common/context-menu/QContextMenu.jsx b/src/components/common/context-menu/QContextMenu.jsx index f710485f..9d3eb4f3 100644 --- a/src/components/common/context-menu/QContextMenu.jsx +++ b/src/components/common/context-menu/QContextMenu.jsx @@ -3,12 +3,14 @@ import { useEffect } from 'react' import '@/styles/contents.scss' import { useRecoilState } from 'recoil' import { contextMenuListState, contextMenuState } from '@/store/contextMenu' +import { useTempGrid } from '@/hooks/useTempGrid' export default function QContextMenu(props) { const { contextRef, canvasProps, handleKeyup } = props const [contextMenu, setContextMenu] = useRecoilState(contextMenuState) const [contextMenuList, setContextMenuList] = useRecoilState(contextMenuListState) const activeObject = canvasProps?.getActiveObject() //액티브된 객체를 가져옴 + const { tempGridMode, setTempGridMode } = useTempGrid() let contextType = '' @@ -32,6 +34,7 @@ export default function QContextMenu(props) { const handleContextMenu = (e) => { // e.preventDefault() //기존 contextmenu 막고 + if (tempGridMode) return const position = { x: window.innerWidth / 2 < e.pageX ? e.pageX - 240 : e.pageX, y: window.innerHeight / 2 < e.pageY ? getYPosition(e) : e.pageY, diff --git a/src/components/common/font/FontSetting.jsx b/src/components/common/font/FontSetting.jsx index 60181021..a658871d 100644 --- a/src/components/common/font/FontSetting.jsx +++ b/src/components/common/font/FontSetting.jsx @@ -14,15 +14,7 @@ const fonts = [ { name: '@Yu Gothic UI', value: '@Yu Gothic UI' }, { name: 'Yu Gothic UI', value: 'Yu Gothic UI' }, ] -const fontOptions = [ - { name: '보통', value: 'normal' }, - { name: '기울임꼴', value: 'italic' }, - { - name: '굵게', - value: 'bold', - }, - { name: '굵은 기울임꼴', value: 'boldAndItalic' }, -] + const fontSizes = [ ...Array.from({ length: 4 }).map((_, index) => { return { name: index + 8, value: index + 8 } @@ -34,20 +26,10 @@ const fontSizes = [ { name: 48, value: 48 }, { name: 72, value: 72 }, ] -const fontColors = [ - { name: '검정색', value: 'black' }, - { name: '빨강색', value: 'red' }, - { name: '파랑색', value: 'blue' }, - { name: '회색', value: 'gray' }, - { name: '황색', value: 'yellow' }, - { name: '녹색', value: 'green' }, - { name: '분홍색', value: 'pink' }, - { name: '황금색', value: 'gold' }, - { name: '남색', value: 'darkblue' }, -] + export default function FontSetting(props) { const contextPopupPosition = useRecoilValue(contextPopupPositionState) - const { id, setIsShow, pos = contextPopupPosition, type } = props + const { id, setIsShow, pos = contextPopupPosition, type, isConfig = false } = props const { getMessage } = useMessage() const { closePopup } = usePopup() const [globalFont, setGlobalFont] = useRecoilState(globalFontAtom) @@ -57,7 +39,26 @@ export default function FontSetting(props) { const [selectedFontWeight, setSelectedFontWeight] = useState(currentFont.fontWeight) const [selectedFontSize, setSelectedFontSize] = useState(currentFont.fontSize) const [selectedFontColor, setSelectedFontColor] = useState(currentFont.fontColor) - + const fontOptions = [ + { name: getMessage('font.style.normal'), value: 'normal' }, + { name: getMessage('font.style.italic'), value: 'italic' }, + { + name: getMessage('font.style.bold'), + value: 'bold', + }, + { name: getMessage('font.style.bold.italic'), value: 'boldAndItalic' }, + ] + const fontColors = [ + { name: getMessage('color.black'), value: 'black' }, + { name: getMessage('color.red'), value: 'red' }, + { name: getMessage('color.blue'), value: 'blue' }, + { name: getMessage('color.gray'), value: 'gray' }, + { name: getMessage('color.yellow'), value: 'yellow' }, + { name: getMessage('color.green'), value: 'green' }, + { name: getMessage('color.pink'), value: 'pink' }, + { name: getMessage('color.gold'), value: 'gold' }, + { name: getMessage('color.darkblue'), value: 'darkblue' }, + ] const handleSaveBtn = () => { setGlobalFont((prev) => { return { @@ -83,7 +84,7 @@ export default function FontSetting(props) { className="modal-close" onClick={() => { if (setIsShow) setIsShow(false) - closePopup(id) + closePopup(id, isConfig) }} > 닫기 diff --git a/src/components/common/popupManager/PopupManager.jsx b/src/components/common/popupManager/PopupManager.jsx index aa4b6cae..f24a8526 100644 --- a/src/components/common/popupManager/PopupManager.jsx +++ b/src/components/common/popupManager/PopupManager.jsx @@ -5,5 +5,9 @@ import { Fragment } from 'react' export default function PopupManager() { const [popup, setPopup] = useRecoilState(popupState) - return popup.children?.map((child) => {child.component}) + + return [ + ...popup?.config.map((child) => {child.component}), + ...popup?.other.map((child) => {child.component}), + ] } diff --git a/src/components/estimate/Estimate.jsx b/src/components/estimate/Estimate.jsx index 7cbf936a..47f99c3d 100644 --- a/src/components/estimate/Estimate.jsx +++ b/src/components/estimate/Estimate.jsx @@ -8,13 +8,41 @@ import { useMessage } from '@/hooks/useMessage' import { useCanvasMenu } from '@/hooks/common/useCanvasMenu' import SingleDatePicker from '../common/datepicker/SingleDatePicker' import EstimateFileUploader from './EstimateFileUploader' +import { useAxios } from '@/hooks/useAxios' +import { globalLocaleStore } from '@/store/localeAtom' +import { isObjectNotEmpty } from '@/util/common-utils' +import dayjs from 'dayjs' +import { useCommonCode } from '@/hooks/common/useCommonCode' +import Select from 'react-select' +import { useEstimateController } from '@/hooks/floorPlan/estimate/useEstimateController' export default function Estimate({ params }) { - const [objectNo, setObjectNo] = useState('') - const [files, setFiles] = useState([]) //첨부파일 + const [objectNo, setObjectNo] = useState('') //물건번호 + const [planNo, setPlanNo] = useState('') //플랜번호 + const [files, setFiles] = useState([]) // 보내는 첨부파일 + + //견적특이사항 접고 펼치기 + const [hidden, setHidden] = useState(false) + + //공통코드 + const { findCommonCode } = useCommonCode() + const [honorificCodeList, setHonorificCodeList] = useState([]) //경칭 공통코드 + + const [startDate, setStartDate] = useState(new Date()) + const singleDatePickerProps = { + startDate, + setStartDate, + } const sessionState = useRecoilValue(sessionStore) const objectRecoil = useRecoilValue(floorPlanObjectState) + + //견적서 상세데이터 + const { state, setState } = useEstimateController(params.pid) + + const globalLocaleState = useRecoilValue(globalLocaleStore) + const { get, post } = useAxios(globalLocaleState) + const { getMessage } = useMessage() const { setMenuNumber } = useCanvasMenu() @@ -27,46 +55,54 @@ export default function Estimate({ params }) { setUploadFiles: setFiles, } - useEffect(() => { - setObjectNo(objectRecoil.floorPlanObjectNo) - }, [objectRecoil]) - - useEffect(() => { - if (objectNo) { - //Q101X278191023001 - console.log('세션정보::::', sessionState) - //상세API호출 - } - }, [objectNo]) - useEffect(() => { setMenuNumber(5) + setObjectNo(objectRecoil.floorPlanObjectNo) + setPlanNo(params.pid) + + // 공통코드 + const code1 = findCommonCode(200800) + if (code1 != null) { + setHonorificCodeList(code1) + } + + //견적특이사항 API호출 + //http://localhost:8080/api/estimate/special-note-list }, []) + //견적일 set + useEffect(() => { + let estimateDatej = dayjs(startDate).format('YYYY-MM-DD') + setState({ estimateDate: estimateDatej }) + }, [startDate]) + return (
{/* 물건번호, 견적서번호, 등록일, 변경일시 시작 */} + {/*
*/}
{getMessage('estimate.detail.objectNo')}
- {objectNo} (Plan No: {params.pid}) + {objectNo} (Plan No: {planNo})
-
{getMessage('estimate.detail.estimateNo')}
-
5242310200065242
+
{getMessage('estimate.detail.docNo')}
+
{state.docNo}
-
{getMessage('estimate.detail.createDatetime')}
-
9999.09.28
+
{getMessage('estimate.detail.drawingEstimateCreateDate')}
+
+ {state?.drawingEstimateCreateDate ? `${dayjs(state.drawingEstimateCreateDate).format('YYYY.MM.DD')}` : ''} +
{getMessage('estimate.detail.lastEditDatetime')}
-
9999.09.28 06:36
+
{state?.lastEditDatetime ? `${dayjs(state.lastEditDatetime).format('YYYY.MM.DD HH:mm')}` : ''}
@@ -99,7 +135,7 @@ export default function Estimate({ params }) {
- +
@@ -113,64 +149,152 @@ export default function Estimate({ params }) {
- + { + //담당자 charger + // console.log('담당자:::::', e.target.value) + setState({ charger: e.target.value }) + }} + />
{/* 안건명 */} - {getMessage('estimate.detail.title')} * + {getMessage('estimate.detail.objectName')} *
- + { + //안건명 objectName + // console.log('안건명::::', e.target.value) + setState({ objectName: e.target.value }) + }} + />
-
- +
+ { + setState({ estimateType: e.target.value }) + }} + /> + +
+
+ { + setState({ estimateType: e.target.value }) + }} + /> + +
+
{/* 지붕재・사양시공 최대4개*/} {getMessage('estimate.detail.roofCns')} -
-
- -
-
- -
-
-
-
- {/* 마지막div엔 mb5 제외 */} -
+ {state?.roofMaterialIdMulti?.split('、').map((row, index) => { + //지붕재 + let roofList = row + let roofListLength = state?.roofMaterialIdMulti?.split('、').length + let style = 'mb5' + if (roofListLength == index + 1) { + style = '' + } + //사양시공 + let constructSpecificationMulti = state?.constructSpecificationMulti?.split('、') + + return ( + <> +
+
+ +
+
+ +
+
+ + ) + })} {/* 비고 */} - {getMessage('estimate.detail.note')} + {getMessage('estimate.detail.remarks')}
- + { + //비고 + // console.log('비고:::::', e.target.value) + setState({ remarks: e.target.value }) + }} + />
@@ -200,25 +324,6 @@ export default function Estimate({ params }) { {getMessage('estimate.detail.header.fileList1')} - {/*
-
- - -
-
-

Drag file here

-
    -
    -
    */} @@ -246,21 +351,40 @@ export default function Estimate({ params }) {

    {getMessage('estimate.detail.header.specialEstimate')}

    {getMessage('estimate.detail.header.specialEstimateProductInfo')}
    +
    + + +
    - {/* 공통코드영역시작 */} -
    - {/* 공통코드영역끝 */} - {/* 견적특이사항 내용영역시작 */} -
    - {/* 견적특이사항 내용영역끝 */} - {/* 견적특이사항 끝 */} + {/* 견적 특이사항 코드영역시작 */} +
    +
    +
    + {/* 견적특이사항 선택한 내용?영역시작 */} +
    +
    +
    제목11??
    +
    제목1 비고
    +
    +
    +
    제목22??
    +
    제목2 비고
    +
    +
    + {/* 견적특이사항 선택한 내용?영역끝 */} +
    +
    + + {/* 견적 특이사항 코드영역 끝 */} + + {/* 견적특이사항 영역끝 */} {/* 제품정보 시작 */}

    {getMessage('estimate.detail.header.specialEstimateProductInfo')}

    -
    +
    {getMessage('estimate.detail.sepcialEstimateProductInfo.totPcs')}
    @@ -285,7 +409,7 @@ export default function Estimate({ params }) {
    {/* YJOD면 아래영역 숨김 */} -
    +
    @@ -319,18 +443,35 @@ export default function Estimate({ params }) {
    {getMessage('estimate.detail.header.showPrice')}
    -
    +
    + +
    -
    -
    +
      +
    • - {getMessage('estimate.detail.showPrice.description')} -
    -
    + {getMessage('estimate.detail.showPrice.description1')} + +
  • + + {getMessage('estimate.detail.showPrice.description2')} +
  • +
  • + + {getMessage('estimate.detail.showPrice.description3')} +
  • +
  • + + {getMessage('estimate.detail.showPrice.description4')} +
  • +
    - @@ -348,6 +489,7 @@ export default function Estimate({ params }) {
    {/* 기본정보끝 */} + {/* */}
    ) diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 6ac20787..326bc4f4 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -32,6 +32,8 @@ import { menusState, menuTypeState } from '@/store/menuAtom' import useMenu from '@/hooks/common/useMenu' import { MENU } from '@/common/common' +import { useEstimateController } from '@/hooks/floorPlan/estimate/useEstimateController' + export default function CanvasMenu(props) { const { menuNumber, setMenuNumber } = props const pathname = usePathname() @@ -49,8 +51,9 @@ export default function CanvasMenu(props) { const sessionState = useRecoilValue(sessionStore) const globalLocale = useRecoilValue(globalLocaleStore) const canvas = useRecoilValue(canvasState) - const { handleZoomClear } = useCanvasEvent() + const { handleZoomClear, handleZoom } = useCanvasEvent() const { handleMenu } = useMenu() + const { handleEstimateSubmit } = useEstimateController() const { getMessage } = useMessage() const { currentCanvasPlan, saveCanvas } = usePlan() @@ -129,7 +132,7 @@ export default function CanvasMenu(props) { const handlePopup = () => { const id = uuidv4() - addPopup(id, 0, ) + addPopup(id, 1, , true) } useEffect(() => { @@ -201,14 +204,18 @@ export default function CanvasMenu(props) { {canvasZoom}% - +
    -
    @@ -222,7 +229,7 @@ export default function CanvasMenu(props) { {getMessage('plan.menu.estimate.docDown')} - diff --git a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx index 36082642..a71036c6 100644 --- a/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx @@ -50,7 +50,11 @@ export default function CircuitTrestleSetting({ id }) { Next )} - {tabNum === 3 && } + {tabNum === 3 && ( + + )} diff --git a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx index 9eadeb7f..927f973b 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/PowerConditionalSelect.jsx @@ -114,7 +114,7 @@ export default function PowerConditionalSelect({ setTabNum }) {
    - +
    @@ -132,12 +132,12 @@ export default function PowerConditionalSelect({ setTabNum }) {
    - +
    diff --git a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx index 6a11ed71..bfb8422c 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/StepUp.jsx @@ -18,8 +18,8 @@ export default function StepUp({}) {
    - - + + @@ -49,14 +49,14 @@ export default function StepUp({}) {
    -
    接続する
    +
    {getMessage('modal.circuit.trestle.setting.step.up.allocation.connected')}
    シリアル枚数総回路数{getMessage('modal.circuit.trestle.setting.step.up.allocation.serial.amount')}{getMessage('modal.circuit.trestle.setting.step.up.allocation.total.amount')}
    - - - + + + @@ -80,7 +80,7 @@ export default function StepUp({}) {
    - +
    @@ -90,13 +90,13 @@ export default function StepUp({}) {
    -
    昇圧オプション
    +
    {getMessage('modal.circuit.trestle.setting.step.up.allocation.option')}
    名称回路数昇圧回路数{getMessage('modal.circuit.trestle.setting.power.conditional.select.name')}{getMessage('modal.circuit.trestle.setting.power.conditional.select.circuit.amount')}{getMessage('modal.circuit.trestle.setting.step.up.allocation.circuit.amount')}
    - - + + @@ -113,7 +113,7 @@ export default function StepUp({}) {
    - +
    @@ -124,7 +124,7 @@ export default function StepUp({}) {
    - 綿調道区分 + {getMessage('modal.module.basic.setting.module.cotton.classification')}
    @@ -395,7 +395,7 @@ export default function StepUp({}) {
    - モニターの選択 + {getMessage('modal.circuit.trestle.setting.step.up.allocation.select.monitor')}
    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 5233d992..67bb2195 100644 --- a/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx +++ b/src/components/floor-plan/modal/circuitTrestle/step/type/PassivityCircuitAllocation.jsx @@ -4,13 +4,13 @@ export default function PassivityCircuitAllocation() { const { getMessage } = useMessage() const moduleData = { header: [ - { name: getMessage('屋根面'), prop: 'roofShape' }, + { name: getMessage('modal.panel.batch.statistic.roof.shape'), prop: 'roofShape' }, { name: getMessage('Q.TRON M-G2'), prop: 'moduleName', }, { - name: getMessage('発電量 (kW)'), + name: `${getMessage('modal.panel.batch.statistic.power.generation.amount')}(kW)`, prop: 'powerGeneration', }, ], diff --git a/src/components/floor-plan/modal/grid/DotLineGrid.jsx b/src/components/floor-plan/modal/grid/DotLineGrid.jsx index 520d56dd..f4caa40b 100644 --- a/src/components/floor-plan/modal/grid/DotLineGrid.jsx +++ b/src/components/floor-plan/modal/grid/DotLineGrid.jsx @@ -5,9 +5,7 @@ import { useMessage } from '@/hooks/useMessage' import { canvasState, dotLineGridSettingState, dotLineIntervalSelector } from '@/store/canvasAtom' import { useRecoilState, useRecoilValue, useResetRecoilState, useSetRecoilState } from 'recoil' import { onlyNumberInputChange } from '@/util/input-utils' -import { fabric } from 'fabric' -import { gridColorState } from '@/store/gridAtom' -import { gridDisplaySelector, settingModalGridOptionsState } from '@/store/settingAtom' +import { settingModalGridOptionsState } from '@/store/settingAtom' import { useAxios } from '@/hooks/useAxios' import { useSwal } from '@/hooks/useSwal' import { usePopup } from '@/hooks/usePopup' @@ -33,7 +31,7 @@ export default function DotLineGrid(props) { // const [modalOption, setModalOption] = useRecoilState(modalState); //modal 열림닫힘 state const [objectNo, setObjectNo] = useState('test123240912001') // 이후 삭제 필요 const [close, setClose] = useState(false) - const { id, setIsShow, pos = { x: 840, y: -815 } } = props + const { id, setIsShow, pos = { x: 840, y: -815 }, isConfig = false } = props const setSettingModalGridOptions = useSetRecoilState(settingModalGridOptionsState) const canvas = useRecoilValue(canvasState) @@ -142,7 +140,7 @@ export default function DotLineGrid(props) { await post({ url: `/api/canvas-management/canvas-grid-settings`, data: patternData }).then((res) => { swalFire({ text: getMessage(res.returnMessage) }) setDotLineGridSettingState({ ...currentSetting }) - closePopup(id) + closePopup(id, isConfig) }) } catch (error) { swalFire({ text: getMessage(res.returnMessage), icon: 'error' }) @@ -213,7 +211,7 @@ export default function DotLineGrid(props) { className="modal-close" onClick={() => { setIsShow(false) - closePopup(id) + closePopup(id, isConfig) }} > 닫기 diff --git a/src/components/floor-plan/modal/setting01/GridOption.jsx b/src/components/floor-plan/modal/setting01/GridOption.jsx index 5edb2167..f3465365 100644 --- a/src/components/floor-plan/modal/setting01/GridOption.jsx +++ b/src/components/floor-plan/modal/setting01/GridOption.jsx @@ -78,14 +78,14 @@ export default function GridOption() { // 점 선 그리드 설정 모달 setShowDotLineGridModal(selectedOption.selected) - addPopup(dotLineId, 2, ) + addPopup(dotLineId, 2, , true) } else if (selectedOption.id === 3) { // 흡착점 모드 setAdsorptionPointAddMode(selectedOption.selected) } else if (selectedOption.id === 4) { // 그리드 색 설정 모달 setShowColorPickerModal(selectedOption.selected) - addPopup(colorId, 2, ) + addPopup(colorId, 2, , true) } setGridOptions(newGridOptions) @@ -94,6 +94,7 @@ export default function GridOption() { const dotLineGridProps = { id: dotLineId, setIsShow: setShowDotLineGridModal, + isConfig: true, pos: { x: 845, y: 180, @@ -106,6 +107,7 @@ export default function GridOption() { setColor: setGridColor, isShow: showColorPickerModal, setIsShow: setShowColorPickerModal, + isConfig: true, pos: { x: 785, y: 180, diff --git a/src/components/floor-plan/modal/setting01/SecondOption.jsx b/src/components/floor-plan/modal/setting01/SecondOption.jsx index c09dfdc1..385c7bef 100644 --- a/src/components/floor-plan/modal/setting01/SecondOption.jsx +++ b/src/components/floor-plan/modal/setting01/SecondOption.jsx @@ -1,4 +1,4 @@ -import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil' +import { useRecoilValue } from 'recoil' import { useMessage } from '@/hooks/useMessage' import React, { useEffect, useState } from 'react' import DimensionLineSetting from '@/components/floor-plan/modal/setting01/dimensionLine/DimensionLineSetting' @@ -67,6 +67,7 @@ export default function SecondOption() { id: fontId, pos: { x: 745, y: 180 }, setIsShow: setShowFontSettingModal, + isConfig: true, } const planSizeProps = { id: planSizeId, @@ -86,36 +87,41 @@ export default function SecondOption() { case 'font1': { //문자 글꼴변경 setShowFontSettingModal(true) + setShowDimensionLineSettingModal(false) fontProps.type = 'commonText' fontProps.id = fontId + 1 - addPopup(fontId + 1, 2, ) + addPopup(fontId + 1, 2, , true) break } case 'font2': { //흐름 방향 글꼴 변경 setShowFontSettingModal(true) + setShowDimensionLineSettingModal(false) fontProps.type = 'flowText' fontProps.id = fontId + 2 - addPopup(fontId + 2, 2, ) + addPopup(fontId + 2, 2, , true) break } case 'font3': { //치수 글꼴변경 setShowFontSettingModal(true) + + setShowDimensionLineSettingModal(false) fontProps.type = 'lengthText' fontProps.id = fontId + 3 - addPopup(fontId + 3, 2, ) + addPopup(fontId + 3, 2, , true) break } case 'font4': { //회로번호 글꼴변경 setShowFontSettingModal(true) + setShowDimensionLineSettingModal(false) fontProps.type = 'circuitNumberText' fontProps.id = fontId - addPopup(fontId, 2, ) + addPopup(fontId, 2, , true) break } @@ -123,7 +129,7 @@ export default function SecondOption() { //치수선 설정 if (!showDimensionLineSettingModal) { setShowDimensionLineSettingModal(true) - addPopup(dimensionId, 2, ) + addPopup(dimensionId, 2, , true) } else { setShowDimensionLineSettingModal(false) closePopup(dimensionId) @@ -134,7 +140,8 @@ export default function SecondOption() { case 'planSize': { //도면크기 설정 setShowPlanSizeSettingModal(true) - addPopup(planSizeId, 2, ) + setShowDimensionLineSettingModal(false) + addPopup(planSizeId, 2, , true) break } } diff --git a/src/components/floor-plan/modal/setting01/SettingModal01.jsx b/src/components/floor-plan/modal/setting01/SettingModal01.jsx index 8570555e..e1bef1f0 100644 --- a/src/components/floor-plan/modal/setting01/SettingModal01.jsx +++ b/src/components/floor-plan/modal/setting01/SettingModal01.jsx @@ -11,7 +11,7 @@ import { useRecoilValue } from 'recoil' import { usePopup } from '@/hooks/usePopup' export default function SettingModal01(props) { - const { setShowDotLineGridModal, setShowFontSettingModal, id } = props + const { setShowDotLineGridModal, setShowFontSettingModal, id, isConfig } = props console.log(props) const [buttonAct, setButtonAct] = useState(1) const { getMessage } = useMessage() @@ -27,7 +27,7 @@ export default function SettingModal01(props) {

    {getMessage('modal.canvas.setting')}

    -
    diff --git a/src/components/floor-plan/modal/setting01/dimensionLine/DimensionLineSetting.jsx b/src/components/floor-plan/modal/setting01/dimensionLine/DimensionLineSetting.jsx index 2afbd184..1aa39e74 100644 --- a/src/components/floor-plan/modal/setting01/dimensionLine/DimensionLineSetting.jsx +++ b/src/components/floor-plan/modal/setting01/dimensionLine/DimensionLineSetting.jsx @@ -87,6 +87,7 @@ export default function DimensionLineSetting(props) { setFontColor: setOriginFontColor, fontSize: originFontSize, setFontSize: setOriginFontSize, + isConfig: true, id: fontModalId, pos: { x: 455, @@ -97,17 +98,17 @@ export default function DimensionLineSetting(props) { const popupHandle = (type) => { switch (type) { case 'color': - addPopup(colorModalId, 3, ) + addPopup(colorModalId, 3, , true) break case 'font': - addPopup(fontModalId, 3, ) + addPopup(fontModalId, 3, , true) break } } return ( -
    +

    {getMessage('modal.canvas.setting.font.plan.absorption.dimension.line')}

    名称昇圧回路数{getMessage('modal.circuit.trestle.setting.power.conditional.select.name')}{getMessage('modal.circuit.trestle.setting.step.up.allocation.circuit.amount')}