# 甜點店 ERP 系統 - 專案結構說明 ## 📁 專案架構 ``` / ├── types/ # 型別定義 │ └── purchase-order.ts # 採購單相關型別 │ ├── constants/ # 常數定義 │ └── purchase-order.ts # 採購單相關常數 │ ├── utils/ # 工具函式 │ └── purchase-order.ts # 採購單相關工具函式 │ ├── hooks/ # 自定義 Hooks │ ├── usePurchaseOrderForm.ts # 採購單表單管理 │ └── useInspection.ts # 驗收流程管理 │ ├── components/ # 元件 │ ├── shared/ # 共用元件 │ │ ├── StatusBadge.tsx # 狀態徽章 │ │ └── Breadcrumb.tsx # 麵包屑導航 │ │ │ ├── purchase-order/ # 採購單相關元件 │ │ ├── PurchaseOrderFilters.tsx # 篩選器 │ │ ├── PurchaseOrderActions.tsx # 操作按鈕 │ │ └── PurchaseOrderItemsTable.tsx # 商品表格 │ │ │ ├── inspection/ # 驗收相關元件 │ │ ├── InspectionTable.tsx # 驗收明細表格 │ │ └── InspectionSummary.tsx # 驗收統計摘要 │ │ │ ├── PurchaseOrderManagement.tsx # 採購單管理頁面 │ ├── PurchaseOrderTable.tsx # 採購單列表 │ ├── CreatePurchaseOrderPage.tsx # 建立/編輯採購單頁面 │ ├── InspectionPage.tsx # 驗收頁面 │ ├── NavigationSidebar.tsx # 側邊導航 │ └── ui/ # UI 基礎元件庫 │ └── App.tsx # 主應用程式 ``` ## 🎯 模組說明 ### 1. 型別定義 (`/types`) - 集中管理所有資料型別 - 提供型別安全和 IntelliSense 支援 - 便於維護和修改資料結構 ### 2. 常數定義 (`/constants`) - 狀態配置、流轉規則 - 異常原因選項 - 閾值設定 - 避免魔法數字和重複定義 ### 3. 工具函式 (`/utils`) - 金額格式化 - 價格計算和驗證 - 日期處理 - 表單驗證 - 純函式,易於測試 ### 4. 自定義 Hooks (`/hooks`) - **usePurchaseOrderForm**: 採購單表單狀態管理 - 表單資料管理 - 商品項目 CRUD - 自動計算 - **useInspection**: 驗收流程管理 - 驗收項目狀態 - 數量調整邏輯 - 統計計算 ### 5. 共用元件 (`/components/shared`) - 可重用的 UI 元件 - 與業務邏輯解耦 - 提高開發效率 ### 6. 功能模組元件 (`/components/purchase-order`, `/components/inspection`) - 按功能分組 - 單一職責 - 易於維護和測試 ## 📋 程式碼最佳化重點 ### ✅ 已完成的優化 1. **模組化拆分** - 型別、常數、工具函式獨立管理 - 大型元件拆分為小元件 - 按功能分組組織 2. **程式碼簡化** - 移除重複邏輯 - 提取共用函式 - 統一命名規範 3. **可維護性提升** - 清晰的檔案結構 - 單一職責原則 - 型別安全保證 4. **可擴充性增強** - 低耦合設計 - 可重用元件 - 易於新增功能 5. **程式碼品質** - 移除未使用的變數和 import - 簡化條件判斷 - 語意化命名 - 適度註解 ## 🔄 資料流 ``` App.tsx (主狀態) ↓ PurchaseOrderManagement (頁面) ↓ PurchaseOrderTable (列表) ↓ PurchaseOrderFilters (篩選) + PurchaseOrderActions (操作) ``` ``` CreatePurchaseOrderPage (頁面) ↓ usePurchaseOrderForm (Hook - 表單邏輯) ↓ PurchaseOrderItemsTable (商品表格) ``` ``` InspectionPage (頁面) ↓ useInspection (Hook - 驗收邏輯) ↓ InspectionTable (驗收表格) + InspectionSummary (統計) ``` ## 🚀 使用範例 ### 使用型別定義 ```typescript import type { PurchaseOrder, PurchaseOrderStatus } from "../types/purchase-order"; ``` ### 使用常數 ```typescript import { STATUS_CONFIG, PRICE_ALERT_THRESHOLD } from "../constants/purchase-order"; ``` ### 使用工具函式 ```typescript import { formatCurrency, isPriceAlert } from "../utils/purchase-order"; ``` ### 使用 Hooks ```typescript import { usePurchaseOrderForm } from "../hooks/usePurchaseOrderForm"; const { items, addItem, updateItem } = usePurchaseOrderForm({ order, suppliers }); ``` ## 📝 注意事項 1. **型別安全**: 所有元件都使用 TypeScript 型別定義 2. **命名規範**: 使用語意化的變數和函式名稱 3. **單一職責**: 每個模組/元件只負責一個功能 4. **向後相容**: 保持所有現有功能不變 5. **可測試性**: 純函式和 Hooks 易於單元測試 ## 🔧 未來擴充建議 1. 可考慮新增 `/services` 目錄處理 API 呼叫 2. 可新增 `/contexts` 目錄使用 Context API 管理全域狀態 3. 可新增 `/tests` 目錄加入單元測試和整合測試 4. 可考慮使用狀態管理庫(如 Zustand)簡化狀態管理