Fix checkout order submit payload and cash settlement UX.

Drop non-whitelisted fields that caused 400 on POST /orders, prevent double submit on checks, and only show cash success after create succeeds.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-08 14:55:34 +03:30
co-authored by Cursor
parent 72cc6000f1
commit b788fe069e
3 changed files with 64 additions and 15 deletions
+39 -9
View File
@@ -115,21 +115,36 @@ 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 body = {
companyId,
settlementType,
settlementMethod: settlementType,
checkMode: settlementType === 'check' ? (checkMode ?? 'full') : undefined,
notes: cart.notes,
items: cart.items.map((item) => ({
items: itemsForOrder.map((item) => ({
productId: item.productId,
meterage: item.meterage,
requestedMeterage: item.meterage,
notes: item.notes,
})),
checks:
settlementType === 'check' && checks
? checks.map(({ id: _id, ...rest }) => rest)
? checks.map((c) => ({
amount: c.amount,
dueDate: c.dueDate,
sayadId: c.sayadId,
checkNumber: c.checkNumber,
ownerNationalId: c.ownerNationalId,
ownerFirstName: c.ownerFirstName,
ownerLastName: c.ownerLastName,
bankName: c.bankName,
branchName: c.branchName,
frontImage: c.frontImage,
backImage: c.backImage,
notes: c.notes,
mode: c.mode,
}))
: undefined,
}
@@ -154,7 +169,7 @@ export const useOrderStore = defineStore('order', () => {
receipt: Omit<CashPaymentReceipt, 'id' | 'submittedAt'>,
) {
try {
const order = await apiRequest<Order>(`/orders/${orderId}/cash-receipt`, {
await apiRequest(`/orders/${orderId}/cash-receipt`, {
method: 'POST',
body: {
amount: receipt.amount,
@@ -166,9 +181,10 @@ export const useOrderStore = defineStore('order', () => {
notes: receipt.notes,
},
})
const idx = orders.value.findIndex((o) => o.id === orderId)
if (idx >= 0) orders.value[idx] = order
else orders.value.unshift(order)
const order = await fetchOrder(orderId)
if (!order) {
throw new Error('رسید ثبت شد ولی دریافت سفارش ناموفق بود.')
}
return order
} catch (e) {
throw new Error(e instanceof ApiError ? e.message : 'ثبت رسید ناموفق بود.')
@@ -180,7 +196,21 @@ export const useOrderStore = defineStore('order', () => {
const order = await apiRequest<Order>(`/orders/${orderId}/checks`, {
method: 'PATCH',
body: {
checks: checks.map(({ id: _id, ...rest }) => rest),
checks: checks.map((c) => ({
amount: c.amount,
dueDate: c.dueDate,
sayadId: c.sayadId,
checkNumber: c.checkNumber,
ownerNationalId: c.ownerNationalId,
ownerFirstName: c.ownerFirstName,
ownerLastName: c.ownerLastName,
bankName: c.bankName,
branchName: c.branchName,
frontImage: c.frontImage,
backImage: c.backImage,
notes: c.notes,
mode: c.mode,
})),
},
})
const idx = orders.value.findIndex((o) => o.id === orderId)