今天是鐵人賽 Day23,目標是讓管理者後台可以新增、刪除與修改商品,並優化會員管理顯示,同時調整註冊頁面選項。
1️⃣ 新增商品功能
今天在 AdminDashboard.jsx 中完成商品新增表單,支援多張圖片上傳,並串接後端商品 API:
const handleAddProduct = async (e) => {
e.preventDefault();
const formData = new FormData();
formData.append("name", name);
formData.append("price", price);
formData.append("description", description);
formData.append("stock", stock);
formData.append("category", category);
images.forEach((img) => formData.append("images", img));
await axios.post("/api/products", formData, {
headers: {
"Content-Type": "multipart/form-data",
Authorization: `Bearer ${token}`
},
});
fetchProducts(); // 新增後重新載入商品列表
};
使用 FormData 上傳多張圖片
成功新增商品後清空表單並顯示提示訊息
2️⃣ 修改商品功能
每個商品卡片下方新增「修改」按鈕,可編輯名稱、價格、描述、庫存、分類與圖片:
<button
className="flex-1 py-2 rounded text-center transition"
style={{ backgroundColor: "#C2A68C", color: "#fff" }}
onClick={() => handleEditProduct(p)}
>
修改
</button>
點擊按鈕會自動將商品資料填入表單
修改按鈕使用自定義色碼 #C2A68C
修改成功後重新載入商品列表並顯示提示訊息
3️⃣ 會員管理顯示優化
將「✅ 成功取得會員資料,總數:3」的提示文字移動到會員管理標題下方,更直覺地顯示會員資料總數:
<h3 className="text-2xl font-semibold text-gray-800">會員管理</h3>
<p className="mb-4 text-gray-700 font-semibold">{testResult}</p>
4️⃣ 註冊頁面調整
將註冊頁面中的「身分選項」給刪除了,讓所有新註冊的使用者預設為一般會員,避免使用者自行選擇身分造成管理混亂。
5️⃣ 功能重點
商品新增與修改整合於同一表單
支援多張圖片上傳與更新
商品刪除功能保持原有運作
會員資料載入後顯示總數提示
註冊頁面簡化身分選項
按鈕與表單 UI 維持統一風格
6️⃣ 測試流程
新增商品 → 檢查商品列表是否更新
修改商品 → 確認表單填入正確資料,更新後商品列表反映變更
刪除商品 → 確認商品消失
會員列表 → 確認總數提示正確
註冊新會員 → 身分預設為一般會員
🐛 遇到的問題與解決
問題:商品修改功能需要同時更新多張圖片
解決:使用 FormData 重新上傳全部圖片,後端更新後重新載入商品列表
💡 Day23 收穫