瀏覽代碼

fix(admin): prevent null pointer error in handleSaveOrder

unknown 3 月之前
父節點
當前提交
e77579980e
共有 1 個文件被更改,包括 22 次插入8 次删除
  1. 22 8
      src/pages/Admin.vue

+ 22 - 8
src/pages/Admin.vue

@@ -719,18 +719,32 @@ async function handleSavePost() {
   } catch (err: any) { toast.error(err.message); }
 }
 async function handleSaveOrder() {
-  if (!editingOrder.value) return;
+  const order = editingOrder.value;
+  if (!order) return;
+  
   try {
-    await adminUpdateOrder(editingOrder.value.id, orderForm);
-    // Optimistic local update
-    editingOrder.value.invoice_amount = orderForm.total_price;
-    const idx = orders.value.findIndex(o => o.id === editingOrder.value.id);
-    if (idx !== -1) orders.value[idx].invoice_amount = orderForm.total_price;
+    await adminUpdateOrder(order.id, orderForm);
+    
+    // Optimistic local update with safety checks
+    if (editingOrder.value && editingOrder.value.id === order.id) {
+      editingOrder.value.invoice_amount = orderForm.total_price;
+    }
+    
+    const idx = orders.value.findIndex(o => o.id === order.id);
+    if (idx !== -1) {
+      orders.value[idx].invoice_amount = orderForm.total_price;
+      orders.value[idx].quantity = orderForm.quantity;
+    }
     
     closeModals(); 
-    setTimeout(fetchData, 500); // Slight delay to ensure DB consistency
     toast.success("Order updated");
-  } catch (err: any) { toast.error(err.message); }
+    
+    // Refresh to be sure
+    setTimeout(fetchData, 300);
+  } catch (err: any) { 
+    console.error("Save order error:", err);
+    toast.error(err.message || "Failed to save order"); 
+  }
 }
 
 async function handleSaveUser() { try { await adminCreateUser(userForm); closeModals(); fetchUsers(); } catch (err: any) { toast.error(err.message); } }