st: feat:

- compact grid(1/2 넓이) & split grid(1/2 넓이 2개) 컴포넌트 추가
- 시설별 설치 현황 관리 버튼 추가
- 통계입력현황(검토) 컴포넌트 & 컬럼 파일 오타 수정
This commit is contained in:
2026-01-13 11:46:28 +09:00
parent 2cfcddc365
commit 71e412d030
7 changed files with 98 additions and 19 deletions
+58 -2
View File
@@ -3,7 +3,7 @@ import { ValueType } from "realgrid"
import RealGrid, { GridFitStyle } from "realgrid"
import { RealGridReact, RGDataColumn } from "realgrid-react"
import type { TabDataGridProps } from "../type/DataGrid.type"
import type { TabDataGridProps, ColumnInfo } from "../type/DataGrid.type"
import JSZip from "jszip"
import * as XLSX from "xlsx"
import { useAlertStore } from "@/shared/lib";
@@ -11,6 +11,7 @@ import { useTabStore } from "@/store/tab-store"
import { Tabs, TabsList, TabsTrigger, TabsContent } from "@common/components";
import { Button } from "@common/components";
import SplitDataGrid from "./SplitDataGrid";
// RealGrid 타입 확장
declare module "realgrid" {
@@ -281,6 +282,61 @@ const TabDataGrid = ({ columnInfo, isExcelImport = true, isExcelExport = true, r
{columnInfo.map((info) => {
const tabKey = info.tabKey;
// isSplitGrid가 true이고 left, right가 있으면 SplitDataGrid 사용
if (info.isSplitGrid && info.left && info.right) {
const leftRowData = rowDataMap.get(info.left.tabKey || `${tabKey}_left`) || [];
const rightRowData = rowDataMap.get(info.right.tabKey || `${tabKey}_right`) || [];
// ColumnInfoList를 ColumnInfo로 변환
const leftColumnInfo: ColumnInfo = {
columns: info.left.columns || [],
columnLayout: info.left.columnLayout || []
};
const rightColumnInfo: ColumnInfo = {
columns: info.right.columns || [],
columnLayout: info.right.columnLayout || []
};
return (
<TabsContent key={tabKey} value={tabKey}>
<SplitDataGrid
leftColumnInfo={leftColumnInfo}
rightColumnInfo={rightColumnInfo}
leftFixedColumns={info.left.fixedColumns}
rightFixedColumns={info.right.fixedColumns}
showHeaderCheckbox={showHeaderCheckbox}
leftRowData={leftRowData}
rightRowData={rightRowData}
setLeftRowData={(updater) => {
setRowDataMap(prev => {
const newMap = new Map(prev);
const leftTabKey = info.left?.tabKey || `${tabKey}_left`;
const currentData = newMap.get(leftTabKey) || [];
const newData = typeof updater === 'function' ? updater(currentData) : updater;
newMap.set(leftTabKey, newData);
return newMap;
});
}}
setRightRowData={(updater) => {
setRowDataMap(prev => {
const newMap = new Map(prev);
const rightTabKey = info.right?.tabKey || `${tabKey}_right`;
const currentData = newMap.get(rightTabKey) || [];
const newData = typeof updater === 'function' ? updater(currentData) : updater;
newMap.set(rightTabKey, newData);
return newMap;
});
}}
/>
</TabsContent>
);
}
// 일반 그리드 사용
if (!info.columns || !info.columnLayout) {
return null;
}
const { columns, columnLayout } = info;
const currentRowData = rowDataMap.get(tabKey) || [];
@@ -334,7 +390,7 @@ const TabDataGrid = ({ columnInfo, isExcelImport = true, isExcelExport = true, r
if (!gridView) return;
const currentInfo = columnInfo.find(info => info.tabKey === tabKey);
if (!currentInfo) return;
if (!currentInfo || !currentInfo.columns) return;
gridView.setDisplayOptions({
fitStyle: GridFitStyle.EVEN