From d23e896f97fd2ed475a4eb3a2a68c43c3a51013a Mon Sep 17 00:00:00 2001
From: sexygoat <1538832180@qq.com>
Date: Sat, 6 Jun 2026 15:09:31 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E9=80=80=E6=AC=BE=E5=AE=A1=E6=89=B9?=
=?UTF-8?q?=E5=8F=AF=E4=BB=A5=E6=98=AF0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/types/api/refund.ts | 6 +-
src/types/components.d.ts | 162 ++++++++++++++++++++++++++++
src/views/finance/refund/detail.vue | 9 +-
src/views/finance/refund/index.vue | 13 +--
4 files changed, 177 insertions(+), 13 deletions(-)
diff --git a/src/types/api/refund.ts b/src/types/api/refund.ts
index c497027..a91d44a 100644
--- a/src/types/api/refund.ts
+++ b/src/types/api/refund.ts
@@ -21,9 +21,9 @@ export interface Refund {
package_usage_id: number | null
asset_identifier: string // 资产标识符
asset_type: string // 资产类型
- requested_refund_amount: number // 申请退款金额(分)
- approved_refund_amount: number | null // 实际退款金额(分)
- actual_received_amount: number // 实收金额(分)
+ requested_refund_amount?: number | null // 申请退款金额(分)
+ approved_refund_amount?: number | null // 实际退款金额(分)
+ actual_received_amount?: number | null // 实收金额(分)
status: RefundStatus
refund_reason: string
refund_voucher_key?: string // 退款凭证 file_key,多个以英文逗号分隔
diff --git a/src/types/components.d.ts b/src/types/components.d.ts
index e69de29..e4f441c 100644
--- a/src/types/components.d.ts
+++ b/src/types/components.d.ts
@@ -0,0 +1,162 @@
+/* eslint-disable */
+// @ts-nocheck
+// Generated by unplugin-vue-components
+// Read more: https://github.com/vuejs/core/pull/3399
+export {}
+
+/* prettier-ignore */
+declare module 'vue' {
+ export interface GlobalComponents {
+ AgentSelector: typeof import('./../components/business/AgentSelector.vue')['default']
+ ArtBackToTop: typeof import('./../components/core/base/ArtBackToTop.vue')['default']
+ ArtBarChart: typeof import('./../components/core/charts/ArtBarChart.vue')['default']
+ ArtBarChartCard: typeof import('./../components/core/cards/ArtBarChartCard.vue')['default']
+ ArtBasicBanner: typeof import('./../components/core/banners/ArtBasicBanner.vue')['default']
+ ArtBreadcrumb: typeof import('./../components/core/layouts/art-breadcrumb/index.vue')['default']
+ ArtButtonMore: typeof import('./../components/core/forms/ArtButtonMore.vue')['default']
+ ArtButtonTable: typeof import('./../components/core/forms/ArtButtonTable.vue')['default']
+ ArtCardBanner: typeof import('./../components/core/banners/ArtCardBanner.vue')['default']
+ ArtChatWindow: typeof import('./../components/core/layouts/art-chat-window/index.vue')['default']
+ ArtCutterImg: typeof import('./../components/core/media/ArtCutterImg.vue')['default']
+ ArtDataListCard: typeof import('./../components/core/cards/ArtDataListCard.vue')['default']
+ ArtDataViewer: typeof import('./../components/core/views/ArtDataViewer.vue')['default']
+ ArtDonutChartCard: typeof import('./../components/core/cards/ArtDonutChartCard.vue')['default']
+ ArtDragVerify: typeof import('./../components/core/forms/ArtDragVerify.vue')['default']
+ ArtDualBarCompareChart: typeof import('./../components/core/charts/ArtDualBarCompareChart.vue')['default']
+ ArtExcelExport: typeof import('./../components/core/forms/ArtExcelExport.vue')['default']
+ ArtExcelImport: typeof import('./../components/core/forms/ArtExcelImport.vue')['default']
+ ArtException: typeof import('./../components/core/views/exception/ArtException.vue')['default']
+ ArtFastEnter: typeof import('./../components/core/layouts/art-fast-enter/index.vue')['default']
+ ArtFestivalTextScroll: typeof import('./../components/core/text-effect/ArtFestivalTextScroll.vue')['default']
+ ArtFireworksEffect: typeof import('./../components/core/layouts/art-fireworks-effect/index.vue')['default']
+ ArtGlobalSearch: typeof import('./../components/core/layouts/art-global-search/index.vue')['default']
+ ArtHBarChart: typeof import('./../components/core/charts/ArtHBarChart.vue')['default']
+ ArtHeaderBar: typeof import('./../components/core/layouts/art-header-bar/index.vue')['default']
+ ArtHorizontalMenu: typeof import('./../components/core/layouts/art-menus/art-horizontal-menu/index.vue')['default']
+ ArtIconSelector: typeof import('./../components/core/base/ArtIconSelector.vue')['default']
+ ArtImageCard: typeof import('./../components/core/cards/ArtImageCard.vue')['default']
+ ArtKLineChart: typeof import('./../components/core/charts/ArtKLineChart.vue')['default']
+ ArtLayouts: typeof import('./../components/core/layouts/art-layouts/index.vue')['default']
+ ArtLineChart: typeof import('./../components/core/charts/ArtLineChart.vue')['default']
+ ArtLineChartCard: typeof import('./../components/core/cards/ArtLineChartCard.vue')['default']
+ ArtLogo: typeof import('./../components/core/base/ArtLogo.vue')['default']
+ ArtMapChart: typeof import('./../components/core/charts/ArtMapChart.vue')['default']
+ ArtMenuRight: typeof import('./../components/core/others/ArtMenuRight.vue')['default']
+ ArtMixedMenu: typeof import('./../components/core/layouts/art-menus/art-mixed-menu/index.vue')['default']
+ ArtNotification: typeof import('./../components/core/layouts/art-notification/index.vue')['default']
+ ArtPageContent: typeof import('./../components/core/layouts/art-page-content/index.vue')['default']
+ ArtProgressCard: typeof import('./../components/core/cards/ArtProgressCard.vue')['default']
+ ArtRadarChart: typeof import('./../components/core/charts/ArtRadarChart.vue')['default']
+ ArtResultPage: typeof import('./../components/core/views/result/ArtResultPage.vue')['default']
+ ArtRingChart: typeof import('./../components/core/charts/ArtRingChart.vue')['default']
+ ArtScatterChart: typeof import('./../components/core/charts/ArtScatterChart.vue')['default']
+ ArtScreenLock: typeof import('./../components/core/layouts/art-screen-lock/index.vue')['default']
+ ArtSearchBar: typeof import('./../components/core/forms/art-search-bar/index.vue')['default']
+ ArtSearchDate: typeof import('./../components/core/forms/art-search-bar/widget/art-search-date/index.vue')['default']
+ ArtSearchInput: typeof import('./../components/core/forms/art-search-bar/widget/art-search-input/index.vue')['default']
+ ArtSearchRadio: typeof import('./../components/core/forms/art-search-bar/widget/art-search-radio/index.vue')['default']
+ ArtSearchSelect: typeof import('./../components/core/forms/art-search-bar/widget/art-search-select/index.vue')['default']
+ ArtSearchTreeSelect: typeof import('./../components/core/forms/art-search-bar/widget/art-search-tree-select/index.vue')['default']
+ ArtSettingsPanel: typeof import('./../components/core/layouts/art-settings-panel/index.vue')['default']
+ ArtSidebarMenu: typeof import('./../components/core/layouts/art-menus/art-sidebar-menu/index.vue')['default']
+ ArtStatsCard: typeof import('./../components/core/cards/ArtStatsCard.vue')['default']
+ ArtTable: typeof import('./../components/core/tables/ArtTable.vue')['default']
+ ArtTableFullScreen: typeof import('./../components/core/tables/ArtTableFullScreen.vue')['default']
+ ArtTableHeader: typeof import('./../components/core/tables/ArtTableHeader.vue')['default']
+ ArtTextScroll: typeof import('./../components/core/text-effect/ArtTextScroll.vue')['default']
+ ArtTimelineListCard: typeof import('./../components/core/cards/ArtTimelineListCard.vue')['default']
+ ArtVideoPlayer: typeof import('./../components/core/media/ArtVideoPlayer.vue')['default']
+ ArtWangEditor: typeof import('./../components/core/forms/ArtWangEditor.vue')['default']
+ ArtWatermark: typeof import('./../components/core/others/ArtWatermark.vue')['default']
+ ArtWorkTab: typeof import('./../components/core/layouts/art-work-tab/index.vue')['default']
+ BasicSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/BasicSettings.vue')['default']
+ BatchOperationDialog: typeof import('./../components/business/BatchOperationDialog.vue')['default']
+ BoxStyleSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/BoxStyleSettings.vue')['default']
+ CardOperationDialog: typeof import('./../components/business/CardOperationDialog.vue')['default']
+ CardStatusTag: typeof import('./../components/business/CardStatusTag.vue')['default']
+ ChunkErrorBoundary: typeof import('./../components/core/others/ChunkErrorBoundary.vue')['default']
+ CodeGeneratorButton: typeof import('./../components/business/CodeGeneratorButton.vue')['default']
+ ColorSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/ColorSettings.vue')['default']
+ CommentItem: typeof import('./../components/custom/comment-widget/widget/CommentItem.vue')['default']
+ CommentWidget: typeof import('./../components/custom/comment-widget/index.vue')['default']
+ CommissionDisplay: typeof import('./../components/business/CommissionDisplay.vue')['default']
+ ContainerSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/ContainerSettings.vue')['default']
+ CreateRefundDialog: typeof import('./../components/business/CreateRefundDialog.vue')['default']
+ CustomerAccountDialog: typeof import('./../components/business/CustomerAccountDialog.vue')['default']
+ DetailPage: typeof import('./../components/common/DetailPage.vue')['default']
+ ElAlert: typeof import('element-plus/es')['ElAlert']
+ ElAvatar: typeof import('element-plus/es')['ElAvatar']
+ ElButton: typeof import('element-plus/es')['ElButton']
+ ElCalendar: typeof import('element-plus/es')['ElCalendar']
+ ElCard: typeof import('element-plus/es')['ElCard']
+ ElCascader: typeof import('element-plus/es')['ElCascader']
+ ElCheckbox: typeof import('element-plus/es')['ElCheckbox']
+ ElCol: typeof import('element-plus/es')['ElCol']
+ ElConfigProvider: typeof import('element-plus/es')['ElConfigProvider']
+ ElDatePicker: typeof import('element-plus/es')['ElDatePicker']
+ ElDescriptions: typeof import('element-plus/es')['ElDescriptions']
+ ElDescriptionsItem: typeof import('element-plus/es')['ElDescriptionsItem']
+ ElDialog: typeof import('element-plus/es')['ElDialog']
+ ElDivider: typeof import('element-plus/es')['ElDivider']
+ ElDrawer: typeof import('element-plus/es')['ElDrawer']
+ ElDropdown: typeof import('element-plus/es')['ElDropdown']
+ ElDropdownItem: typeof import('element-plus/es')['ElDropdownItem']
+ ElDropdownMenu: typeof import('element-plus/es')['ElDropdownMenu']
+ ElEmpty: typeof import('element-plus/es')['ElEmpty']
+ ElForm: typeof import('element-plus/es')['ElForm']
+ ElFormItem: typeof import('element-plus/es')['ElFormItem']
+ ElIcon: typeof import('element-plus/es')['ElIcon']
+ ElInput: typeof import('element-plus/es')['ElInput']
+ ElInputNumber: typeof import('element-plus/es')['ElInputNumber']
+ ElMenu: typeof import('element-plus/es')['ElMenu']
+ ElMenuItem: typeof import('element-plus/es')['ElMenuItem']
+ ElOption: typeof import('element-plus/es')['ElOption']
+ ElPagination: typeof import('element-plus/es')['ElPagination']
+ ElPopover: typeof import('element-plus/es')['ElPopover']
+ ElProgress: typeof import('element-plus/es')['ElProgress']
+ ElRadio: typeof import('element-plus/es')['ElRadio']
+ ElRadioButton: typeof import('element-plus/es')['ElRadioButton']
+ ElRadioGroup: typeof import('element-plus/es')['ElRadioGroup']
+ ElRow: typeof import('element-plus/es')['ElRow']
+ ElScrollbar: typeof import('element-plus/es')['ElScrollbar']
+ ElSelect: typeof import('element-plus/es')['ElSelect']
+ ElSubMenu: typeof import('element-plus/es')['ElSubMenu']
+ ElSwitch: typeof import('element-plus/es')['ElSwitch']
+ ElTable: typeof import('element-plus/es')['ElTable']
+ ElTableColumn: typeof import('element-plus/es')['ElTableColumn']
+ ElTabPane: typeof import('element-plus/es')['ElTabPane']
+ ElTabs: typeof import('element-plus/es')['ElTabs']
+ ElTag: typeof import('element-plus/es')['ElTag']
+ ElTimeline: typeof import('element-plus/es')['ElTimeline']
+ ElTimelineItem: typeof import('element-plus/es')['ElTimelineItem']
+ ElTooltip: typeof import('element-plus/es')['ElTooltip']
+ ElTreeSelect: typeof import('element-plus/es')['ElTreeSelect']
+ ElUpload: typeof import('element-plus/es')['ElUpload']
+ ElWatermark: typeof import('element-plus/es')['ElWatermark']
+ HorizontalSubmenu: typeof import('./../components/core/layouts/art-menus/art-horizontal-menu/widget/HorizontalSubmenu.vue')['default']
+ ImportDialog: typeof import('./../components/business/ImportDialog.vue')['default']
+ LoginLeftView: typeof import('./../components/core/views/login/LoginLeftView.vue')['default']
+ MenuLayoutSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/MenuLayoutSettings.vue')['default']
+ MenuStyleSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/MenuStyleSettings.vue')['default']
+ OperationLogsDialog: typeof import('./../components/business/OperationLogsDialog.vue')['default']
+ OperatorSelect: typeof import('./../components/business/OperatorSelect.vue')['default']
+ PackageSelector: typeof import('./../components/business/PackageSelector.vue')['default']
+ PaymentVoucherDialog: typeof import('./../components/business/PaymentVoucherDialog.vue')['default']
+ RealnamePolicyDialog: typeof import('./../components/device/RealnamePolicyDialog.vue')['default']
+ RouterLink: typeof import('vue-router')['RouterLink']
+ RouterView: typeof import('vue-router')['RouterView']
+ SectionTitle: typeof import('./../components/core/layouts/art-settings-panel/widget/SectionTitle.vue')['default']
+ SettingDrawer: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingDrawer.vue')['default']
+ SettingHeader: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingHeader.vue')['default']
+ SettingItem: typeof import('./../components/core/layouts/art-settings-panel/widget/SettingItem.vue')['default']
+ SidebarSubmenu: typeof import('./../components/core/layouts/art-menus/art-sidebar-menu/widget/SidebarSubmenu.vue')['default']
+ SpeedLimitDialog: typeof import('./../components/device/SpeedLimitDialog.vue')['default']
+ SwitchCardDialog: typeof import('./../components/device/SwitchCardDialog.vue')['default']
+ TableContextMenuHint: typeof import('./../components/core/others/TableContextMenuHint.vue')['default']
+ ThemeSettings: typeof import('./../components/core/layouts/art-settings-panel/widget/ThemeSettings.vue')['default']
+ UpdateRealnameStatusDialog: typeof import('./../components/business/UpdateRealnameStatusDialog.vue')['default']
+ }
+ export interface ComponentCustomProperties {
+ vLoading: typeof import('element-plus/es')['ElLoadingDirective']
+ }
+}
diff --git a/src/views/finance/refund/detail.vue b/src/views/finance/refund/detail.vue
index d1efd9e..6ce36e1 100644
--- a/src/views/finance/refund/detail.vue
+++ b/src/views/finance/refund/detail.vue
@@ -42,7 +42,7 @@
{{ refund?.refund_no }}
- {{ formatCurrency(refund?.requested_refund_amount || 0) }}
+ {{ formatCurrency(refund?.requested_refund_amount) }}
{
+ const formatCurrency = (amount: number | null | undefined): string => {
+ if (amount === undefined || amount === null || Number.isNaN(amount)) return '-'
+
return `¥${(amount / 100).toFixed(2)}`
}
@@ -293,8 +295,7 @@
},
{
label: '实际退款金额',
- formatter: (_, data) =>
- data.approved_refund_amount ? formatCurrency(data.approved_refund_amount) : '-'
+ formatter: (_, data) => formatCurrency(data.approved_refund_amount)
},
{
label: '实收金额',
diff --git a/src/views/finance/refund/index.vue b/src/views/finance/refund/index.vue
index 657305e..12023b5 100644
--- a/src/views/finance/refund/index.vue
+++ b/src/views/finance/refund/index.vue
@@ -68,7 +68,7 @@
{{ currentRefund?.refund_no }}
- {{ formatCurrency(currentRefund?.requested_refund_amount || 0) }}
+ {{ formatCurrency(currentRefund?.requested_refund_amount) }}
([])
// 格式化货币 - 将分转换为元
- const formatCurrency = (amount: number): string => {
+ const formatCurrency = (amount: number | null | undefined): string => {
+ if (amount === undefined || amount === null || Number.isNaN(amount)) return '-'
+
return `¥${(amount / 100).toFixed(2)}`
}
@@ -496,8 +498,7 @@
prop: 'approved_refund_amount',
label: '实际退款金额',
width: 150,
- formatter: (row: Refund) =>
- row.approved_refund_amount === null ? '-' : formatCurrency(row.approved_refund_amount)
+ formatter: (row: Refund) => formatCurrency(row.approved_refund_amount)
},
{
prop: 'actual_received_amount',
@@ -797,8 +798,8 @@
const handleShowResubmit = (row: Refund) => {
currentRefund.value = row
// 预填充原有数据
- resubmitForm.requested_refund_amount = row.requested_refund_amount / 100
- resubmitForm.actual_received_amount = fenToYuan(row.actual_received_amount)
+ resubmitForm.requested_refund_amount = fenToYuan(row.requested_refund_amount) || undefined
+ resubmitForm.actual_received_amount = fenToYuan(row.actual_received_amount) || undefined
resubmitForm.refund_reason = row.refund_reason
resubmitDialogVisible.value = true
}