diff options
| author | joonhoekim <26rote@gmail.com> | 2025-09-08 10:33:01 +0000 |
|---|---|---|
| committer | joonhoekim <26rote@gmail.com> | 2025-09-08 10:33:01 +0000 |
| commit | 10aa3d34bc599232af07d8a643c9938be14cb5bf (patch) | |
| tree | 9e9a94e89642e80024647de175de6f217daab682 /app | |
| parent | f93493f68c9f368e10f1c3379f1c1384068e3b14 (diff) | |
(김준회) 입찰 인터페이스 처리, 자재그룹명 매핑 수정, 자재그룹 뷰 수정, 부서별 도메인 할당시 동기화 처리, 도메인 부서 할당 다이얼로그 부서목록 스크롤 처리, 삼성중공업 사용자 global search 개선
Diffstat (limited to 'app')
3 files changed, 27 insertions, 14 deletions
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({ </DialogDescription> </DialogHeader> - <div className="flex-1 overflow-hidden"> - <ScrollArea className="h-full pr-4"> - <div className="space-y-6"> + <div className="flex-1 overflow-y-auto px-1"> + <div className="space-y-6 pr-3"> {/* 선택된 부서들 표시 */} <div className="space-y-3"> <Label className="text-sm font-medium flex items-center gap-2"> @@ -196,7 +193,7 @@ export function DepartmentDomainAssignmentDialog({ 선택된 부서 ({selectedDepartments.length}개) </Label> - <div className="border rounded-md p-3 max-h-32 overflow-y-auto"> + <div className="border rounded-md p-3 max-h-40 overflow-y-auto"> {Array.from(selectedDepartmentsByCompany.entries()).map(([companyCode, depts]) => ( <div key={companyCode} className="mb-3 last:mb-0"> <div className="text-sm font-medium text-muted-foreground mb-2"> @@ -234,7 +231,7 @@ export function DepartmentDomainAssignmentDialog({ 기존 할당 정보를 조회하는 중... </div> ) : ( - <div className="border rounded-md"> + <div className="border rounded-md max-h-60 overflow-y-auto"> <Table> <TableHeader> <TableRow> @@ -353,7 +350,6 @@ export function DepartmentDomainAssignmentDialog({ </div> </div> </div> - </ScrollArea> </div> <DialogFooter className="border-t pt-4"> 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/', { |
