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' && (
+
+ )}
+ >
+ )
+}
diff --git a/src/components/management/StuffDetail.jsx b/src/components/management/StuffDetail.jsx
index 46353f08..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) => {
@@ -674,19 +677,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 +718,18 @@ export default function StuffDetail() {
{getMessage('stuff.detail.planReqNo')} |
-
@@ -815,7 +836,13 @@ export default function StuffDetail() {
/>
-
+
|
@@ -869,7 +896,7 @@ export default function StuffDetail() {
-
+
|
@@ -944,7 +971,7 @@ export default function StuffDetail() {
{/* 기준풍속sel시작 */}
@@ -976,7 +1003,13 @@ export default function StuffDetail() {
-
+
cm
@@ -1015,7 +1048,13 @@ export default function StuffDetail() {
@@ -1047,19 +1086,19 @@ export default function StuffDetail() {
-
+
{!isFormValid ? (
) : (
)}
@@ -1072,229 +1111,303 @@ 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.objectNameKana')} |
-
-
-
-
- |
-
-
-
-
-
- {getMessage('stuff.detail.saleStoreId')}
- *
-
-
-
- |
-
-
-
-
-
-
-
-
- |
-
-
-
-
- {getMessage('stuff.detail.otherSaleStoreId')}
-
- {getMessage('stuff.detail.tooltip.saleStoreId')}
-
-
- |
-
-
-
-
-
+ |
+
+
+ |
+ {getMessage('stuff.detail.dispCompanyName')} *
+ |
+
+
-
- |
-
-
- |
- {getMessage('stuff.detail.zipNo')} *
- |
-
- |
+
+
+ |
+ {getMessage('stuff.detail.objectStatusId')} *
+ |
+
+
+ {/* 상세라디오시작 */}
+ {objectStatusList.map((row) => {
+ return (
+
+
+
+
+ )
+ })}
+ {/* 상세라디오끝 */}
+
+
+
+
+
+
-
- {getMessage('stuff.detail.btn.addressPop.guide')}
-
- |
-
-
-
+ |
+
+
+ | {getMessage('stuff.detail.objectNameKana')} |
+
+
+
+
+ |
+
+
+
+
+
+ {getMessage('stuff.detail.saleStoreId')}
+ *
+
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+
+
+ {getMessage('stuff.detail.otherSaleStoreId')}
+
+ {getMessage('stuff.detail.tooltip.saleStoreId')}
+
+
+ |
+
+
+
+
+
+
+
+
+ |
+
+
+ |
+ {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/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} |
)
diff --git a/src/hooks/roofcover/useAuxiliaryDrawing.js b/src/hooks/roofcover/useAuxiliaryDrawing.js
index 7d18c5a2..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,12 +459,26 @@ export function useAuxiliaryDrawing(id) {
const mouseDown = (e) => {
canvas.renderAll()
- const pointer = getIntersectMousePoint(e)
- console.log(pointer)
+ 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,
@@ -472,6 +492,7 @@ export function useAuxiliaryDrawing(id) {
})
canvas.add(circle)
canvas.renderAll()
+ mousePointerArr.current.push(pointer)
}
}
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/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',
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": "초기화",
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;
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 =
|