From 10aa3d34bc599232af07d8a643c9938be14cb5bf Mon Sep 17 00:00:00 2001
From: joonhoekim <26rote@gmail.com>
Date: Mon, 8 Sep 2025 10:33:01 +0000
Subject: (김준회) 입찰 인터페이스 처리, 자재그룹명 매핑 수정, 자재그룹 뷰
수정, 부서별 도메인 할당시 동기화 처리, 도메인 부서 할당 다이얼로그 부서목록
스크롤 처리, 삼성중공업 사용자 global search 개선
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../_components/department-domain-assignment-dialog.tsx | 14 +++++---------
.../_components/department-menu-access-manager.tsx | 12 ++++++++++++
app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts | 15 ++++++++++-----
3 files changed, 27 insertions(+), 14 deletions(-)
(limited to 'app')
diff --git a/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-domain-assignment-dialog.tsx b/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-domain-assignment-dialog.tsx
index 277511cb..f8a75641 100644
--- a/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-domain-assignment-dialog.tsx
+++ b/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-domain-assignment-dialog.tsx
@@ -20,7 +20,6 @@ import {
} from "@/components/ui/select";
import { Textarea } from "@/components/ui/textarea";
import { Badge } from "@/components/ui/badge";
-import { ScrollArea } from "@/components/ui/scroll-area";
import { Label } from "@/components/ui/label";
import { Separator } from "@/components/ui/separator";
import {
@@ -35,8 +34,7 @@ import {
DepartmentNode
} from "@/lib/users/knox-service";
import {
- getDepartmentDomainAssignmentsByDepartments,
- type UserDomain
+ getDepartmentDomainAssignmentsByDepartments
} from "@/lib/users/department-domain/service";
import { DOMAIN_OPTIONS, getDomainLabel } from "./domain-constants";
@@ -186,9 +184,8 @@ export function DepartmentDomainAssignmentDialog({
-
-
-
+
+
{/* 선택된 부서들 표시 */}
-
+
{Array.from(selectedDepartmentsByCompany.entries()).map(([companyCode, depts]) => (
@@ -234,7 +231,7 @@ export function DepartmentDomainAssignmentDialog({
기존 할당 정보를 조회하는 중...
) : (
-
+
@@ -353,7 +350,6 @@ export function DepartmentDomainAssignmentDialog({
-
diff --git a/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-menu-access-manager.tsx b/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-menu-access-manager.tsx
index bf43e7a9..c24770bf 100644
--- a/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-menu-access-manager.tsx
+++ b/app/[lng]/evcp/(evcp)/menu-access-dept/_components/department-menu-access-manager.tsx
@@ -15,6 +15,7 @@ import {
import {
assignDomainToDepartments,
getDepartmentDomainAssignments,
+ autoAssignPendingUsersDomains,
type UserDomain
} from "@/lib/users/department-domain/service";
import { DOMAIN_OPTIONS } from "./domain-constants";
@@ -138,6 +139,17 @@ export function DepartmentMenuAccessManager({
} catch (error) {
console.error("할당 정보 새로고침 실패:", error);
}
+
+ // users 테이블에 도메인 동기화 작업 진행
+ try {
+ const syncResult = await autoAssignPendingUsersDomains();
+ if (syncResult.success && syncResult.assignedCount > 0) {
+ toast.success(`사용자 도메인 동기화 완료: ${syncResult.assignedCount}명의 사용자가 자동 할당되었습니다.`);
+ }
+ } catch (error) {
+ console.error("사용자 도메인 동기화 실패:", error);
+ // 동기화 실패해도 메인 할당은 성공이므로 에러 토스트는 표시하지 않음
+ }
} else {
toast.error(result.message);
}
diff --git a/app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts b/app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts
index 7290db0f..e195c7f6 100644
--- a/app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts
+++ b/app/api/(S-ERP)/(ECC)/IF_ECC_EVCP_PR_INFORMATION/route.ts
@@ -21,6 +21,9 @@ import {
import {
mapAndSaveECCRfqData
} from "@/lib/soap/ecc/mapper/rfq-and-pr-mapper";
+import {
+ mapAndSaveECCBiddingData
+} from "@/lib/soap/ecc/mapper/bidding-and-pr-mapper";
// 스키마에서 타입 추론
@@ -120,14 +123,16 @@ export async function POST(request: NextRequest) {
}
}
- // AB (Bidding) 데이터 처리 - TODO
+ // AB (Bidding) 데이터 처리
+ let biddingMappingResult: { success: boolean; message: string; processedCount: number } | null = null;
if (abHeaders.length > 0) {
- console.log(`⚠️ TODO: Bidding 데이터 처리 필요 - ${abHeaders.length}개 헤더, ${abItems.length}개 아이템`);
- // TODO: mapAndSaveECCBiddingData 함수 구현 필요
- // const biddingMappingResult = await mapAndSaveECCBiddingData(abHeaders, abItems);
+ biddingMappingResult = await mapAndSaveECCBiddingData(abHeaders, abItems);
+ if (!biddingMappingResult.success) {
+ throw new Error(`Bidding 비즈니스 테이블 매핑 실패: ${biddingMappingResult.message}`);
+ }
}
- console.log(`🎉 처리 완료: ${processedData.length}개 PR 데이터, ${rfqMappingResult?.processedCount || 0}개 RFQ 매핑, ${abHeaders.length}개 Bidding (TODO)`);
+ console.log(`🎉 처리 완료: ${processedData.length}개 PR 데이터, ${rfqMappingResult?.processedCount || 0}개 RFQ 매핑, ${biddingMappingResult?.processedCount || 0}개 Bidding 매핑`);
// 6) 성공 응답 반환
return createSoapResponse('http://60.101.108.100/', {
--
cgit v1.2.3