From 5d20d7dd3f103e9cdf5cbc14fde46fc5e4427171 Mon Sep 17 00:00:00 2001 From: sexygoat <1538832180@qq.com> Date: Mon, 11 May 2026 18:01:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=AE=A2=E5=8D=95=E8=AF=A6=E6=83=85?= =?UTF-8?q?=E6=94=AF=E4=BB=98=E5=87=AD=E8=AF=81,=20=E9=80=80=E6=AC=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/CreateRefundDialog.vue | 30 ++++++------ src/utils/business/format.ts | 12 +++++ .../asset-management/device-list/index.vue | 3 +- src/views/finance/refund/detail.vue | 14 ++---- src/views/finance/refund/index.vue | 16 ++----- .../order-management/order-list/detail.vue | 46 +++++++++++++++++-- 6 files changed, 81 insertions(+), 40 deletions(-) diff --git a/src/components/business/CreateRefundDialog.vue b/src/components/business/CreateRefundDialog.vue index 9af5c4a..e873038 100644 --- a/src/components/business/CreateRefundDialog.vue +++ b/src/components/business/CreateRefundDialog.vue @@ -26,7 +26,7 @@ ({ 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) diff --git a/src/utils/business/format.ts b/src/utils/business/format.ts index f3437f6..4d3ce55 100644 --- a/src/utils/business/format.ts +++ b/src/utils/business/format.ts @@ -28,6 +28,18 @@ export function formatMoney(fen: number | undefined, showSymbol = true): string return showSymbol ? `¥${yuan}` : yuan } +export function fenToYuan(fen: number | undefined | null): number { + if (fen === undefined || fen === null || Number.isNaN(fen)) return 0 + + return Number((fen / 100).toFixed(2)) +} + +export function yuanToFen(yuan: number | undefined | null): number | undefined { + if (yuan === undefined || yuan === null || Number.isNaN(yuan)) return undefined + + return Math.round(yuan * 100) +} + /** * 格式化手机号(中间4位隐藏) * @param phone 手机号 diff --git a/src/views/asset-management/device-list/index.vue b/src/views/asset-management/device-list/index.vue index d24c210..e2cdf2a 100644 --- a/src/views/asset-management/device-list/index.vue +++ b/src/views/asset-management/device-list/index.vue @@ -1357,7 +1357,8 @@ { prop: 'series_name', label: '套餐系列', - minWidth: 120 + minWidth: 180, + showOverflowTooltip: true }, { prop: 'device_model', diff --git a/src/views/finance/refund/detail.vue b/src/views/finance/refund/detail.vue index bdb24e1..e0a0153 100644 --- a/src/views/finance/refund/detail.vue +++ b/src/views/finance/refund/detail.vue @@ -176,7 +176,7 @@ RejectRefundRequest, ResubmitRefundRequest } from '@/types/api' - import { formatDateTime } from '@/utils/business/format' + import { formatDateTime, yuanToFen } from '@/utils/business/format' import { RoutesAlias } from '@/router/routesAlias' defineOptions({ name: 'RefundDetail' }) @@ -400,9 +400,7 @@ approveLoading.value = true try { const data: ApproveRefundRequest = { - approved_refund_amount: approveForm.approved_refund_amount - ? approveForm.approved_refund_amount * 100 - : undefined, + approved_refund_amount: yuanToFen(approveForm.approved_refund_amount), remark: approveForm.remark || undefined } @@ -447,12 +445,8 @@ resubmitLoading.value = true try { const data: ResubmitRefundRequest = { - requested_refund_amount: resubmitForm.requested_refund_amount - ? resubmitForm.requested_refund_amount * 100 - : undefined, - actual_received_amount: resubmitForm.actual_received_amount - ? resubmitForm.actual_received_amount * 100 - : undefined, + requested_refund_amount: yuanToFen(resubmitForm.requested_refund_amount), + actual_received_amount: yuanToFen(resubmitForm.actual_received_amount), refund_reason: resubmitForm.refund_reason || undefined } diff --git a/src/views/finance/refund/index.vue b/src/views/finance/refund/index.vue index 12cf354..bcf083c 100644 --- a/src/views/finance/refund/index.vue +++ b/src/views/finance/refund/index.vue @@ -246,7 +246,7 @@ } from '@/types/api' import type { SearchFormItem } from '@/types' import { useCheckedColumns } from '@/composables/useCheckedColumns' - import { formatDateTime } from '@/utils/business/format' + import { fenToYuan, formatDateTime, yuanToFen } from '@/utils/business/format' import { RoutesAlias } from '@/router/routesAlias' import { useAuth } from '@/composables/useAuth' @@ -699,9 +699,7 @@ approveLoading.value = true try { const data: ApproveRefundRequest = { - approved_refund_amount: approveForm.approved_refund_amount - ? approveForm.approved_refund_amount * 100 - : undefined, + approved_refund_amount: yuanToFen(approveForm.approved_refund_amount), remark: approveForm.remark || undefined } const refundId = currentRefund.value?.id @@ -796,7 +794,7 @@ currentRefund.value = row // 预填充原有数据 resubmitForm.requested_refund_amount = row.requested_refund_amount / 100 - resubmitForm.actual_received_amount = row.actual_received_amount / 100 + resubmitForm.actual_received_amount = fenToYuan(row.actual_received_amount) resubmitForm.refund_reason = row.refund_reason resubmitDialogVisible.value = true } @@ -821,12 +819,8 @@ const refundId = currentRefund.value?.id if (!refundId) return const data: ResubmitRefundRequest = { - requested_refund_amount: resubmitForm.requested_refund_amount - ? resubmitForm.requested_refund_amount * 100 - : undefined, - actual_received_amount: resubmitForm.actual_received_amount - ? resubmitForm.actual_received_amount * 100 - : undefined, + requested_refund_amount: yuanToFen(resubmitForm.requested_refund_amount), + actual_received_amount: yuanToFen(resubmitForm.actual_received_amount), refund_reason: resubmitForm.refund_reason || undefined } diff --git a/src/views/order-management/order-list/detail.vue b/src/views/order-management/order-list/detail.vue index f1cf261..081ca6e 100644 --- a/src/views/order-management/order-list/detail.vue +++ b/src/views/order-management/order-list/detail.vue @@ -60,13 +60,13 @@