/** * 生產工單狀態流程條組件 */ import { Check } from "lucide-react"; import { ProductionOrderStatus, PRODUCTION_ORDER_STATUS } from "@/constants/production-order"; interface ProductionStatusProgressBarProps { currentStatus: ProductionOrderStatus; } // 流程步驟定義 const FLOW_STEPS: { key: ProductionOrderStatus; label: string }[] = [ { key: PRODUCTION_ORDER_STATUS.DRAFT, label: "草稿" }, { key: PRODUCTION_ORDER_STATUS.PENDING, label: "簽核中" }, { key: PRODUCTION_ORDER_STATUS.APPROVED, label: "已核准" }, { key: PRODUCTION_ORDER_STATUS.IN_PROGRESS, label: "製作中" }, { key: PRODUCTION_ORDER_STATUS.COMPLETED, label: "製作完成" }, ]; export function ProductionStatusProgressBar({ currentStatus }: ProductionStatusProgressBarProps) { // 對於已作廢狀態,我們顯示到它作廢前的最後一個有效狀態(通常顯示到核准後或簽核中) // 這裡我們比照採購單邏輯,如果已作廢,可能停在最後一個有效位置 const effectiveStatus = currentStatus === PRODUCTION_ORDER_STATUS.CANCELLED ? PRODUCTION_ORDER_STATUS.PENDING : currentStatus; // 找到當前狀態在流程中的位置 const currentIndex = FLOW_STEPS.findIndex((step) => step.key === effectiveStatus); return (

生產工單處理進度

{/* 進度條背景 */}
{/* 進度條進度 */} {currentIndex >= 0 && (
)} {/* 步驟標記 */}
{FLOW_STEPS.map((step, index) => { const isCompleted = index < currentIndex; const isCurrent = index === currentIndex; const isRejectedAtThisStep = currentStatus === PRODUCTION_ORDER_STATUS.CANCELLED && step.key === PRODUCTION_ORDER_STATUS.PENDING; return (
{/* 圓點 */}
{isCompleted && !isRejectedAtThisStep ? ( ) : ( {index + 1} )}
{/* 標籤 */}

{isRejectedAtThisStep ? "已作廢" : step.label}

); })}
); }