From c71468851d5509b855fe71626333953b11bc8c8c Mon Sep 17 00:00:00 2001 From: yjnoh Date: Wed, 23 Oct 2024 15:30:30 +0900 Subject: [PATCH 1/9] =?UTF-8?q?=EC=98=B5=EC=85=982=20-=20=EC=BA=94?= =?UTF-8?q?=EB=B2=84=EC=8A=A4=20=EC=82=AC=EC=9D=B4=EC=A6=88=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../modal/setting01/planSize/PlanSizeSetting.jsx | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/components/floor-plan/modal/setting01/planSize/PlanSizeSetting.jsx b/src/components/floor-plan/modal/setting01/planSize/PlanSizeSetting.jsx index 8802127e..18a92bf9 100644 --- a/src/components/floor-plan/modal/setting01/planSize/PlanSizeSetting.jsx +++ b/src/components/floor-plan/modal/setting01/planSize/PlanSizeSetting.jsx @@ -1,7 +1,9 @@ -import WithDraggable from '@/components/common/draggable/WithDraggable' -import { usePopup } from '@/hooks/usePopup' -import { useMessage } from '@/hooks/useMessage' import { useState } from 'react' +import { useRecoilValue } from 'recoil' +import { useMessage } from '@/hooks/useMessage' +import { usePopup } from '@/hooks/usePopup' +import WithDraggable from '@/components/common/draggable/WithDraggable' +import { canvasState } from '@/store/canvasAtom' export default function PlanSizeSetting(props) { const { horizon, setHorizon, vertical, setVertical, id, pos = { x: 985, y: 180 }, setIsShow } = props @@ -9,6 +11,7 @@ export default function PlanSizeSetting(props) { const { getMessage } = useMessage() const [originHorizon, setOriginHorizon] = useState(horizon) const [originVertical, setOriginVertical] = useState(vertical) + const canvas = useRecoilValue(canvasState) return ( @@ -55,6 +58,9 @@ export default function PlanSizeSetting(props) { setVertical(originVertical) setIsShow(false) closePopup(id) + canvas.setWidth(originHorizon) + canvas.setHeight(originVertical) + canvas.renderAll() }} > {getMessage('modal.common.save')} From 83640cc89b678fb5a657eb5dea251e20cdec54db Mon Sep 17 00:00:00 2001 From: yjnoh Date: Thu, 24 Oct 2024 09:48:55 +0900 Subject: [PATCH 2/9] =?UTF-8?q?=EC=B9=98=EC=88=98=EC=84=A0,=20=EB=AC=B8?= =?UTF-8?q?=EC=9E=90=20=ED=8F=B0=ED=8A=B8=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/useCommonUtils.js | 34 ++++++++++++++++++++---------- src/hooks/common/useFont.js | 30 ++++++++++++++++++++++++-- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/src/hooks/common/useCommonUtils.js b/src/hooks/common/useCommonUtils.js index dd92253d..d4ab9cbf 100644 --- a/src/hooks/common/useCommonUtils.js +++ b/src/hooks/common/useCommonUtils.js @@ -2,13 +2,16 @@ import { useEffect } from 'react' import { useRecoilValue } from 'recoil' import { wordDisplaySelector } from '@/store/settingAtom' import { useEvent } from '@/hooks/useEvent' -import { checkLineOrientation, getDistance } from '@/util/canvas-util' +import { checkLineOrientation, getDistance, setSurfaceShapePattern } from '@/util/canvas-util' import { dimensionLineSettingsState } from '@/store/commonUtilsAtom' +import { fontSelector } from '@/store/fontAtom' export function useCommonUtils({ canvas, commonFunctionState, setCommonFunctionState }) { const wordDisplay = useRecoilValue(wordDisplaySelector) const { addCanvasMouseEventListener, addDocumentEventListener, initEvent } = useEvent() const dimensionSettings = useRecoilValue(dimensionLineSettingsState) + const dimensionLineTextFont = useRecoilValue(fontSelector('dimensionLineText')) + const commonTextFont = useRecoilValue(fontSelector('commonText')) useEffect(() => { initEvent() @@ -19,21 +22,31 @@ export function useCommonUtils({ canvas, commonFunctionState, setCommonFunctionS } else if (commonFunctionState.distance) { commonDistanceMode() } - }, [commonFunctionState, dimensionSettings]) + }, [commonFunctionState, dimensionSettings, commonTextFont, dimensionLineTextFont]) + + const loadDataInitialize = () => { + const roofs = canvas.getObjects().filter((obj) => obj.name === 'roof') + roofs.forEach((roof) => {}) + } const commonTextMode = () => { let textbox if (commonFunctionState.text) { + console.log(commonTextFont) + addCanvasMouseEventListener('mouse:down', (event) => { const pointer = canvas?.getPointer(event.e) textbox = new fabric.Textbox('', { left: pointer.x, top: pointer.y, width: 200, - fontSize: 14, editable: true, name: 'commonText', visible: wordDisplay, + fill: commonTextFont.fontColor.value, + fontFamily: commonTextFont.fontFamily.value, + fontSize: commonTextFont.fontSize.value, + fontStyle: commonTextFont.fontWeight.value, }) canvas?.add(textbox) @@ -187,21 +200,19 @@ export function useCommonUtils({ canvas, commonFunctionState, setCommonFunctionS canvas.add(arrow1) canvas.add(arrow2) - console.log(dimensionSettings) - - // 거리 텍스트가 이미 있으면 업데이트하고, 없으면 새로 생성 distanceText = new fabric.Text(`${distance * 10} `, { left: (p1CenterX + p2CenterX) / 2 + (lineDirection === 'horizontal' ? 0 : -15), top: (p1CenterY + p2CenterY) / 2 + (lineDirection === 'horizontal' ? +15 : 0), - fill: dimensionSettings.fontColor, - fontSize: dimensionSettings.fontSize, - // fontFamily : dimensionSettings.font, //폰트 - // fontStyle : dimensionSettings.fontStyle, //폰트스타일 + fill: dimensionLineTextFont.fontColor.value, + fontSize: dimensionLineTextFont.fontSize.value, + fontFamily: dimensionLineTextFont.fontFamily.value, + fontStyle: dimensionLineTextFont.fontWeight.value, selectable: true, textAlign: 'center', originX: 'center', originY: 'center', angle: lineDirection === 'horizontal' ? 0 : 270, + name: 'dimensionLineText', // lockMovementX: false, // lockMovementY: false, }) @@ -361,11 +372,12 @@ export function useCommonUtils({ canvas, commonFunctionState, setCommonFunctionS } } - setCommonFunctionState(tempStates) + if (setCommonFunctionState) setCommonFunctionState(tempStates) } return { commonFunctions, dimensionSettings, + loadDataInitialize, } } diff --git a/src/hooks/common/useFont.js b/src/hooks/common/useFont.js index 383997a0..28c78f14 100644 --- a/src/hooks/common/useFont.js +++ b/src/hooks/common/useFont.js @@ -11,9 +11,35 @@ export function useFont() { const lengthText = useRecoilValue(fontSelector('lengthText')) const circuitNumberText = useRecoilValue(fontSelector('circuitNumberText')) - useEffect(() => {}, [commonText]) + useEffect(() => { + if (canvas) { + const textObjs = canvas?.getObjects().filter((obj) => obj.name === 'commonText') + textObjs.forEach((obj) => { + obj.set({ + fontFamily: commonText.fontFamily.value, + fontWeight: commonText.fontWeight.value, + fontSize: commonText.fontSize.value, + fill: commonText.fontColor.value, + }) + }) + canvas.renderAll() + } + }, [commonText]) - useEffect(() => {}, [dimensionLineText]) + useEffect(() => { + if (canvas) { + const textObjs = canvas?.getObjects().filter((obj) => obj.name === 'dimensionLineText') + textObjs.forEach((obj) => { + obj.set({ + fontFamily: dimensionLineText.fontFamily.value, + fontWeight: dimensionLineText.fontWeight.value, + fontSize: dimensionLineText.fontSize.value, + fill: dimensionLineText.fontColor.value, + }) + }) + canvas.renderAll() + } + }, [dimensionLineText]) useEffect(() => { if (canvas) { From 46dab98801f7d8fdfd43baf8d9426e286930c407 Mon Sep 17 00:00:00 2001 From: leeyongjae Date: Thu, 24 Oct 2024 10:39:01 +0900 Subject: [PATCH 3/9] =?UTF-8?q?[=EB=A1=9C=EA=B7=B8=EC=9D=B8]=20=ED=8C=A8?= =?UTF-8?q?=EC=8A=A4=EC=9B=8C=EB=93=9C=20=ED=91=9C=EC=8B=9C=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/Login.jsx | 1 + 1 file changed, 1 insertion(+) diff --git a/src/components/auth/Login.jsx b/src/components/auth/Login.jsx index 66d149ac..80b34f9f 100644 --- a/src/components/auth/Login.jsx +++ b/src/components/auth/Login.jsx @@ -234,6 +234,7 @@ export default function Login() { onBlur={() => setSecFocus(false)} /> @@ -1767,7 +1868,7 @@ export default function StuffDetail() { TEMP상세:{getMessage('stuff.detail.btn.save')} )} - + diff --git a/src/locales/ja.json b/src/locales/ja.json index 521f4ac6..5a93188a 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -516,6 +516,8 @@ "stuff.detail.btn.moveList": "商品リスト", "stuff.detail.btn.save": "保存", "stuff.detail.btn.tempSave": "一時保存", + "stuff.detail.save.valierror1": "垂直説説は0より大きい値を入力してください", + "stuff.detail.save.valierror2": "設置高さ0より大きい値を入力してください", "stuff.planReqPopup.popTitle": "設計依頼検索", "stuff.planReqPopup.btn1": "検索", "stuff.planReqPopup.btn2": "初期化", diff --git a/src/locales/ko.json b/src/locales/ko.json index 693d94b4..97d04755 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -521,6 +521,8 @@ "stuff.detail.btn.moveList": "물건목록", "stuff.detail.btn.save": "저장", "stuff.detail.btn.tempSave": "임시저장", + "stuff.detail.save.valierror1": "수직적설량은 0보다 큰 값을 입력하세요", + "stuff.detail.save.valierror2": "설치높이 0보다 큰 값을 입력하세요", "stuff.planReqPopup.popTitle": "설계 요청 검색", "stuff.planReqPopup.btn1": "검색", "stuff.planReqPopup.btn2": "초기화", From e86519211aebde771b137c68cb8b23e6991a8b96 Mon Sep 17 00:00:00 2001 From: basssy Date: Thu, 24 Oct 2024 11:29:36 +0900 Subject: [PATCH 6/9] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EC=A0=95=EB=B3=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/Stuff.jsx | 4 ++-- src/components/management/StuffDetail.jsx | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/components/management/Stuff.jsx b/src/components/management/Stuff.jsx index 98659701..162a64a6 100644 --- a/src/components/management/Stuff.jsx +++ b/src/components/management/Stuff.jsx @@ -244,8 +244,8 @@ export default function Stuff() { } async function fetchData() { - // const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(params)}` - const apiUrl = `/api/object/list?saleStoreId=T100&${queryStringFormatter(params)}` + const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(params)}` + // const apiUrl = `/api/object/list?saleStoreId=T01&${queryStringFormatter(params)}` await get({ url: apiUrl, }).then((res) => { diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 4aa54583..1e35a0a2 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -299,8 +299,8 @@ export default function StuffDetail() { //1차점 : X167 T01 //2차점 : 10X22, 201X112 - // get({ url: `/api/object/saleStore/${sessionState?.storeId}/list` }).then((res) => { - get({ url: `/api/object/saleStore/T100/list` }).then((res) => { + get({ url: `/api/object/saleStore/${sessionState?.storeId}/list` }).then((res) => { + // get({ url: `/api/object/saleStore/T01/list` }).then((res) => { if (!isEmptyArray(res)) { const firstList = res.filter((row) => row.saleStoreLevel === '1') const otherList = res.filter((row) => row.saleStoreLevel !== '1') @@ -356,8 +356,8 @@ export default function StuffDetail() { //1차점 : X167 T01 //2차점 : 10X22, 201X112 - // get({ url: `/api/object/saleStore/${sessionState?.storeId}/list` }).then((res) => { - get({ url: `/api/object/saleStore/T100/list` }).then((res) => { + get({ url: `/api/object/saleStore/${sessionState?.storeId}/list` }).then((res) => { + // get({ url: `/api/object/saleStore/T01/list` }).then((res) => { if (!isEmptyArray(res)) { const firstList = res.filter((row) => row.saleStoreLevel === '1') const otherList = res.filter((row) => row.saleStoreLevel !== '1') From 0845259945bbe178c02ea20526d213c992ba9242 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Thu, 24 Oct 2024 12:23:45 +0900 Subject: [PATCH 7/9] =?UTF-8?q?=EC=BA=94=EB=B2=84=EC=8A=A4=20=EB=A1=9C?= =?UTF-8?q?=EB=94=A9=20=ED=9B=84=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EC=9E=91?= =?UTF-8?q?=EC=97=85=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/floor-plan/CanvasFrame.jsx | 4 ++- src/components/floor-plan/CanvasMenu.jsx | 1 - src/hooks/common/useCanvasConfigInitialize.js | 32 +++++++++++++++++++ src/hooks/common/useCommonUtils.js | 10 ++---- 4 files changed, 38 insertions(+), 9 deletions(-) create mode 100644 src/hooks/common/useCanvasConfigInitialize.js diff --git a/src/components/floor-plan/CanvasFrame.jsx b/src/components/floor-plan/CanvasFrame.jsx index ebb3ece7..6887d07a 100644 --- a/src/components/floor-plan/CanvasFrame.jsx +++ b/src/components/floor-plan/CanvasFrame.jsx @@ -10,6 +10,7 @@ import { useRecoilValue } from 'recoil' import { currentObjectState } from '@/store/canvasAtom' import { useCanvasEvent } from '@/hooks/useCanvasEvent' import QContextMenu from '@/components/common/context-menu/QContextMenu' +import { useCanvasConfigInitialize } from '@/hooks/common/useCanvasConfigInitialize' export default function CanvasFrame({ plan }) { const canvasRef = useRef(null) @@ -21,7 +22,7 @@ export default function CanvasFrame({ plan }) { }, }) const { checkCanvasObjectEvent, checkUnsavedCanvasPlan } = usePlan() - + const { canvasLoadInit } = useCanvasConfigInitialize() const currentObject = useRecoilValue(currentObjectState) useEvent() @@ -32,6 +33,7 @@ export default function CanvasFrame({ plan }) { if (plan?.canvasStatus) { canvas?.loadFromJSON(JSON.parse(plan.canvasStatus), function () { canvas?.renderAll() // 캔버스를 다시 그립니다. + canvasLoadInit() //config된 상태로 캔버스 객체를 그린다 }) } } diff --git a/src/components/floor-plan/CanvasMenu.jsx b/src/components/floor-plan/CanvasMenu.jsx index 5f73efa1..07411efb 100644 --- a/src/components/floor-plan/CanvasMenu.jsx +++ b/src/components/floor-plan/CanvasMenu.jsx @@ -69,7 +69,6 @@ export default function CanvasMenu(props) { }) const { commonFunctions } = useCommonUtils({ - canvas, commonFunctionState, setCommonFunctionState, }) diff --git a/src/hooks/common/useCanvasConfigInitialize.js b/src/hooks/common/useCanvasConfigInitialize.js new file mode 100644 index 00000000..7421c53f --- /dev/null +++ b/src/hooks/common/useCanvasConfigInitialize.js @@ -0,0 +1,32 @@ +import { use, useEffect } from 'react' +import { useRecoilValue } from 'recoil' +import { settingModalFirstOptionsState } from '@/store/settingAtom' +import { canvasState } from '@/store/canvasAtom' +import { setSurfaceShapePattern } from '@/util/canvas-util' + +export function useCanvasConfigInitialize() { + const canvas = useRecoilValue(canvasState) + const settingModalFirstOptions = useRecoilValue(settingModalFirstOptionsState) + + const canvasLoadInit = () => { + roofInit() //화면표시 초기화 + } + + //치수표시, 화면표시, 글꼴등 초기화 + const roofInit = () => { + if (canvas) { + const roofDisplay = settingModalFirstOptions.option2.filter((item) => item.selected) + + canvas + .getObjects() + .filter((polygon) => polygon.name === 'roof') + .forEach((polygon) => { + setSurfaceShapePattern(polygon, roofDisplay[0].column) + }) + + canvas.renderAll() + } + } + + return { canvasLoadInit } +} diff --git a/src/hooks/common/useCommonUtils.js b/src/hooks/common/useCommonUtils.js index d4ab9cbf..8af18fa0 100644 --- a/src/hooks/common/useCommonUtils.js +++ b/src/hooks/common/useCommonUtils.js @@ -5,8 +5,10 @@ import { useEvent } from '@/hooks/useEvent' import { checkLineOrientation, getDistance, setSurfaceShapePattern } from '@/util/canvas-util' import { dimensionLineSettingsState } from '@/store/commonUtilsAtom' import { fontSelector } from '@/store/fontAtom' +import { canvasState } from '@/store/canvasAtom' -export function useCommonUtils({ canvas, commonFunctionState, setCommonFunctionState }) { +export function useCommonUtils({ commonFunctionState, setCommonFunctionState }) { + const canvas = useRecoilValue(canvasState) const wordDisplay = useRecoilValue(wordDisplaySelector) const { addCanvasMouseEventListener, addDocumentEventListener, initEvent } = useEvent() const dimensionSettings = useRecoilValue(dimensionLineSettingsState) @@ -24,11 +26,6 @@ export function useCommonUtils({ canvas, commonFunctionState, setCommonFunctionS } }, [commonFunctionState, dimensionSettings, commonTextFont, dimensionLineTextFont]) - const loadDataInitialize = () => { - const roofs = canvas.getObjects().filter((obj) => obj.name === 'roof') - roofs.forEach((roof) => {}) - } - const commonTextMode = () => { let textbox if (commonFunctionState.text) { @@ -378,6 +375,5 @@ export function useCommonUtils({ canvas, commonFunctionState, setCommonFunctionS return { commonFunctions, dimensionSettings, - loadDataInitialize, } } From 20e9a4894b61f2471bb1774c5a224b91cb5f64b7 Mon Sep 17 00:00:00 2001 From: basssy Date: Thu, 24 Oct 2024 12:36:06 +0900 Subject: [PATCH 8/9] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EC=A0=95=EB=B3=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/Stuff.jsx | 13 +++++-------- src/components/management/StuffDetail.jsx | 10 ++++++---- src/components/management/StuffSearchCondition.jsx | 1 - src/locales/ko.json | 2 +- 4 files changed, 12 insertions(+), 14 deletions(-) diff --git a/src/components/management/Stuff.jsx b/src/components/management/Stuff.jsx index 162a64a6..df057d8f 100644 --- a/src/components/management/Stuff.jsx +++ b/src/components/management/Stuff.jsx @@ -228,6 +228,7 @@ export default function Stuff() { //물건 메뉴 눌러서 최초 진입 sessionState if (stuffSearchParams?.code === 'S') { const params = { + saleStoreId: sessionState?.storeId, schObjectNo: stuffSearchParams?.schObjectNo, schAddress: stuffSearchParams?.schAddress, schObjectName: stuffSearchParams?.schObjectName, @@ -244,8 +245,7 @@ export default function Stuff() { } async function fetchData() { - const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(params)}` - // const apiUrl = `/api/object/list?saleStoreId=T01&${queryStringFormatter(params)}` + const apiUrl = `/api/object/list?${queryStringFormatter(params)}` await get({ url: apiUrl, }).then((res) => { @@ -259,6 +259,7 @@ export default function Stuff() { } else { //메인화면에서 진입 const params = { + saleStoreId: sessionState?.storeId, schObjectNo: stuffSearchParams.schObjectNo, schAddress: '', schObjectName: '', @@ -275,8 +276,7 @@ export default function Stuff() { } async function fetchData() { - const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(params)}` - + const apiUrl = `/api/object/list?${queryStringFormatter(params)}` await get({ url: apiUrl, }).then((res) => { @@ -298,9 +298,8 @@ export default function Stuff() { stuffSearchParams.schSortType = defaultSortType setPageNo(1) - + //조회를 눌렀을때 async function fetchData() { - // const apiUrl = `/api/object/list?saleStoreId=T01&${queryStringFormatter(stuffSearchParams)}` const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(stuffSearchParams)}` await get({ url: apiUrl }).then((res) => { if (!isEmptyArray(res)) { @@ -330,7 +329,6 @@ export default function Stuff() { }) setPageNo(1) - // const apiUrl = `/api/object/list?saleStoreId=T01&${queryStringFormatter(stuffSearchParams)}` const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(stuffSearchParams)}` get({ url: apiUrl }).then((res) => { if (!isEmptyArray(res)) { @@ -361,7 +359,6 @@ export default function Stuff() { setPageNo(1) - // const apiUrl = `/api/object/list?saleStoreId=T01&${queryStringFormatter(stuffSearchParams)}` const apiUrl = `/api/object/list?saleStoreId=${sessionState?.storeId}&${queryStringFormatter(stuffSearchParams)}` get({ url: apiUrl }).then((res) => { if (!isEmptyArray(res)) { diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 1e35a0a2..a68771fa 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -893,10 +893,10 @@ export default function StuffDetail() { let height = params.installHeight if (snow === '0') { - alert(getMessage('stuff.detail.save.valierror1')) + return alert(getMessage('stuff.detail.save.valierror1')) } if (height === '0') { - alert(getMessage('stuff.detail.save.valierror2')) + return alert(getMessage('stuff.detail.save.valierror2')) } alert('작업중') @@ -958,10 +958,10 @@ export default function StuffDetail() { let height = params.installHeight if (snow === '0') { - alert(getMessage('stuff.detail.save.valierror1')) + return alert(getMessage('stuff.detail.save.valierror1')) } if (height === '0') { - alert(getMessage('stuff.detail.save.valierror2')) + return alert(getMessage('stuff.detail.save.valierror2')) } alert('작업중') @@ -1129,6 +1129,7 @@ export default function StuffDetail() { getOptionLabel={(x) => x.saleStoreName} getOptionValue={(x) => x.saleStoreId} isClearable={sessionState?.storeLvl === '1' ? true : false} + isDisabled={sessionState?.storeLel !== '1' ? true : false} value={saleStoreList.filter(function (option) { return option.saleStoreId === selOptions })} @@ -1537,6 +1538,7 @@ export default function StuffDetail() { getOptionLabel={(x) => x.saleStoreName} getOptionValue={(x) => x.saleStoreId} isClearable={sessionState?.storeLvl === '1' ? true : false} + isDisabled={sessionState?.storeLel !== '1' ? true : false} value={saleStoreList.filter(function (option) { return option.saleStoreId === selOptions })} diff --git a/src/components/management/StuffSearchCondition.jsx b/src/components/management/StuffSearchCondition.jsx index 0326f28e..1822140e 100644 --- a/src/components/management/StuffSearchCondition.jsx +++ b/src/components/management/StuffSearchCondition.jsx @@ -128,7 +128,6 @@ export default function StuffSearchCondition() { useEffect(() => { if (isObjectNotEmpty(sessionState)) { // storeId가 T01 이거나 1차점일때만 판매대리점 선택 활성화 - // get({ url: `/api/object/saleStore/TEMP02/list` }).then((res) => { get({ url: `/api/object/saleStore/${sessionState?.storeId}/list` }).then((res) => { if (!isEmptyArray(res)) { res.map((row) => { diff --git a/src/locales/ko.json b/src/locales/ko.json index 97d04755..651e8473 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -522,7 +522,7 @@ "stuff.detail.btn.save": "저장", "stuff.detail.btn.tempSave": "임시저장", "stuff.detail.save.valierror1": "수직적설량은 0보다 큰 값을 입력하세요", - "stuff.detail.save.valierror2": "설치높이 0보다 큰 값을 입력하세요", + "stuff.detail.save.valierror2": "설치높이는 0보다 큰 값을 입력하세요", "stuff.planReqPopup.popTitle": "설계 요청 검색", "stuff.planReqPopup.btn1": "검색", "stuff.planReqPopup.btn2": "초기화", From 7aa2e6194d8ed28a9af5e2c02271ca1477d75822 Mon Sep 17 00:00:00 2001 From: yjnoh Date: Thu, 24 Oct 2024 13:46:55 +0900 Subject: [PATCH 9/9] =?UTF-8?q?=EA=B1=B0=EB=A6=AC=EC=9E=AC=EA=B8=B0=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/hooks/common/useCommonUtils.js | 106 ++++++++++++++++++----------- 1 file changed, 67 insertions(+), 39 deletions(-) diff --git a/src/hooks/common/useCommonUtils.js b/src/hooks/common/useCommonUtils.js index 8af18fa0..8d0412c1 100644 --- a/src/hooks/common/useCommonUtils.js +++ b/src/hooks/common/useCommonUtils.js @@ -29,8 +29,6 @@ export function useCommonUtils({ commonFunctionState, setCommonFunctionState }) const commonTextMode = () => { let textbox if (commonFunctionState.text) { - console.log(commonTextFont) - addCanvasMouseEventListener('mouse:down', (event) => { const pointer = canvas?.getPointer(event.e) textbox = new fabric.Textbox('', { @@ -280,50 +278,70 @@ export function useCommonUtils({ commonFunctionState, setCommonFunctionState }) addCanvasMouseEventListener('mouse:down', function (options) { const pointer = canvas.getPointer(options.e) let point + let cross = {} if (points.length === 0) { - // 첫 번째 포인트는 그대로 클릭한 위치에 추가 - point = new fabric.Circle({ - left: pointer.x - 5, // 반지름 반영 - top: pointer.y - 5, // 반지름 반영 - ...circleOptions, + point = new fabric.Line([pointer.x - 10, pointer.y, pointer.x + 10, pointer.y], { + stroke: 'black', + strokeWidth: 1, + originX: 'center', + originY: 'center', }) - points.push(point) canvas.add(point) + cross['x'] = parseInt(point.left.toFixed(0)) + + // 세로 선 생성 (십자 모양의 다른 축) + point = new fabric.Line([pointer.x, pointer.y - 10, pointer.x, pointer.y + 10], { + stroke: 'black', + strokeWidth: 1, + originX: 'center', + originY: 'center', + }) + cross['y'] = parseInt(point.top.toFixed(0)) + + canvas.add(point) + points.push(cross) } else if (points.length === 1) { // 두 번째 포인트는 첫 번째 포인트를 기준으로 수평 또는 수직으로만 배치 const p1 = points[0] - point = new fabric.Circle({ - left: pointer.x - 5, // 반지름 반영 - top: pointer.y - 5, // 반지름 반영 - ...circleOptions, + point = new fabric.Line([pointer.x - 10, pointer.y, pointer.x + 10, pointer.y], { + stroke: 'black', + strokeWidth: 1, + originX: 'center', + originY: 'center', }) - - points.push(point) canvas.add(point) + cross['x'] = parseInt(point.left.toFixed(0)) + // 세로 선 생성 (십자 모양의 다른 축) + point = new fabric.Line([pointer.x, pointer.y - 10, pointer.x, pointer.y + 10], { + stroke: 'black', + strokeWidth: 1, + originX: 'center', + originY: 'center', + }) + canvas.add(point) + cross['y'] = parseInt(point.top.toFixed(0)) + points.push(cross) + + let isParallel = false + + if (points[0].x === points[1].x || points[0].y === points[1].y) { + isParallel = true + } // 두 포인트의 중심 좌표 계산 const p2 = points[1] - const p1CenterX = p1.left + p1.radius - const p1CenterY = p1.top + p1.radius - const p2CenterX = p2.left + p2.radius - const p2CenterY = p2.top + p2.radius - - const p3 = new fabric.Point(p2CenterX, p1CenterY) + const p1CenterX = p1.x + const p1CenterY = p1.y + const p2CenterX = p2.x + const p2CenterY = p2.y // 두 포인트 간에 직선을 그림 (중심을 기준으로) const line = new fabric.Line([p1CenterX, p1CenterY, p2CenterX, p2CenterY], lineOptions) - const line2 = new fabric.Line([p2CenterX, p2CenterY, p3.x, p3.y], lineOptions) - const line3 = new fabric.Line([p3.x, p3.y, p1CenterX, p1CenterY], lineOptions) canvas.add(line) - canvas.add(line2) - canvas.add(line3) - const distance1 = getDistance(p1CenterX, p1CenterY, p2CenterX, p2CenterY) - const distance2 = getDistance(p2CenterX, p2CenterY, p3.x, p3.y) - const distance3 = getDistance(p3.x, p3.y, p1CenterX, p1CenterY) // 거리 텍스트가 이미 있으면 업데이트하고, 없으면 새로 생성 distanceText = new fabric.Text(`${distance1 * 10}`, { @@ -332,18 +350,28 @@ export function useCommonUtils({ commonFunctionState, setCommonFunctionState }) ...textOptions, }) canvas.add(distanceText) - distanceText = new fabric.Text(`${distance2 * 10}`, { - left: (p2CenterX + p3.x) / 2, - top: (p2CenterY + p3.y) / 2, - ...textOptions, - }) - canvas.add(distanceText) - distanceText = new fabric.Text(`${distance3 * 10}`, { - left: (p3.x + p1CenterX) / 2, - top: (p3.y + p1CenterY) / 2, - ...textOptions, - }) - canvas.add(distanceText) + + if (!isParallel) { + const p3 = new fabric.Point(p2CenterX, p1CenterY) + const line2 = new fabric.Line([p2CenterX, p2CenterY, p3.x, p3.y], lineOptions) + const line3 = new fabric.Line([p3.x, p3.y, p1CenterX, p1CenterY], lineOptions) + canvas.add(line2) + canvas.add(line3) + const distance2 = getDistance(p2CenterX, p2CenterY, p3.x, p3.y) + const distance3 = getDistance(p3.x, p3.y, p1CenterX, p1CenterY) + distanceText = new fabric.Text(`${distance2 * 10}`, { + left: (p2CenterX + p3.x) / 2, + top: (p2CenterY + p3.y) / 2, + ...textOptions, + }) + canvas.add(distanceText) + distanceText = new fabric.Text(`${distance3 * 10}`, { + left: (p3.x + p1CenterX) / 2, + top: (p3.y + p1CenterY) / 2, + ...textOptions, + }) + canvas.add(distanceText) + } // 거리 계산 후, 다음 측정을 위해 초기화 points = []