summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/[lng]/partners/(partners)/document-list-ship/dolce-upload-page-v2.tsx10
-rw-r--r--lib/dolce/dialogs/b4-bulk-upload-dialog-v3.tsx51
-rw-r--r--lib/dolce/utils/code-translator.ts2
3 files changed, 35 insertions, 28 deletions
diff --git a/app/[lng]/partners/(partners)/document-list-ship/dolce-upload-page-v2.tsx b/app/[lng]/partners/(partners)/document-list-ship/dolce-upload-page-v2.tsx
index 29b41136..e607588f 100644
--- a/app/[lng]/partners/(partners)/document-list-ship/dolce-upload-page-v2.tsx
+++ b/app/[lng]/partners/(partners)/document-list-ship/dolce-upload-page-v2.tsx
@@ -520,7 +520,7 @@ export default function DolceUploadPageV2({ searchParams }: DolceUploadPageV2Pro
</Card>
{/* 도면 리스트 테이블 - 항상 렌더링 */}
- <Card className="flex-shrink-0 flex flex-col" style={{ minHeight: "500px" }}>
+ <Card className="flex-shrink-0 flex flex-col h-[45vh]">
<CardHeader className="py-3">
<CardTitle className="text-base">
{t("drawingList.title")}
@@ -552,7 +552,7 @@ export default function DolceUploadPageV2({ searchParams }: DolceUploadPageV2Pro
getRowId={getDrawingId}
selectedRow={selectedDrawing || undefined}
getRowId={getDrawingId}
- minHeight="400px"
+ minHeight="0"
defaultPageSize={10}
/>
)}
@@ -560,7 +560,7 @@ export default function DolceUploadPageV2({ searchParams }: DolceUploadPageV2Pro
</Card>
{/* 하단: 상세도면리스트 + 파일리스트 - 항상 렌더링 */}
- <div className="grid grid-cols-1 lg:grid-cols-2 gap-4 flex-1 min-h-0" style={{ minHeight: "500px" }}>
+ <div className="grid grid-cols-1 lg:grid-cols-[3fr_2fr] gap-4 flex-shrink-0 h-[45vh]">
{/* 좌측: 상세도면 리스트 */}
<Card className="flex flex-col min-h-0">
<CardHeader className="flex-row items-center justify-between py-3 flex-shrink-0">
@@ -613,7 +613,7 @@ export default function DolceUploadPageV2({ searchParams }: DolceUploadPageV2Pro
onRowClick={setSelectedDetail}
selectedRow={selectedDetail || undefined}
getRowId={getDetailDrawingId}
- minHeight="400px"
+ minHeight="0"
defaultPageSize={10}
/>
)}
@@ -658,7 +658,7 @@ export default function DolceUploadPageV2({ searchParams }: DolceUploadPageV2Pro
<DrawingListTableV2
columns={fileColumns}
data={files}
- minHeight="400px"
+ minHeight="0"
defaultPageSize={10}
/>
)}
diff --git a/lib/dolce/dialogs/b4-bulk-upload-dialog-v3.tsx b/lib/dolce/dialogs/b4-bulk-upload-dialog-v3.tsx
index 8bb5dd42..81d6f7f0 100644
--- a/lib/dolce/dialogs/b4-bulk-upload-dialog-v3.tsx
+++ b/lib/dolce/dialogs/b4-bulk-upload-dialog-v3.tsx
@@ -11,7 +11,7 @@ import {
DialogTitle,
} from "@/components/ui/dialog";
import { Button } from "@/components/ui/button";
-import { FolderOpen, Loader2, ChevronRight, ChevronLeft, CheckCircle2 } from "lucide-react";
+import { FolderOpen, Loader2, ChevronRight, CheckCircle2 } from "lucide-react";
import { toast } from "sonner";
import { Progress } from "@/components/ui/progress";
import { useTranslation } from "@/i18n/client";
@@ -151,7 +151,7 @@ export function B4BulkUploadDialogV3({
try {
console.log("[V3 Dialog] Validation started");
- // 1. Parse Filenames
+ // 1. Parse Filenames (Format check only)
const parseResults: FileValidationResult[] = selectedFiles.map((file) => {
const validation = validateB4FileName(file.name);
return {
@@ -162,19 +162,11 @@ export function B4BulkUploadDialogV3({
};
});
- const parsedFiles = parseResults.filter((r) => r.valid && r.parsed);
-
- // If no files parsed correctly, show dialog immediately with errors
- if (parsedFiles.length === 0) {
- setValidationResults(parseResults);
- setShowValidationDialog(true);
- return;
- }
-
- // 2. Call MatchBatchFileDwg to check mapping status
- const mappingCheckItems = parsedFiles.map((r) => ({
- DrawingNo: r.parsed!.drawingNo,
- RevNo: r.parsed!.revNo,
+ // 2. Call MatchBatchFileDwg to check mapping status for ALL files
+ // Even if local parsing failed, we send the filename to the server
+ const mappingCheckItems = parseResults.map((r) => ({
+ DrawingNo: r.parsed?.drawingNo ?? "",
+ RevNo: r.parsed?.revNo ?? "",
FileNm: r.file.name,
}));
@@ -194,11 +186,29 @@ export function B4BulkUploadDialogV3({
// 3. Merge results
const finalResults: FileValidationResult[] = parseResults.map((parseResult) => {
- if (!parseResult.valid || !parseResult.parsed) {
- return parseResult;
+ const mappingResult = newMappingResultsMap.get(parseResult.file.name);
+
+ // If mapping exists and is valid, it overrides local validation errors
+ if (mappingResult && mappingResult.MappingYN === "Y" && mappingResult.DrawingMoveGbn === "도면입수") {
+ return {
+ file: parseResult.file,
+ valid: true, // Valid because server recognized it
+ parsed: {
+ drawingNo: mappingResult.DrawingNo,
+ revNo: mappingResult.RevNo || "",
+ fileName: parseResult.file.name
+ },
+ mappingStatus: "available" as const,
+ drawingName: mappingResult.DrawingName || undefined,
+ registerGroupId: mappingResult.RegisterGroupId,
+ };
}
- const mappingResult = newMappingResultsMap.get(parseResult.file.name);
+ // If server didn't validate it, fall back to local validation error or server error
+ if (!parseResult.valid || !parseResult.parsed) {
+ // It was invalid locally, and server didn't save it
+ return parseResult;
+ }
if (!mappingResult) {
return {
@@ -208,17 +218,14 @@ export function B4BulkUploadDialogV3({
};
}
- // According to prompt: "API 응답에서 매핑되지 않은 경우는, 파일명으로부터 파싱된 도면이 없는 경우임."
- // Also "MappingYN 의 값이 현재 매핑이 되어있는지를 나타냄. Y인 건들은 저장 가능"
if (mappingResult.MappingYN !== "Y") {
return {
...parseResult,
mappingStatus: "not_found" as const,
- error: t("validation.notRegistered"), // Or specific message for MappingYN=N
+ error: t("validation.notRegistered"),
};
}
- // Check DrawingMoveGbn = "도면입수" (implied by requirements to use MatchBatchFileDwg with 도면입수)
if (mappingResult.DrawingMoveGbn !== "도면입수") {
return {
...parseResult,
diff --git a/lib/dolce/utils/code-translator.ts b/lib/dolce/utils/code-translator.ts
index f55d0691..efe2c3d9 100644
--- a/lib/dolce/utils/code-translator.ts
+++ b/lib/dolce/utils/code-translator.ts
@@ -227,7 +227,7 @@ export function getB4RegisterKindOptions(drawingUsage: string, lng: string) {
(drawingUsage === "CMT") {
return [
{ value: "CMTM", label: translateB4RegisterKind("CMTM", lng) },
- { value: "CMTQ", label: translateB4RegisterKind("CMTQ", lng) },
+ // { value: "CMTQ", label: translateB4RegisterKind("CMTQ", lng) },
];
} else if (drawingUsage === "SUB") {
return [