fix:订单列表详情实付金额代理/企业不可见
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 6m22s

This commit is contained in:
sexygoat
2026-06-01 14:10:09 +08:00
parent e563b81b6e
commit 3e6b3981f4
6 changed files with 397 additions and 338 deletions

View File

@@ -233,6 +233,7 @@ export interface AssetPackageUsageRecord {
reduction_pct?: number // 展示增幅比例(小数,如 0.428571
enable_virtual_data?: boolean // 是否启用虚流量
paid_amount?: number // 实际支付金额(分)
retail_amount?: number // 零售价(分)
package_price?: number // 套餐价格(分)
start_time?: string // 开始时间(兼容前端现有映射字段)
expire_time?: string // 到期时间(兼容前端现有映射字段)

View File

@@ -193,8 +193,11 @@
<ElDescriptionsItem label="套餐名称">
{{ currentPackage.package_name || '-' }}
</ElDescriptionsItem>
<ElDescriptionsItem label="套餐价格">
{{ formatAmount(currentPackage.paid_amount || currentPackage.package_price || 0) }}
<ElDescriptionsItem label="套餐成本价格" v-if="isAdminOrPlatform">
{{ formatAmount(currentPackage.paid_amount || 0) }}
</ElDescriptionsItem>
<ElDescriptionsItem label="套餐零售价">
{{ formatAmount(currentPackage.retail_amount || 0) }}
</ElDescriptionsItem>
<ElDescriptionsItem label="套餐类型">
{{ getPackageTypeName(currentPackage.package_type) }}

View File

@@ -48,9 +48,14 @@
<span class="package-name-text">{{ scope.row.package_name }}</span>
</template>
</ElTableColumn>
<ElTableColumn label="套餐价格" width="120">
<ElTableColumn v-if="isAdminOrPlatform" label="套餐成本价格" width="120">
<template #default="scope">
{{ formatAmount(scope.row.paid_amount || scope.row.package_price || 0) }}
{{ formatAmount(scope.row.paid_amount || 0) }}
</template>
</ElTableColumn>
<ElTableColumn label="套餐零售价" width="120">
<template #default="scope">
{{ formatAmount(scope.row.retail_amount || 0) }}
</template>
</ElTableColumn>
<ElTableColumn prop="status_name" label="套餐状态" width="100">

View File

@@ -245,6 +245,7 @@ export function useAssetInfo() {
order_no: pkg.order_no || '',
package_name: pkg.package_name || '',
paid_amount: pkg.paid_amount || 0,
retail_amount : pkg.retail_amount || 0,
real_total_mb: pkg.real_total_mb || 0,
real_used_mb: pkg.real_used_mb || 0,
real_remaining_mb: (pkg.real_total_mb || 0) - (pkg.real_used_mb || 0),

View File

@@ -60,7 +60,7 @@
</template>
<script setup lang="ts">
import { h, onMounted, ref } from 'vue'
import { h, onMounted, ref, computed } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElButton, ElCard, ElIcon, ElImage, ElMessage, ElTable, ElTableColumn } from 'element-plus'
import { ArrowLeft, Loading } from '@element-plus/icons-vue'
@@ -75,6 +75,7 @@
OrderPaymentMethod
} from '@/types/api'
import { useAuth } from '@/composables/useAuth'
import { useUserStore } from '@/store/modules/user'
import { formatDateTime } from '@/utils/business/format'
defineOptions({ name: 'OrderDetail' })
@@ -82,6 +83,7 @@
const route = useRoute()
const router = useRouter()
const { hasAuth } = useAuth()
const userStore = useUserStore()
const loading = ref(false)
const detailData = ref<Order | null>(null)
@@ -174,11 +176,16 @@
}
}
// 检查当前用户是否可以查看实付金额(代理账号和企业账号不能看到)
const canViewActualPaidAmount = computed(() => {
const userType = userStore.info.user_type
// 只有代理账号(3)和企业账号(4)不能看到实付金额
return userType !== 3 && userType !== 4
})
// 详情页配置
const detailSections: DetailSection[] = [
{
title: '基本信息',
fields: [
const detailSections = computed<DetailSection[]>(() => {
const baseFields = [
{ label: '订单号', prop: 'order_no' },
{
label: '订单类型',
@@ -192,13 +199,20 @@
label: '订单金额',
prop: 'total_amount',
formatter: (value) => formatCurrency(value)
},
{
}
]
// 只有非代理账号和非企业账号才能看到实付金额字段
if (canViewActualPaidAmount.value) {
baseFields.push({
label: '实付金额',
prop: 'actual_paid_amount',
formatter: (value) =>
value !== undefined && value !== null ? formatCurrency(value) : '-'
},
})
}
baseFields.push(
{
label: '支付凭证',
fullWidth: true,
@@ -284,7 +298,12 @@
prop: 'updated_at',
formatter: (value) => formatDateTime(value)
}
]
)
return [
{
title: '基本信息',
fields: baseFields
},
{
title: '操作者信息',
@@ -331,6 +350,7 @@
]
}
]
})
// 返回上一页
const handleBack = () => {

View File

@@ -489,7 +489,8 @@
})
// 列配置
const columnOptions = [
const columnOptions = computed(() => {
const options = [
{ label: '订单编号', prop: 'order_no' },
{ label: '买家手机号', prop: 'buyer_phone' },
{ label: '买家昵称', prop: 'buyer_nickname' },
@@ -504,11 +505,21 @@
{ label: '支付状态', prop: 'payment_status' },
{ label: '佣金流程状态', prop: 'commission_status_name' },
{ label: '佣金业务结果', prop: 'commission_result_name' },
{ label: '订单金额', prop: 'total_amount' },
{ label: '实付金额', prop: 'actual_paid_amount' },
{ label: '订单金额', prop: 'total_amount' }
]
// 只有非代理账号和非企业账号才能看到实付金额选项
if (canViewActualPaidAmount.value) {
options.push({ label: '实付金额', prop: 'actual_paid_amount' })
}
options.push(
{ label: '支付方式', prop: 'payment_method' },
{ label: '支付时间', prop: 'paid_at' }
]
)
return options
})
const createFormRef = ref<FormInstance>()
const uploadRef = ref<UploadInstance>()
@@ -858,8 +869,16 @@
}
}
// 检查当前用户是否可以查看实付金额(代理账号和企业账号不能看到)
const canViewActualPaidAmount = computed(() => {
const userType = userStore.info.user_type
// 只有代理账号(3)和企业账号(4)不能看到实付金额
return userType !== 3 && userType !== 4
})
// 动态列配置
const { columnChecks, columns } = useCheckedColumns(() => [
const { columnChecks, columns } = useCheckedColumns(() => {
const baseColumns = [
{
prop: 'order_no',
label: '订单编号',
@@ -998,8 +1017,12 @@
label: '订单金额',
width: 120,
formatter: (row: Order) => formatCurrency(row.total_amount)
},
{
}
]
// 只有非代理账号和非企业账号才能看到实付金额列
if (canViewActualPaidAmount.value) {
baseColumns.push({
prop: 'actual_paid_amount',
label: '实付金额',
width: 120,
@@ -1007,7 +1030,10 @@
if (row.actual_paid_amount === undefined || row.actual_paid_amount === null) return '-'
return formatCurrency(row.actual_paid_amount)
}
},
})
}
baseColumns.push(
{
prop: 'payment_method',
label: '支付方式',
@@ -1020,7 +1046,10 @@
width: 180,
formatter: (row: Order) => (row.paid_at ? formatDateTime(row.paid_at) : '-')
}
])
)
return baseColumns
})
// 当订单类型切换时,清空已选择的套餐
watch(