Merge remote-tracking branch 'origin/master'

# Conflicts:
#	src/components/accounting/ReceivablesStatus/index.tsx
This commit is contained in:
2026-01-06 21:22:23 +09:00
230 changed files with 34200 additions and 2402 deletions

View File

@@ -55,6 +55,7 @@ function transformItem(item: VendorReceivablesApi): VendorReceivables {
total: cat.amounts.total,
},
})),
memo: (item as VendorReceivablesApi & { memo?: string }).memo ?? '',
};
}

View File

@@ -83,6 +83,7 @@ export function ReceivablesStatus({ highlightVendorId, initialData, initialSumma
overdueVendorCount: 0,
});
const [isLoading, setIsLoading] = useState(!initialData?.items?.length);
const [expandedMemos, setExpandedMemos] = useState<Set<string>>(new Set());
// ===== 데이터 로드 =====
const loadData = useCallback(async () => {
@@ -193,6 +194,19 @@ export function ReceivablesStatus({ highlightVendorId, initialData, initialSumma
));
}, []);
// ===== 메모 펼치기/접기 토글 =====
const toggleMemoExpand = useCallback((vendorId: string) => {
setExpandedMemos(prev => {
const newSet = new Set(prev);
if (newSet.has(vendorId)) {
newSet.delete(vendorId);
} else {
newSet.add(vendorId);
}
return newSet;
});
}, []);
// ===== 엑셀 다운로드 핸들러 =====
const handleExcelDownload = useCallback(async () => {
const result = await exportReceivablesExcel({
@@ -315,6 +329,9 @@ export function ReceivablesStatus({ highlightVendorId, initialData, initialSumma
// ===== 월 개수 (동적) =====
const monthCount = monthLabels.length || 12;
// ===== 카테고리 순서 (메모 제외 - 별도 렌더링) =====
const categoryOrder: CategoryType[] = ['sales', 'deposit', 'bill', 'receivable'];
return (
<PageLayout>
{/* 페이지 헤더 */}
@@ -395,7 +412,7 @@ export function ReceivablesStatus({ highlightVendorId, initialData, initialSumma
size="sm"
onClick={handleSave}
disabled={isPending || totalChangedCount === 0}
className="bg-orange-500 hover:bg-orange-600 disabled:opacity-50"
className="bg-blue-500 hover:bg-blue-600 disabled:opacity-50"
>
{isPending ? (
<Loader2 className="mr-2 h-4 w-4 animate-spin" />

View File

@@ -47,6 +47,7 @@ export interface VendorReceivables {
carryForwardBalance: number; // 이월잔액
monthLabels: string[]; // 동적 월 레이블 (ex: ['25.02', '25.03', ...])
categories: CategoryData[];
memo?: string; // 거래처별 메모 (단일 텍스트)
}
/**