fix: 프로젝트 전체 TypeScript 타입에러 408개 수정 (tsc --noEmit 0 errors)

- 공통 템플릿 타입 수정 (IntegratedDetailTemplate, UniversalListPage)
- 페이지(app/[locale]) 타입 호환성 수정 (80개)
- 재고/자재 모듈 타입 수정 (StockStatus, ReceivingManagement)
- 생산 모듈 타입 수정 (WorkOrders, WorkerScreen, WorkResults)
- 주문/출고 모듈 타입 수정 (ShipmentManagement, Orders)
- 견적/단가 모듈 타입 수정 (Quotes, Pricing)
- 건설 모듈 타입 수정 (49개, 17개 하위 모듈)
- HR 모듈 타입 수정 (CardManagement, VacationManagement 등)
- 설정 모듈 타입 수정 (PermissionManagement, AccountManagement 등)
- 게시판 모듈 타입 수정 (BoardManagement, BoardList 등)
- 회계 모듈 타입 수정 (VendorManagement, BadDebtCollection 등)
- 기타 모듈 타입 수정 (CEODashboard, clients, vehicle 등)
- 유틸/훅/API 타입 수정 (hooks, contexts, lib)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-01-30 10:07:58 +09:00
parent 8a5cbde5ef
commit a1f4c82cec
154 changed files with 832 additions and 536 deletions

View File

@@ -483,9 +483,9 @@ export function LocationDetailPanel({
<div>
<span className="text-xs text-gray-500"></span>
<p className="font-semibold">
{location.bomResult?.variables?.W1 || location.manufactureWidth || "-"}
{String(location.bomResult?.variables?.W1 ?? location.manufactureWidth ?? "-")}
X
{location.bomResult?.variables?.H1 || location.manufactureHeight || "-"}
{String(location.bomResult?.variables?.H1 ?? location.manufactureHeight ?? "-")}
</p>
</div>
<div>
@@ -509,7 +509,7 @@ export function LocationDetailPanel({
<QuantityInput
value={location.quantity}
onChange={(newQty) => {
if (!location || disabled) return;
if (!location || disabled || newQty === undefined) return;
// 수량 변경 시 totalPrice 재계산
const unitPrice = location.unitPrice || 0;
onUpdateLocation(location.id, {
@@ -620,7 +620,7 @@ export function LocationDetailPanel({
<QuantityInput
value={item.quantity}
onChange={(newQty) => {
if (!location || disabled) return;
if (!location || disabled || newQty === undefined) return;
const existingBomResult = location.bomResult;
if (!existingBomResult) return;

View File

@@ -306,9 +306,10 @@ export function QuoteManagementClient({
// 제품분류 필터
if (productCategoryFilter !== 'all') {
if (productCategoryFilter === 'STEEL' && item.productCategory !== 'STEEL') return false;
if (productCategoryFilter === 'SCREEN' && item.productCategory !== 'SCREEN') return false;
if (productCategoryFilter === 'MIXED' && item.productCategory !== 'MIXED') return false;
const category = item.productCategory as string;
if (productCategoryFilter === 'STEEL' && category !== 'STEEL') return false;
if (productCategoryFilter === 'SCREEN' && category !== 'SCREEN') return false;
if (productCategoryFilter === 'MIXED' && category !== 'MIXED') return false;
}
// 상태 필터

View File

@@ -321,7 +321,7 @@ export function QuotePreviewContent({
{/* 개소 헤더 */}
<tr className="bg-blue-50 border-b border-gray-400">
<td colSpan={7} className="px-2 py-1 font-semibold text-blue-800">
[{locationSymbol}] {loc.floor} - {loc.name || loc.code} (: {loc.quantity})
[{locationSymbol}] {loc.floor} - {loc.productName || loc.code} (: {loc.quantity})
</td>
</tr>

View File

@@ -235,7 +235,7 @@ export function QuoteRegistration({
const productsToUse = categoryProducts || finishedGoods;
const sampleData = generateQuoteData({
clients: clients.map(c => ({ id: c.id, name: c.vendorName })),
products: productsToUse.map(p => ({ code: p.item_code, name: p.item_name, category: p.category })),
products: productsToUse.map(p => ({ code: p.item_code, name: p.item_name, category: p.item_category })),
category: selectedCategory,
});
@@ -1263,8 +1263,6 @@ export function QuoteRegistration({
config={config}
mode={editingQuote ? "edit" : "create"}
isLoading={isLoading}
isSubmitting={isSaving}
onBack={onBack}
onCancel={onBack}
onSubmit={handleSubmit}
renderForm={renderFormContent}

View File

@@ -266,14 +266,15 @@ export function QuoteRegistrationV2({
}
const testData: QuoteFormDataV2 = {
quoteNumber: "",
registrationDate: getLocalDateString(new Date()),
writer: writerName,
clientId: clients[0]?.id?.toString() || "",
clientName: clients[0]?.company_name || "테스트 거래처",
clientName: clients[0]?.vendorName || "테스트 거래처",
siteName: "테스트 현장",
manager: "홍길동",
contact: "010-1234-5678",
dueDate: getDateAfterDays(7),
vatType: "included",
remarks: "[DevFill] 테스트 견적입니다.",
status: "draft",
locations: testLocations,

View File

@@ -932,7 +932,6 @@ export interface BomCalculationResult {
}>;
subtotals: Record<string, { name?: string; count?: number; subtotal?: number; items?: unknown[] } | number>;
grand_total: number;
variables?: Record<string, unknown>; // 계산된 변수들
debug_steps?: Array<{ step: number; name: string; data: Record<string, unknown> }>; // 10단계 계산 과정
}