This commit is contained in:
hyojun.choi 2025-02-11 16:34:59 +09:00
commit 7c73fd7f59
13 changed files with 164 additions and 81 deletions

View File

@ -0,0 +1,26 @@
공통. 기본 폰트값 통일 ->
1. 전체 화면 기본폰트 MS PGothic으로 통일 (폰트 기능 협의)
2. 번역이 후짐
1. 지붕덮개 ->
1-1. '외벽선 속성 설정을 완료하시겠습니까?' 문구 메시지 처리
1-2. 지붕재 설정 selectbox 한글로 나옴
2. 배치면 ->
3. 모듈 ->
3-1. 모듈 선택 화면 ->
1) 서까래 간격 유지 안됨
2) 데이터 저장 이후 모듈 변경으로 인해 셀렉트박스의 데이터가 없을 경우 이전 데이터로 설정됨
3-2. 모듈 설치 ->
1) 모듈 설치시 방향에 따른 기준 설정 문제
4. 회로 ->
4-1. 회로 선택 화면 -> pcs 선택 화면 관련 시리즈 영역 width값 조정
5. 가대설정 ->
5-1. 가대 그릴시 금구 위치 다름(좌,우, T01 / RA03250210002 / PLAN 1참고)
5-2. 가대 설치 후 견적서로 넘어가는 시간이 너무 빠르다고 함
6. 견적서 ->
6-1. 견적서 문서 다운로드 도면 이미지 포함 안됨

View File

@ -21,23 +21,34 @@ export default function AuxiliaryEdit(props) {
const currentObject = useRecoilValue(currentObjectState) const currentObject = useRecoilValue(currentObjectState)
const { swalFire } = useSwal() const { swalFire } = useSwal()
const handleSave = () => { const handleSave = () => {
if (!horizonSize || !verticalSize || !arrow1 || !arrow2) { if ((!arrow1 && !arrow2) || (+verticalSize === 0 && +horizonSize === 0)) {
swalFire({ title: '길이와 방향을 입력하세요.', type: 'alert' }) swalFire({ title: getMessage('length.direction.is.required'), type: 'alert' })
return return
} }
if ((verticalSize && +verticalSize === 0) || !arrow1) {
swalFire({ title: getMessage('length.direction.is.required'), type: 'alert' })
return
}
if ((horizonSize && +horizonSize === 0) || !arrow2) {
swalFire({ title: getMessage('length.direction.is.required'), type: 'alert' })
return
}
if (type === 'copy') { if (type === 'copy') {
if (currentObject) { if (currentObject) {
copy( copy(
currentObject, currentObject,
arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize), arrow2 ? (arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize)) : 0,
arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize), arrow1 ? (arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize)) : 0,
) )
} }
} else { } else {
move( move(
currentObject, currentObject,
arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize), arrow2 ? (arrow2 === '←' ? Number(horizonSize) * -1 : Number(horizonSize)) : 0,
arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize), arrow1 ? (arrow1 === '↑' ? Number(verticalSize) * -1 : Number(verticalSize)) : 0,
) )
} }

View File

@ -368,6 +368,7 @@ export default function CircuitTrestleSetting({ id }) {
circuitModules.forEach((obj) => { circuitModules.forEach((obj) => {
obj.circuit = null obj.circuit = null
obj.pcsItemId = null obj.pcsItemId = null
obj.circuitNumber = null
}) })
if (allocationType === ALLOCATION_TYPE.PASSIVITY) { if (allocationType === ALLOCATION_TYPE.PASSIVITY) {

View File

@ -392,18 +392,21 @@ export default function StepUp(props) {
} }
} }
canvas
.getObjects()
.filter((obj) => obj.name === POLYGON_TYPE.MODULE)
.forEach((module) => {
module.circuit = null
module.circuitNumber = null
module.pcsItemId = null
})
selectedData.roofSurfaceList.forEach((roofSurface) => { selectedData.roofSurfaceList.forEach((roofSurface) => {
const targetSurface = canvas.getObjects().filter((obj) => obj.id === roofSurface.roofSurfaceId)[0] const targetSurface = canvas.getObjects().filter((obj) => obj.id === roofSurface.roofSurfaceId)[0]
const moduleIds = targetSurface.modules.map((module) => { const moduleIds = targetSurface.modules.map((module) => {
return module.id return module.id
}) })
targetSurface.modules.map((module) => {
module.circuit = null
module.circuitNumber = null
module.pcsItemId = null
})
// //
canvas canvas
.getObjects() .getObjects()

View File

@ -38,12 +38,12 @@ export default function GridMove(props) {
const handleApply = () => { const handleApply = () => {
if (currentObject?.direction === 'vertical') { if (currentObject?.direction === 'vertical') {
if (!horizonSize || !arrow2) { if (!horizonSize || !arrow2) {
swalFire({ title: '길이와 방향을 입력하세요.', type: 'alert' }) swalFire({ title: getMessage('length.direction.is.required'), type: 'alert' })
return return
} }
} else { } else {
if (!verticalSize || !arrow1) { if (!verticalSize || !arrow1) {
swalFire({ title: '길이와 방향을 입력하세요.', type: 'alert' }) swalFire({ title: getMessage('length.direction.is.required'), type: 'alert' })
} }
} }

View File

@ -214,7 +214,7 @@ export default function Stuff() {
// //
useEffect(() => { useEffect(() => {
if (stuffSearchParams?.code === 'S') { if (stuffSearchParams?.code === 'S' || stuffSearchParams?.code === 'END') {
const params = { const params = {
saleStoreId: session.storeId, saleStoreId: session.storeId,
schObjectNo: stuffSearchParams?.schObjectNo, schObjectNo: stuffSearchParams?.schObjectNo,
@ -267,7 +267,11 @@ export default function Stuff() {
setIsGlobalLoading(false) setIsGlobalLoading(false)
}) })
} }
fetchData() if (stuffSearchParams.code === 'S') {
fetchData()
} else {
stuffSearchParams.code = 'S'
}
} else if (stuffSearchParams?.code === 'M') { } else if (stuffSearchParams?.code === 'M') {
const params = { const params = {
schObjectNo: stuffSearchParams.schObjectNo, schObjectNo: stuffSearchParams.schObjectNo,
@ -328,7 +332,6 @@ export default function Stuff() {
stuffSearchParams.startRow = 1 stuffSearchParams.startRow = 1
stuffSearchParams.endRow = 1 * stuffSearchParams.pageSize stuffSearchParams.endRow = 1 * stuffSearchParams.pageSize
} }
setIsGlobalLoading(false) setIsGlobalLoading(false)
}) })
} }
@ -383,7 +386,7 @@ export default function Stuff() {
schSelSaleStoreId: '', schSelSaleStoreId: '',
schOtherSelSaleStoreId: '', schOtherSelSaleStoreId: '',
schSortType: 'U', schSortType: 'U',
code: 'S', code: 'END',
pageNo: 1, pageNo: 1,
pageSize: 100, pageSize: 100,
schMyDataCheck: false, schMyDataCheck: false,
@ -392,7 +395,6 @@ export default function Stuff() {
setStuffSearch({ setStuffSearch({
...newParams, ...newParams,
}) })
setIsGlobalLoading(false) setIsGlobalLoading(false)
} else { } else {
stuffSearchParams.code = 'DELETE' stuffSearchParams.code = 'DELETE'

View File

@ -611,14 +611,9 @@ export default function StuffSearchCondition() {
// //
const onSelectionChange = (key) => { const onSelectionChange = (key) => {
//
setMyDataCheck(stuffSearch.schMyDataCheck)
// stuffSearch.schMyDataCheck = false
if (isObjectNotEmpty(key)) { if (isObjectNotEmpty(key)) {
setOtherSaleStoreId('') setOtherSaleStoreId('')
setSchSelSaleStoreId(key.saleStoreId) setSchSelSaleStoreId(key.saleStoreId)
// stuffSearch.schSelSaleStoreId = key.saleStoreId
// 1 saleStoreId 2 API // 1 saleStoreId 2 API
let url = `/api/object/saleStore/${key.saleStoreId}/list?firstFlg=0&userId=${session?.userId}` let url = `/api/object/saleStore/${key.saleStoreId}/list?firstFlg=0&userId=${session?.userId}`
let otherList let otherList
@ -663,7 +658,6 @@ export default function StuffSearchCondition() {
stuffSearch.schMyDataCheck = false stuffSearch.schMyDataCheck = false
if (isObjectNotEmpty(key)) { if (isObjectNotEmpty(key)) {
setOtherSaleStoreId(key.saleStoreId) setOtherSaleStoreId(key.saleStoreId)
// stuffSearch.schOtherSelSaleStoreId = key.saleStoreId
//2 1 //2 1
if (session.storeId === 'T01') { if (session.storeId === 'T01') {
@ -767,7 +761,6 @@ export default function StuffSearchCondition() {
setOtherSaleStoreId('') setOtherSaleStoreId('')
} else { } else {
setTempFlg(stuffSearch.schTempFlg ? stuffSearch.schTempFlg : tempFlg) setTempFlg(stuffSearch.schTempFlg ? stuffSearch.schTempFlg : tempFlg)
setMyDataCheck(stuffSearch.schMyDataCheck)
} }
} else { } else {
if (stuffSearch.code === 'DELETE') { if (stuffSearch.code === 'DELETE') {
@ -820,7 +813,7 @@ export default function StuffSearchCondition() {
setReceiveUser(stuffSearch.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser) setReceiveUser(stuffSearch.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser)
setDateType(stuffSearch.schDateType ? stuffSearch.schDateType : dateType) setDateType(stuffSearch.schDateType ? stuffSearch.schDateType : dateType)
setTempFlg(stuffSearch.schTempFlg ? stuffSearch.schTempFlg : tempFlg) setTempFlg(stuffSearch.schTempFlg ? stuffSearch.schTempFlg : tempFlg)
setMyDataCheck(stuffSearch.schMyDataCheck)
if (session.storeLvl !== '1') { if (session.storeLvl !== '1') {
stuffSearch.schSelSaleStoreId = '' stuffSearch.schSelSaleStoreId = ''
} }
@ -836,12 +829,6 @@ export default function StuffSearchCondition() {
} else if (stuffSearch.schTempFlg === '1') { } else if (stuffSearch.schTempFlg === '1') {
setTempFlg('1') setTempFlg('1')
} }
if (stuffSearch.schMyDataCheck) {
setMyDataCheck(true)
} else {
setMyDataCheck(false)
}
}, [stuffSearch]) }, [stuffSearch])
useEffect(() => { useEffect(() => {
@ -865,42 +852,35 @@ export default function StuffSearchCondition() {
//0203 schSaleStoreId storeId schSelSaleStoreId, schOtherSelSaleStoreId //0203 schSaleStoreId storeId schSelSaleStoreId, schOtherSelSaleStoreId
if (session?.storeId === 'T01') { if (session?.storeId === 'T01') {
if (e.target.checked) { if (e.target.checked) {
stuffSearch.schMyDataCheck = e.target.checked
setMyDataCheck(true) setMyDataCheck(true)
setOtherSaleStoreId('') //2 setOtherSaleStoreId('') //2
setSchSelSaleStoreId('T01') setSchSelSaleStoreId('T01')
stuffSearch.schSaleStoreId = session.storeId
stuffSearch.schSelSaleStoreId = '' stuffSearch.schSelSaleStoreId = ''
stuffSearch.schOtherSelSaleStoreId = '' stuffSearch.schOtherSelSaleStoreId = ''
const key = { saleStoreId: session.storeId } const key = { saleStoreId: session.storeId }
onSelectionChange(key) onSelectionChange(key)
} else { } else {
stuffSearch.schSaleStoreId = '' stuffSearch.schSaleStoreId = ''
stuffSearch.schMyDataCheck = e.target.checked
setSchSelSaleStoreId('') setSchSelSaleStoreId('')
setMyDataCheck(false) setMyDataCheck(false)
//
onSelectionChange(null) onSelectionChange(null)
} }
} else if (session?.storeLvl === '1') { } else if (session?.storeLvl === '1') {
if (e.target.checked) { if (e.target.checked) {
stuffSearch.schMyDataCheck = e.target.checked
setMyDataCheck(true) setMyDataCheck(true)
setOtherSaleStoreId('') //2 setOtherSaleStoreId('') //2
setSchSelSaleStoreId(schSelSaleStoreId) setSchSelSaleStoreId(schSelSaleStoreId)
stuffSearch.schSaleStoreId = session.storeId
stuffSearch.schSelSaleStoreId = '' stuffSearch.schSelSaleStoreId = ''
stuffSearch.schOtherSelSaleStoreId = '' stuffSearch.schOtherSelSaleStoreId = ''
} else { } else {
stuffSearch.schMyDataCheck = e.target.checked
stuffSearch.schSaleStoreId = ''
setMyDataCheck(false) setMyDataCheck(false)
} }
} else { } else {
//2 3,4 //2 3,4
//3,4 //3,4
if (e.target.checked) { if (e.target.checked) {
stuffSearch.schMyDataCheck = e.target.checked
setMyDataCheck(true) setMyDataCheck(true)
if (otherSaleStoreList.length > 1) { if (otherSaleStoreList.length > 1) {
stuffSearch.schSaleStoreId = session.storeId stuffSearch.schSaleStoreId = session.storeId
@ -913,7 +893,6 @@ export default function StuffSearchCondition() {
} }
} else { } else {
setMyDataCheck(false) setMyDataCheck(false)
stuffSearch.schMyDataCheck = e.target.checked
stuffSearch.schSaleStoreId = '' stuffSearch.schSaleStoreId = ''
} }
} }
@ -996,7 +975,6 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schObjectNo ? stuffSearch.schObjectNo : objectNo} defaultValue={stuffSearch?.schObjectNo ? stuffSearch.schObjectNo : objectNo}
onChange={() => { onChange={() => {
// stuffSearch.schObjectNo = objectNoRef.current.value
setObjectNo(objectNoRef.current.value) setObjectNo(objectNoRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1012,7 +990,6 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName} defaultValue={stuffSearch?.schSaleStoreName ? stuffSearch.schSaleStoreName : saleStoreName}
onChange={() => { onChange={() => {
// stuffSearch.schSaleStoreName = saleStoreNameRef.current.value
setSaleStoreName(saleStoreNameRef.current.value) setSaleStoreName(saleStoreNameRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1029,7 +1006,6 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName} defaultValue={stuffSearch?.schDispCompanyName ? stuffSearch.schDispCompanyName : dispCompanyName}
onChange={() => { onChange={() => {
// stuffSearch.schDispCompanyName = dispCompanyNameRef.current.value
setDispCompanyName(dispCompanyNameRef.current.value) setDispCompanyName(dispCompanyNameRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1047,7 +1023,6 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schObjectName ? stuffSearch.schObjectName : objectName} defaultValue={stuffSearch?.schObjectName ? stuffSearch.schObjectName : objectName}
onChange={() => { onChange={() => {
// stuffSearch.schObjectName = objectNameRef.current.value
setObjectName(objectNameRef.current.value) setObjectName(objectNameRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1063,7 +1038,6 @@ export default function StuffSearchCondition() {
ref={receiveUserRef} ref={receiveUserRef}
defaultValue={stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser} defaultValue={stuffSearch?.schReceiveUser ? stuffSearch.schReceiveUser : receiveUser}
onChange={() => { onChange={() => {
// stuffSearch.schReceiveUser = receiveUserRef.current.value
setReceiveUser(receiveUserRef.current.value) setReceiveUser(receiveUserRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1079,7 +1053,6 @@ export default function StuffSearchCondition() {
className="input-light" className="input-light"
defaultValue={stuffSearch?.schAddress ? stuffSearch.schAddress : address} defaultValue={stuffSearch?.schAddress ? stuffSearch.schAddress : address}
onChange={() => { onChange={() => {
// stuffSearch.schAddress = addressRef.current.value
setAddress(addressRef.current.value) setAddress(addressRef.current.value)
}} }}
onKeyUp={handleByOnKeyUp} onKeyUp={handleByOnKeyUp}
@ -1101,7 +1074,6 @@ export default function StuffSearchCondition() {
value={'U'} value={'U'}
onChange={(e) => { onChange={(e) => {
setDateType(e.target.value) setDateType(e.target.value)
// stuffSearch.schDateType = e.target.value
}} }}
/> />
<label htmlFor="radio_u">{getMessage('stuff.search.schDateTypeU')}</label> <label htmlFor="radio_u">{getMessage('stuff.search.schDateTypeU')}</label>
@ -1115,7 +1087,6 @@ export default function StuffSearchCondition() {
value={'R'} value={'R'}
onChange={(e) => { onChange={(e) => {
setDateType(e.target.value) setDateType(e.target.value)
// stuffSearch.schDateType = e.target.value
}} }}
/> />
<label htmlFor="radio_r">{getMessage('stuff.search.schDateTypeR')}</label> <label htmlFor="radio_r">{getMessage('stuff.search.schDateTypeR')}</label>
@ -1140,11 +1111,10 @@ export default function StuffSearchCondition() {
type="radio" type="radio"
name="schTempFlg" name="schTempFlg"
id="schTempFlg" id="schTempFlg"
checked={stuffSearch.schTempFlg === '' ? true : false} checked={tempFlg === '' ? true : false}
value={''} value={''}
onChange={(e) => { onChange={(e) => {
setTempFlg(e.target.value) setTempFlg(e.target.value)
stuffSearch.schTempFlg = e.target.value
}} }}
/> />
<label htmlFor="schTempFlg">{getMessage('stuff.search.schTempFlg')}</label> <label htmlFor="schTempFlg">{getMessage('stuff.search.schTempFlg')}</label>
@ -1154,11 +1124,10 @@ export default function StuffSearchCondition() {
type="radio" type="radio"
name="schTempFlg" name="schTempFlg"
id="schTempFlg0" id="schTempFlg0"
checked={stuffSearch.schTempFlg === '0' ? true : false} checked={tempFlg === '0' ? true : false}
value={'0'} value={'0'}
onChange={(e) => { onChange={(e) => {
setTempFlg(e.target.value) setTempFlg(e.target.value)
stuffSearch.schTempFlg = e.target.value
}} }}
/> />
<label htmlFor="schTempFlg0">{getMessage('stuff.search.schTempFlg0')}</label> <label htmlFor="schTempFlg0">{getMessage('stuff.search.schTempFlg0')}</label>
@ -1168,11 +1137,10 @@ export default function StuffSearchCondition() {
type="radio" type="radio"
name="schTempFlg" name="schTempFlg"
id="schTempFlg1" id="schTempFlg1"
checked={stuffSearch.schTempFlg === '1' ? true : false} checked={tempFlg === '1' ? true : false}
value={'1'} value={'1'}
onChange={(e) => { onChange={(e) => {
setTempFlg(e.target.value) setTempFlg(e.target.value)
stuffSearch.schTempFlg = e.target.value
}} }}
/> />
<label htmlFor="schTempFlg1">{getMessage('stuff.search.schTempFlg1')}</label> <label htmlFor="schTempFlg1">{getMessage('stuff.search.schTempFlg1')}</label>
@ -1297,7 +1265,6 @@ export default function StuffSearchCondition() {
onChange={onSelectionChange2} onChange={onSelectionChange2}
getOptionLabel={(x) => x.saleStoreName} getOptionLabel={(x) => x.saleStoreName}
getOptionValue={(x) => x.saleStoreId} getOptionValue={(x) => x.saleStoreId}
// isDisabled={otherSaleStoreList != null && otherSaleStoreList.length === 1 ? true : false}
isDisabled={ isDisabled={
session?.storeLvl === '1' ? (otherSaleStoreList.length > 0 ? false : true) : otherSaleStoreList.length === 1 ? true : false session?.storeLvl === '1' ? (otherSaleStoreList.length > 0 ? false : true) : otherSaleStoreList.length === 1 ? true : false
} }
@ -1312,10 +1279,9 @@ export default function StuffSearchCondition() {
<input <input
type="checkbox" type="checkbox"
id="schMine" id="schMine"
checked={stuffSearch.schMyDataCheck ? true : false} checked={myDataCheck ? true : false}
onChange={(e) => { onChange={(e) => {
checkMyData(e) checkMyData(e)
stuffSearch.schMyDataCheck = e.target.checked
}} }}
/> />
<label htmlFor="schMine">{getMessage('stuff.search.schMine')}</label> <label htmlFor="schMine">{getMessage('stuff.search.schMine')}</label>

View File

@ -17,7 +17,7 @@ export function useCanvasPopupStatusController(param = 1) {
const [compasDeg, setCompasDeg] = useRecoilState(compasDegAtom) const [compasDeg, setCompasDeg] = useRecoilState(compasDegAtom)
const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState) const [moduleSelectionDataStore, setModuleSelectionDataStore] = useRecoilState(moduleSelectionDataState)
const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState) const [selectedModules, setSelectedModules] = useRecoilState(selectedModuleState)
const { get, getFetcher, postFetcher } = useAxios() const { get, promiseGet, getFetcher, postFetcher } = useAxios()
const canvas = useRecoilValue(canvasState) const canvas = useRecoilValue(canvasState)
const currentCanvasPlan = useRecoilValue(currentCanvasPlanState) const currentCanvasPlan = useRecoilValue(currentCanvasPlanState)
// console.log('🚀 ~ Orientation ~ currentCanvasPlan:', currentCanvasPlan) // console.log('🚀 ~ Orientation ~ currentCanvasPlan:', currentCanvasPlan)
@ -37,11 +37,18 @@ export function useCanvasPopupStatusController(param = 1) {
// getFetcher, // getFetcher,
// ) // )
const res = await get({ const result = await promiseGet({
url: `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupTypeParam}`, url: `/api/v1/canvas-popup-status?objectNo=${currentCanvasPlan.objectNo}&planNo=${currentCanvasPlan.planNo}&popupType=${popupTypeParam}`,
}) })
.then((res) => {
return res
})
.catch((err) => {
console.log('🚀 ~ getModuleSelection ~ err:', err)
return null
})
return res return result.data
} }
/** /**
@ -51,8 +58,9 @@ export function useCanvasPopupStatusController(param = 1) {
const handleModuleSelectionTotal = async () => { const handleModuleSelectionTotal = async () => {
for (let i = 1; i < 3; i++) { for (let i = 1; i < 3; i++) {
const result = await getModuleSelection(i) const result = await getModuleSelection(i)
console.log('🚀 ~ handleModuleSelectionTotal ~ result:', result)
// setModuleSelectionTotal((prev) => ({ ...prev, [i]: JSON.parse(unescapeString(result.popupStatus)) })) // setModuleSelectionTotal((prev) => ({ ...prev, [i]: JSON.parse(unescapeString(result.popupStatus)) }))
if (!result) return if (!result.objectNo) return
if (i === 1) { if (i === 1) {
setCompasDeg(result.popupStatus) setCompasDeg(result.popupStatus)
} else if (i === 2) { } else if (i === 2) {

View File

@ -387,7 +387,6 @@ export const useEstimateController = (planNo) => {
estimateData.pkgAsp = estimateData.pkgAsp.replaceAll(',', '') estimateData.pkgAsp = estimateData.pkgAsp.replaceAll(',', '')
} }
return
//2. 상세데이터 저장 //2. 상세데이터 저장
try { try {
setIsGlobalLoading(true) setIsGlobalLoading(true)

View File

@ -425,7 +425,7 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
lockMovementY: true, // Y 축 이동 잠금 lockMovementY: true, // Y 축 이동 잠금
lockRotation: true, // 회전 잠금 lockRotation: true, // 회전 잠금
viewLengthText: true, viewLengthText: true,
direction: direction, // direction: direction,
originX: 'center', originX: 'center',
originY: 'center', originY: 'center',
name: dormerName, name: dormerName,
@ -444,7 +444,7 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
lockMovementY: true, // Y 축 이동 잠금 lockMovementY: true, // Y 축 이동 잠금
lockRotation: true, // 회전 잠금 lockRotation: true, // 회전 잠금
viewLengthText: true, viewLengthText: true,
direction: direction, // direction: direction,
originX: 'center', originX: 'center',
originY: 'center', originY: 'center',
name: dormerName, name: dormerName,
@ -462,8 +462,8 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
setSurfaceShapePattern(rightTriangle) setSurfaceShapePattern(rightTriangle)
//방향 //방향
drawDirectionArrow(leftTriangle) // drawDirectionArrow(leftTriangle)
drawDirectionArrow(rightTriangle) // drawDirectionArrow(rightTriangle)
let offsetPolygon let offsetPolygon
@ -649,7 +649,7 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
lockRotation: true, // 회전 잠금 lockRotation: true, // 회전 잠금
viewLengthText: true, viewLengthText: true,
fontSize: 14, fontSize: 14,
direction: direction, // direction: direction,
originX: 'center', originX: 'center',
originY: 'center', originY: 'center',
name: dormerName, name: dormerName,
@ -666,7 +666,7 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
lockRotation: true, // 회전 잠금 lockRotation: true, // 회전 잠금
viewLengthText: true, viewLengthText: true,
fontSize: 14, fontSize: 14,
direction: direction, // direction: direction,
originX: 'center', originX: 'center',
originY: 'center', originY: 'center',
name: dormerName, name: dormerName,
@ -680,8 +680,8 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
setSurfaceShapePattern(leftPentagon) setSurfaceShapePattern(leftPentagon)
setSurfaceShapePattern(rightPentagon) setSurfaceShapePattern(rightPentagon)
//방향 //방향
drawDirectionArrow(leftPentagon) // drawDirectionArrow(leftPentagon)
drawDirectionArrow(rightPentagon) // drawDirectionArrow(rightPentagon)
let offsetPolygon let offsetPolygon
@ -1025,6 +1025,74 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
} }
} }
const copyObjectBatch = () => {
const obj = canvas.getActiveObject()
if (obj) {
let clonedObj = null
const parentSurface = canvas?.getObjects().filter((item) => item.name === POLYGON_TYPE.ROOF && item.id === obj.parentId)[0]
obj.clone((cloned) => {
clonedObj = cloned
})
addCanvasMouseEventListener('mouse:move', (e) => {
const pointer = canvas?.getPointer(e.e)
if (!clonedObj) return
canvas
.getObjects()
.filter((clonedObj) => clonedObj.name === 'clonedObj')
.forEach((clonedObj) => canvas?.remove(clonedObj))
clonedObj.set({
left: pointer.x,
top: pointer.y,
name: 'clonedObj',
})
canvas.add(clonedObj)
})
addCanvasMouseEventListener('mouse:up', (e) => {
//개구, 그림자 타입일 경우 폴리곤 타입 변경
if (BATCH_TYPE.OPENING == obj.name || BATCH_TYPE.SHADOW == obj.name) {
clonedObj.set({
points: rectToPolygon(clonedObj),
})
const turfSurface = pointsToTurfPolygon(parentSurface.points)
const turfObject = pointsToTurfPolygon(clonedObj.points)
if (turf.booleanWithin(turfObject, turfSurface)) {
clonedObj.set({
lockMovementX: true,
lockMovementY: true,
name: BATCH_TYPE.OPENING,
parentId: parentSurface.id,
})
clonedObj.setCoords()
} else {
swalFire({
title: getMessage('batch.object.outside.roof'),
icon: 'warning',
})
canvas.remove(clonedObj)
}
} else {
clonedObj.set({
lockMovementX: true,
lockMovementY: true,
name: obj.name,
})
if (clonedObj.type === 'group') reGroupObject(clonedObj)
clonedObj.setCoords()
}
canvas.discardActiveObject()
initEvent()
})
}
}
const dormerOffsetKeyEvent = (setArrow1, setArrow2) => { const dormerOffsetKeyEvent = (setArrow1, setArrow2) => {
addDocumentEventListener('keydown', document, (e) => { addDocumentEventListener('keydown', document, (e) => {
if (e.key === 'ArrowDown' || e.key === 'ArrowUp') { if (e.key === 'ArrowDown' || e.key === 'ArrowUp') {
@ -1061,5 +1129,6 @@ export function useObjectBatch({ isHidden, setIsHidden }) {
moveObjectBatch, moveObjectBatch,
dormerOffsetKeyEvent, dormerOffsetKeyEvent,
dormerOffset, dormerOffset,
copyObjectBatch,
} }
} }

View File

@ -58,7 +58,7 @@ export function useContextMenu() {
const [cell, setCell] = useState(null) const [cell, setCell] = useState(null)
const [column, setColumn] = useState(null) const [column, setColumn] = useState(null)
const { handleZoomClear } = useCanvasEvent() const { handleZoomClear } = useCanvasEvent()
const { moveObjectBatch } = useObjectBatch({}) const { moveObjectBatch, copyObjectBatch } = useObjectBatch({})
const { moveSurfaceShapeBatch } = useSurfaceShapeBatch({}) const { moveSurfaceShapeBatch } = useSurfaceShapeBatch({})
const [globalFont, setGlobalFont] = useRecoilState(globalFontAtom) const [globalFont, setGlobalFont] = useRecoilState(globalFontAtom)
const { addLine, removeLine } = useLine() const { addLine, removeLine } = useLine()
@ -130,11 +130,7 @@ export function useContextMenu() {
name: getMessage('contextmenu.roof.material.placement'), name: getMessage('contextmenu.roof.material.placement'),
component: <RoofAllocationSetting id={popupId} />, component: <RoofAllocationSetting id={popupId} />,
}, },
{
id: 'roofMaterialRemove',
name: getMessage('contextmenu.roof.material.remove'),
fn: () => removeRoofMaterial(),
},
{ {
id: 'roofMaterialRemoveAll', id: 'roofMaterialRemoveAll',
name: getMessage('contextmenu.roof.material.remove.all'), name: getMessage('contextmenu.roof.material.remove.all'),
@ -470,7 +466,7 @@ export function useContextMenu() {
id: 'openingCopy', id: 'openingCopy',
shortcut: ['c', 'C'], shortcut: ['c', 'C'],
name: `${getMessage('contextmenu.copy')}(C)`, name: `${getMessage('contextmenu.copy')}(C)`,
fn: () => copyObject(), fn: () => copyObjectBatch(),
}, },
{ {
id: 'openingOffset', id: 'openingOffset',

View File

@ -1014,5 +1014,6 @@
"max.select": "최대 {0}개까지 선택할 수 있습니다.(JA)", "max.select": "최대 {0}개까지 선택할 수 있습니다.(JA)",
"not.allocation.exist.module": "할당하지 않은 모듈이 있습니다.(JA)", "not.allocation.exist.module": "할당하지 않은 모듈이 있습니다.(JA)",
"roof.is.not.selected": "지붕을 선택해주세요.(JA)", "roof.is.not.selected": "지붕을 선택해주세요.(JA)",
"module.delete.confirm": "パネルを削除して面入力に戻ります。正しいですか?\nはいを選択すると削除し、面入力に戻ります。\nいいえ」を選択すると、削除せずに現在の状態を維持します。" "module.delete.confirm": "パネルを削除して面入力に戻ります。正しいですか?\nはいを選択すると削除し、面入力に戻ります。\nいいえ」を選択すると、削除せずに現在の状態を維持します。",
"length.direction.is.required": "길이와 방향을 입력하세요.(JA)"
} }

View File

@ -1015,5 +1015,6 @@
"max.select": "최대 {0}개까지 선택할 수 있습니다.", "max.select": "최대 {0}개까지 선택할 수 있습니다.",
"module.delete.confirm": "패널을 삭제하고 면입력으로 돌아갑니다. 맞습니까?\n[예]를 선택하면 삭제하고, 면 입력으로 돌아갑니다.\n[아니오]를 선택하면 삭제하지 않고 현재 상태를 유지합니다.", "module.delete.confirm": "패널을 삭제하고 면입력으로 돌아갑니다. 맞습니까?\n[예]를 선택하면 삭제하고, 면 입력으로 돌아갑니다.\n[아니오]를 선택하면 삭제하지 않고 현재 상태를 유지합니다.",
"not.allocation.exist.module": "할당하지 않은 모듈이 있습니다.", "not.allocation.exist.module": "할당하지 않은 모듈이 있습니다.",
"roof.is.not.selected": "지붕을 선택해주세요." "roof.is.not.selected": "지붕을 선택해주세요.",
"length.direction.is.required": "길이와 방향을 입력하세요."
} }