# 採購單列表頁面改版文件 ## 📋 改版目標 1. 改善採購單列表的資訊層級與可讀性 2. 使用者能快速辨識每張採購單的來源(由誰發起,以及從哪個單位發出) 3. 僅在合約允許的範圍內做 UI 調整,不擴充額外功能 4. 保留既有的建立採購單、搜尋、篩選、驗收等功能 ## ✅ 完成的改版項目 ### 1. 新增必要欄位(業務需求) #### 申請人(採購人) - **顯示內容**: 採購單建立者的姓名 - **資料來源**: `PurchaseOrder.createdBy` - **顯示位置**: 與申請單位合併顯示於「申請資訊」欄位 - **用途**: 辨識責任歸屬、快速找到聯絡人 #### 申請單位(來源單位) - **顯示內容**: 發起採購的部門/門市(總店、A 店、B 店等) - **資料來源**: `PurchaseOrder.department` - **顯示位置**: 與申請人合併顯示於「申請資訊」欄位 - **用途**: 判斷採購流程流向(由誰驗收、要送去哪裡) #### 建立日期 - **顯示內容**: 採購單建立的日期 - **資料來源**: `PurchaseOrder.createdAt` - **顯示位置**: 獨立欄位,位於廠商與預計到貨日之間 - **用途**: 催貨、追進度 ### 2. 欄位排序優化 新的欄位順序(左至右): 1. **採購單編號** - 帶複製按鈕,方便複製分享 2. **申請資訊** - 顯示「申請單位」與「申請人」 3. **廠商** - 供應商名稱 4. **建立日期** - 採購單建立時間 5. **預計到貨日** - 預期到貨時間 6. **總金額** - 右對齊,易於比較 7. **狀態** - 使用彩色徽章 8. **操作** - 驗收/編輯/取消按鈕 ### 3. 視覺優化 #### 狀態顯示樣式 所有狀態統一使用灰色線框徽章(outline variant),不以顏色做區分: - **待寄出** - **待發貨** - **運送中** - **已到貨(待驗收)** - **已完成** - **已取消** 保持一致的視覺風格,讓使用者專注於狀態文字本身。 #### 操作按鈕視覺層級 **主要動作(驗收)** - 使用實心按鈕 `button-filled-primary` - 僅在「已到貨(待驗收)」狀態顯示 - 包含圖示 + 文字 **次要動作(編輯)** - 使用線框按鈕 `button-outlined-primary` - 僅顯示圖示(節省空間) - 包含 tooltip 說明 **高風險動作(取消)** - 使用紅色線框按鈕 - 明確的紅色邊框和文字 - hover 時加強視覺效果 ### 4. 使用者體驗優化 #### 複製採購單編號功能 - 點擊採購單編號旁的複製按鈕 - 自動複製到剪貼簿 - 顯示成功提示訊息 - 按鈕圖示從「複製」變為「打勾」2 秒 #### 搜尋提示優化 - **舊**: "搜尋採購單編號或廠商..." - **新**: "搜尋採購單編號 / 廠商名稱" - 更明確的斜線分隔,清楚說明可搜尋內容 #### 申請資訊顯示 採用雙行顯示,節省水平空間: ``` 總店 ← 申請單位(較大、粗體) 王小華 ← 申請人(較小、灰色) ``` #### 採購單編號顯示 - 使用 `font-mono` 等寬字體 - 易於閱讀和比對 - 搭配複製按鈕 ## 📊 資料結構更新 ### PurchaseOrder 型別新增欄位 ```typescript export interface PurchaseOrder { // ... 既有欄位 createdBy: string; // 申請人(採購人) department: string; // 申請單位 } ``` ### Mock 資料範例 ```typescript { id: "po-1", poNumber: "PO202411001", supplierId: "sup-1", supplierName: "美食材料供應商", expectedDate: "2024-11-25", status: "arrived", createdBy: "王小華", // 新增 department: "總店", // 新增 items: [...], totalAmount: 3300, createdAt: "2024-11-18", } ``` ## 🎨 UI 元件更新 ### 新增元件 1. **CopyButton** (`/components/shared/CopyButton.tsx`) - 通用複製按鈕元件 - 支援複製任意文字 - 包含視覺回饋(圖示切換、Toast 提示) ### 更新元件 1. **StatusBadge** (`/components/shared/StatusBadge.tsx`) - 支援新的顏色系統 - 動態顯示背景色、文字色、邊框色 2. **PurchaseOrderTable** (`/components/PurchaseOrderTable.tsx`) - 調整欄位順序和寬度 - 新增申請資訊欄位 - 整合 CopyButton - 優化表格佈局 3. **PurchaseOrderActions** (`/components/purchase-order/PurchaseOrderActions.tsx`) - 調整按鈕視覺層級 - 取消按鈕使用紅色強調 - 新增 tooltip 說明 4. **PurchaseOrderFilters** (`/components/purchase-order/PurchaseOrderFilters.tsx`) - 更新搜尋框 placeholder ## 🔄 資料流 ### 建立採購單時 ``` 使用者填寫表單 ↓ 系統自動帶入: - createdBy: "系統使用者"(實際應從登入狀態取得) - department: "總店"(實際應從使用者資料取得) ↓ 儲存至資料庫 ``` ### 列表顯示時 ``` 從資料庫讀取 PurchaseOrder[] ↓ 表格顯示: - 申請資訊: department / createdBy - 建立日期: createdAt - 其他既有欄位 ``` ## 📝 實作注意事項 ### 1. 使用者身分整合 目前使用預設值,實際部署時需要: - 從登入系統取得當前使用者姓名 - 從使用者資料取得所屬單位 - 在建立採購單時自動填入 ```typescript // 實際應用時的範例 const currentUser = useAuth(); // 取得登入使用者 const newOrder = { // ... createdBy: currentUser.name, department: currentUser.department, }; ``` ### 2. 表格寬度控制 各欄位寬度設定: - 採購單編號: 140px - 申請資訊: 180px(雙行顯示) - 廠商: 160px - 建立日期: 110px - 預計到貨日: 110px - 總金額: 110px - 狀態: 140px - 操作: 自動 ### 3. 響應式設計 - 使用 `overflow-x-auto` 支援水平捲動 - 在小螢幕上保持完整功能 - 建議最小寬度: 1200px ### 4. 暗色模式支援 所有顏色都包含 `dark:` 變體: - 文字顏色 - 背景顏色 - 邊框顏色 ## ✨ 改版效益 ### 資訊完整性 - ✅ 清楚知道採購單來源 - ✅ 快速辨識責任歸屬 - ✅ 方便追蹤進度 ### 使用者體驗 - ✅ 一鍵複製採購單編號 - ✅ 視覺層級更清晰 - ✅ 狀態一目了然 ### 操作效率 - ✅ 減少點擊次數 - ✅ 重要動作突出 - ✅ 危險操作有警示 ### 可維護性 - ✅ 資料結構完整 - ✅ 元件化設計 - ✅ 易於擴充 ## 🚫 未包含的功能(避免超出範圍) - ❌ 採購單 KPI - ❌ 異常分析 - ❌ 批次、效期資料 - ❌ 自動催貨機制 - ❌ 寄出通知提醒 - ❌ 採購單歷史比較 - ❌ 供應商評分系統 - ❌ 進階追蹤與報表 ## 🎯 總結 此次改版專注於**必要的資訊補充**和**使用者體驗優化**,所有調整均在合約範圍內,未增加額外功能。透過新增申請人、申請單位、建立日期等欄位,以及優化視覺呈現和操作體驗,大幅提升了採購單列表的可用性和資訊完整性。