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[]>;