From 1b576708306eae715c7327ddfa442ccd226ad206 Mon Sep 17 00:00:00 2001 From: swcho Date: Wed, 24 Sep 2025 14:47:51 +0900 Subject: [PATCH 01/11] =?UTF-8?q?test:=20=EB=A9=94=EC=9D=B8=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=80=20=EC=B0=A8=ED=8A=B8=20=EC=BB=B4=ED=8F=AC?= =?UTF-8?q?=EB=84=8C=ED=8A=B8=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../app/(with-base-layout)/ii/test/page.tsx | 105 +++++++++++++ .../(with-base-layout)/ii/test/page_bar.tsx | 143 +++++++++++++++++ .../(with-base-layout)/ii/test/page_pie.tsx | 146 ++++++++++++++++++ 3 files changed, 394 insertions(+) create mode 100644 apps/sn/app/(with-base-layout)/ii/test/page.tsx create mode 100644 apps/sn/app/(with-base-layout)/ii/test/page_bar.tsx create mode 100644 apps/sn/app/(with-base-layout)/ii/test/page_pie.tsx diff --git a/apps/sn/app/(with-base-layout)/ii/test/page.tsx b/apps/sn/app/(with-base-layout)/ii/test/page.tsx new file mode 100644 index 000000000..9e11fccbb --- /dev/null +++ b/apps/sn/app/(with-base-layout)/ii/test/page.tsx @@ -0,0 +1,105 @@ +"use client"; + +import React from "react"; +import { + Chart as ChartJS, + CategoryScale, + LinearScale, + BarElement, + Title, + Tooltip, + Legend, + type ChartOptions, +} from "chart.js"; +import { Bar } from "react-chartjs-2"; + +ChartJS.register(CategoryScale, LinearScale, BarElement, Title, Tooltip, Legend); + +export default function Page() { + const labels = ["한강", "낙동강", "영산강", "금강"]; + + // 데이터: [기타, 오수관로, 우수관로] + const datasets = [ + { + label: "기타", + data: [15481, 6959, 1938, 1967], + backgroundColor: "rgba(255, 178, 150, 0.9)", // 연한 주황(파스텔톤) + borderColor: "rgba(255,178,150,1)", + }, + { + label: "오수관로", + data: [15878, 16336, 5670, 8073], + backgroundColor: "rgba(180, 240, 190, 0.95)", // 연한 초록(파스텔톤) + borderColor: "rgba(180,240,190,1)", + }, + { + label: "우수관로", + data: [12892, 10491, 4280, 4838], + backgroundColor: "rgba(170, 210, 245, 0.95)", // 연한 파랑(파스텔톤) + borderColor: "rgba(170,210,245,1)", + }, + ]; + + // 총합(라벨당) 계산 + const totals = labels.map((_, i) => + datasets.reduce((s, ds) => s + (ds.data[i] as number), 0), + ); + + const options: ChartOptions<"bar"> = { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { + position: "top", + }, + tooltip: { + callbacks: { + label: (ctx) => `${ctx.dataset.label}: ${Number(ctx.parsed.y).toLocaleString()}km`, + }, + }, + }, + scales: { + x: { + stacked: true, + }, + y: { + stacked: true, + beginAtZero: true, + ticks: { + callback: (value) => `${Number(value).toLocaleString()}km`, + }, + }, + }, + // 각 스택 위에 총합 표시 + animation: { + onComplete: function (animation) { + const chart = animation.chart; + const ctx = chart.ctx; + const lastMeta = chart.getDatasetMeta(datasets.length - 1); + ctx.save(); + ctx.fillStyle = "#111"; + ctx.font = "gray bold 12px Arial"; + ctx.textAlign = "center"; + + totals.forEach((total, i) => { + const bar = lastMeta.data[i]; + if (!bar) return; + const x = bar.x; + // y는 마지막 스택의 y 좌표(스택의 최상단)에서 조금 위로 + const y = bar.y - 8; + ctx.fillText(`총 ${total.toLocaleString()}km`, x, y); + }); + + ctx.restore(); + }, + }, + }; + + const data = { labels, datasets }; + + return ( +
+ +
+ ); +} \ No newline at end of file diff --git a/apps/sn/app/(with-base-layout)/ii/test/page_bar.tsx b/apps/sn/app/(with-base-layout)/ii/test/page_bar.tsx new file mode 100644 index 000000000..08b8755c8 --- /dev/null +++ b/apps/sn/app/(with-base-layout)/ii/test/page_bar.tsx @@ -0,0 +1,143 @@ +"use client"; + +import { + Chart as ChartJS, + CategoryScale, + LinearScale, + BarElement, + Title, + Tooltip, + Legend, + type ChartOptions, +} from "chart.js"; +import { Bar } from "react-chartjs-2"; +import { Card, CardHeader, CardTitle, CardContent } from "@common/business_components/ui/chart/lib/card"; +import { Button } from "@common/components"; + +// ChartJS 컴포넌트 등록 +ChartJS.register( + CategoryScale, + LinearScale, + BarElement, + Title, + Tooltip, + Legend +); + +export default function TestPage() { + // 차트 데이터 + const labels = ["한강", "낙동강", "영산강", "금강"]; + + const datasets = [ + { + label: '20-25년', + data: [3859, 1066, 1929, 2828], + backgroundColor: '#3B82F6', // 파란색 + borderRadius: 4, + }, + { + label: '25년-30년', + data: [3153, 1420, 1204, 2877], + backgroundColor: '#EF4444', // 빨간색 + borderRadius: 4, + }, + { + label: '30년이상', + data: [9404, 1835, 1821, 8115], + backgroundColor: '#F87171', // 연한 빨간색/분홍색 + borderRadius: 4, + }, + ]; + + // 각 지역별 총 길이 계산 + const totalLengths = [44251, 33786, 11888, 14878]; + + // 차트 옵션 설정 + const options: ChartOptions<"bar"> = { + responsive: true, + maintainAspectRatio: false, + scales: { + x: { + grid: { + display: true, + }, + }, + y: { + beginAtZero: true, + min: 0, + max: 10000, + ticks: { + stepSize: 2000, + callback: function(value) { + return value + 'km'; + } + }, + grid: { + color: 'rgba(200, 200, 200, 0.3)', + } + } + }, + plugins: { + legend: { + position: 'top', + align: 'start', + labels: { + boxWidth: 15, + padding: 15, + usePointStyle: false, + }, + }, + tooltip: { + callbacks: { + label: function(context) { + return `${context.dataset.label}: ${context.parsed.y}km`; + } + } + }, + }, + // 총 길이 데이터 표시를 위한 애니메이션 후 함수 설정 + animation: { + onComplete: function(animation) { + const chart = animation.chart; + const ctx = chart.ctx; + + // 각 데이터셋의 마지막 데이터셋의 인덱스 + const lastDatasetIndex = datasets.length - 1; + + // 텍스트 스타일 설정 + ctx.font = '11px Arial'; + ctx.fillStyle = '#333'; + ctx.textAlign = 'center'; + + // 각 지역별로 총 길이 표시 + labels.forEach((_, i) => { + const xPos = chart.scales.x ? chart.scales.x.getPixelForTick(i) : 0; + const yPos = chart.chartArea.top; // 차트 영역 최상단 위에 표시 + + // 막대 위에 총 길이 텍스트 표시 + if (totalLengths[i]) ctx.fillText(`총 ${totalLengths[i].toLocaleString()}km`, xPos, yPos); + }); + } + } + }; + + const data = { + labels, + datasets, + }; + + return ( + + + 노후하수관로현황 + + + + {/* 너비 400px, 높이 150px로 조정 */} +
+ +
+
+
+ ); +} \ No newline at end of file diff --git a/apps/sn/app/(with-base-layout)/ii/test/page_pie.tsx b/apps/sn/app/(with-base-layout)/ii/test/page_pie.tsx new file mode 100644 index 000000000..2cd6c1b95 --- /dev/null +++ b/apps/sn/app/(with-base-layout)/ii/test/page_pie.tsx @@ -0,0 +1,146 @@ +// ...existing code... +"use client"; + +import React from "react"; +import { Chart as ChartJS, ArcElement, Tooltip, Legend, type ChartOptions } from "chart.js"; +import { Pie } from "react-chartjs-2"; + +ChartJS.register(ArcElement, Tooltip, Legend); + +export default function Page() { + const labels = ["한강", "낙동강", "영산강", "금강"]; + const datasets = [ + { label: "20년 미만", data: [27835, 29465, 6934, 1058], color: "rgba(169, 169, 169, 0.8)" }, + { label: "20-25년", data: [3859, 1066, 1929, 2828], color: "rgba(255, 160, 122, 0.8)" }, + { label: "25년-30년", data: [3153, 1420, 1204, 2877], color: "rgba(152, 251, 152, 0.8)" }, + { label: "30년이상", data: [9404, 1835, 1821, 8115], color: "rgba(135, 206, 235, 0.8)" }, + ]; + // 각 지역별 총 길이 계산 + const totalLengths = [44251, 33786, 11888, 14878]; + // 외부 툴팁을 사용하여 컨테이너 넘침과 관계없이 전체 툴팁을 보여주고, + // 각 항목의 전체에서 차지하는 비율(%)을 표시합니다. + const pieOptions: ChartOptions<"pie"> = { + responsive: true, + maintainAspectRatio: false, + plugins: { + legend: { display: false }, + tooltip: { + enabled: false, // 기본 캔버스 툴팁 비활성화 (외부 툴팁 사용) + external: function (context) { + const { chart, tooltip } = context; + let tooltipEl = document.getElementById("chartjs-external-tooltip"); + + // tooltip DOM이 없으면 생성 + if (!tooltipEl) { + tooltipEl = document.createElement("div"); + tooltipEl.id = "chartjs-external-tooltip"; + tooltipEl.style.position = "absolute"; + tooltipEl.style.pointerEvents = "auto"; + tooltipEl.style.background = "rgba(0,0,0,0.75)"; + tooltipEl.style.color = "#fff"; + tooltipEl.style.padding = "6px 8px"; + tooltipEl.style.borderRadius = "6px"; + tooltipEl.style.fontSize = "12px"; + tooltipEl.style.zIndex = "9999"; + tooltipEl.style.transform = "translate(-50%, -120%)"; + document.body.appendChild(tooltipEl); + } + + // 사라짐 처리 + if (tooltip.opacity === 0) { + tooltipEl.style.opacity = "0"; + return; + } + + // 툴팁 내용 구성 (파이의 전체 합 대비 비율 표시) + const data = chart.data; + const dataset = data.datasets && data.datasets[0] && data.datasets[0].data + ? (data.datasets[0].data as number[]) + : []; + const total = dataset.reduce((s, n) => s + (Number(n) || 0), 0); + + const innerHtmlParts: string[] = []; + if (tooltip.dataPoints) { + tooltip.dataPoints.forEach((dp) => { + const idx = dp.dataIndex; + const label = (data.labels && data.labels[idx]) || dp.label || ""; + const value = Number(dp.raw ?? dp.parsed ?? 0); + const pct = total > 0 ? (value / total) * 100 : 0; + innerHtmlParts.push( + `
+ + ${label}: ${value.toLocaleString()}km + (${pct.toFixed(1)}%) +
` + ); + }); + } + + tooltipEl.innerHTML = innerHtmlParts.join(""); + tooltipEl.style.opacity = "1"; + + // 위치: 차트 캔버스 기준 툴팁 caret 위치에 맞춤 (윈도우 스크롤 보정 포함) + const canvasRect = chart.canvas.getBoundingClientRect(); + const caretX = tooltip.caretX ?? (canvasRect.left + canvasRect.width / 2); + const caretY = tooltip.caretY ?? (canvasRect.top + canvasRect.height / 2); + tooltipEl.style.left = `${canvasRect.left + window.pageXOffset + caretX}px`; + tooltipEl.style.top = `${canvasRect.top + window.pageYOffset + caretY}px`; + }, + }, + }, + }; + + + // 상단에 공통 범례(연도) 가로로 표시 + const SharedLegend = () => ( +
+ {datasets.map((d) => ( +
+ + {d.label} +
+ ))} +
+ ); + + // 레이블(강) 당 pie 데이터 생성 (레이블은 아래로 이동) + const Charts = () => + labels.map((river, i) => { + const data = { + labels: datasets.map((d) => d.label), + datasets: [ + { + data: datasets.map((d) => d.data[i]), + backgroundColor: datasets.map((d) => d.color), + borderColor: datasets.map(() => "rgba(255,255,255,0.8)"), + borderWidth: 1, + }, + ], + }; + + return ( +
+
+ +
+ {/* 레이블을 차트 하단으로 이동 */} +
{totalLengths[i]?.toLocaleString()} km
+
{river}
+
+ ); + }); + + return ( +
+ {/* 상단 공통 범례 */} +
+ +
+ +
+ +
+
+ ); +} +// ...existing code... \ No newline at end of file From 3381e165739caf6323c53b73fc79a560771f1692 Mon Sep 17 00:00:00 2001 From: swcho Date: Mon, 29 Sep 2025 17:46:58 +0900 Subject: [PATCH 02/11] =?UTF-8?q?chmod:=20=EB=A1=9C=EA=B7=B8=EC=9D=B8=20UR?= =?UTF-8?q?L=20=EB=B3=80=EA=B2=BD=20(localhost=20->=20=EC=9B=90=EC=95=A4?= =?UTF-8?q?=EC=98=AC=20=EA=B0=9C=EB=B0=9C=EC=84=9C=EB=B2=84)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sn/.env.development | 1 + apps/sn/.env.local | 7 +++---- apps/sn/.env.production | 1 + apps/sn/.env.vdi.production | 14 ++++++++++++++ apps/sn/src/entities/auth/lib/auth-wrapper.tsx | 2 +- 5 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 apps/sn/.env.vdi.production diff --git a/apps/sn/.env.development b/apps/sn/.env.development index 24edce282..29d633c9a 100644 --- a/apps/sn/.env.development +++ b/apps/sn/.env.development @@ -10,4 +10,5 @@ NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g NEXT_PUBLIC_DC_URL = https://apigateway.apps.rsonesoft.com +NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login NEXT_PUBLIC_SEWERAGE_API_URL=http://con.mind-one.co.kr:11083 \ No newline at end of file diff --git a/apps/sn/.env.local b/apps/sn/.env.local index ed1b605c3..ef48748ca 100644 --- a/apps/sn/.env.local +++ b/apps/sn/.env.local @@ -4,16 +4,15 @@ NEXT_PUBLIC_AUTH_USER_ID = token-id NEXT_PUBLIC_ACCESS_TOKEN = access-token NEXT_PUBLIC_REFRESH_TOKEN = refresh-token NEXT_PUBLIC_PORT = 3002 -NEXT_PUBLIC_PROXY_HOST = http://localhost:3002 +# NEXT_PUBLIC_PROXY_HOST = http://localhost:3002 +NEXT_PUBLIC_PROXY_HOST = http://sn.onasys.co.kr:3002 NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g NEXT_PUBLIC_SERVER_API_URL = http://dev.onasys.co.kr:8000 NEXT_PUBLIC_SEWERAGE_API_URL=http://con.mind-one.co.kr:11083 NEXT_PUBLIC_DC_URL = https://apigateway.apps.rsonesoft.com -NEXT_PUBLIC_DEV_CM_LOGIN_PAGE_URL = http://localhost:3000/auth/login -NEXT_PUBLIC_VDI_DEV_CM_LOGIN_PAGE_URL = http://localhost:3000/auth/login -NEXT_PUBLIC_VDI_DEV_CM_LOGIN_PAGE_URL = http://localhost:3000/auth/login +NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login #NEXT_PUBLIC_SEWERAGE_API_URL=http://192.168.1.128:8883 #NEXT_PUBLIC_SEWERAGE_API_URL=http://192.168.1.222:8883 #NEXT_PUBLIC_SEWERAGE_API_URL=http://192.168.1.66:8883 \ No newline at end of file diff --git a/apps/sn/.env.production b/apps/sn/.env.production index 158f22aaf..66bae242d 100644 --- a/apps/sn/.env.production +++ b/apps/sn/.env.production @@ -11,3 +11,4 @@ NEXT_PUBLIC_NGII_URL = http://10.98.25.94:18080/openapi/Gettile.do?apiKey=BDE2BE NEXT_PUBLIC_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 NEXT_PUBLIC_SEWERAGE_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 NEXT_PUBLIC_DC_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 +NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login \ No newline at end of file diff --git a/apps/sn/.env.vdi.production b/apps/sn/.env.vdi.production new file mode 100644 index 000000000..66bae242d --- /dev/null +++ b/apps/sn/.env.vdi.production @@ -0,0 +1,14 @@ +NEXT_PUBLIC_SITE_ID = SN +NEXT_PUBLIC_CLAIM_NAME = Authorization +NEXT_PUBLIC_AUTH_USER_ID = token-id +NEXT_PUBLIC_ACCESS_TOKEN = access-token +NEXT_PUBLIC_REFRESH_TOKEN = refresh-token +NEXT_PUBLIC_PORT = 3000 +NEXT_PUBLIC_PROXY_HOST = https://sn.hasuon.or.kr +NEXT_PUBLIC_GEOSERVER_URL = http://172.29.143.87:8080/geoserver +NEXT_PUBLIC_LX_GEOSERVER_URL = http://172.29.143.87:8080/geoserver_swl +NEXT_PUBLIC_NGII_URL = http://10.98.25.94:18080/openapi/Gettile.do?apiKey=BDE2BEF39DAFEC293AB6730150F222AC +NEXT_PUBLIC_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 +NEXT_PUBLIC_SEWERAGE_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 +NEXT_PUBLIC_DC_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 +NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login \ No newline at end of file diff --git a/apps/sn/src/entities/auth/lib/auth-wrapper.tsx b/apps/sn/src/entities/auth/lib/auth-wrapper.tsx index 5d93b000d..1d722ff48 100644 --- a/apps/sn/src/entities/auth/lib/auth-wrapper.tsx +++ b/apps/sn/src/entities/auth/lib/auth-wrapper.tsx @@ -10,7 +10,7 @@ import { getCookie } from "@/shared/lib"; import { LoginApi } from "../api/login-service"; -const LOGIN_PAGE_URL = process.env.NEXT_PUBLIC_DEV_CM_LOGIN_PAGE_URL || "http://localhost:3000/auth/login"; // 로그인 페이지 URL +const LOGIN_PAGE_URL = process.env.NEXT_PUBLIC_CM_LOGIN_PAGE_URL || "http://dev.onasys.co.kr:3000/auth/login"; // 로그인 페이지 URL const AuthWrapper = ({ children }: { children: React.ReactNode }) => { const router = useRouter(); From eeb16fbe51fa2f924f81d3a3af196a7f4db42563 Mon Sep 17 00:00:00 2001 From: swcho Date: Mon, 13 Oct 2025 15:07:04 +0900 Subject: [PATCH 03/11] =?UTF-8?q?chmod:=20env=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=A3=BC=EC=84=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/sn/.env.development | 1 + apps/sn/.env.local | 8 ++++---- apps/sn/.env.production | 1 + apps/sn/.env.vdi.production | 14 -------------- 4 files changed, 6 insertions(+), 18 deletions(-) delete mode 100644 apps/sn/.env.vdi.production diff --git a/apps/sn/.env.development b/apps/sn/.env.development index 89dac3a16..cd4879013 100644 --- a/apps/sn/.env.development +++ b/apps/sn/.env.development @@ -1,3 +1,4 @@ +# 공단 개발 NEXT_PUBLIC_SITE_ID = SN NEXT_PUBLIC_PORT = 3000 NEXT_PUBLIC_CLAIM_NAME = Authorization diff --git a/apps/sn/.env.local b/apps/sn/.env.local index ef48748ca..90543d02f 100644 --- a/apps/sn/.env.local +++ b/apps/sn/.env.local @@ -4,15 +4,15 @@ NEXT_PUBLIC_AUTH_USER_ID = token-id NEXT_PUBLIC_ACCESS_TOKEN = access-token NEXT_PUBLIC_REFRESH_TOKEN = refresh-token NEXT_PUBLIC_PORT = 3002 -# NEXT_PUBLIC_PROXY_HOST = http://localhost:3002 -NEXT_PUBLIC_PROXY_HOST = http://sn.onasys.co.kr:3002 +NEXT_PUBLIC_PROXY_HOST = http://localhost:3002 +# NEXT_PUBLIC_PROXY_HOST = http://sn.onasys.co.kr:3002 NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver NEXT_PUBLIC_LX_GEOSERVER_URL = http://con.mind-one.co.kr:11306/geoserver NEXT_PUBLIC_NGII_URL = https://map.ngii.go.kr/openapi/Gettile.do?apiKey=04trYP9_xwLAfALjwZ-B8g NEXT_PUBLIC_SERVER_API_URL = http://dev.onasys.co.kr:8000 -NEXT_PUBLIC_SEWERAGE_API_URL=http://con.mind-one.co.kr:11083 +# NEXT_PUBLIC_SEWERAGE_API_URL=http://con.mind-one.co.kr:11083 NEXT_PUBLIC_DC_URL = https://apigateway.apps.rsonesoft.com NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login #NEXT_PUBLIC_SEWERAGE_API_URL=http://192.168.1.128:8883 #NEXT_PUBLIC_SEWERAGE_API_URL=http://192.168.1.222:8883 -#NEXT_PUBLIC_SEWERAGE_API_URL=http://192.168.1.66:8883 \ No newline at end of file +NEXT_PUBLIC_SEWERAGE_API_URL=http://192.168.1.66:8883 \ No newline at end of file diff --git a/apps/sn/.env.production b/apps/sn/.env.production index 08375c55f..c46ea814c 100644 --- a/apps/sn/.env.production +++ b/apps/sn/.env.production @@ -1,3 +1,4 @@ +# 공단 운영 NEXT_PUBLIC_SITE_ID = SN NEXT_PUBLIC_PORT = 3000 NEXT_PUBLIC_CLAIM_NAME = Authorization diff --git a/apps/sn/.env.vdi.production b/apps/sn/.env.vdi.production deleted file mode 100644 index 66bae242d..000000000 --- a/apps/sn/.env.vdi.production +++ /dev/null @@ -1,14 +0,0 @@ -NEXT_PUBLIC_SITE_ID = SN -NEXT_PUBLIC_CLAIM_NAME = Authorization -NEXT_PUBLIC_AUTH_USER_ID = token-id -NEXT_PUBLIC_ACCESS_TOKEN = access-token -NEXT_PUBLIC_REFRESH_TOKEN = refresh-token -NEXT_PUBLIC_PORT = 3000 -NEXT_PUBLIC_PROXY_HOST = https://sn.hasuon.or.kr -NEXT_PUBLIC_GEOSERVER_URL = http://172.29.143.87:8080/geoserver -NEXT_PUBLIC_LX_GEOSERVER_URL = http://172.29.143.87:8080/geoserver_swl -NEXT_PUBLIC_NGII_URL = http://10.98.25.94:18080/openapi/Gettile.do?apiKey=BDE2BEF39DAFEC293AB6730150F222AC -NEXT_PUBLIC_SERVER_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 -NEXT_PUBLIC_SEWERAGE_API_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 -NEXT_PUBLIC_DC_URL = http://apigateway.iipbs-was.svc.cluster.local:8000 -NEXT_PUBLIC_CM_LOGIN_PAGE_URL = http://dev.onasys.co.kr:3000/auth/login \ No newline at end of file From 43246c33be44b93b810108d6e5088febc982b022 Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 13 Oct 2025 15:30:22 +0900 Subject: [PATCH 04/11] =?UTF-8?q?package.json=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/package.json | 8 ++ pnpm-lock.yaml | 183 ++++++++++++++++++++++++++----------------- 2 files changed, 121 insertions(+), 70 deletions(-) diff --git a/apps/fo/package.json b/apps/fo/package.json index 53423decf..9d51c2ce6 100644 --- a/apps/fo/package.json +++ b/apps/fo/package.json @@ -21,6 +21,14 @@ "zustand": "^5.0.3", "ol": "^7.3.0", "ol-ext": "^4.0.11", + "@fontsource-variable/noto-sans-kr": "^5.2.5", + "@frontend-opensource/use-react-hooks": "^1.1.4", + "@tanstack/react-query": "^5.67.1", + "@tanstack/react-query-devtools": "^5.75.5", + "@tanstack/react-table": "^8.21.2", + "react-dnd": "^16.0.1", + "@minoru/react-dnd-treeview": "3.5.1-alpha.1", + "zod": "^3.24.2", "proj4": "^2.9.0" }, "devDependencies": { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7b5b2f5df..aa50a88a5 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -247,12 +247,6 @@ importers: dayjs: specifier: ^1.11.13 version: 1.11.13 - dotenv: - specifier: ^17.2.1 - version: 17.2.1 - find-up: - specifier: ^7.0.0 - version: 7.0.0 js-cookie: specifier: ^3.0.5 version: 3.0.5 @@ -280,6 +274,9 @@ importers: tus-js-client: specifier: ^4.3.1 version: 4.3.1 + yargs: + specifier: ^18.0.0 + version: 18.0.0 zod: specifier: ^3.24.2 version: 3.25.76 @@ -299,9 +296,6 @@ importers: '@types/webpack': specifier: ^5.28.5 version: 5.28.5 - '@types/yargs': - specifier: ^17.0.33 - version: 17.0.33 eslint: specifier: ^9 version: 9.33.0 @@ -547,15 +541,36 @@ importers: apps/fo: dependencies: + '@common/assets': + specifier: workspace:* + version: link:../../packages/common/assets '@common/business_components': specifier: workspace:* version: link:../../packages/common/business_components '@common/components': specifier: workspace:* version: link:../../packages/common/components + '@fontsource-variable/noto-sans-kr': + specifier: ^5.2.5 + version: 5.2.6 + '@frontend-opensource/use-react-hooks': + specifier: ^1.1.4 + version: 1.1.4 + '@minoru/react-dnd-treeview': + specifier: 3.5.1-alpha.1 + version: 3.5.1-alpha.1(dnd-core@16.0.1)(react-dnd@16.0.1)(react-dom@18.3.1)(react@18.3.1) '@tailwindcss/vite': specifier: ^4.0.10 version: 4.1.11(vite@6.3.5) + '@tanstack/react-query': + specifier: ^5.67.1 + version: 5.84.2(react@18.3.1) + '@tanstack/react-query-devtools': + specifier: ^5.75.5 + version: 5.84.2(@tanstack/react-query@5.84.2)(react@18.3.1) + '@tanstack/react-table': + specifier: ^8.21.2 + version: 8.21.3(react-dom@18.3.1)(react@18.3.1) html2canvas: specifier: ^1.4.1 version: 1.4.1 @@ -574,12 +589,18 @@ importers: proj4: specifier: ^2.9.0 version: 2.19.10 + react-dnd: + specifier: ^16.0.1 + version: 16.0.1(@types/node@22.17.1)(@types/react@18.3.23)(react@18.3.1) select: specifier: ^1.1.2 version: 1.1.2 webpack: specifier: ^5.98.0 version: 5.101.0 + zod: + specifier: ^3.24.2 + version: 3.25.76 zustand: specifier: ^5.0.3 version: 5.0.7(@types/react@18.3.23)(react@18.3.1) @@ -659,6 +680,15 @@ importers: next: specifier: 15.1.7 version: 15.1.7(react-dom@18.3.1)(react@18.3.1) + ol: + specifier: ^7.3.0 + version: 7.5.2 + ol-ext: + specifier: ^4.0.11 + version: 4.0.33(ol@7.5.2) + proj4: + specifier: ^2.9.0 + version: 2.19.10 react-chartjs-2: specifier: ^5.3.0 version: 5.3.0(chart.js@4.5.0)(react@18.3.1) @@ -677,6 +707,12 @@ importers: tus-js-client: specifier: ^4.3.1 version: 4.3.1 + xlsx: + specifier: ^0.18.5 + version: 0.18.5 + xlsx-populate: + specifier: ^1.21.0 + version: 1.21.0 zod: specifier: ^3.24.2 version: 3.25.76 @@ -768,6 +804,9 @@ importers: ol-ext: specifier: ^4.0.11 version: 4.0.33(ol@7.5.2) + react-draggable: + specifier: ^4.5.0 + version: 4.5.0(react-dom@18.3.1)(react@18.3.1) react-hook-form: specifier: ^7.54.2 version: 7.62.0(react@18.3.1) @@ -5001,16 +5040,6 @@ packages: - webpack-cli dev: true - /@types/yargs-parser@21.0.3: - resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - dev: true - - /@types/yargs@17.0.33: - resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - dependencies: - '@types/yargs-parser': 21.0.3 - dev: true - /@typescript-eslint/eslint-plugin@8.39.0(@typescript-eslint/parser@8.39.0)(eslint@9.33.0)(typescript@5.6.3): resolution: {integrity: sha512-bhEz6OZeUR+O/6yx9Jk6ohX6H9JSFTaiY0v9/PuKT3oGK0rn0jNplLmyFUGV+a9gfYnVNwGDwS/UkLIuXNb2Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -6077,6 +6106,15 @@ packages: wrap-ansi: 7.0.0 dev: true + /cliui@9.0.1: + resolution: {integrity: sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w==} + engines: {node: '>=20'} + dependencies: + string-width: 7.2.0 + strip-ansi: 7.1.0 + wrap-ansi: 9.0.2 + dev: false + /clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -6560,11 +6598,6 @@ packages: csstype: 3.1.3 dev: false - /dotenv@17.2.1: - resolution: {integrity: sha512-kQhDYKZecqnM0fCnzI5eIv5L4cAe/iRI+HqMbO/hbRdTAeXDG+M9FjipUxNfbARuEg4iHIbhnhs78BCHNbSxEQ==} - engines: {node: '>=12'} - dev: false - /dunder-proto@1.0.1: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} @@ -6618,6 +6651,10 @@ packages: resolution: {integrity: sha512-SjWyZBHJPbqxHOzckOfo8lHisEaJWmwd23XppYFYVh10bU66/Pn5tkVkbkCMZVdbUE5eTCI2nD8OyIP4Z+uwkA==} dev: false + /emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} + dev: false + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -7347,15 +7384,6 @@ packages: path-exists: 4.0.0 dev: true - /find-up@7.0.0: - resolution: {integrity: sha512-YyZM99iHrqLKjmt4LJDj58KI+fYyufRLBSYcqycxf//KpBk9FoewoGX0450m9nB44qrZnovzC2oeP5hUibxc/g==} - engines: {node: '>=18'} - dependencies: - locate-path: 7.2.0 - path-exists: 5.0.0 - unicorn-magic: 0.1.0 - dev: false - /flat-cache@4.0.1: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} @@ -7490,6 +7518,11 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + /get-east-asian-width@1.4.0: + resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} + engines: {node: '>=18'} + dev: false + /get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -8310,13 +8343,6 @@ packages: p-locate: 5.0.0 dev: true - /locate-path@7.2.0: - resolution: {integrity: sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-locate: 6.0.0 - dev: false - /lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} dev: true @@ -8842,13 +8868,6 @@ packages: yocto-queue: 0.1.0 dev: true - /p-limit@4.0.0: - resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - yocto-queue: 1.2.1 - dev: false - /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -8863,13 +8882,6 @@ packages: p-limit: 3.1.0 dev: true - /p-locate@6.0.0: - resolution: {integrity: sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dependencies: - p-limit: 4.0.0 - dev: false - /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -8911,11 +8923,6 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} - /path-exists@5.0.0: - resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - dev: false - /path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -9416,6 +9423,18 @@ packages: react: 18.3.1 scheduler: 0.23.2 + /react-draggable@4.5.0(react-dom@18.3.1)(react@18.3.1): + resolution: {integrity: sha512-VC+HBLEZ0XJxnOxVAZsdRi8rD04Iz3SiiKOoYzamjylUcju/hP9np/aZdLHf/7WOD268WMoNJMvYfB5yAK45cw==} + peerDependencies: + react: ^18.3.1 + react-dom: ^18.3.1 + dependencies: + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.3.1 + react-dom: 18.3.1(react@18.3.1) + dev: false + /react-dropzone@14.3.8(react@18.3.1): resolution: {integrity: sha512-sBgODnq+lcA4P296DY4wacOZz3JFpD99fp+hb//iBO2HHnyeZU3FwWyXJ6salNpqQdsZrgMrotuko/BdJMV8Ug==} engines: {node: '>= 10.13'} @@ -10176,6 +10195,15 @@ packages: emoji-regex: 9.2.2 strip-ansi: 7.1.0 + /string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + dependencies: + emoji-regex: 10.5.0 + get-east-asian-width: 1.4.0 + strip-ansi: 7.1.0 + dev: false + /string.prototype.includes@2.0.1: resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} engines: {node: '>= 0.4'} @@ -10760,11 +10788,6 @@ packages: /undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} - /unicorn-magic@0.1.0: - resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} - engines: {node: '>=18'} - dev: false - /unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -11198,6 +11221,15 @@ packages: string-width: 5.1.2 strip-ansi: 7.1.0 + /wrap-ansi@9.0.2: + resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} + engines: {node: '>=18'} + dependencies: + ansi-styles: 6.2.1 + string-width: 7.2.0 + strip-ansi: 7.1.0 + dev: false + /ws@8.18.3: resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} @@ -11245,7 +11277,6 @@ packages: /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - dev: true /yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} @@ -11274,6 +11305,11 @@ packages: engines: {node: '>=12'} dev: true + /yargs-parser@22.0.0: + resolution: {integrity: sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + dev: false + /yargs@15.4.1: resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} engines: {node: '>=8'} @@ -11304,16 +11340,23 @@ packages: yargs-parser: 21.1.1 dev: true + /yargs@18.0.0: + resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} + engines: {node: ^20.19.0 || ^22.12.0 || >=23} + dependencies: + cliui: 9.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + string-width: 7.2.0 + y18n: 5.0.8 + yargs-parser: 22.0.0 + dev: false + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} dev: true - /yocto-queue@1.2.1: - resolution: {integrity: sha512-AyeEbWOu/TAXdxlV9wmGcR0+yh2j3vYPGOECcIj2S7MkrLyC7ne+oye2BKTItt0ii2PHk4cDy+95+LshzbXnGg==} - engines: {node: '>=12.20'} - dev: false - /zod-validation-error@3.5.3(zod@3.25.76): resolution: {integrity: sha512-OT5Y8lbUadqVZCsnyFaTQ4/O2mys4tj7PqhdbBCp7McPwvIEKfPtdA6QfPeFQK2/Rz5LgwmAXRJTugBNBi0btw==} engines: {node: '>=18.0.0'} From 604c7b9a6001e41896d6fe8a08cd99ddf4e3d48c Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 13 Oct 2025 15:38:04 +0900 Subject: [PATCH 05/11] package.json 2 --- apps/fo/package.json | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/fo/package.json b/apps/fo/package.json index 9d51c2ce6..4827dcdfe 100644 --- a/apps/fo/package.json +++ b/apps/fo/package.json @@ -27,8 +27,10 @@ "@tanstack/react-query-devtools": "^5.75.5", "@tanstack/react-table": "^8.21.2", "react-dnd": "^16.0.1", - "@minoru/react-dnd-treeview": "3.5.1-alpha.1", + "@minoru/react-dnd-treeview": "3.5.1-alpha.1", + "react-hook-form": "^7.54.2", "zod": "^3.24.2", + "axios": "^1.8.1", "proj4": "^2.9.0" }, "devDependencies": { From cceedeb8805a34323e5ae349e80998cae1964934 Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 13 Oct 2025 15:40:06 +0900 Subject: [PATCH 06/11] package.json 3 --- apps/fo/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/fo/package.json b/apps/fo/package.json index 4827dcdfe..01b09e75c 100644 --- a/apps/fo/package.json +++ b/apps/fo/package.json @@ -23,6 +23,7 @@ "ol-ext": "^4.0.11", "@fontsource-variable/noto-sans-kr": "^5.2.5", "@frontend-opensource/use-react-hooks": "^1.1.4", + "@hookform/resolvers": "^4.1.3", "@tanstack/react-query": "^5.67.1", "@tanstack/react-query-devtools": "^5.75.5", "@tanstack/react-table": "^8.21.2", From 8ba320eb0ce8dfb27b4c702b500ea998a37807c7 Mon Sep 17 00:00:00 2001 From: swcho Date: Mon, 13 Oct 2025 16:44:19 +0900 Subject: [PATCH 07/11] =?UTF-8?q?add:=20pacakage.json=20=EB=9D=BC=EC=9D=B4?= =?UTF-8?q?=EB=B8=8C=EB=9F=AC=EB=A6=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/wr/package.json | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/apps/wr/package.json b/apps/wr/package.json index 39f7c2274..0c2cbb93e 100644 --- a/apps/wr/package.json +++ b/apps/wr/package.json @@ -15,7 +15,13 @@ "@common/business_components": "workspace:*", "@common/components": "workspace:*", "@hookform/resolvers": "^4.1.3", + "@fontsource-variable/noto-sans-kr": "^5.2.5", + "@frontend-opensource/use-react-hooks": "^1.1.4", + "@minoru/react-dnd-treeview": "3.5.1-alpha.1", + "@tanstack/react-query": "^5.67.1", + "@tanstack/react-query-devtools": "^5.75.5", "@tanstack/react-table": "^8.21.2", + "axios": "^1.8.1", "class-variance-authority": "^0.7.1", "clsx": "^2.1.1", "i18next": "^25.3.2", @@ -25,6 +31,8 @@ "next": "15.1.7", "ol": "^7.3.0", "ol-ext": "^4.0.11", + "proj4": "^2.9.0", + "react-dnd": "^16.0.1", "react-draggable": "^4.5.0", "react-hook-form": "^7.54.2", "react-hot-toast": "^2.5.2", @@ -32,7 +40,10 @@ "tailwind-merge": "^3.0.1", "tailwindcss-animate": "^1.0.7", "tus-js-client": "^4.3.1", - "zod": "^3.24.2" + "xlsx": "^0.18.5", + "xlsx-populate": "^1.21.0", + "zod": "^3.24.2", + "zustand": "^5.0.3" }, "devDependencies": { "@eslint/eslintrc": "^3", From 01fb7395870fa0066047ca3acf817819bb44da4b Mon Sep 17 00:00:00 2001 From: ljpark Date: Mon, 13 Oct 2025 17:07:38 +0900 Subject: [PATCH 08/11] =?UTF-8?q?.env.mindone=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/.env.mindone | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fo/.env.mindone b/apps/fo/.env.mindone index 74d765a48..677e9b875 100644 --- a/apps/fo/.env.mindone +++ b/apps/fo/.env.mindone @@ -5,7 +5,7 @@ NEXT_PUBLIC_AUTH_USER_ID = token-id NEXT_PUBLIC_ACCESS_TOKEN = access-token NEXT_PUBLIC_REFRESH_TOKEN = refresh-token NEXT_PUBLIC_PROXY_HOST = http://con.mind-one.co.kr:11300 -NEXT_PUBLIC_SERVER_API_URL = http://con.mind-one.co.kr:11082/api/v1 +NEXT_PUBLIC_SERVER_API_URL = http://con.mind-one.co.kr:11082 NEXT_PUBLIC_WR_SERVER_API_URL = http://con.mind-one.co.kr:11080/api/v1 NEXT_PUBLIC_CS_SERVER_API_URL = http://dev.onasys.co.kr:8000 NEXT_PUBLIC_GEOSERVER_URL = https://hasudo.geo.rsonesoft.com/geoserver From 85eae85487b82a71cfb4007d05c9fb1ffc9e95b0 Mon Sep 17 00:00:00 2001 From: swcho Date: Mon, 13 Oct 2025 17:22:10 +0900 Subject: [PATCH 09/11] =?UTF-8?q?add:=20start:fo=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fo/package.json b/apps/fo/package.json index 53423decf..7d5bb835e 100644 --- a/apps/fo/package.json +++ b/apps/fo/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build", - "start": "next start", + "start:fo": "next start -p 3000", "lint": "next lint" }, "dependencies": { From ad11592ae99092fae36a69717673ae5a25e7d853 Mon Sep 17 00:00:00 2001 From: swcho Date: Mon, 13 Oct 2025 17:32:44 +0900 Subject: [PATCH 10/11] =?UTF-8?q?fix:=20start:fo=20=EC=8A=A4=ED=81=AC?= =?UTF-8?q?=EB=A6=BD=ED=8A=B8=20=ED=8F=AC=ED=8A=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fo/package.json b/apps/fo/package.json index 427288d97..d0b054252 100644 --- a/apps/fo/package.json +++ b/apps/fo/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build", - "start:fo": "next start -p 3000", + "start:fo": "next start", "lint": "next lint" }, "dependencies": { From 94c3d9b3942229007b3cdcccbc176630a1ceb3d2 Mon Sep 17 00:00:00 2001 From: swcho Date: Mon, 13 Oct 2025 17:41:29 +0900 Subject: [PATCH 11/11] =?UTF-8?q?fix:=20start:fo=20->=20start=EB=A1=9C=20?= =?UTF-8?q?=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20=EB=A1=A4=EB=B0=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/fo/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/fo/package.json b/apps/fo/package.json index d0b054252..01b09e75c 100644 --- a/apps/fo/package.json +++ b/apps/fo/package.json @@ -5,7 +5,7 @@ "scripts": { "dev": "next dev", "build": "next build", - "start:fo": "next start", + "start": "next start", "lint": "next lint" }, "dependencies": {