From b3481b4fce30b44a40b53b17541a4582f890f81d Mon Sep 17 00:00:00 2001 From: LEEYONGJAE Date: Wed, 5 Feb 2025 17:44:58 +0900 Subject: [PATCH 1/6] =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EC=9D=B8=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EB=A1=9C=EB=94=A9=EB=B0=94=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/AutoLogin.jsx | 24 ++- src/components/auth/Login.jsx | 299 ++++++++++++++++-------------- 2 files changed, 174 insertions(+), 149 deletions(-) diff --git a/src/components/auth/AutoLogin.jsx b/src/components/auth/AutoLogin.jsx index 0d539cbb..d400f2c4 100644 --- a/src/components/auth/AutoLogin.jsx +++ b/src/components/auth/AutoLogin.jsx @@ -1,21 +1,27 @@ 'use client' +import { useState } from 'react' import { useMessage } from '@/hooks/useMessage' +import GlobalSpinner from '@/components/common/spinner/GlobalSpinner' export default function AutoLoginPage() { + const [isLoading, setIsLoading] = useState(true) const { getMessage } = useMessage() return ( -
-
- {getMessage('site.name')} - {getMessage('site.sub_name')} -
-
-
- {getMessage('login.auto.page.text')} + <> + {isLoading && } +
+
+ {getMessage('site.name')} + {getMessage('site.sub_name')} +
+
+
+ {getMessage('login.auto.page.text')} +
-
+ ) } diff --git a/src/components/auth/Login.jsx b/src/components/auth/Login.jsx index eca80361..b23f9c53 100644 --- a/src/components/auth/Login.jsx +++ b/src/components/auth/Login.jsx @@ -10,14 +10,15 @@ import { useMessage } from '@/hooks/useMessage' import { globalLocaleStore } from '@/store/localeAtom' import { sessionStore } from '@/store/commonAtom' import { useRouter } from 'next/navigation' - -import Cookies from 'js-cookie' - import { useSearchParams } from 'next/navigation' +import GlobalSpinner from '@/components/common/spinner/GlobalSpinner' +import Cookies from 'js-cookie' import AutoLogin from './AutoLogin' export default function Login() { + const [isLoading, setIsLoading] = useState(false) + // 자동 로그인 const initParams = useSearchParams() const autoLoginParam = initParams.get('autoLoginParam1') @@ -35,11 +36,13 @@ export default function Login() { }, []) const autoLoginProcess = async (autoLoginParam) => { + setIsLoading(true) await promisePost({ url: '/api/login/v1.0/user/login/autoLoginDecryptData', data: { loginId: autoLoginParam } }) .then((res) => { if (res) { if (res.data) { post({ url: '/api/login/v1.0/user', data: { loginId: res.data } }).then((response) => { + setIsLoading(false) if (response) { const result = { ...response, storeLvl: response.groupId === '60000' ? '1' : '2', pwdInitYn: 'Y' } setSession(result) @@ -53,6 +56,7 @@ export default function Login() { } }) .catch((error) => { + setIsLoading(false) router.push('/login') }) } @@ -93,9 +97,11 @@ export default function Login() { loginId: formData.get('id'), pwd: formData.get('password'), } + setIsLoading(true) await promisePost({ url: '/api/login/v1.0/login', data: param }) .then((res) => { if (res) { + setIsLoading(false) if (res.data.result.resultCode === 'S') { setSession(res.data.data) setSessionState(res.data.data) @@ -105,7 +111,6 @@ export default function Login() { } else { Cookies.remove('chkLoginId') } - // router.push('/') login() } else { alert(res.data.result.resultMsg) @@ -113,6 +118,7 @@ export default function Login() { } }) .catch((error) => { + setIsLoading(false) alert(error.response.data.message) }) } @@ -123,12 +129,14 @@ export default function Login() { loginId: checkId, email: checkEmail, } + setIsLoading(true) await promisePatch({ url: '/api/login/v1.0/user/init-password', data: param, }) .then((res) => { if (res) { + setIsLoading(false) if (res.data.result.resultCode == 'S') { alert(getMessage('login.init_password.complete_message')) setCheckId('') @@ -140,36 +148,135 @@ export default function Login() { } }) .catch((error) => { + setIsLoading(false) alert(error.response.data.message) }) } return ( -
-
- - react - - {!autoLoginParam && passwordReset === 1 && ( - <> -
-
-
- {getMessage('site.name')} - {getMessage('site.sub_name')} + <> + {isLoading && } +
+
+ + react + + {!autoLoginParam && passwordReset === 1 && ( + <> +
+ +
+ {getMessage('site.name')} + {getMessage('site.sub_name')} +
+
+
+ { + setUserId(e.target.value) + }} + onFocus={() => setIdFocus(true)} + onBlur={() => setIdFocus(false)} + /> + +
+
+ { + setPasswordVisible(passwordVisible) + }} + onFocus={() => setSecFocus(true)} + onBlur={() => setSecFocus(false)} + /> + +
+
+ { + setChkLoginId(e.target.checked) + }} + /> + +
+
+ +
+
+ +
+
+ +
+
+ + {getMessage('login.guide.text')} +
+ {getMessage('login.guide.sub1')} {getMessage('login.guide.join.btn')} + {getMessage('login.guide.sub2')} +
+ + )} + {!autoLoginParam && passwordReset === 2 && ( + <> +
+
+ {getMessage('login.init_password.title')} + {getMessage('login.init_password.sub_title')}
{ - setUserId(e.target.value) + setCheckId(e.target.value) }} onFocus={() => setIdFocus(true)} onBlur={() => setIdFocus(false)} @@ -177,146 +284,58 @@ export default function Login() {
-
+
{ - setPasswordVisible(passwordVisible) + setCheckEmail(e.target.value) }} + placeholder={getMessage('login.init_password.email.placeholder')} onFocus={() => setSecFocus(true)} onBlur={() => setSecFocus(false)} />
-
- { - setChkLoginId(e.target.checked) +
+
-
- -
-
-
- -
-
- - {getMessage('login.guide.text')} -
- {getMessage('login.guide.sub1')} {getMessage('login.guide.join.btn')} - {getMessage('login.guide.sub2')} -
- - )} - {!autoLoginParam && passwordReset === 2 && ( - <> -
-
- {getMessage('login.init_password.title')} - {getMessage('login.init_password.sub_title')}
-
-
- { - setCheckId(e.target.value) - }} - onFocus={() => setIdFocus(true)} - onBlur={() => setIdFocus(false)} - /> - -
-
- { - setCheckEmail(e.target.value) - }} - placeholder={getMessage('login.init_password.email.placeholder')} - onFocus={() => setSecFocus(true)} - onBlur={() => setSecFocus(false)} - /> - -
-
- - -
-
-
- - )} - {autoLoginParam && } + + )} + {autoLoginParam && } +
+
COPYRIGHT©2024 Hanwha Japan All Rights Reserved.
-
COPYRIGHT©2024 Hanwha Japan All Rights Reserved.
-
+ ) } From f47b2684fbc61478d5f1fb3a147c5e6a2c7cb9c7 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 18:53:50 +0900 Subject: [PATCH 2/6] =?UTF-8?q?=EC=9D=98=EB=AF=B8=EC=97=86=EB=8A=94=20QPol?= =?UTF-8?q?ygon=20lengthText=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/util/qpolygon-utils.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/util/qpolygon-utils.js b/src/util/qpolygon-utils.js index 643c640d..edb8574c 100644 --- a/src/util/qpolygon-utils.js +++ b/src/util/qpolygon-utils.js @@ -235,6 +235,7 @@ export default function offsetPolygon(vertices, offset) { const arcSegments = 0 const originPolygon = new QPolygon(vertices, { fontSize: 0 }) + originPolygon.setViewLengthText(false) if (offset > 0) { let result = createMarginPolygon(polygon, offset, arcSegments).vertices From 0c8631c44d9a7dec43d1b169d7753bd838aea459 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 19:53:42 +0900 Subject: [PATCH 3/6] =?UTF-8?q?=EB=94=94=EC=8A=A4=ED=94=8C=EB=A0=88?= =?UTF-8?q?=EC=9D=B4=20=EC=84=A4=EC=A0=95=20=3D>=20=ED=95=A0=EB=8B=B9?= =?UTF-8?q?=ED=91=9C=EC=8B=9C,=20=ED=9A=8C=EB=A1=9C=20=EB=B2=88=ED=98=B8?= =?UTF-8?q?=20=ED=91=9C=EC=8B=9C=20,=EA=B0=80=EB=8C=80=20=ED=91=9C?= =?UTF-8?q?=EC=8B=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useRoof.js | 4 +++- src/hooks/option/useCanvasSetting.js | 8 ++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/hooks/common/useRoof.js b/src/hooks/common/useRoof.js index 0b5e5a6b..14407aa9 100644 --- a/src/hooks/common/useRoof.js +++ b/src/hooks/common/useRoof.js @@ -16,7 +16,9 @@ export function useRoof() { .filter((polygon) => polygon.name === 'roof') .forEach((polygon) => { if (allocDisplay) { - setSurfaceShapePattern(polygon, roofDisplay.column) + if (polygon.roofMaterial) { + setSurfaceShapePattern(polygon, roofDisplay.column, false, polygon.roofMaterial, true) + } } else { polygon.set('fill', null) } diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 29287689..287349bc 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -727,7 +727,7 @@ export function useCanvasSetting() { for (let i = 0; i < option1.length; i++) { switch (option1[i].column) { case 'allocDisplay': //할당 표시 - optionName = ['1'] + // useRoof에서 작업 완료 break case 'outlineDisplay': //외벽선 표시 optionName = ['outerLine', POLYGON_TYPE.WALL] @@ -742,19 +742,19 @@ export function useCanvasSetting() { optionName = ['commonText'] break case 'circuitNumDisplay': //회로번호 표시 - optionName = ['7'] + optionName = ['circuitNumber'] break case 'flowDisplay': //흐름방향 표시 optionName = ['arrow', 'flowText'] break case 'trestleDisplay': //가대 표시 - optionName = ['8'] + optionName = ['rack', 'smartRack', 'bracket'] break case 'imageDisplay': //이미지 표시 optionName = ['9'] break case 'totalDisplay': //집계표 표시 - optionName = ['10'] + // 작업할 필요 없음 break } // 표시 선택 상태(true/false) From faf3ead51480dd3c68f083c4392f5ce479ba43b6 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 19:54:14 +0900 Subject: [PATCH 4/6] =?UTF-8?q?=EA=B0=80=EB=8C=80=ED=91=9C=EC=8B=9C=20?= =?UTF-8?q?=ED=95=AD=EB=AA=A9=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/option/useCanvasSetting.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index 287349bc..b36ff30c 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -748,7 +748,7 @@ export function useCanvasSetting() { optionName = ['arrow', 'flowText'] break case 'trestleDisplay': //가대 표시 - optionName = ['rack', 'smartRack', 'bracket'] + optionName = ['rack', 'smartRack', 'bracket', 'eaveBar', 'halfEaveBar'] break case 'imageDisplay': //이미지 표시 optionName = ['9'] From 77c1c9c3a0d42be60b6cf462c8770f3db73b02f2 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 20:04:39 +0900 Subject: [PATCH 5/6] =?UTF-8?q?optionName=20=EC=9E=88=EC=96=B4=EC=95=BC=20?= =?UTF-8?q?=ED=95=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/option/useCanvasSetting.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/hooks/option/useCanvasSetting.js b/src/hooks/option/useCanvasSetting.js index b36ff30c..07f46740 100644 --- a/src/hooks/option/useCanvasSetting.js +++ b/src/hooks/option/useCanvasSetting.js @@ -727,7 +727,7 @@ export function useCanvasSetting() { for (let i = 0; i < option1.length; i++) { switch (option1[i].column) { case 'allocDisplay': //할당 표시 - // useRoof에서 작업 완료 + optionName = [] break case 'outlineDisplay': //외벽선 표시 optionName = ['outerLine', POLYGON_TYPE.WALL] @@ -755,6 +755,7 @@ export function useCanvasSetting() { break case 'totalDisplay': //집계표 표시 // 작업할 필요 없음 + optionName = [] break } // 표시 선택 상태(true/false) From 7fe794b8791e7dcf21b0e8fa88366a4346e86933 Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 5 Feb 2025 20:21:25 +0900 Subject: [PATCH 6/6] =?UTF-8?q?=EA=B0=80=EB=8C=80=20visible=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/module/useTrestle.js | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/src/hooks/module/useTrestle.js b/src/hooks/module/useTrestle.js index c04bb3ce..2df04fdc 100644 --- a/src/hooks/module/useTrestle.js +++ b/src/hooks/module/useTrestle.js @@ -5,7 +5,7 @@ import { moduleSelectionDataState } from '@/store/selectedModuleOptions' import { getDegreeByChon } from '@/util/canvas-util' import { v4 as uuidv4 } from 'uuid' import { useMasterController } from '@/hooks/common/useMasterController' -import { basicSettingState } from '@/store/settingAtom' +import { basicSettingState, trestleDisplaySelector } from '@/store/settingAtom' import { useSwal } from '@/hooks/useSwal' // 회로 및 가대설정 @@ -15,6 +15,7 @@ export const useTrestle = () => { const { getQuotationItem } = useMasterController() const currentAngleType = useRecoilValue(currentAngleTypeSelector) const roofSizeSet = useRecoilValue(basicSettingState).roofSizeSet + const isTrestleDisplay = useRecoilValue(trestleDisplaySelector) const { swalFire } = useSwal() const apply = () => { try { @@ -135,6 +136,7 @@ export const useTrestle = () => { selectable: false, surfaceId: surface.id, parentId: module.id, + visible: isTrestleDisplay, }) canvas.add(eaveBar) canvas.renderAll() @@ -165,6 +167,7 @@ export const useTrestle = () => { selectable: false, surfaceId: surface.id, parentId: module.id, + visible: isTrestleDisplay, }) canvas.add(halfEaveBar) canvas.renderAll() @@ -193,6 +196,7 @@ export const useTrestle = () => { strokeWidth: 4, selectable: false, parentId: module.id, + visible: isTrestleDisplay, }) canvas.add(halfEaveBar) canvas.renderAll() @@ -918,7 +922,7 @@ export const useTrestle = () => { offsetX: 0, offsetY: 0, }, - + visible: isTrestleDisplay, parentId: module.id, surfaceId: surface.id, supFitQty, @@ -952,6 +956,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen, @@ -992,6 +997,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen: rackLength, @@ -1022,6 +1028,7 @@ export const useTrestle = () => { surfaceId: surface.id, strokeWidth: 4, selectable: false, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen, @@ -1062,6 +1069,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen: rackLength, @@ -1090,6 +1098,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, strokeWidth: 4, selectable: false, supFitQty, @@ -1130,6 +1139,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, supFitQty, supFitIntvlPct, rackLen, @@ -1158,6 +1168,7 @@ export const useTrestle = () => { }, parentId: module.id, surfaceId: surface.id, + visible: isTrestleDisplay, strokeWidth: 4, selectable: false, supFitQty, @@ -1209,6 +1220,7 @@ export const useTrestle = () => { fill: 'green', name: 'bracket', parentId: rack.parentId, + visible: isTrestleDisplay, surfaceId: surface.id, width: bracketLength, height: bracketLength, @@ -1228,6 +1240,7 @@ export const useTrestle = () => { fill: 'green', name: 'bracket', parentId: rack.parentId, + visible: isTrestleDisplay, surfaceId: surface.id, width: bracketLength, height: bracketLength, @@ -1246,6 +1259,7 @@ export const useTrestle = () => { top: y2 - bracketLength / 3, fill: 'green', parentId: rack.parentId, + visible: isTrestleDisplay, surfaceId: surface.id, name: 'bracket', width: bracketLength, @@ -1266,6 +1280,7 @@ export const useTrestle = () => { fill: 'green', name: 'bracket', parentId: rack.parentId, + visible: isTrestleDisplay, surfaceId: surface.id, width: bracketLength, height: bracketLength, @@ -1431,6 +1446,7 @@ export const useTrestle = () => { width: 10, height: 10, selectable: false, + visible: isTrestleDisplay, }) canvas.add(bracket) canvas.renderAll()