|
@@ -102,24 +102,30 @@ const displayCartList = computed(() => {
|
|
|
return cartList.value;
|
|
return cartList.value;
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-// 展示用总数量:优先接口 totalQuantity,否则从列表计算
|
|
|
|
|
|
|
+// 行小计:接口项用 subtotalAmount,否则 数量×单价(与 BottomActionBar/CartModal 一致)
|
|
|
|
|
+const getItemLinePrice = (item) => {
|
|
|
|
|
+ if (item?.subtotalAmount != null) return Number(item.subtotalAmount);
|
|
|
|
|
+ const qty = Number(item?.quantity) || 0;
|
|
|
|
|
+ const unitPrice = Number(item?.unitPrice ?? item?.price ?? item?.salePrice ?? item?.totalPrice ?? 0) || 0;
|
|
|
|
|
+ return qty * unitPrice;
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+// 展示用总数量:优先接口/本地 cartData.totalQuantity,否则从展示列表计算
|
|
|
const displayTotalQuantity = computed(() => {
|
|
const displayTotalQuantity = computed(() => {
|
|
|
- if (Array.isArray(cartData.value?.items) && cartData.value.items.length > 0 && cartData.value.totalQuantity != null) {
|
|
|
|
|
- return cartData.value.totalQuantity;
|
|
|
|
|
|
|
+ const apiItems = cartData.value?.items;
|
|
|
|
|
+ if (Array.isArray(apiItems) && apiItems.length > 0 && cartData.value?.totalQuantity != null) {
|
|
|
|
|
+ return Number(cartData.value.totalQuantity);
|
|
|
}
|
|
}
|
|
|
return displayCartList.value.reduce((sum, item) => sum + (Number(item?.quantity) || 0), 0);
|
|
return displayCartList.value.reduce((sum, item) => sum + (Number(item?.quantity) || 0), 0);
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
-// 展示用总金额:优先接口 totalAmount,否则从列表计算
|
|
|
|
|
|
|
+// 展示用总金额:优先接口/本地 cartData.totalAmount,否则从展示列表按行小计累加
|
|
|
const displayTotalAmount = computed(() => {
|
|
const displayTotalAmount = computed(() => {
|
|
|
- if (Array.isArray(cartData.value?.items) && cartData.value.items.length > 0 && cartData.value.totalAmount != null) {
|
|
|
|
|
- return cartData.value.totalAmount;
|
|
|
|
|
|
|
+ const apiItems = cartData.value?.items;
|
|
|
|
|
+ if (Array.isArray(apiItems) && apiItems.length > 0 && cartData.value?.totalAmount != null) {
|
|
|
|
|
+ return Number(cartData.value.totalAmount);
|
|
|
}
|
|
}
|
|
|
- return displayCartList.value.reduce((sum, item) => {
|
|
|
|
|
- const qty = Number(item?.quantity) || 0;
|
|
|
|
|
- const price = Number(item?.subtotalAmount ?? item?.unitPrice ?? item?.price ?? item?.totalPrice ?? 0) || 0;
|
|
|
|
|
- return sum + (item?.subtotalAmount != null ? Number(item.subtotalAmount) : qty * price);
|
|
|
|
|
- }, 0);
|
|
|
|
|
|
|
+ return displayCartList.value.reduce((sum, item) => sum + getItemLinePrice(item), 0);
|
|
|
});
|
|
});
|
|
|
|
|
|
|
|
// 优惠券列表(示例数据)
|
|
// 优惠券列表(示例数据)
|
|
@@ -336,14 +342,22 @@ const updateFoodQuantity = (food, delta) => {
|
|
|
const totalQuantity = nextItems.reduce((s, i) => s + (Number(i.quantity) || 0), 0);
|
|
const totalQuantity = nextItems.reduce((s, i) => s + (Number(i.quantity) || 0), 0);
|
|
|
cartData.value = { ...cartData.value, items: nextItems, totalAmount, totalQuantity };
|
|
cartData.value = { ...cartData.value, items: nextItems, totalAmount, totalQuantity };
|
|
|
}
|
|
}
|
|
|
- // 增加数量且商品数量 >= 1 时调用 /store/order/cart/update
|
|
|
|
|
- if (delta > 0 && nextQty >= 1 && tableId.value) {
|
|
|
|
|
- const params = {
|
|
|
|
|
- cuisineId: id,
|
|
|
|
|
- quantity: nextQty,
|
|
|
|
|
- tableId: tableId.value
|
|
|
|
|
|
|
+ // 有数量变化且桌号存在时调接口:购物车没有当前商品或数量从 0 增加到 1(刚清空后重加)则 add,否则 update
|
|
|
|
|
+ if (tableId.value && delta !== 0) {
|
|
|
|
|
+ const needAdd = delta > 0 && (idx < 0 || nextQty === 1);
|
|
|
|
|
+ if (needAdd) {
|
|
|
|
|
+ PostOrderCartAdd({
|
|
|
|
|
+ cuisineId: id,
|
|
|
|
|
+ quantity: nextQty,
|
|
|
|
|
+ tableId: tableId.value
|
|
|
|
|
+ }).catch((err) => console.error('加入购物车失败:', err));
|
|
|
|
|
+ } else {
|
|
|
|
|
+ PostOrderCartUpdate({
|
|
|
|
|
+ cuisineId: id,
|
|
|
|
|
+ quantity: nextQty,
|
|
|
|
|
+ tableId: tableId.value
|
|
|
|
|
+ }).catch((err) => console.error('更新购物车失败:', err));
|
|
|
}
|
|
}
|
|
|
- PostOrderCartUpdate(params).catch((err) => console.error('更新购物车失败:', err));
|
|
|
|
|
}
|
|
}
|
|
|
};
|
|
};
|
|
|
|
|
|