fix: 订单详情支付凭证, 退款
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m34s

This commit is contained in:
sexygoat
2026-05-11 18:01:22 +08:00
parent 1990a3ccba
commit 5d20d7dd3f
6 changed files with 81 additions and 40 deletions

View File

@@ -26,7 +26,7 @@
<ElFormItem label="申请退款金额" prop="requested_refund_amount">
<ElInputNumber
v-model="formData.requested_refund_amount"
:min="0"
:min="0.01"
:precision="2"
:step="1"
style="width: 100%"
@@ -64,6 +64,7 @@
import type { FormInstance, FormRules } from 'element-plus'
import { RefundService, OrderService } from '@/api/modules'
import type { CreateRefundRequest, Order } from '@/types/api'
import { formatMoney, yuanToFen } from '@/utils/business/format'
interface Props {
modelValue: boolean
@@ -89,20 +90,21 @@
const formData = reactive<{
order_id: number | null
requested_refund_amount: number
requested_refund_amount?: number
actual_received_amount: number
refund_reason: string
}>({
order_id: null,
requested_refund_amount: 0,
requested_refund_amount: undefined,
actual_received_amount: 0,
refund_reason: ''
})
const validateRefundAmount = (rule: any, value: number, callback: any) => {
if (value === undefined || value === null) {
callback(new Error('请输入申请退款金额'))
} else if (value > formData.actual_received_amount) {
const requestedRefundAmount = yuanToFen(value) ?? 0
if (value === undefined || value === null || value <= 0) {
callback(new Error('申请退款金额必须大于0'))
} else if (requestedRefundAmount > formData.actual_received_amount) {
callback(new Error('申请退款金额不能大于实收金额'))
} else {
callback()
@@ -120,11 +122,9 @@
const hasInitialOrder = computed(() => !!props.initialOrderId || !!props.initialOrderNo)
const selectedOrderActualPaid = computed(() => {
if (!formData.order_id) return 0
if (!formData.order_id) return '0.00'
const selectedOrder = orderSearchOptions.value.find((o) => o.id === formData.order_id)
if (!selectedOrder?.actual_paid_amount) return 0
const amount = selectedOrder.actual_paid_amount / 100
return isNaN(amount) ? 0 : amount
return formatMoney(selectedOrder?.actual_paid_amount ?? 0, false)
})
const searchOrders = async (query: string) => {
@@ -146,7 +146,7 @@
)
if (matchedOrder) {
formData.order_id = matchedOrder.id
formData.actual_received_amount = (matchedOrder.actual_paid_amount || 0) / 100
formData.actual_received_amount = matchedOrder.actual_paid_amount ?? 0
}
}
}
@@ -164,14 +164,14 @@
}
const selectedOrder = orderSearchOptions.value.find((o) => o.id === orderId)
if (selectedOrder) {
formData.actual_received_amount = selectedOrder.actual_paid_amount / 100
formData.actual_received_amount = selectedOrder.actual_paid_amount ?? 0
}
}
const handleDialogClosed = () => {
formRef.value?.resetFields()
formData.order_id = null
formData.requested_refund_amount = 0
formData.requested_refund_amount = undefined
formData.actual_received_amount = 0
formData.refund_reason = ''
orderSearchOptions.value = []
@@ -186,8 +186,8 @@
try {
const data: CreateRefundRequest = {
order_id: formData.order_id!,
requested_refund_amount: formData.requested_refund_amount * 100,
actual_received_amount: formData.actual_received_amount * 100,
requested_refund_amount: yuanToFen(formData.requested_refund_amount) ?? 0,
actual_received_amount: formData.actual_received_amount,
refund_reason: formData.refund_reason || undefined
}
await RefundService.createRefund(data)