[st] - fix: 2-3 컬럼 로직 수정, 입력단 excel 업로드 시 행정동코드 매핑 검사
This commit is contained in:
@@ -24,8 +24,11 @@ import type {
|
||||
|
||||
import { getComputedValueCallback } from "@/components/util/grid/computedFieldCallbacks";
|
||||
import {
|
||||
buildExcelExportFileBaseName,
|
||||
getExcelImportColumnFieldNames,
|
||||
getNonEditableColumnFieldNames,
|
||||
hasAdmdstCdColumn,
|
||||
isExcelImportAdmdstCdInvalid,
|
||||
mergeExcelImportWithExistingRows,
|
||||
prepareGridColumnsForExcelExport,
|
||||
restoreGridColumnsAfterExcelExport,
|
||||
@@ -728,8 +731,10 @@ const DataGrid = ({
|
||||
columnInfo,
|
||||
rowStartNum,
|
||||
excelExportFileSuffix,
|
||||
excelExportSearchContext,
|
||||
isExcelImport = true,
|
||||
excelImportSkipNonEditable = true,
|
||||
excelImportSewerBzmnCd,
|
||||
isExcelExport = true,
|
||||
fixedColumns,
|
||||
showHeaderCheckbox = false,
|
||||
@@ -951,9 +956,11 @@ useEffect(() => {
|
||||
? prepareGridColumnsForExcelExport(gridView, columns)
|
||||
: undefined;
|
||||
|
||||
const exportBaseName = excelExportFileSuffix
|
||||
? `${menuName}_${excelExportFileSuffix}`
|
||||
: menuName;
|
||||
const exportBaseName = buildExcelExportFileBaseName(
|
||||
menuName,
|
||||
excelExportFileSuffix,
|
||||
excelExportSearchContext,
|
||||
);
|
||||
|
||||
gridView.exportGrid({
|
||||
type: "excel",
|
||||
@@ -1075,11 +1082,18 @@ useEffect(() => {
|
||||
columnLayout,
|
||||
{ skipNonEditable: excelImportSkipNonEditable },
|
||||
);
|
||||
const excelColumnFieldNamesAll = getExcelImportColumnFieldNames(
|
||||
columns,
|
||||
columnLayout,
|
||||
{ skipNonEditable: false },
|
||||
);
|
||||
|
||||
// 데이터 행 읽기
|
||||
const dataRows: Record<string, string | number>[] = [];
|
||||
const admdstCdFromExcel: Array<string | number | undefined> = [];
|
||||
for (let row = dataStartRow; row <= range.e.r; row++) {
|
||||
const rowData: Record<string, string | number> = {};
|
||||
let rowAdmdstCd: string | number | undefined;
|
||||
let hasData = false;
|
||||
|
||||
for (
|
||||
@@ -1093,7 +1107,7 @@ useEffect(() => {
|
||||
XLSX.utils.encode_cell({ r: row, c: col })
|
||||
];
|
||||
const fieldName = excelColumnFieldNames[colIndex];
|
||||
if (!fieldName) continue;
|
||||
const allFieldName = excelColumnFieldNamesAll[colIndex];
|
||||
|
||||
let cellValue: string | number = "";
|
||||
if (
|
||||
@@ -1125,6 +1139,12 @@ useEffect(() => {
|
||||
}
|
||||
}
|
||||
|
||||
if (allFieldName === "admdstCd" && cellValue !== "") {
|
||||
rowAdmdstCd = cellValue;
|
||||
}
|
||||
|
||||
if (!fieldName) continue;
|
||||
|
||||
if (
|
||||
cellValue !== "" &&
|
||||
cellValue !== null &&
|
||||
@@ -1139,8 +1159,21 @@ useEffect(() => {
|
||||
// 데이터가 하나라도 있는 행만 추가
|
||||
if (hasData) {
|
||||
dataRows.push(rowData);
|
||||
admdstCdFromExcel.push(rowAdmdstCd);
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
excelImportSewerBzmnCd &&
|
||||
hasAdmdstCdColumn(columns) &&
|
||||
isExcelImportAdmdstCdInvalid(
|
||||
excelImportSewerBzmnCd,
|
||||
admdstCdFromExcel,
|
||||
)
|
||||
) {
|
||||
alert("조회 대상과 업로드한 엑셀 데이터의 행정동 코드가 일치 하지 않습니다.");
|
||||
return;
|
||||
}
|
||||
const preserveFieldNames = excelImportSkipNonEditable
|
||||
? getNonEditableColumnFieldNames(columns, columnLayout)
|
||||
: [];
|
||||
|
||||
@@ -35,8 +35,11 @@ import SplitDataGrid from "./SplitDataGrid";
|
||||
|
||||
import { getComputedValueCallback } from "@/components/util/grid/computedFieldCallbacks"
|
||||
import {
|
||||
buildExcelExportFileBaseName,
|
||||
getExcelImportColumnFieldNames,
|
||||
getNonEditableColumnFieldNames,
|
||||
hasAdmdstCdColumn,
|
||||
isExcelImportAdmdstCdInvalid,
|
||||
mergeExcelImportWithExistingRows,
|
||||
prepareGridColumnsForExcelExport,
|
||||
restoreGridColumnsAfterExcelExport,
|
||||
@@ -280,6 +283,8 @@ const TabDataGrid = ({
|
||||
columnInfo,
|
||||
isExcelImport = true,
|
||||
excelImportSkipNonEditable = true,
|
||||
excelImportSewerBzmnCd,
|
||||
excelExportSearchContext,
|
||||
isExcelExport = true,
|
||||
rows = [],
|
||||
showHeaderCheckbox = false,
|
||||
@@ -455,10 +460,16 @@ const TabDataGrid = ({
|
||||
? prepareGridColumnsForExcelExport(gridView, columns)
|
||||
: undefined;
|
||||
|
||||
const exportBaseName = buildExcelExportFileBaseName(
|
||||
menuName,
|
||||
tabLabel,
|
||||
excelExportSearchContext,
|
||||
);
|
||||
|
||||
gridView.exportGrid({
|
||||
type: 'excel',
|
||||
target: 'local',
|
||||
fileName: `${menuName}_${tabLabel}.xlsx`,
|
||||
fileName: `${exportBaseName}.xlsx`,
|
||||
footer: 'hidden',
|
||||
allColumns: !useExcelColumnVisibilityPrep,
|
||||
done: () => {
|
||||
@@ -557,18 +568,25 @@ const TabDataGrid = ({
|
||||
columnLayout,
|
||||
{ skipNonEditable: excelImportSkipNonEditable },
|
||||
);
|
||||
const excelColumnFieldNamesAll = getExcelImportColumnFieldNames(
|
||||
columns,
|
||||
columnLayout,
|
||||
{ skipNonEditable: false },
|
||||
);
|
||||
|
||||
// 데이터 행 읽기
|
||||
const dataRows: Record<string, string | number>[] = [];
|
||||
const admdstCdFromExcel: Array<string | number | undefined> = [];
|
||||
for (let row = dataStartRow; row <= range.e.r; row++) {
|
||||
const rowData: Record<string, string | number> = {};
|
||||
let rowAdmdstCd: string | number | undefined;
|
||||
let hasData = false;
|
||||
|
||||
for (let colIndex = 0; colIndex < headers.length; colIndex++) {
|
||||
const col = range.s.c + colIndex;
|
||||
const cell = worksheet[XLSX.utils.encode_cell({ r: row, c: col })];
|
||||
const fieldName = excelColumnFieldNames[colIndex];
|
||||
if (!fieldName) continue;
|
||||
const allFieldName = excelColumnFieldNamesAll[colIndex];
|
||||
|
||||
let cellValue: string | number = '';
|
||||
if (cell && cell.v !== undefined && cell.v !== null) {
|
||||
@@ -587,6 +605,12 @@ const TabDataGrid = ({
|
||||
}
|
||||
}
|
||||
|
||||
if (allFieldName === 'admdstCd' && cellValue !== '') {
|
||||
rowAdmdstCd = cellValue;
|
||||
}
|
||||
|
||||
if (!fieldName) continue;
|
||||
|
||||
if (cellValue !== '' && cellValue !== null && cellValue !== undefined) {
|
||||
hasData = true;
|
||||
}
|
||||
@@ -597,19 +621,32 @@ const TabDataGrid = ({
|
||||
// 데이터가 하나라도 있는 행만 추가
|
||||
if (hasData) {
|
||||
dataRows.push(rowData);
|
||||
admdstCdFromExcel.push(rowAdmdstCd);
|
||||
}
|
||||
}
|
||||
|
||||
if (
|
||||
excelImportSewerBzmnCd &&
|
||||
hasAdmdstCdColumn(columns) &&
|
||||
isExcelImportAdmdstCdInvalid(
|
||||
excelImportSewerBzmnCd,
|
||||
admdstCdFromExcel,
|
||||
)
|
||||
) {
|
||||
alert('조회 대상과 행정동 코드가 일치 하지 않습니다.');
|
||||
return;
|
||||
}
|
||||
|
||||
const preserveFieldNames = excelImportSkipNonEditable
|
||||
? getNonEditableColumnFieldNames(columns, columnLayout)
|
||||
: [];
|
||||
|
||||
setRowDataMap(prev => {
|
||||
const newMap = new Map(prev);
|
||||
const existingRows = prev.get(tabKey) ?? [];
|
||||
const prevRows = prev.get(tabKey) ?? [];
|
||||
newMap.set(
|
||||
tabKey,
|
||||
mergeExcelImportWithExistingRows(existingRows, dataRows, {
|
||||
mergeExcelImportWithExistingRows(prevRows, dataRows, {
|
||||
preserveFieldNames,
|
||||
}),
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user