feat(WEB): Vercel 배포 대응 및 타입 안정성 개선

- puppeteer → puppeteer-core + @sparticuz/chromium 전환 (Vercel 서버리스 호환)
- PDF 생성 API 로컬/Vercel 환경 분기 처리
- next.config.ts: ignoreBuildErrors false로 전환
- WorkOrder items에 orderNodeId/orderNodeName 필드 추가
- 결재선 데이터에 name/dept 필드 추가
- OrderSalesDetailView 타입 캐스팅 안전하게 수정
- vercel.json 설정 추가

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
유병철
2026-02-09 10:45:57 +09:00
parent f3b07ac875
commit f320ec7d37
20 changed files with 226 additions and 269 deletions

View File

@@ -154,9 +154,10 @@ export function LocationDetailPanel({
Object.entries(subtotals).forEach(([key, value]) => {
if (typeof value === "object" && value !== null) {
const obj = value as { name?: string };
tabs.push({
value: key,
label: value.name || key,
label: obj.name || key,
});
}
});

View File

@@ -10,6 +10,7 @@
import React from 'react';
import type { QuoteFormDataV2 } from './QuoteRegistrationV2';
import type { BomCalculationResultItem } from './types';
// 양식 타입
type TemplateType = 'vendor' | 'calculation';
@@ -327,7 +328,7 @@ export function QuotePreviewContent({
{/* BOM 품목 상세 */}
{bomItems.length > 0 ? (
bomItems.map((item, itemIndex) => (
bomItems.map((item: BomCalculationResultItem, itemIndex: number) => (
<tr key={`${loc.id}-${itemIndex}`} className="border-b border-gray-200">
<td className="border-r border-gray-300 px-2 py-1 text-center text-gray-500">
{itemIndex === 0 ? locationSymbol : ''}

View File

@@ -108,10 +108,11 @@ export function QuoteSummaryPanel({
unitPrice: item.unit_price || 0,
totalPrice: item.total_price || 0,
}));
const obj = value as { name?: string; count?: number; subtotal?: number };
result.push({
label: value.name || key,
count: value.count || 0,
amount: value.subtotal || 0,
label: obj.name || key,
count: obj.count || 0,
amount: obj.subtotal || 0,
items: groupItems,
});
} else if (typeof value === "number") {

View File

@@ -32,6 +32,7 @@ import type {
BomCalculationResultItem,
BomCalculationResult,
} from './types';
export type { BomCalculationResult, BomCalculationResultItem };
import { transformApiToFrontend, transformFrontendToApi } from './types';
// ===== 페이지네이션 타입 =====