From 543657bcd4b34f46bb2f2ef840c98d2a6109fa5e Mon Sep 17 00:00:00 2001 From: "hyojun.choi" Date: Wed, 23 Oct 2024 10:34:18 +0900 Subject: [PATCH 1/7] =?UTF-8?q?mouseline=20intersectionPoint=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/roofcover/useAuxiliaryDrawing.js | 1 - src/hooks/useMouse.js | 4 ++-- src/util/canvas-util.js | 9 ++++++++- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/hooks/roofcover/useAuxiliaryDrawing.js b/src/hooks/roofcover/useAuxiliaryDrawing.js index 7d18c5a2..610db186 100644 --- a/src/hooks/roofcover/useAuxiliaryDrawing.js +++ b/src/hooks/roofcover/useAuxiliaryDrawing.js @@ -454,7 +454,6 @@ export function useAuxiliaryDrawing(id) { const mouseDown = (e) => { canvas.renderAll() const pointer = getIntersectMousePoint(e) - console.log(pointer) mousePointerArr.current.push(pointer) if (mousePointerArr.current.length === 2) { diff --git a/src/hooks/useMouse.js b/src/hooks/useMouse.js index d484930a..033fea59 100644 --- a/src/hooks/useMouse.js +++ b/src/hooks/useMouse.js @@ -1,6 +1,6 @@ import { useRecoilValue } from 'recoil' import { canvasState } from '@/store/canvasAtom' -import { calculateIntersection } from '@/util/canvas-util' +import { calculateIntersection, getInterSectionLineNotOverCoordinate } from '@/util/canvas-util' export function useMouse() { const canvas = useRecoilValue(canvasState) @@ -14,7 +14,7 @@ export function useMouse() { return pointer } - return calculateIntersection(mouseLines[0], mouseLines[1]) || pointer + return getInterSectionLineNotOverCoordinate(mouseLines[0], mouseLines[1]) || pointer } return { diff --git a/src/util/canvas-util.js b/src/util/canvas-util.js index 7e26e460..8ed918ca 100644 --- a/src/util/canvas-util.js +++ b/src/util/canvas-util.js @@ -333,7 +333,6 @@ export const findIntersection1 = (line1, line2) => { export const calculateIntersection = (line1, line2) => { const result = intersect([line1.x1, line1.y1], [line1.x2, line1.y2], [line2.x1, line2.y1], [line2.x2, line2.y2]) - if (!result) { return null } @@ -366,6 +365,14 @@ export const calculateIntersection = (line1, line2) => { } } +export const getInterSectionLineNotOverCoordinate = (line1, line2) => { + const result = intersect([line1.x1, line1.y1], [line1.x2, line1.y2], [line2.x1, line2.y1], [line2.x2, line2.y2]) + if (result) { + return { x: Math.round(result[0]), y: Math.round(result[1]) } + } + return null +} + export function findOrthogonalPoint(line1, line2) { // Calculate the intersection point of two lines const intersectionX = From 743c90fdaacad13e7e432a4c46ebb099ea9af8ca Mon Sep 17 00:00:00 2001 From: minsik Date: Wed, 23 Oct 2024 10:53:02 +0900 Subject: [PATCH 2/7] =?UTF-8?q?=F0=9F=9A=A8chore:=20Sync=20Sass?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- public/static/images/sub/product-del.svg | 5 ++++ src/styles/_contents.scss | 29 +++++++++++++++++++++++- src/styles/_reset.scss | 8 +++++++ 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 public/static/images/sub/product-del.svg diff --git a/public/static/images/sub/product-del.svg b/public/static/images/sub/product-del.svg new file mode 100644 index 00000000..dab3463a --- /dev/null +++ b/public/static/images/sub/product-del.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/src/styles/_contents.scss b/src/styles/_contents.scss index f70745b3..70bd9f40 100644 --- a/src/styles/_contents.scss +++ b/src/styles/_contents.scss @@ -1200,7 +1200,6 @@ border: 1px solid #E5E5E5; background: #FFF; transition: all .15s ease-in-out; - cursor: pointer; .file-item-info{ .item-num{ display: inline-block; @@ -1255,4 +1254,32 @@ font-size: 16px; font-weight: 500; color: #344356; +} + +//신규물건 등록 +.product-input-wrap{ + display: flex; + align-items: center; + width: 200px; + height: 30px; + background-color: #FAFAFA; + border: 1px solid #EEE; + padding: 0 10px; + input{ + font-size: 13px; + font-weight: 400; + color: #999999; + padding: 0; + height: 100%; + flex: 1 ; + background-color: inherit; + } + .product-delete{ + flex: none; + display: block; + width: 15px; + height: 100%; + background: url(../../public/static/images/sub/product-del.svg)no-repeat center; + background-size: 15px 15px; + } } \ No newline at end of file diff --git a/src/styles/_reset.scss b/src/styles/_reset.scss index d483c7b7..b623dbff 100644 --- a/src/styles/_reset.scss +++ b/src/styles/_reset.scss @@ -460,6 +460,7 @@ input[type=text]{ line-height: 30px; border-radius: 2px; background-color: #323234; + border: 1px solid #323234; color: #fff; font-size: 12px; font-weight: 500; @@ -467,6 +468,10 @@ input[type=text]{ padding: 0 10px; letter-spacing: 0px; text-align: right; + transition: border .15s ease-in-out; + &:focus{ + border: 1px solid #1083E3; + } &::placeholder{ opacity: 1; font-size: 12px; @@ -498,6 +503,9 @@ input[type=text]{ font-weight: normal; transition: border-color .17s ease-in-out; text-align: left; + &:focus{ + border-color: #94A0AD; + } &:read-only{ background-color: #FAFAFA; color: #999999; From d6fc1134c1f188ee433073d95007812703f17927 Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 23 Oct 2024 11:01:04 +0900 Subject: [PATCH 3/7] =?UTF-8?q?=EB=AC=BC=EA=B1=B4=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=8B=A0=EA=B7=9C=EB=93=B1=EB=A1=9D&=EC=88=98=EC=A0=95?= =?UTF-8?q?=ED=99=94=EB=A9=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/StuffDetail.jsx | 538 +++++++++++++--------- src/components/management/StuffHeader.jsx | 33 +- src/locales/ja.json | 18 + src/locales/ko.json | 18 + 4 files changed, 371 insertions(+), 236 deletions(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index 46353f08..ec67e5c4 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -674,19 +674,27 @@ export default function StuffDetail() { // 물건삭제 const onDelete = () => { - //http://localhost:8080/api/object/R201TES01240910023 // console.log('물건번호::::::::', objectNo) - alert('사양확정일이 있으면 삭제 불가') - if (confirm(getMessage('common.message.data.delete'))) { - let testobj = '10' - - del({ url: `/api/object/${testobj}` }).then((res) => { - console.log('삭제 결과:::', res) - router.push('/management/stuff') - }) + // console.log('detailData:::::::::', detailData) + const specificationConfirmDate = detailData.specificationConfirmDate + if (specificationConfirmDate != null) { + alert(getMessage('stuff.detail.delete.message1')) + } else { + if (confirm(getMessage('common.message.data.delete'))) { + del({ url: `/api/object/${objectNo}` }).then((res) => { + console.log('삭제결과:::::::', res) + router.push('/management/stuff') + }) + } } } + // 숫자만 입력 가능 + const handleKeyUp = (e) => { + let input = e.target + input.value = input.value.replace(/[^0-9]/g, '') + } + return ( <> {(editMode === 'NEW' && ( @@ -707,8 +715,18 @@ export default function StuffDetail() { {getMessage('stuff.detail.planReqNo')}
-
- +
+ + {(form.watch('planReqNo') !== '' && ( + + )) || + null}
) : ( )}
@@ -1072,229 +1102,281 @@ export default function StuffDetail() {
* {getMessage('stuff.detail.required')}
-
- - - - - - - - - + + +
{getMessage('stuff.detail.planReqNo')} -
-
- +
+
+ + + + + + + + + - - - - - - - - + + + + + + + + - - - - - - - + + + + + + + - - - + + - + + + + - - - - - - -
{getMessage('stuff.detail.planReqNo')} +
+
+ + {objectNo.substring(0, 1) === 'T' && form.watch('planReqNo') !== '' ? ( + + ) : null} +
+ {objectNo.substring(0, 1) === 'T' ? ( + <> + + + ) : null}
- {objectNo.substring(0, 1) === 'T' ? ( - <> - - - ) : null} - -
- {getMessage('stuff.detail.dispCompanyName')} * - -
- -
-
- {getMessage('stuff.detail.objectStatusId')} * - -
- {/* 상세라디오시작 */} - {objectStatusList.map((row) => { - return ( -
- - -
- ) - })} - {/* 상세라디오끝 */} -
- +
+ {getMessage('stuff.detail.dispCompanyName')} * + +
+
-
- +
+ {getMessage('stuff.detail.objectStatusId')} * + +
+ {/* 상세라디오시작 */} + {objectStatusList.map((row) => { + return ( +
+ + +
+ ) + })} + {/* 상세라디오끝 */} +
+ +
+
+ +
- -
{getMessage('stuff.detail.objectNameKana')} -
- -
-
-
-
- {getMessage('stuff.detail.saleStoreId')} - * + +
{getMessage('stuff.detail.objectNameKana')} +
+
-
- - -
-
-
-
+
+
+ {getMessage('stuff.detail.saleStoreId')} + * +
+
-
- +
+
+
+ +
- -
-
-
{getMessage('stuff.detail.otherSaleStoreId')}
-
- {getMessage('stuff.detail.tooltip.saleStoreId')} + +
+
+
{getMessage('stuff.detail.otherSaleStoreId')}
+
+ {getMessage('stuff.detail.tooltip.saleStoreId')} +
- -
-
-
-
+
+
+ +
-
- +
+ {getMessage('stuff.detail.zipNo')} * + +
+
+ +
+ +
{getMessage('stuff.detail.btn.addressPop.guide')}
- -
- {getMessage('stuff.detail.zipNo')} * - -
-
- -
- -
{getMessage('stuff.detail.btn.addressPop.guide')}
-
-
+
+
+ + {objectNo.substring(0, 1) === 'R' ? ( + <> + {/* 진짜R 플랜시작 */} +
+
+

{getMessage('stuff.detail.planList.title')}

+
    +
  • + {getMessage('stuff.detail.planList.cnt')} + 플랜갯수 +
  • +
+
+
+
+
+
+
{getMessage('stuff.detail.planList.help')}
+
+
+ {getMessage('stuff.detail.planList.guide1')} + {getMessage('stuff.detail.planList.guide2')} + {getMessage('stuff.detail.planList.guide3')} +
+
+
+
+ 그리드영역 +
페이징영역
+
+
+ {/* 진짜R 플랜끝 */} +
+ + + + + +
+ + ) : ( + <> +
+ {!isFormValid ? ( + + ) : ( + + )} + + + +
+ + )} - {objectNo.substring(0, 1) === 'R' ? ( - <> - - - - - - - ) : ( - <> - {!isFormValid ? ( - - ) : ( - - )} - - - - - )} )} {showAddressButtonValid && } diff --git a/src/components/management/StuffHeader.jsx b/src/components/management/StuffHeader.jsx index fb4d831c..d8cade80 100644 --- a/src/components/management/StuffHeader.jsx +++ b/src/components/management/StuffHeader.jsx @@ -5,7 +5,10 @@ import { useAxios } from '@/hooks/useAxios' import { useRouter, useSearchParams } from 'next/navigation' import { globalLocaleStore } from '@/store/localeAtom' import { useRecoilValue } from 'recoil' +import { useMessage } from '@/hooks/useMessage' + export default function StuffHeader() { + const { getMessage } = useMessage() const router = useRouter() const searchParams = useSearchParams() const objectNo = searchParams.get('objectNo') //url에서 물건번호 꺼내서 바로 set @@ -15,35 +18,49 @@ export default function StuffHeader() { useEffect(() => { get({ url: `/api/object/${objectNo}/detail` }).then((res) => { - //console.log('res::', res) if (res != null && res != '') { - console.log('헤더상세::::::::::', res) setHeaderData(res) } else { - alert('삭제된 물건입니다') + alert(getMessage('stuff.detail.header.message1')) router.push('/management/stuff') } }) }, [objectNo]) + //물건번호 복사 + const copyObjectNo = async (objectNo) => { + await navigator.clipboard.writeText(objectNo) + alert(getMessage('stuff.detail.header.message2')) + try { + } catch (error) { + alert(getMessage('stuff.detail.header.message3')) + } + } + return (
-
물건번호
+
{getMessage('stuff.detail.header.objectNo')}
- {headerData.objectNo} + {headerData.objectNo}{' '} +
-
사양확정일
+
{getMessage('stuff.detail.header.specificationConfirmDate')}
{headerData.specificationConfirmDate}
-
갱신일시
+
{getMessage('stuff.detail.header.lastEditDatetime')}
{headerData.lastEditDatetime}
-
등록일
+
{getMessage('stuff.detail.header.createDatetime')}
{headerData.createDatetime}
diff --git a/src/locales/ja.json b/src/locales/ja.json index 2b743e4a..359d313e 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -468,6 +468,13 @@ "stuff.addressPopup.btn2": "住所適用", "stuff.planReqPopup.title": "設計依頼のインポート", "stuff.temp.subTitle": "商品情報", + "stuff.detail.header.message1": "存在しないものです。", + "stuff.detail.header.message2": "商品番号がコピーされました。", + "stuff.detail.header.message3": "存在しないものです。", + "stuff.detail.header.objectNo": "商品番号のコピーに失敗しました。", + "stuff.detail.header.specificationConfirmDate": "仕様拡張日", + "stuff.detail.header.lastEditDatetime": "更新日時", + "stuff.detail.header.createDatetime": "登録日", "stuff.detail.required": "必須入力項目", "stuff.detail.planReqNo": "設計依頼No.", "stuff.detail.dispCompanyName": "担当者", @@ -497,6 +504,17 @@ "stuff.detail.tooltip.saleStoreId": "販売代理店または販売代理店IDを1文字以上入力してください", "stuff.detail.tempSave.message1": "一時保存されました。商品番号を取得するには、必須項目をすべて入力してください。", "stuff.detail.confirm.message1": "販売店情報を変更すると、設計依頼文書番号が削除されます。変更しますか?", + "stuff.detail.delete.message1": "仕様が確定したものは削除できません。", + "stuff.detail.planList.title": "プランリスト", + "stuff.detail.planList.cnt": "全体", + "stuff.detail.planList.help": "ヘルプ", + "stuff.detail.planList.guide1": "1.発注は同一品番基準1件のみ可能です。", + "stuff.detail.planList.guide2": "2.[Excelダウンロード]は見積書、図面、シミュレーション結果をExcelファイルで一度にダウンロードします。", + "stuff.detail.planList.guide3": "3. プラン情報をダブルクリックすると図面作成画面に移動します。", + "stuff.detail.btn.delete": "物の削除", + "stuff.detail.btn.moveList": "商品リスト", + "stuff.detail.btn.save": "保存", + "stuff.detail.btn.tempSave": "一時保存", "stuff.planReqPopup.popTitle": "設計依頼検索", "stuff.planReqPopup.btn1": "検索", "stuff.planReqPopup.btn2": "初期化", diff --git a/src/locales/ko.json b/src/locales/ko.json index 61f3ba9e..fe228f22 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -473,6 +473,13 @@ "stuff.addressPopup.btn2": "주소적용", "stuff.planReqPopup.title": "설계의뢰 불러오기", "stuff.temp.subTitle": "물건정보", + "stuff.detail.header.message1": "존재하지 않는 물건입니다.", + "stuff.detail.header.message2": "물건번호가 복사되었습니다.", + "stuff.detail.header.message3": "물건번호 복사에 실패했습니다.", + "stuff.detail.header.objectNo": "물건번호", + "stuff.detail.header.specificationConfirmDate": "사양확장일", + "stuff.detail.header.lastEditDatetime": "갱신일시", + "stuff.detail.header.createDatetime": "등록일", "stuff.detail.required": "필수 입력항목", "stuff.detail.planReqNo": "설계의뢰No.", "stuff.detail.dispCompanyName": "담당자", @@ -502,6 +509,17 @@ "stuff.detail.tooltip.saleStoreId": "판매대리점 또는 판매대리점ID를 1자 이상 입력하세요", "stuff.detail.tempSave.message1": "임시저장 되었습니다. 물건번호를 획득하려면 필수 항목을 모두 입력해 주십시오.", "stuff.detail.confirm.message1": "판매점 정보를 변경하면, 설계의뢰 문서번호가 삭제됩니다. 변경하시겠습니까?", + "stuff.detail.delete.message1": "사양이 확정된 물건은 삭제할 수 없습니다.", + "stuff.detail.planList.title": "플랜리스트", + "stuff.detail.planList.cnt": "전체", + "stuff.detail.planList.help": "도움말", + "stuff.detail.planList.guide1": "1.발주는 동일 물건번호 기준 1건만 가능합니다.", + "stuff.detail.planList.guide2": "2.[Excel 다운로드]는 견적서, 도면, 시뮬레이션 결과를 엑셀파일로 한번에 다운로드 합니다.", + "stuff.detail.planList.guide3": "3.플랜정보를 더블 클릭하면 도면작성 화면으로 이동합니다.", + "stuff.detail.btn.delete": "물건삭제", + "stuff.detail.btn.moveList": "물건목록", + "stuff.detail.btn.save": "저장", + "stuff.detail.btn.tempSave": "임시저장", "stuff.planReqPopup.popTitle": "설계 요청 검색", "stuff.planReqPopup.btn1": "검색", "stuff.planReqPopup.btn2": "초기화", From bf35c1182d2a5821787da15fde59e47899ac8aac Mon Sep 17 00:00:00 2001 From: basssy Date: Wed, 23 Oct 2024 12:38:06 +0900 Subject: [PATCH 4/7] =?UTF-8?q?=ED=92=8D=EC=86=8D=ED=8C=9D=EC=97=85=20?= =?UTF-8?q?=ED=95=84=EB=93=9C=EB=AA=85=20=EB=B3=80=EA=B2=BD=20=EB=B0=98?= =?UTF-8?q?=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/management/StuffDetail.jsx | 99 ++++++++++++------- .../management/popup/WindSelectPop.jsx | 13 ++- 2 files changed, 74 insertions(+), 38 deletions(-) diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx index ec67e5c4..fd01fc41 100644 --- a/src/components/management/StuffDetail.jsx +++ b/src/components/management/StuffDetail.jsx @@ -52,7 +52,7 @@ export default function StuffDetail() { prefName: '', address: '', //주소 areaId: '', //발전량시뮬레이션지역id - windSpeed: '', //기준풍속 + standardWindSpeedId: '', //기준풍속 verticalSnowCover: '', //수직적설량NEW coldRegionFlg: false, //한랭지대책시행(true : 1 / false : 0) surfaceType: 'III・IV', //면조도구분(III・IV / Ⅱ) @@ -147,7 +147,7 @@ export default function StuffDetail() { useEffect(() => { const code1 = findCommonCode(200800) //경칭 const code2 = findCommonCode(201700) //신축/기축 - const code3 = findCommonCode(113600) //기준풍속 + const code3 = findCommonCode(202000) //기준풍속 202000 if (code1 != null) { // console.log('경칭공코::::::', code1) setHonorificCodeList(code1) @@ -225,8 +225,8 @@ export default function StuffDetail() { //경칭선택 변경 이벤트 const onChangeHonorificCode = (key) => { if (isObjectNotEmpty(key)) { - setSelHonorificCode(key.clCode) - form.setValue('objectNameOmit', key.clCode) + setSelHonorificCode(key.clCodeNm) + form.setValue('objectNameOmit', key.clCodeNm) } else { setSelHonorificCode('') form.setValue('objectNameOmit', '') @@ -236,9 +236,9 @@ export default function StuffDetail() { //기준풍속 변경 이벤트 const onChangeWindSpeedCode = (key) => { if (isObjectNotEmpty(key)) { - form.setValue('windSpeed', key.clCode) + form.setValue('standardWindSpeedId', key.clCode) } else { - form.setValue('windSpeed', '') + form.setValue('standardWindSpeedId', '') } } @@ -388,7 +388,9 @@ export default function StuffDetail() { form.setValue('prefName', info.address1) } }) - form.setValue('windSpeed', info.windSpeed) + + //설계의뢰 팝업에선 WL_안붙어서 옴 + form.setValue('standardWindSpeedId', `WL_${info.windSpeed}`) form.setValue('verticalSnowCover', info.verticalSnowCover) form.setValue('surfaceType', info.surfaceType) form.setValue('installHeight', info.installHeight) @@ -407,9 +409,9 @@ export default function StuffDetail() { } } - //팝업에서 넘어온 바람정보 + //풍속선택 팝업에서 넘어온 바람정보 const setWindSppedInfo = (info) => { - form.setValue('windSpeed', info.windSpeed) + form.setValue('standardWindSpeedId', info.windSpeed) } //dispCompanyName: '', //담당자 @@ -428,8 +430,8 @@ export default function StuffDetail() { const _address = watch('address') // areaId: '', //발전량시뮬레이션지역 const _areaId = watch('areaId') - // windSpeed: '', //기준풍속 - const _windSpeed = watch('windSpeed') + // standardWindSpeedId: '', //기준풍속 + const _standardWindSpeedId = watch('standardWindSpeedId') // verticalSnowCover: '', //수직적설량 const _verticalSnowCover = watch('verticalSnowCover') // installHeight: '', //설치높이 @@ -464,8 +466,8 @@ export default function StuffDetail() { errors.areaId = true } - if (!formData.windSpeed) { - errors.windSpeed = true + if (!formData.standardWindSpeedId) { + errors.standardWindSpeedId = true } if (!formData.verticalSnowCover) { @@ -506,8 +508,8 @@ export default function StuffDetail() { errors.areaId = true } - if (!formData.windSpeed) { - errors.windSpeed = true + if (!formData.standardWindSpeedId) { + errors.standardWindSpeedId = true } if (!formData.verticalSnowCover) { @@ -530,7 +532,7 @@ export default function StuffDetail() { _prefId, _address, _areaId, - _windSpeed, + _standardWindSpeedId, _verticalSnowCover, _installHeight, ]) @@ -575,7 +577,7 @@ export default function StuffDetail() { //필수값 다 입력했을때 const onValid = async () => { const formData = form.getValues() - console.log('필수값 통과:::', formData) + // console.log('필수값 통과:::', formData) const apiUrl = '/api/object/save-object' const params = { saleStoreId: formData.otherSaleStoreId ? formData.otherSaleStoreId : formData.saleStoreId, @@ -592,7 +594,7 @@ export default function StuffDetail() { areaId: formData.areaId, receiveUser: formData.dispCompanyName, installHeight: formData.installHeight, - windSpeed: formData.windSpeed, + standardWindSpeedId: formData.standardWindSpeedId, verticalSnowCover: formData.verticalSnowCover, surfaceType: formData.surfaceType, conType: formData.conType, @@ -602,7 +604,7 @@ export default function StuffDetail() { workNo: null, workName: null, } - console.log('params::', params) + // console.log('params::', params) alert('작업중') return if (editMode === 'NEW') { @@ -646,7 +648,7 @@ export default function StuffDetail() { areaId: formData.areaId, receiveUser: formData.dispCompanyName, installHeight: formData.installHeight, - windSpeed: formData.windSpeed, + standardWindSpeedId: formData.standardWindSpeedId, verticalSnowCover: formData.verticalSnowCover, surfaceType: formData.surfaceType, conType: formData.conType, @@ -662,6 +664,7 @@ export default function StuffDetail() { params.saleStoreId = sessionState.storeId params.saleStoreLevel = sessionState.storeLvl } + console.log('임시저장파람:::', params) alert('작업중') return await promisePost({ url: '/api/object/save-object', data: params }).then((res) => { @@ -716,7 +719,7 @@ export default function StuffDetail() {
- + {(form.watch('planReqNo') !== '' && (
@@ -833,7 +836,13 @@ export default function StuffDetail() { />
- +
@@ -887,7 +896,7 @@ export default function StuffDetail() {
- +
- +
@@ -962,7 +971,7 @@ export default function StuffDetail() { {/* 기준풍속sel시작 */}
@@ -1115,7 +1124,7 @@ export default function StuffDetail() {
- + {objectNo.substring(0, 1) === 'T' && form.watch('planReqNo') !== '' ? (
@@ -1295,7 +1307,7 @@ export default function StuffDetail() {
- +
+ {/* 도도부현 /주소 시작*/} + {/* 도도부현 /주소 끝 */} + {/* 발전량시뮬레이션지역시작 */} + {/* 발전량시뮬레이션지역끝 */} + {/* 기준풍속시작 */} + {/* 기준풍속끝 */} + {/* 수직적설량시작 */} + {/* 수직적설량끝 */} + {/* 면조도구분시작 */} + {/* 면조도구분끝 */} + {/* 설치높이싲가 */} + {/* 설치높이끝 */} + {/* 계약조건시작 */} + {/* 계약조건끝 */} + {/* 메모시작 */} + {/* 메모끝 */} + + +
@@ -1318,7 +1349,7 @@ export default function StuffDetail() {
  • {getMessage('stuff.detail.planList.cnt')} - 플랜갯수 + 플랜갯수찍어주기
diff --git a/src/components/management/popup/WindSelectPop.jsx b/src/components/management/popup/WindSelectPop.jsx index db1795f8..b135aa20 100644 --- a/src/components/management/popup/WindSelectPop.jsx +++ b/src/components/management/popup/WindSelectPop.jsx @@ -81,16 +81,21 @@ export default function WindSelectPop(props) { {windSpeedList.map((row, index) => { - // console.log('row:::', row) return (
- - + +
- {row.windSpeed} + {row.standardWindSpeedId.slice(3)} {row.remarks} ) From 9e2e4bff581fc2a63aa6b790fd4589b1f909d34e Mon Sep 17 00:00:00 2001 From: leeyongjae Date: Wed, 23 Oct 2024 13:33:55 +0900 Subject: [PATCH 5/7] =?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=20focus=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/auth/Login.jsx | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/components/auth/Login.jsx b/src/components/auth/Login.jsx index d75d9b6e..66d149ac 100644 --- a/src/components/auth/Login.jsx +++ b/src/components/auth/Login.jsx @@ -71,6 +71,10 @@ export default function Login() { const { promisePost, promisePatch, post } = useAxios(globalLocaleState) + // focus state + const [idFocus, setIdFocus] = useState(false) + const [secFocus, setSecFocus] = useState(false) + // login process const loginProcess = async (e) => { e.preventDefault() @@ -191,7 +195,7 @@ export default function Login() { {getMessage('site.sub_name')}
-
+
{ setUserId(e.target.value) }} + onFocus={() => setIdFocus(true)} + onBlur={() => setIdFocus(false)} />
-
+
{ setPasswordVisible(passwordVisible) }} + onFocus={() => setSecFocus(true)} + onBlur={() => setSecFocus(false)} />
-
+
setSecFocus(true)} + onBlur={() => setSecFocus(false)} /> +
diff --git a/src/hooks/roofcover/useAuxiliaryDrawing.js b/src/hooks/roofcover/useAuxiliaryDrawing.js index 610db186..5ab18a40 100644 --- a/src/hooks/roofcover/useAuxiliaryDrawing.js +++ b/src/hooks/roofcover/useAuxiliaryDrawing.js @@ -1,6 +1,6 @@ import { useEffect, useRef, useState } from 'react' import { useRecoilState, useRecoilValue } from 'recoil' -import { adsorptionRangeState, canvasState } from '@/store/canvasAtom' +import { adsorptionRangeState, canvasState, verticalHorizontalModeState } from '@/store/canvasAtom' import { useEvent } from '@/hooks/useEvent' import { useMouse } from '@/hooks/useMouse' import { useLine } from '@/hooks/useLine' @@ -21,6 +21,7 @@ import { useAdsorptionPoint } from '@/hooks/useAdsorptionPoint' import { useSwal } from '@/hooks/useSwal' import { booleanPointInPolygon } from '@turf/turf' import { usePopup } from '@/hooks/usePopup' +import { calculateAngle } from '@/util/qpolygon-utils' // 보조선 작성 export function useAuxiliaryDrawing(id) { @@ -60,6 +61,7 @@ export function useAuxiliaryDrawing(id) { const outerLineDiagonalLengthRef = useRef(0) const intersectionPoints = useRef([]) + const verticalHorizontalMode = useRecoilValue(verticalHorizontalModeState) useEffect(() => { arrow1Ref.current = arrow1 @@ -100,6 +102,10 @@ export function useAuxiliaryDrawing(id) { } }, []) + useEffect(() => { + addCanvasMouseEventListener('mouse:down', mouseDown) + }, [verticalHorizontalMode]) + const clear = () => { addCanvasMouseEventListener('mouse:move', mouseMove) setLength1(0) @@ -453,11 +459,26 @@ export function useAuxiliaryDrawing(id) { const mouseDown = (e) => { canvas.renderAll() - const pointer = getIntersectMousePoint(e) + let pointer = getIntersectMousePoint(e) - mousePointerArr.current.push(pointer) - if (mousePointerArr.current.length === 2) { - drawLine(mousePointerArr.current[0], mousePointerArr.current[1]) + if (mousePointerArr.current.length === 1) { + const currentPoint = canvas.getPointer(e.e) + const prevPoint = mousePointerArr.current[0] + + const degreeByTwoPoints = calculateAngle(prevPoint, currentPoint) + + const degree = Math.round(degreeByTwoPoints / 45) * 45 + + if (verticalHorizontalMode) { + pointer = { + x: prevPoint.x + distanceBetweenPoints(currentPoint, prevPoint) * Math.cos((degree * Math.PI) / 180), + y: prevPoint.y + distanceBetweenPoints(currentPoint, prevPoint) * Math.sin((degree * Math.PI) / 180), + } + } + + mousePointerArr.current.push(pointer) + + drawLine() } else { const circle = new fabric.Circle({ radius: 3, @@ -471,6 +492,7 @@ export function useAuxiliaryDrawing(id) { }) canvas.add(circle) canvas.renderAll() + mousePointerArr.current.push(pointer) } } diff --git a/src/hooks/usePolygon.js b/src/hooks/usePolygon.js index 3fbf1388..a976c0aa 100644 --- a/src/hooks/usePolygon.js +++ b/src/hooks/usePolygon.js @@ -401,7 +401,7 @@ export const usePolygon = () => { const addTextByArrows = (arrows, txt, canvas) => { arrows.forEach((arrow, index) => { const text = new fabric.Text(`${txt}${index + 1} (${arrow.pitch}寸)`, { - fontSize: arrow.parent.fontSize, + fontSize: fontSize, fill: 'black', originX: 'center', originY: 'center', From 065c17cc17076a672ba3fbe5023b8aa3658bea20 Mon Sep 17 00:00:00 2001 From: minsik Date: Wed, 23 Oct 2024 14:49:13 +0900 Subject: [PATCH 7/7] =?UTF-8?q?FloorPlan=20=ED=99=94=EB=A9=B4=EC=97=90?= =?UTF-8?q?=EC=84=9C=20footer=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/layout.js | 9 ++------- src/components/footer/Footer.jsx | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 7 deletions(-) create mode 100644 src/components/footer/Footer.jsx diff --git a/src/app/layout.js b/src/app/layout.js index 32803812..b41172c9 100644 --- a/src/app/layout.js +++ b/src/app/layout.js @@ -8,12 +8,12 @@ import Header from '@/components/header/Header' import QModal from '@/components/common/modal/QModal' import Dimmed from '@/components/ui/Dimmed' import SessionProvider from './SessionProvider' -import LocaleSwitch from '@/components/LocaleSwitch' import PopupManager from '@/components/common/popupManager/PopupManager' import './globals.css' import '../styles/style.scss' import '../styles/contents.scss' +import Footer from '@/components/footer/Footer' export const metadata = { title: 'Create Next App', @@ -69,12 +69,7 @@ export default async function RootLayout({ children }) { {children}
-
-
- COPYRIGHT©2024 Hanwha Japan All Rights Reserved. - -
-
+
)} diff --git a/src/components/footer/Footer.jsx b/src/components/footer/Footer.jsx new file mode 100644 index 00000000..c62fcf7a --- /dev/null +++ b/src/components/footer/Footer.jsx @@ -0,0 +1,18 @@ +'use client' +import LocaleSwitch from '@/components/LocaleSwitch' +import { usePathname } from 'next/navigation' + +export default function Footer() { + return ( + <> + {usePathname() !== '/floor-plan' && ( + + )} + + ) +}