feat(WEB): 부실채권, 재고, 입고, 수주 UI 개선

- BadDebtCollection 액션/타입 리팩토링
- ReceivingProcessDialog 입고처리 개선
- StockStatusList 재고현황 UI 개선
- OrderSalesDetailView 수주 상세 수정
- UniversalListPage 범용 리스트 개선
- production-order 페이지 수정
This commit is contained in:
2026-01-23 21:32:24 +09:00
parent 9fb5c171eb
commit a0343eec93
12 changed files with 315 additions and 251 deletions

View File

@@ -71,6 +71,10 @@ export function UniversalListPage<T>({
// 모바일 인피니티 스크롤 로딩 상태 (서버 사이드 페이지네이션 시)
const [isMobileLoading, setIsMobileLoading] = useState(false);
// 서버 사이드 페이지네이션 상태 (API에서 반환하는 값)
const [serverTotalCount, setServerTotalCount] = useState<number>(initialTotalCount || 0);
const [serverTotalPages, setServerTotalPages] = useState<number>(1);
// ===== ID 추출 헬퍼 =====
const getItemId = useCallback(
(item: T): string => {
@@ -125,8 +129,12 @@ export function UniversalListPage<T>({
}, [config.clientSideFiltering, filteredData, currentPage, itemsPerPage, rawData]);
// 총 개수 및 페이지 수
const totalCount = config.clientSideFiltering ? filteredData.length : rawData.length;
const totalPages = Math.ceil(totalCount / itemsPerPage);
// 서버 사이드 페이지네이션: API에서 반환한 값 사용
// 클라이언트 사이드 페이지네이션: 로컬 데이터 길이 사용
const totalCount = config.clientSideFiltering ? filteredData.length : serverTotalCount;
const totalPages = config.clientSideFiltering
? Math.ceil(totalCount / itemsPerPage)
: serverTotalPages;
// 표시할 데이터
const displayData = config.clientSideFiltering ? paginatedData : rawData;
@@ -171,6 +179,15 @@ export function UniversalListPage<T>({
if (result.success && result.data) {
setRawData(result.data);
// 서버 사이드 페이지네이션: API에서 반환한 totalCount, totalPages 저장
if (!config.clientSideFiltering) {
if (typeof result.totalCount === 'number') {
setServerTotalCount(result.totalCount);
}
if (typeof result.totalPages === 'number') {
setServerTotalPages(result.totalPages);
}
}
} else {
toast.error(result.error || '데이터를 불러오는데 실패했습니다.');
}