diff --git a/backend/cmd/server/VERSION b/backend/cmd/server/VERSION index e534f2aacd..9a65da79f8 100644 --- a/backend/cmd/server/VERSION +++ b/backend/cmd/server/VERSION @@ -1 +1 @@ -0.1.108.140 +0.1.108.141 diff --git a/frontend/src/api/admin/payment.ts b/frontend/src/api/admin/payment.ts index a539e6d448..946c91b07e 100644 --- a/frontend/src/api/admin/payment.ts +++ b/frontend/src/api/admin/payment.ts @@ -102,7 +102,7 @@ export const adminPaymentAPI = { }, /** Process a refund */ - refundOrder(id: number, data: { amount: number; reason: string; deduct_balance?: boolean }) { + refundOrder(id: number, data: { amount: number; reason: string; deduct_balance?: boolean; force?: boolean }) { return apiClient.post(`/admin/payment/orders/${id}/refund`, data) }, diff --git a/frontend/src/components/admin/payment/AdminOrderDetail.vue b/frontend/src/components/admin/payment/AdminOrderDetail.vue index 5c2e5ae7f4..b10bc76b55 100644 --- a/frontend/src/components/admin/payment/AdminOrderDetail.vue +++ b/frontend/src/components/admin/payment/AdminOrderDetail.vue @@ -139,7 +139,7 @@ function statusBadgeClass(status: string): string { } function canRefund(order: PaymentOrder): boolean { - return ['COMPLETED', 'PARTIALLY_REFUNDED'].includes(order.status) + return ['COMPLETED', 'PARTIALLY_REFUNDED', 'REFUND_REQUESTED', 'REFUND_FAILED'].includes(order.status) } function formatDateTime(dateStr: string): string { diff --git a/frontend/src/components/admin/payment/AdminOrderTable.vue b/frontend/src/components/admin/payment/AdminOrderTable.vue index 14b1f93787..61ffbfa818 100644 --- a/frontend/src/components/admin/payment/AdminOrderTable.vue +++ b/frontend/src/components/admin/payment/AdminOrderTable.vue @@ -199,6 +199,8 @@ const statusFilterOptions = computed(() => [ { value: 'CANCELLED', label: t('payment.status.cancelled') }, { value: 'FAILED', label: t('payment.status.failed') }, { value: 'REFUNDED', label: t('payment.status.refunded') }, + { value: 'REFUND_REQUESTED', label: t('payment.status.refund_requested') }, + { value: 'REFUND_FAILED', label: t('payment.status.refund_failed') }, ]) const paymentTypeFilterOptions = computed(() => [ @@ -225,7 +227,7 @@ function statusBadgeClass(status: string): string { } function canRefund(order: PaymentOrder): boolean { - return ['COMPLETED', 'PARTIALLY_REFUNDED'].includes(order.status) + return ['COMPLETED', 'PARTIALLY_REFUNDED', 'REFUND_REQUESTED', 'REFUND_FAILED'].includes(order.status) } function formatDateTime(dateStr: string): string { diff --git a/frontend/src/components/admin/payment/AdminRefundDialog.vue b/frontend/src/components/admin/payment/AdminRefundDialog.vue index 0f78375cad..05e72befcf 100644 --- a/frontend/src/components/admin/payment/AdminRefundDialog.vue +++ b/frontend/src/components/admin/payment/AdminRefundDialog.vue @@ -6,6 +6,27 @@ @close="emit('cancel')" >