This commit is contained in:
hyojun.choi 2024-09-20 17:33:19 +09:00
commit 7626a9a0bc
5 changed files with 106 additions and 66 deletions

View File

@ -12,7 +12,7 @@ export default function QContextMenu(props) {
let contextType = ''
if (activeObject) {
if (activeObject.initOptions) {
if (activeObject.initOptions && activeObject.initOptions.name) {
//
if (activeObject.initOptions?.name?.indexOf('guide') > -1) {
contextType = 'surface' //

View File

@ -4,15 +4,21 @@ import { useEffect, useState } from 'react'
import MenuDepth01 from './MenuDepth01'
import QSelectBox from '@/components/common/select/QSelectBox'
import { useMessage } from '@/hooks/useMessage'
import { post } from '@/lib/Axios'
import { useRecoilState, useRecoilValue, useSetRecoilState } from 'recoil'
import { settingModalFirstOptionsState, settingModalSecondOptionsState } from '@/store/settingAtom'
import { canvasState, canvasZoomState, currentMenuState, verticalHorizontalModeState } from '@/store/canvasAtom'
import { outerLinePointsState } from '@/store/outerLineAtom'
import { appMessageStore, globalLocaleStore } from '@/store/localeAtom'
import { MENU } from '@/common/common'
import { useAxios } from '@/hooks/useAxios'
import { toastUp } from '@/hooks/useToast'
import KO from '@/locales/ko.json'
import JA from '@/locales/ja.json'
export default function CanvasMenu(props) {
const [objectNo] = useState('test123240912001') //
const [objectNo, setObjectNo] = useState('test123240912001') //
const { setShowCanvasSettingModal, showOutlineModal, setShowOutlineModal } = props
const [menuNumber, setMenuNumber] = useState(null)
const [verticalHorizontalMode, setVerticalHorizontalMode] = useRecoilState(verticalHorizontalModeState)
@ -22,6 +28,9 @@ export default function CanvasMenu(props) {
const canvas = useRecoilValue(canvasState)
const setCurrentMenu = useSetRecoilState(currentMenuState)
const setPoints = useSetRecoilState(outerLinePointsState)
const globalLocale = useRecoilValue(globalLocaleStore)
const [appMessageState, setAppMessageState] = useRecoilState(appMessageStore)
const { post } = useAxios()
const SelectOption = [{ name: '瓦53A' }, { name: '瓦53A' }]
const onClickNav = (number) => {
@ -38,7 +47,13 @@ export default function CanvasMenu(props) {
const firstOptions = useRecoilState(settingModalFirstOptionsState)
const secondOptions = useRecoilState(settingModalSecondOptionsState)
useEffect(() => {}, [menuNumber, type])
useEffect(() => {
if (globalLocale === 'ko') {
setAppMessageState(KO)
} else {
setAppMessageState(JA)
}
}, [menuNumber, type, globalLocale])
// (btn08)
const handleSaveSettings = async () => {
@ -65,6 +80,7 @@ export default function CanvasMenu(props) {
const patternData = {
objectNo,
// ()
assignDisplay: dataToSend.firstOption1[0].selected,
drawDisplay: dataToSend.firstOption1[1].selected,
gridDisplay: dataToSend.firstOption1[2].selected,
@ -76,9 +92,11 @@ export default function CanvasMenu(props) {
trestleDisplay: dataToSend.firstOption1[8].selected,
coordiDisplay: dataToSend.firstOption1[9].selected,
drawConverDisplay: dataToSend.firstOption1[10].selected,
// ()
onlyBorder: dataToSend.firstOption2[0].selected,
lineHatch: dataToSend.firstOption2[1].selected,
allPainted: dataToSend.firstOption2[2].selected,
// ()
adsorpRangeSmall: dataToSend.secondOption2[0].selected,
adsorpRangeSmallSemi: dataToSend.secondOption2[1].selected,
adsorpRangeMedium: dataToSend.secondOption2[2].selected,
@ -86,13 +104,11 @@ export default function CanvasMenu(props) {
}
// HTTP POST
await post({ url: `/api/canvas-management/canvas-settings`, data: patternData })
//
alert('설정이 저장되었습니다.')
await post({ url: `/api/canvas-management/canvas-settings`, data: patternData }).then((res) => {
toastUp({ message: res.returnMessage, type: 'success' })
})
} catch (error) {
console.error('설정을 저장하는 동안 오류가 발생했습니다:', error)
alert('설정을 저장하는 중 오류가 발생했습니다.')
toastUp({ message: res.returnMessage, type: 'error' })
}
}

View File

@ -1,28 +1,24 @@
import { useRecoilState } from 'recoil'
import { settingModalFirstOptionsState } from '@/store/settingAtom'
import { useMessage } from '@/hooks/useMessage'
import React, { useEffect, useState } from 'react'
import { get } from '@/lib/Axios'
import React, { useCallback, useEffect, useState } from 'react'
import { useAxios } from '@/hooks/useAxios'
export default function FirstOption() {
const [objectNo] = useState('test123240912001') //
const [objectNo, setObjectNo] = useState('test123240912001') //
const [settingsModalOptions, setSettingModalOptions] = useRecoilState(settingModalFirstOptionsState)
const { option1, option2 } = settingsModalOptions
const { getMessage } = useMessage()
const [isFetched, setIsFetched] = useState(false) //
const { get } = useAxios()
//
useEffect(() => {
console.log('FirstOption useEffect 실행')
if (!isFetched) {
// fetchSettings
fetchSettings()
}
}, [isFetched]) // isFetched
fetchSettings()
}, [objectNo])
// Canvas Setting
const fetchSettings = async () => {
const fetchSettings = useCallback(async () => {
try {
const res = await get({ url: `/api/canvas-management/canvas-settings/by-object/${objectNo}` })
@ -49,12 +45,10 @@ export default function FirstOption() {
option1,
option2,
})
setIsFetched(true) // isFetched true
} catch (error) {
console.error('Data fetching error:', error)
}
}
}, [objectNo])
const onClickOption = (option) => {
option.selected = !option.selected
@ -67,23 +61,25 @@ export default function FirstOption() {
<div className="modal-check-btn-wrap">
<h3 className="check-wrap-title light">{getMessage('modal.canvas.setting.first.option.info')}</h3>
<div className="flex-check-box for2">
{settingsModalOptions?.option1?.map((item) => (
<button key={item.id} className={`check-btn ${item.selected ? 'act' : ''}`} onClick={(e) => onClickOption(item)}>
<span className="check-area"></span>
<span className="title-area">{getMessage(item.name)}</span>
</button>
))}
{settingsModalOptions &&
settingsModalOptions.option1.map((item) => (
<button key={item.id} className={`check-btn ${item.selected ? 'act' : ''}`} onClick={(e) => onClickOption(item)}>
<span className="check-area"></span>
<span className="title-area">{getMessage(item.name)}</span>
</button>
))}
</div>
</div>
<div className="modal-check-btn-wrap">
<h3 className="check-wrap-title">{getMessage('modal.canvas.setting.first.option.display')}</h3>
<div className="flex-check-box for-line">
{settingsModalOptions?.option2?.map((item) => (
<button key={item.id} className={`check-btn ${item.selected ? 'act' : ''}`} onClick={(e) => onClickOption(item)}>
<span className="check-area"></span>
<span className="title-area">{getMessage(item.name)}</span>
</button>
))}
{settingsModalOptions &&
settingsModalOptions.option2.map((item) => (
<button key={item.id} className={`check-btn ${item.selected ? 'act' : ''}`} onClick={(e) => onClickOption(item)}>
<span className="check-area"></span>
<span className="title-area">{getMessage(item.name)}</span>
</button>
))}
</div>
</div>
</>

View File

@ -1,27 +1,24 @@
import { useRecoilState } from 'recoil'
import { settingModalSecondOptionsState } from '@/store/settingAtom'
import { useMessage } from '@/hooks/useMessage'
import React, { useEffect, useState } from 'react'
import { get } from '@/lib/Axios'
import React, { useCallback, useEffect, useState } from 'react'
import { useAxios } from '@/hooks/useAxios'
export default function SecondOption() {
const [objectNo] = useState('test123240912001') //
const [objectNo, setObjectNo] = useState('test123240912001') //
const [settingsModalOptions, setSettingModalOptions] = useRecoilState(settingModalSecondOptionsState)
const { option1, option2 } = settingsModalOptions
const { getMessage } = useMessage()
const [isFetched, setIsFetched] = useState(false) //
const { get } = useAxios()
//
useEffect(() => {
console.log('SecondOption useEffect 실행')
if (!isFetched) {
// fetchSettings
fetchSettings()
}
}, [isFetched]) // isFetched
fetchSettings()
}, [objectNo])
const fetchSettings = async () => {
// Canvas Setting
const fetchSettings = useCallback(async () => {
try {
const res = await get({ url: `/api/canvas-management/canvas-settings/by-object/${objectNo}` })
@ -36,12 +33,10 @@ export default function SecondOption() {
option1,
option2,
})
setIsFetched(true) // isFetched true
} catch (error) {
console.error('Data fetching error:', error)
}
}
}, [objectNo])
const onClickOption = (option) => {
// option2
@ -54,22 +49,24 @@ export default function SecondOption() {
<div className="modal-check-btn-wrap">
<h3 className="check-wrap-title">{getMessage('modal.canvas.setting.font.plan.edit')}</h3>
<div className="flex-check-box for2">
{settingsModalOptions.option1.map((item, index) => (
<button key={item.id || index} className="arr-btn">
<span>{getMessage(item.name)}</span>
</button>
))}
{settingsModalOptions &&
settingsModalOptions.option1.map((item) => (
<button key={item.id} className="arr-btn">
<span>{getMessage(item.name)}</span>
</button>
))}
</div>
</div>
<div className="modal-check-btn-wrap">
<h3 className="check-wrap-title">{getMessage('modal.canvas.setting.font.plan.absorption')}</h3>
<div className="flex-check-box for-line">
{settingsModalOptions.option2.map((item, index) => (
<button key={item.id || index} className={`check-btn ${item.selected ? 'act' : ''}`} onClick={() => onClickOption(item)}>
<span className="check-area"></span>
<span className="title-area">{getMessage(item.name)}</span>
</button>
))}
{settingsModalOptions &&
settingsModalOptions.option2.map((item) => (
<button key={item.id} className={`check-btn ${item.selected ? 'act' : ''}`} onClick={() => onClickOption(item)}>
<span className="check-area"></span>
<span className="title-area">{getMessage(item.name)}</span>
</button>
))}
</div>
<div className="flex-check-box for-line">
<button className="arr-btn">

View File

@ -1280,13 +1280,44 @@ export function useMode() {
}
const templateSideMode = () => {
changeMode(canvas, Mode.EDIT)
if (historyPoints.current.length >= 4) {
const wall = drawWallPolygon()
setWall(wall)
const firstPoint = historyPoints.current[0]
const lastPoint = historyPoints.current[historyPoints.current.length - 1]
historyPoints.current.forEach((point) => {
canvas?.remove(point)
})
drawLineWithLength(lastPoint, firstPoint)
console.log('sideWall', wall)
// 캔버스에서 모든 라인 객체를 찾습니다.
const lines = historyLines.current
historyLines.current = []
// 각 라인의 시작점과 끝점을 사용하여 다각형의 점 배열을 생성합니다.
const points = lines.map((line) => ({ x: line.x1, y: line.y1 }))
// 모든 라인 객체를 캔버스에서 제거합니다.
lines.forEach((line) => {
canvas?.remove(line)
})
// 점 배열을 사용하여 새로운 다각형 객체를 생성합니다.
const polygon = new QPolygon(
points,
{
stroke: 'black',
fill: 'transparent',
viewLengthText: true,
fontSize: 15,
selectable: true,
},
canvas,
)
// 새로운 다각형 객체를 캔버스에 추가합니다.
canvas.add(polygon)
changeMode(canvas, Mode.DEFAULT)
return polygon
}
}