From cbded3e605a0de4def28aca7d7ec5150522d7d40 Mon Sep 17 00:00:00 2001 From: rsone001 Date: Wed, 7 Jan 2026 11:07:56 +0900 Subject: [PATCH] =?UTF-8?q?st:=20refactor:=20=EA=B7=B8=EB=A6=AC=EB=93=9C?= =?UTF-8?q?=20prop=20isExcelExport(=EC=97=91=EC=85=80=20=EB=82=B4=EB=B3=B4?= =?UTF-8?q?=EB=82=B4=EA=B8=B0=20=EB=B2=84=ED=8A=BC=20=EC=9C=A0=EB=AC=B4)?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20mergeRule,=20sortdisable=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80=20=EC=BB=AC=EB=9F=BC=20=EC=86=8D=EC=84=B1=EC=97=90=20?= =?UTF-8?q?mergeRule:=20true=EC=8B=9C=20=ED=95=B4=EB=8B=B9=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=BC=20=EA=B0=99=EC=9D=80=20=EA=B0=92=EC=9D=B8=20cell=20me?= =?UTF-8?q?rge=20sortdisable:=20true=EC=8B=9C=20=ED=95=B4=EB=8B=B9=20?= =?UTF-8?q?=EC=BB=AC=EB=9F=BC=EC=9D=98=20=EC=A0=95=EB=A0=AC=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=B9=84=ED=99=9C=EC=84=B1=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/st/src/components/module/DataGrid.tsx | 6 +-- apps/st/src/components/module/TabDataGrid.tsx | 4 +- .../statistics/system/NotEnteredStatus.tsx | 41 +++++++++++++++++++ .../system/StatisticsInputManagement.tsx | 39 ++++++++++++++++++ .../system/StatisticsPopulationManagement.tsx | 17 ++++++++ .../system/StatisticsReviewHistory.tsx | 39 ++++++++++++++++++ apps/st/src/components/type/DataGrid.type.ts | 2 + 7 files changed, 143 insertions(+), 5 deletions(-) create mode 100644 apps/st/src/components/statistics/system/NotEnteredStatus.tsx create mode 100644 apps/st/src/components/statistics/system/StatisticsInputManagement.tsx create mode 100644 apps/st/src/components/statistics/system/StatisticsPopulationManagement.tsx create mode 100644 apps/st/src/components/statistics/system/StatisticsReviewHistory.tsx diff --git a/apps/st/src/components/module/DataGrid.tsx b/apps/st/src/components/module/DataGrid.tsx index 5ed511d1e..44f2ef56c 100644 --- a/apps/st/src/components/module/DataGrid.tsx +++ b/apps/st/src/components/module/DataGrid.tsx @@ -36,7 +36,7 @@ if (typeof window !== "undefined") { RealGrid.setLicenseKey(process.env.NEXT_PUBLIC_ST_REALGRID_KEY || ''); -const DataGrid = ({ columnInfo, rowStartNum, isExcelImport = true, fixedColumns, showHeaderCheckbox = false, rowData, setRowData }: DataGridProps) => { +const DataGrid = ({ columnInfo, rowStartNum, isExcelImport = true, isExcelExport = true, fixedColumns, showHeaderCheckbox = false, rowData, setRowData }: DataGridProps) => { const { columns, columnLayout } = columnInfo; const gridRef = useRef(null); const fileInputRef = useRef(null); @@ -312,10 +312,10 @@ const DataGrid = ({ columnInfo, rowStartNum, isExcelImport = true, fixedColumns, 가져오기 } - + }
{ +const TabDataGrid = ({ columnInfo, isExcelImport = true, isExcelExport = true, rows = [], showHeaderCheckbox = false, rowDataMap, setRowDataMap }: TabDataGridProps) => { // 각 탭별로 그리드 ref와 데이터를 관리 const gridRefs = useRef>(new Map()); const fileInputRefs = useRef>(new Map()); @@ -450,7 +450,7 @@ const TabDataGrid = ({ columnInfo, isExcelImport = true, rows = [], showHeaderCh expression: column.footer.expression, numberFormat: column.footer.numberFormat, } : undefined} - mergeRule={column.mergeCells ? { criteria: 'row div 2' } : undefined} + mergeRule={column.mergeCells ? { criteria: 'value' } : undefined} sortable={!column.sortdisable} /> ))} diff --git a/apps/st/src/components/statistics/system/NotEnteredStatus.tsx b/apps/st/src/components/statistics/system/NotEnteredStatus.tsx new file mode 100644 index 000000000..22ef28d0b --- /dev/null +++ b/apps/st/src/components/statistics/system/NotEnteredStatus.tsx @@ -0,0 +1,41 @@ +import { useState } from "react"; + +import SearchForm from "@/components/module/SearchForm"; +import DataGrid from "@/components/module/DataGrid"; +import type { ColumnConfig } from "@/components/type/DataGrid.type"; + +const NotEnteredStatus = () => { + const columns: ColumnConfig[] = [ + { name: 'sido', fieldName: '시도', header: { text: '시도' }, mergeCells: true, editable: false, sortdisable: true }, + { name: 'sgg', fieldName: '시군구', header: { text: '시군구' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '1', fieldName: '1', header: { text: '시군구' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '2-1', fieldName: '2-1', header: { text: '2-1' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '2-2', fieldName: '2-2', header: { text: '2-2' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '2-3', fieldName: '2-3', header: { text: '2-3' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '2-4', fieldName: '2-4', header: { text: '2-4' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '3-1', fieldName: '3-1', header: { text: '3-1' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '3-2', fieldName: '3-2', header: { text: '3-2' }, mergeCells: true, editable: false, sortdisable: true }, + ]; + + const columnLayout = [ + 'sido', + 'sgg', + { + name: 'groupA', + hideChildHeaders: false, + header: { text: '미입력 하수도 통계 세부항목(번호)' }, + items: ['1', '2-1', '2-2', '2-3', '2-4', '3-1', '3-2'], + }, + ]; + + const [rowData, setRowData] = useState[]>([]); + + return ( + <> + + + + ); +}; + +export default NotEnteredStatus; \ No newline at end of file diff --git a/apps/st/src/components/statistics/system/StatisticsInputManagement.tsx b/apps/st/src/components/statistics/system/StatisticsInputManagement.tsx new file mode 100644 index 000000000..fa86159ad --- /dev/null +++ b/apps/st/src/components/statistics/system/StatisticsInputManagement.tsx @@ -0,0 +1,39 @@ +import { useState } from "react"; + +import SearchForm from "@/components/module/SearchForm"; +import DataGrid from "@/components/module/DataGrid"; +import type { ColumnConfig } from "@/components/type/DataGrid.type"; + +const StatisticsInputManagement = () => { + const columns: ColumnConfig[] = [ + { name: 'sido', fieldName: '시도', header: { text: '시도' }, mergeCells: true, editable: false, sortdisable: true }, + { name: 'sgg', fieldName: '시군구', header: { text: '시군구' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '구분', fieldName: '구분', header: { text: '구분' }, editable: false, sortdisable: true }, + { name: '광역자치단체', fieldName: '광역자치단체', header: { text: '광역자치단체' }, editable: false, sortdisable: true }, + { name: '공단', fieldName: '공단', header: { text: '공단' }, editable: false, sortdisable: true }, + { name: '처리내역', fieldName: '처리내역', header: { text: '처리내역' }, editable: false, sortdisable: true }, + ]; + + const columnLayout = [ + 'sido', + 'sgg', + '구분', + { + name: 'groupA', + hideChildHeaders: false, + header: { text: '검토내역' }, + items: ['광역자치단체', '공단', '처리내역'], + }, + ]; + + const [rowData, setRowData] = useState[]>([]); + + return ( + <> + + + + ); +}; + +export default StatisticsInputManagement; \ No newline at end of file diff --git a/apps/st/src/components/statistics/system/StatisticsPopulationManagement.tsx b/apps/st/src/components/statistics/system/StatisticsPopulationManagement.tsx new file mode 100644 index 000000000..688c15d7e --- /dev/null +++ b/apps/st/src/components/statistics/system/StatisticsPopulationManagement.tsx @@ -0,0 +1,17 @@ +import { useState } from "react"; + +import SearchForm from "@/components/module/SearchForm"; +import DataGrid from "@/components/module/DataGrid"; +import type { ColumnConfig } from "@/components/type/DataGrid.type"; + +const StatisticsPopulationManagement = () => { + const [rowData, setRowData] = useState[]>([]); + + return ( + <> + + + ); +}; + +export default StatisticsPopulationManagement; \ No newline at end of file diff --git a/apps/st/src/components/statistics/system/StatisticsReviewHistory.tsx b/apps/st/src/components/statistics/system/StatisticsReviewHistory.tsx new file mode 100644 index 000000000..f24dc0718 --- /dev/null +++ b/apps/st/src/components/statistics/system/StatisticsReviewHistory.tsx @@ -0,0 +1,39 @@ +import { useState } from "react"; + +import SearchForm from "@/components/module/SearchForm"; +import DataGrid from "@/components/module/DataGrid"; +import type { ColumnConfig } from "@/components/type/DataGrid.type"; + +const StatisticsReviewHistory = () => { + const columns: ColumnConfig[] = [ + { name: 'sido', fieldName: '시도', header: { text: '시도' }, mergeCells: true, editable: false, sortdisable: true }, + { name: 'sgg', fieldName: '시군구', header: { text: '시군구' }, mergeCells: true, editable: false, sortdisable: true }, + { name: '구분', fieldName: '구분', header: { text: '구분' }, editable: false, sortdisable: true }, + { name: '광역자치단체', fieldName: '광역자치단체', header: { text: '광역자치단체' }, editable: false, sortdisable: true }, + { name: '공단', fieldName: '공단', header: { text: '공단' }, editable: false, sortdisable: true }, + { name: '처리내역', fieldName: '처리내역', header: { text: '처리내역' }, editable: false, sortdisable: true }, + ]; + + const columnLayout = [ + 'sido', + 'sgg', + '구분', + { + name: 'groupA', + hideChildHeaders: false, + header: { text: '검토내역' }, + items: ['광역자치단체', '공단', '처리내역'], + }, + ]; + + const [rowData, setRowData] = useState[]>([]); + + return ( + <> + + + + ); +}; + +export default StatisticsReviewHistory; \ No newline at end of file diff --git a/apps/st/src/components/type/DataGrid.type.ts b/apps/st/src/components/type/DataGrid.type.ts index 8b9a3fdb6..3c405546f 100644 --- a/apps/st/src/components/type/DataGrid.type.ts +++ b/apps/st/src/components/type/DataGrid.type.ts @@ -67,6 +67,7 @@ export type DataGridProps = { columnInfo: ColumnInfo; rowStartNum?: number; // 헤더 행 개수 (1부터 시작, 예: 2면 1행과 2행까지 헤더로 간주) isExcelImport?: boolean; // 엑셀 가져오기 유무 + isExcelExport?: boolean; onRowsChange?: (rows: Record[]) => void; fixedColumns?: number; // 고정할 컬럼 개수 (좌측부터) showHeaderCheckbox?: boolean; // 헤더 체크박스 표시 여부 (기본값: true) @@ -78,6 +79,7 @@ export type TabDataGridProps = { columnInfo: ColumnInfoList[]; rows?: Record[]; isExcelImport?: boolean; // 엑셀 가져오기 유무 + isExcelExport?: boolean; onRowsChange?: (rows: Record[]) => void; showHeaderCheckbox?: boolean; // 헤더 체크박스 표시 여부 (기본값: true) rowDataMap: Map[]>;