- 검색 폼 정합성: wace JSP `<!-- 주석처리된 검색필터 -->` 블록까지 잘못 이식했던 부분 정정
- 견적: 11→7개 (제품구분/국내해외/유무상/요청납기 제거)
- 주문: 13→9개 (제품구분/국내해외/유무상/견적환종 제거)
- 매출: 10→11개 (출하지시상태 제거 + 제품구분·국내/해외 추가, JSP 순서로 재배치)
- 판매: 변경 없음 (원본 그대로 일치)
- 매출 백엔드: SaleListFilter에 productType/nation 추가, getRevenueList에 partObjId/serialNo/orderDate/productType/nation 5개 필터 처리
- 공통 UX
- 초기화 버튼을 4개 메뉴 동일하게 통일 (variant=ghost, 버튼 영역 끝)
- <Input type="date">는 빈 값 placeholder 숨김 + 캘린더 아이콘 숨김 + 영역 클릭으로 picker 자동(showPicker)
- 신규 공통 컴포넌트: CommCodeSelect/CustomerSelect/CustomerSearchDialog/PartSelect/ItemSearchDialog + backend salesCommonRoutes
- 문서: 01/02/04 검색 폼 표를 활성/비활성 분리 형식으로 정정, README에 8. 공통 UX 규칙 섹션 신설
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- RoleFormModal: 권한 코드 입력 필드 제거. 생성 시 ROLE_<base36 timestamp>
형태로 자동 부여 (시스템 내부 키, UI 비노출). 수정 모드에서도
authCode 는 기존 값 유지하고 입력 받지 않음.
- dashboard.ts getApiBaseUrl: NEXT_PUBLIC_API_URL 환경변수가 있으면 우선 사용.
fallback 포트를 8080 → 8090 (compose 외부 노출 포트)으로 정정해
'데이터를 불러올 수 없습니다 / Failed to fetch' 해결.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- 테이블 타입 관리: h-screen → h-full(min-h-0) 로 탭 영역에 정확히 맞춤,
사이드바·헤더·카드 폰트/패딩 톤다운, 헤더 입력칸 grid 레이아웃으로 빈 공간 메움
- ColumnGrid: 행 높이 56px → 36px, 한글라벨/영문명 분리 표시,
PK/NN/IDX/UQ 한 줄 nowrap 고정폭, 그룹 헤더 sticky, 액션 버튼 hover 노출
- 메뉴 관리: min-h-screen → h-full(min-h-0) overflow-hidden, 헤더 flex-shrink-0,
메인 컨텐츠 flex-1 로 탭 안에서 정확한 height
- MenuTable: max-h-[calc(100vh-350px)] 절대값 제거, flex-1 min-h-0 overflow-auto 로
부모 컨테이너 따라 내부 스크롤
- docker-compose: name=vexplor_rps 추가 — Docker Desktop 에서
pipeline 등 다른 프로젝트와 분리되어 한 그룹으로 깔끔하게 표시
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
vexplor 로코드툴의 code_category/code_info 2-테이블 구조 대신 wace_plm
원본 comm_code(847건) 위에서 직접 동작하도록 백엔드 service 전면 재작성.
영업관리 등 이미 comm_code에 의존 중인 화면들과 데이터 소스 일치.
- backend service: comm_code 단일 테이블 기반(top-level=parent_code_id 빈값)
으로 재작성. 다단계 계층은 재귀 CTE로 depth/parent_code_value 산출.
단일 테넌시라 company_code/menu_objid 필터링은 시그니처만 유지하고 무시
- comm_code에 sort_order INT 컬럼 추가(드래그 정렬 유지) — DB 마이그레이션
- frontend schema: 영문명/설명을 optional로 완화(wace 컬럼 부재)
- 카테고리/코드 폼 모달에서 영문명·설명 입력 필드 제거
- 패널 레이아웃을 화면 높이에 고정 + 좌우 패널 자체 스크롤로 분리
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
useCompanyUsers 응답 중 user_name 이 비어있는 레거시 row 가 있을 때
toLowerCase 호출에서 발생하던 Runtime TypeError 방지.
- NewRoomModal: userName/deptName ?? '' 으로 가드 후 includes
- MessageInput: 멘션 자동완성 필터에서 userName ?? '' 가드
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- project_mgmt 테이블 신규(75컬럼/89건) — wace 운영 동일 schema 추출. 판매·매출관리 메인 테이블
- 판매·매출 SQL을 contract_item 기반 → project_mgmt 메인 + sales_registration LEFT JOIN으로 전면 재작성
* 요청납기 COALESCE(CI.due_date, T.due_date, CM.due_date) 패턴
* 환종/serial_no는 sales_registration 우선, contract_item_serial 집계 fallback
* 판매상태 wace 로직 한글 라벨(미판매/완판/분할판매) 동적 계산
* 매출관리는 shippingDateRequired EXISTS 필터로 출하 등록된 프로젝트만 표시
- 주문서: order_date 매핑 CONTRACT_DATE → ORDER_DATE 정정, 원화총액·고객사요청사항 SQL 추가
- 견적/주문/판매 page.tsx에서 wace 블록 주석 컬럼 제거(제품구분/국내·해외/접수일/반납사유 등 14개)
- 환종 raw 코드 → contract_currency_name 한글명 바인딩으로 정정
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- rolesList/RoleFormModal/[id] 페이지에서 회사 선택 필터·라벨·SUPER_ADMIN 회사 컬럼 제거
- MessageInput/NewRoomModal에서 user.userName/deptName.toLowerCase 호출 시 옵셔널 체이닝 적용으로 null 사용자 방어
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
화면 (frontend/app/(main)/admin/userMng/userAuthList/page.tsx):
- 4분할 그리드를 inline flex 레이아웃으로 강제 (Tailwind v4 arbitrary value 파싱 이슈 우회)
- 권한있는/없는 직원 리스트 height 폭주 수정 (flex-1 + height 충돌 → 명시적 flex-basis)
- 직원 항목을 가로 배치(이름·부서)로 변경해 한 화면 표시 인원 증가
- 메뉴 트리 영역 자체 스크롤 + sticky thead 적용, 페이지 전체 스크롤 제거
- 빠른 연속 클릭 시 같은 메뉴-필드 토글이 백엔드 SELECT→UPDATE race로 충돌하던 문제를 프론트 inFlight 가드로 차단
API/인프라:
- 단건 메뉴 권한 토글 엔드포인트 신설: PATCH /roles/:id/menu-permissions/:menuId
- RoleService.upsertSingleMenuPermission 추가 (변경된 yn 필드만 머지하는 멱등 UPSERT)
- frontend/lib/api/role.ts: toggleMenuPermission · getWorkspace 함수 추가 (워크스페이스 통합 로드)
보안:
- 권한 변경 시 그룹 멤버 토큰 무효화 로직에서 작업자 본인을 제외 (자기 자신 로그아웃 방지)
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- adminService.getUserMenuList: SUPER_ADMIN 이고 company_code 가 '*' 가 아닐 때
공통(*)+자기 회사 메뉴를 모두 반환 (이전엔 자기 회사만 매칭돼 0건이 나오던 문제)
- COMPANY_ADMIN/USER 도 동일하게 공통(*) 메뉴를 함께 노출
- NewRoomModal: u.userName/u.deptName 이 undefined 일 때 toLowerCase 호출하던 런타임 TypeError 가드
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
부팅 시 자동 시드:
- 외부 REST API 연결 6종 (부서/사원/거래처/창고/계정과목/Wehago 사용자)
- 매칭 배치 6개 + Wehago HMAC-SHA256 서명 자동 부착 (erpApiClient/erpPresetSeedService/erpBatchSeedService)
- 동기화 대상 테이블/컬럼 보장 idempotent 마이그레이션 (erpTableMigration)
배치 기능 확장:
- 조건부 매핑 (mapping_type='conditional') — when/then/default 규칙으로 값 변환 (예: enrlFg=J01→active)
- 행 단위 제외 필터 (row_filter_config) — 특정 API 필드 값 가진 행 동기화 제외 (예: loginId=wace 통합 ERP 계정 제외)
- save_mode/conflict_key 기반 UPSERT, data_array_path 응답 배열 추출
UI 정비:
- 배치/플로우/메일/REST API 목록에 페이징 + FullHD 컴팩트 레이아웃
- 배치 편집 화면 한 화면 풀 활용 — TO 패널 가로 그리드, FROM 패널 등록 연결 한 줄 요약, 응답/JSON/파라미터 details 접힘
- ResponsiveDataView/AdminPageRenderer 쿼리 파라미터(?edit=N) 파싱
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- AppLayout.tsx: 활성 탭 부모 자동 펼치기 useEffect의 의존성에서 expandedMenus를 제거.
collapse 직후 effect가 재실행되며 강제 expand가 일어나 펼침/접힘이 토글되지 않던 문제 해결.
이제 activeTab 변경 시에만 부모 메뉴 자동 펼침, 사용자 토글은 안정적으로 유지됨.
- 사용자 메뉴 데이터(DB) 재구성: waceplm 9개 화면 캡처와 1:1 매칭되는 46개 메뉴(루트 사용자 + 10 카테고리 + 35 리프) 재삽입,
URL을 `.do` 레거시 → `/COMPANY_16/<카테고리>/<리프>` React 라우트로 통일.
- 메뉴 아이콘 매핑: 영업/프로젝트/개발/구매/구매요청/자재/생산/품질/CS/ECR 카테고리 + 35개 리프 각각에
업무 성격에 맞는 lucide-react 아이콘(TrendingUp/FolderKanban/Wrench/ShoppingCart/Send/Boxes/Factory/ShieldCheck 등) 부여.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
주요 변경:
- 회사 라우트 정리: COMPANY_7/8/9/10/29/30 6개 폴더 삭제, COMPANY_16(하이큐마그)만 유지
- 모듈 수 17,470 → 16,121, /main 컴파일 시간 110s → 53s
- 브랜딩: VEXPLOR → RPS (로고/파비콘/타이틀/메타데이터/푸터 회사정보 전부 교체)
- 로그인 페이지 fito 스타일 리디자인 (다크 그라디언트 + 글래스 카드 + 격자 배경 + 하단 푸터)
- AppLayout/TabBar/ThemeToggle/ThemeProvider/Logo Pipeline 디자인 채용
- 6색 컬러 테마 시스템 (blue/teal/green/purple/red/dark) + 좌→우 커튼 전환 애니메이션
- 우상단 모드 전환 알약 버튼 (관리자만 노출)
- 시안톤 탭 + Teal 활성 탭, 130px 컴팩트 너비
- 도커 포트 충돌 회피: 백엔드 8080→8090, 프론트 9771→9781, 컨테이너명 rps_backend/rps-front
- DB: vexplor_rps 신규 생성 후 vexplor_dev 데이터 이관, DATABASE_URL 변경
- useAuth: SUPER_ADMIN userType도 isAdmin으로 인정
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Updated the `getQualityReportData` function to improve item name retrieval logic by using `NULLIF` for better handling of empty values.
- Refactored the `getEquipmentReportData` function to include company and date filters for equipment statistics, ensuring accurate data aggregation.
- Enhanced the SQL queries for both quality and equipment reports to utilize lateral joins and improve performance.
- Improved loading states in frontend components for inspection records and inspection results across multiple companies.
This refactor enhances data accuracy and user experience in the analytics module.
- Added a new controller for item inspection information to handle grouped data retrieval with pagination.
- Created routes for accessing item inspection data, specifically for grouped item codes.
- Updated frontend components to support server-side pagination, including total count display and page navigation.
- Enhanced the item inspection info page to utilize the new API for fetching data, ensuring a smooth user experience.
This implementation improves the management of item inspection data and enhances usability in the quality module.
- Updated the analytics report controller to correctly join work_order_process and work_order_process_result for accurate production data retrieval.
- Enhanced the logistics info page to load all tabs on mount for immediate count accuracy, while ensuring only the active tab is reloaded on subsequent changes to prevent race conditions.
This refactor improves data accuracy and user experience in the logistics module.
- Added a new KPI controller to handle daily production data retrieval.
- Created routes for accessing KPI data, specifically for daily production.
- Developed frontend components for displaying daily production metrics, including charts and summary cards.
- Implemented data fetching logic with date range filtering for production data.
- Ensured proper loading states and error handling in the UI.
This feature is part of TASK:ERP-022.
- Added pagination parameters (page and size) to the getOrderSummary and getPlans functions in the productionController.
- Updated the getList function in shippingOrderController and shippingPlanController to support server-side pagination.
- Modified frontend components to handle pagination state and display total counts for orders and plans.
- Ensured compatibility with existing functionality by maintaining behavior when pagination is not used.
gbpark-node(ee8f274f) 머지 시 popProductionController.ts 충돌. 작업 중이던
mhkim 워킹트리 변경분(앞공정 양품 헬퍼/work_instruction 헤더 헬퍼/wi_*
커스텀 템플릿 우선 처리/CTE 기반 getProcessList 등)을 통째로 채택.
- Remove KpiCarousel/RecentActivity from pop main pages (7 companies)
- Empty banner default; rename settings key home -> main
- Strip API fetch/cache from usePopSettings, return hardcoded defaults
- Drop screen_layouts_pop auto-clone/fallback for regular users
- Add SUPER_ADMIN direct-entry branch in AppLayout pop handler
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- per-company PopShell copies under (main)/COMPANY_*/pop/_components/common/
(no longer imports @/components/pop/hardcoded/PopShell)
- new components/pop/shell/CompanySwitchModal for new POP entry
- AppLayout: SUPER_ADMIN POP-mode toggle + company-select modal flow
- usePopSettings: handle /COMPANY_X/pop/<tail> URLs (extractScreenKey)
- authController + AppLayout: drop legacy /pop fallback;
use /\${companyCode}/pop/main when childMenus>1 lacks [POP_LANDING]
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Added `getProcessList` to retrieve the list of work order processes along with their results, grouped by process ID.
- Implemented `getProcessResult` to fetch details of a specific work order process result by its ID.
- Updated `popProductionRoutes` to enable the new endpoints for accessing process data.
These additions enhance the functionality of the POP production module, allowing for better tracking and management of work order processes and their results.
- Changed the `copyChecklistToSplit` function to be exported for better accessibility.
- Temporarily commented out the `getProcessList` and `getProcessResult` routes in `popProductionRoutes` due to missing implementations, with a note for future restoration.
- Updated the loop in `salesOrderBulkService` to use `Array.from()` for better clarity in iterating over entries.
These changes aim to improve code organization and maintainability while addressing current implementation gaps.