소스 간소화
This commit is contained in:
parent
085e1ff51e
commit
27838579fb
@ -1,7 +1,7 @@
|
||||
NEXT_PUBLIC_TEST="테스트변수입니다. development"
|
||||
|
||||
NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080"
|
||||
# NEXT_PUBLIC_API_SERVER_PATH="http://localhost:8080"
|
||||
# NEXT_PUBLIC_API_SERVER_PATH="http://1.248.227.176:38080"
|
||||
NEXT_PUBLIC_API_SERVER_PATH="http://localhost:8080"
|
||||
|
||||
DATABASE_URL="sqlserver://mssql.devgrr.kr:1433;database=qcast;user=qcast;password=Qwertqaz12345;trustServerCertificate=true"
|
||||
|
||||
|
||||
@ -1,420 +1,194 @@
|
||||
'use client'
|
||||
|
||||
import React, { useEffect, useState } from 'react';
|
||||
//import { useMutation } from "react-query";
|
||||
import { Button } from '@nextui-org/react';
|
||||
|
||||
import { Button } from '@nextui-org/react'
|
||||
|
||||
import { get, post } from '@/lib/Axios'
|
||||
import { get, post } from '@/lib/Axios';
|
||||
|
||||
export default function Settings() {
|
||||
|
||||
const [objectNo, setObjectNo] = useState('test123240829010'); // object_no 입력 필드의 상태
|
||||
const [error, setError] = useState(null); // 에러 상태 관리
|
||||
const [objectNo, setObjectNo] = useState('test123240829010');
|
||||
const [error, setError] = useState(null);
|
||||
|
||||
//초기 상태 설정
|
||||
|
||||
const [selectedIndices1, setSelectedIndices1] = useState(['N','N','N','N','N','N','N','N','N','N','N']); //화면 표시1
|
||||
const [selectedIndices2, setSelectedIndices2] = useState(['N','N','N']); //화면 표시2
|
||||
const [selectedIndices3, setSelectedIndices3] = useState(0); //흡착 범위 설정 (default:극소)
|
||||
const [selectedIndices4, setSelectedIndices4] = useState([]); //그리드 설정
|
||||
// 상태를 하나의 객체로 관리
|
||||
const [settings, setSettings] = useState({
|
||||
display1: Array(11).fill('N'), // 화면 표시1
|
||||
display2: Array(3).fill('N'), // 화면 표시2
|
||||
rangeSetting: 0, // 흡착 범위 설정
|
||||
gridSettings: [] // 그리드 설정
|
||||
});
|
||||
|
||||
const [gridItems1, setGridItems1] = useState([
|
||||
'할당 표시',
|
||||
'도면 표시',
|
||||
'그리드 표시',
|
||||
'문자 표시',
|
||||
'흐름방향 표시',
|
||||
'복도치수 표시',
|
||||
'실제치수 표시',
|
||||
'치수 표시 없음',
|
||||
'가대 표시',
|
||||
'좌표 표시',
|
||||
'도면전환 표시']);
|
||||
const [gridItems2, setGridItems2] = useState(['테두리만', '라인해치', 'All Painted']);
|
||||
const [gridItems3, setGridItems3] = useState(['극소', '소', '중', '대']);
|
||||
const [gridItems4, setGridItems4] = useState(['임의 그리드', '실선 그리드', '점 그리드', '그리드 색 설정', '흡착점 추가']);
|
||||
const gridItems = {
|
||||
display1: [
|
||||
'할당 표시', '도면 표시', '그리드 표시', '문자 표시', '흐름방향 표시',
|
||||
'복도치수 표시', '실제치수 표시', '치수 표시 없음', '가대 표시',
|
||||
'좌표 표시', '도면전환 표시'
|
||||
],
|
||||
display2: ['테두리만', '라인해치', 'All Painted'],
|
||||
rangeSetting: ['극소', '소', '중', '대'],
|
||||
gridSettings: ['임의 그리드', '실선 그리드', '점 그리드', '그리드 색 설정', '흡착점 추가']
|
||||
};
|
||||
|
||||
// 클릭 시 상태 변경 함수
|
||||
//화면 표시1
|
||||
const handleClick1 = (index) => {
|
||||
setSelectedIndices1((prevSelectedIndices) => {
|
||||
if (prevSelectedIndices.includes(index)) {
|
||||
// 이미 선택된 경우, 선택 해제 (리스트에서 제거)
|
||||
return prevSelectedIndices.filter((i) => i !== index);
|
||||
} else {
|
||||
// 선택되지 않은 경우, 리스트에 추가
|
||||
return [...prevSelectedIndices, index];
|
||||
const handleToggle = (type, index) => {
|
||||
setSettings((prevSettings) => {
|
||||
let updated = [...prevSettings[type]];
|
||||
|
||||
if (type === 'rangeSetting') {
|
||||
return { ...prevSettings, [type]: index };
|
||||
}
|
||||
|
||||
updated[index] = updated[index] === 'N' ? 'Y' : 'N';
|
||||
return { ...prevSettings, [type]: updated };
|
||||
});
|
||||
};
|
||||
|
||||
//화면 표시2
|
||||
const handleClick2 = (index) => {
|
||||
setSelectedIndices2((prevSelectedIndices) => {
|
||||
if (prevSelectedIndices.includes(index)) {
|
||||
// 이미 선택된 경우, 선택 해제 (리스트에서 제거)
|
||||
return prevSelectedIndices.filter((i) => i !== index);
|
||||
} else {
|
||||
// 선택되지 않은 경우, 리스트에 추가
|
||||
return [...prevSelectedIndices, index];
|
||||
// Canvas Setting 조회 및 초기화
|
||||
const handleSelect = async () => {
|
||||
try {
|
||||
const res = await get({ url: `/api/canvas-management/canvas-settings/by-object/${objectNo}` });
|
||||
|
||||
// 데이터가 없는 경우
|
||||
if (!res || res.length === 0) {
|
||||
|
||||
console.warn('조회 결과가 없습니다.');
|
||||
// 기본값을 설정하거나 사용자에게 알림 표시
|
||||
setSettings({
|
||||
display1: Array(11).fill('N'), // 화면 표시1 기본값
|
||||
display2: Array(3).fill('N'), // 화면 표시2 기본값
|
||||
rangeSetting: 0, // 흡착 범위 설정 기본값
|
||||
gridSettings: [] // 그리드 설정 초기화
|
||||
});
|
||||
|
||||
alert('조회된 데이터가 없습니다. 기본 설정이 적용됩니다.');
|
||||
return; // 이후 코드 실행을 중단
|
||||
}
|
||||
});
|
||||
|
||||
const data = res.map((item) => ({
|
||||
display1: [
|
||||
item.assignDisplay, item.drawDisplay, item.gridDisplay, item.charDisplay, item.flowDisplay,
|
||||
item.hallwayDimenDisplay, item.actualDimenDisplay, item.noDimenDisplay, item.trestleDisplay,
|
||||
item.coordiDisplay, item.drawConverDisplay
|
||||
],
|
||||
display2: [item.onlyBorder, item.lineHatch, item.allPainted],
|
||||
rangeSetting: Number(item.adsorpRangeSetting)
|
||||
}));
|
||||
|
||||
setSettings({
|
||||
display1: data[0].display1,
|
||||
display2: data[0].display2,
|
||||
rangeSetting: data[0].rangeSetting,
|
||||
gridSettings: [] // 초기화
|
||||
});
|
||||
} catch (error) {
|
||||
console.error('Data fetching error:', error);
|
||||
}
|
||||
};
|
||||
|
||||
//흡착 범위 설정
|
||||
const handleClick3 = (index) => {
|
||||
setSelectedIndices3(index);
|
||||
};
|
||||
|
||||
//그리드 설정
|
||||
const handleClick4 = (index) => {
|
||||
setSelectedIndices4((prevSelectedIndices) => {
|
||||
if (prevSelectedIndices.includes(index)) {
|
||||
// 이미 선택된 경우, 선택 해제 (리스트에서 제거)
|
||||
return prevSelectedIndices.filter((i) => i !== index);
|
||||
} else {
|
||||
// 선택되지 않은 경우, 리스트에 추가
|
||||
return [...prevSelectedIndices, index];
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
// 제출 post
|
||||
// const postMutation = useMutation(
|
||||
// (formData) =>
|
||||
// axios.post("http://서버주소", formData, {
|
||||
// headers: {
|
||||
// "Content-Type": "multipart/form-data",
|
||||
// },
|
||||
// }),
|
||||
// {
|
||||
// onSuccess: () => {
|
||||
// alert("제출 완료 되었습니다.");
|
||||
// setShowModal(false);
|
||||
// },
|
||||
// onError: (error) => {
|
||||
// // 에러 처리
|
||||
// console.error("Error:", error);
|
||||
// },
|
||||
// },
|
||||
// );
|
||||
|
||||
|
||||
// Canvas Setting 저장
|
||||
const handleSubmit = async (e) => {
|
||||
e.preventDefault();
|
||||
|
||||
if (objectNo) {
|
||||
handleSelect(objectNo);
|
||||
} else {
|
||||
if (!objectNo) {
|
||||
alert('object_no를 입력하세요.');
|
||||
return;
|
||||
}
|
||||
|
||||
let tempCnt1 = [0,1,2,3,4,5,6,7,8,9,10]
|
||||
let display1 = ['N','N','N','N','N','N','N','N','N','N','N']
|
||||
|
||||
//화면 표시1 data
|
||||
for (let i = 0; i < tempCnt1.length; i++) {
|
||||
for (let j = 0; j < selectedIndices1.length; j++) {
|
||||
if (i == selectedIndices1[j]) {
|
||||
display1[i] = "Y"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let tempCnt2 = [0,1,2]
|
||||
let display2 = ['N','N','N']
|
||||
|
||||
//화면 표시2 data
|
||||
for (let i = 0; i < tempCnt2.length; i++) {
|
||||
for (let j = 0; j < selectedIndices2.length; j++) {
|
||||
if (i == selectedIndices2[j]) {
|
||||
display2[i] = "Y"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//흡착 범위 설정
|
||||
let rangeSetting = selectedIndices3
|
||||
|
||||
//견적서 번호 << objectNo 받아와야 함.
|
||||
//let objectNo = 'test123240829010'
|
||||
|
||||
// 유저가 올린 데이터를 데이터로 만들어주는 부분
|
||||
const patternData = {
|
||||
objectNo : objectNo,
|
||||
assignDisplay : display1[0],
|
||||
drawDisplay : display1[1],
|
||||
gridDisplay : display1[2],
|
||||
charDisplay : display1[3],
|
||||
flowDisplay : display1[4],
|
||||
hallwayDimenDisplay : display1[5],
|
||||
actualDimenDisplay : display1[6],
|
||||
noDimenDisplay : display1[7],
|
||||
trestleDisplay : display1[8],
|
||||
coordiDisplay : display1[9],
|
||||
drawConverDisplay : display1[10],
|
||||
onlyBorder : display2[0],
|
||||
lineHatch : display2[1],
|
||||
allPainted : display2[2],
|
||||
adsorpRangeSetting : rangeSetting,
|
||||
}
|
||||
//console.log("patternData : ", patternData)
|
||||
objectNo,
|
||||
assignDisplay: settings.display1[0],
|
||||
drawDisplay: settings.display1[1],
|
||||
gridDisplay: settings.display1[2],
|
||||
charDisplay: settings.display1[3],
|
||||
flowDisplay: settings.display1[4],
|
||||
hallwayDimenDisplay: settings.display1[5],
|
||||
actualDimenDisplay: settings.display1[6],
|
||||
noDimenDisplay: settings.display1[7],
|
||||
trestleDisplay: settings.display1[8],
|
||||
coordiDisplay: settings.display1[9],
|
||||
drawConverDisplay: settings.display1[10],
|
||||
onlyBorder: settings.display2[0],
|
||||
lineHatch: settings.display2[1],
|
||||
allPainted: settings.display2[2],
|
||||
adsorpRangeSetting: settings.rangeSetting
|
||||
};
|
||||
|
||||
// Canvas Setting 등록
|
||||
await post({ url: `/api/canvas-management/canvas-settings`, data : patternData })
|
||||
await post({ url: `/api/canvas-management/canvas-settings`, data: patternData });
|
||||
|
||||
// 저장 후 재조회
|
||||
handleSelect();
|
||||
|
||||
};
|
||||
|
||||
// Canvas Setting 조회
|
||||
const handleSelect = async () => {
|
||||
//console.log("handleSelect objectNo : ", objectNo)
|
||||
|
||||
//화면 초기화 후 조회
|
||||
handleClick1(0)
|
||||
handleClick2(0)
|
||||
handleClick3(0)
|
||||
handleClick4(0)
|
||||
|
||||
try {
|
||||
get({ url: `/api/canvas-management/canvas-settings/by-object/${objectNo}` }).then((res) => {
|
||||
const arrangeData = res.map((item) => {
|
||||
|
||||
//console.log("item : ", item)
|
||||
|
||||
return {
|
||||
objectNo : item.objectNo,
|
||||
assignDisplay : item.assignDisplay,
|
||||
drawDisplay : item.drawDisplay,
|
||||
gridDisplay : item.gridDisplay,
|
||||
charDisplay : item.charDisplay,
|
||||
flowDisplay : item.flowDisplay,
|
||||
hallwayDimenDisplay : item.hallwayDimenDisplay,
|
||||
actualDimenDisplay : item.actualDimenDisplay,
|
||||
noDimenDisplay : item.noDimenDisplay,
|
||||
trestleDisplay : item.trestleDisplay,
|
||||
coordiDisplay : item.coordiDisplay,
|
||||
drawConverDisplay : item.drawConverDisplay,
|
||||
onlyBorder : item.onlyBorder,
|
||||
lineHatch : item.lineHatch,
|
||||
allPainted : item.allPainted,
|
||||
adsorpRangeSetting : item.adsorpRangeSetting,
|
||||
}
|
||||
})
|
||||
|
||||
// 가공된 데이터를 상태에 저장
|
||||
//setArrangeData(arrangeData);
|
||||
|
||||
let assignDisplay = ""
|
||||
let drawDisplay = ""
|
||||
let gridDisplay = ""
|
||||
let charDisplay = ""
|
||||
let flowDisplay = ""
|
||||
let hallwayDimenDisplay = ""
|
||||
let actualDimenDisplay = ""
|
||||
let noDimenDisplay = ""
|
||||
let trestleDisplay = ""
|
||||
let coordiDisplay = ""
|
||||
let drawConverDisplay = ""
|
||||
let display1 = []
|
||||
|
||||
{arrangeData.map((gridYn1) => (
|
||||
assignDisplay = gridYn1.assignDisplay,
|
||||
drawDisplay = gridYn1.drawDisplay,
|
||||
gridDisplay = gridYn1.gridDisplay,
|
||||
charDisplay = gridYn1.charDisplay,
|
||||
flowDisplay = gridYn1.flowDisplay,
|
||||
hallwayDimenDisplay = gridYn1.hallwayDimenDisplay,
|
||||
actualDimenDisplay = gridYn1.actualDimenDisplay,
|
||||
noDimenDisplay = gridYn1.noDimenDisplay,
|
||||
trestleDisplay = gridYn1.trestleDisplay,
|
||||
coordiDisplay = gridYn1.coordiDisplay,
|
||||
drawConverDisplay = gridYn1.drawConverDisplay
|
||||
))}
|
||||
|
||||
display1 = [assignDisplay, drawDisplay, gridDisplay, charDisplay, flowDisplay, hallwayDimenDisplay,
|
||||
actualDimenDisplay, noDimenDisplay, trestleDisplay, coordiDisplay, drawConverDisplay]
|
||||
|
||||
//console.log("display1 : ", display1)
|
||||
//console.log("gridItems1 : ", gridItems1)
|
||||
|
||||
//초기화
|
||||
//배열 전체 삭제
|
||||
selectedIndices1.splice(0,11)
|
||||
|
||||
//화면 표시1 data
|
||||
for (let i = 0; i < 11; i++) {
|
||||
display1.forEach((data, i) => {
|
||||
|
||||
if ('Y' == data) {
|
||||
selectedIndices1[i] = i
|
||||
}
|
||||
})
|
||||
}
|
||||
setSelectedIndices1(selectedIndices1)
|
||||
|
||||
let onlyBorder = ""
|
||||
let lineHatch = ""
|
||||
let allPainted = ""
|
||||
let display2 = []
|
||||
|
||||
{arrangeData.map((gridYn2) => (
|
||||
onlyBorder = gridYn2.onlyBorder,
|
||||
lineHatch = gridYn2.lineHatch,
|
||||
allPainted = gridYn2.allPainted
|
||||
))}
|
||||
|
||||
display2 = [onlyBorder, lineHatch, allPainted]
|
||||
|
||||
//console.log("display2 : ", display2)
|
||||
//console.log("gridItems2 : ", gridItems2)
|
||||
|
||||
//초기화
|
||||
//배열 전체 삭제
|
||||
selectedIndices2.splice(0,3)
|
||||
|
||||
//화면 표시2 data
|
||||
for (let i = 0; i < 3; i++) {
|
||||
display2.forEach((data, i) => {
|
||||
if ('Y' == data) {
|
||||
selectedIndices2[i] = i
|
||||
}
|
||||
})
|
||||
}
|
||||
setSelectedIndices2(selectedIndices2)
|
||||
|
||||
let adsorpRangeSetting = 0
|
||||
{arrangeData.map((gridItems3) => (
|
||||
adsorpRangeSetting = gridItems3.adsorpRangeSetting
|
||||
))}
|
||||
|
||||
//흡착 범위 설정 data
|
||||
setSelectedIndices3(Number(adsorpRangeSetting))
|
||||
|
||||
})
|
||||
} catch (error) {
|
||||
console.error('Data fetching error:', error);
|
||||
} finally {
|
||||
|
||||
}
|
||||
};
|
||||
|
||||
// Canvas Setting 조회
|
||||
// 초기 조회
|
||||
useEffect(() => {
|
||||
|
||||
//console.log("useEffect objectNo : ", objectNo)
|
||||
|
||||
if (objectNo) {
|
||||
handleSelect(objectNo);
|
||||
} else {
|
||||
alert('object_no를 입력하세요.');
|
||||
}
|
||||
|
||||
}, [])
|
||||
}, []);
|
||||
|
||||
// Canvas Setting 조회 버튼 클릭
|
||||
const handleSelectButton = () => {
|
||||
|
||||
//console.log("handleSelectButton objectNo : ", objectNo)
|
||||
|
||||
if (objectNo) {
|
||||
handleSelect(objectNo);
|
||||
} else {
|
||||
alert('object_no를 입력하세요.');
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
// 입력 필드가 변경될 때 상태 업데이트
|
||||
const handleInputChange = (event) => {
|
||||
setObjectNo(event.target.value);
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="container mx-auto p-4 m-4 border">
|
||||
<div align="right">
|
||||
<input type="text" placeholder="Object No 입력" value={objectNo} onChange={handleInputChange}/>
|
||||
<Button onClick={handleSelectButton}>조회</Button>
|
||||
<input type="text" placeholder="Object No 입력" value={objectNo} onChange={(e) => setObjectNo(e.target.value)} />
|
||||
<Button onClick={handleSelect}>조회</Button>
|
||||
<Button onClick={handleSubmit}>저장</Button>
|
||||
</div>
|
||||
<div className="container mx-auto p-4 m-4 border">
|
||||
<h1>[디스플레이 설정]</h1>
|
||||
<h1>[디스플레이 설정]</h1>
|
||||
<h1>* 도면에 표시할 항목을 클릭하면 적용 됩니다.</h1>
|
||||
<div className="grid-container2">
|
||||
{gridItems1.map((item1, index) => (
|
||||
{gridItems.display1.map((item, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={`grid-item ${
|
||||
selectedIndices1.includes(index) ? 'selected' : 'unselected'
|
||||
}`}
|
||||
onClick={() => handleClick1(index)}
|
||||
className={`grid-item ${settings.display1[index] === 'Y' ? 'selected' : 'unselected'}`}
|
||||
onClick={() => handleToggle('display1', index)}
|
||||
>
|
||||
{selectedIndices1.includes(index) ? 'Y' : 'N'} {item1}
|
||||
{settings.display1[index]} {item}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<br/>
|
||||
</div>
|
||||
<br />
|
||||
<h1>* 화면 표시</h1>
|
||||
<div className="grid-container3">
|
||||
{gridItems2.map((item2, index) => (
|
||||
{gridItems.display2.map((item, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={`grid-item ${
|
||||
selectedIndices2.includes(index) ? 'selected' : 'unselected'
|
||||
}`}
|
||||
onClick={() => handleClick2(index)}
|
||||
className={`grid-item ${settings.display2[index] === 'Y' ? 'selected' : 'unselected'}`}
|
||||
onClick={() => handleToggle('display2', index)}
|
||||
>
|
||||
{selectedIndices2.includes(index) ? 'Y' : 'N'} {item2}
|
||||
{settings.display2[index]} {item}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<h1>[글꼴/도면크기 설정]</h1>
|
||||
<h1>* 글꼴 및 크기 변경</h1>
|
||||
<div className="grid-container2">
|
||||
<div className="grid-item">문자 글꼴 변경</div>
|
||||
<div className="grid-item">흐름방향 글꼴 변경</div>
|
||||
<div className="grid-item">치수 글꼴 변경</div>
|
||||
<div className="grid-item">회로번호 글꼴 변경</div>
|
||||
</div>
|
||||
<h1>[글꼴/도면크기 설정]</h1>
|
||||
<h1>* 흡착 범위 설정</h1>
|
||||
<div className="grid-container4">
|
||||
{gridItems3.map((item3, index) => (
|
||||
{gridItems.rangeSetting.map((item, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={`grid-item ${selectedIndices3 === index ? 'selected' : 'unselected'}`}
|
||||
onClick={() => handleClick3(index)}
|
||||
className={`grid-item ${settings.rangeSetting === index ? 'selected' : 'unselected'}`}
|
||||
onClick={() => handleToggle('rangeSetting', index)}
|
||||
>
|
||||
{selectedIndices3 === index ? 'Y' : 'N'} {item3}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
<div className="grid-container3">
|
||||
<div className="grid-item">치수선 설정</div>
|
||||
<div className="grid-item">도면 크기 설정</div>
|
||||
<div className="grid-item">흡착점 ON</div>
|
||||
</div>
|
||||
|
||||
<h1>[그리드 설정]</h1>
|
||||
<div className="grid-container2 border">
|
||||
{gridItems4.map((item4, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={`grid-item ${
|
||||
selectedIndices4.includes(index) ? 'selected' : 'unselected'
|
||||
}`}
|
||||
onClick={() => handleClick4(index)}
|
||||
>
|
||||
{selectedIndices4.includes(index) ? 'Y' : 'N'} {item4}
|
||||
{settings.rangeSetting === index ? 'Y' : 'N'} {item}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
<h1>[그리드 설정]</h1>
|
||||
<div className="grid-container2 border">
|
||||
{gridItems.gridSettings.map((item, index) => (
|
||||
<div
|
||||
key={index}
|
||||
className={`grid-item ${settings.gridSettings.includes(index) ? 'selected' : 'unselected'}`}
|
||||
onClick={() => handleToggle('gridSettings', index)}
|
||||
>
|
||||
{settings.gridSettings.includes(index) ? 'Y' : 'N'} {item}
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
)
|
||||
}
|
||||
);
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user