Fix pre-order submit by resolving company from cart items and refreshing cart first.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -40,6 +40,12 @@ export function useCartPage() {
|
||||
submitting.value = true
|
||||
submitError.value = ''
|
||||
try {
|
||||
// همگامسازی سبد با سرور قبل از ثبت تا productId/companyId کهنه نباشد
|
||||
await cartStore.hydrate()
|
||||
if (!cartStore.activeCart?.items.length) {
|
||||
submitError.value = 'سبد خرید خالی است یا با سرور همگام نشد.'
|
||||
return
|
||||
}
|
||||
const order = await orderStore.submitOrder(cartStore.activeCart)
|
||||
await cartStore.hydrate()
|
||||
router.replace(`/orders/${order.id}/success`)
|
||||
|
||||
+16
-7
@@ -119,10 +119,6 @@ export const useOrderStore = defineStore('order', () => {
|
||||
* روش تسویه را انتخاب میکند.
|
||||
*/
|
||||
async function submitOrder(cart: Cart): Promise<Order> {
|
||||
const companyId = cart.companyId || cart.items[0]?.companyId || ''
|
||||
if (!companyId) {
|
||||
throw new Error('شرکت سبد مشخص نیست.')
|
||||
}
|
||||
if (!cart.items.length) {
|
||||
throw new Error('سبد خرید خالی است.')
|
||||
}
|
||||
@@ -130,15 +126,28 @@ export const useOrderStore = defineStore('order', () => {
|
||||
throw new Error('سبد خرید با سرور همگام نیست. لطفاً دوباره محصولات را به سبد اضافه کنید.')
|
||||
}
|
||||
|
||||
const companyItems = cart.items.filter((item) => item.companyId === companyId)
|
||||
const itemsForOrder = companyItems.length ? companyItems : cart.items
|
||||
// شرکت را از خود آیتمها بگیر؛ هدر سبد گاهی با شرکت واقعی آیتمها ناسازگار است.
|
||||
const companyIds = [
|
||||
...new Set(cart.items.map((item) => item.companyId).filter(Boolean)),
|
||||
]
|
||||
if (!companyIds.length) {
|
||||
throw new Error('شرکت سبد مشخص نیست. سبد را خالی کنید و دوباره اضافه کنید.')
|
||||
}
|
||||
if (companyIds.length > 1) {
|
||||
throw new Error(
|
||||
'سبد شامل چند شرکت است. فعلاً فقط اقلام یک شرکت را نگه دارید و ثبت کنید.',
|
||||
)
|
||||
}
|
||||
|
||||
const companyId = companyIds[0]!
|
||||
const itemsForOrder = cart.items.filter((item) => item.companyId === companyId)
|
||||
|
||||
const body = {
|
||||
companyId,
|
||||
notes: cart.notes,
|
||||
items: itemsForOrder.map((item) => ({
|
||||
productId: item.productId,
|
||||
meterage: item.meterage,
|
||||
meterage: Number(item.meterage),
|
||||
notes: item.notes,
|
||||
})),
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user