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:
2026-08-15 08:03:56 +02:00
co-authored by Cursor
parent 1ecdc29daa
commit 800b950a46
2 changed files with 22 additions and 7 deletions
+6
View File
@@ -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
View File
@@ -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,
})),
}