fix: 操作
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 5m10s

This commit is contained in:
sexygoat
2026-04-27 18:34:02 +08:00
parent 030195d609
commit af3f38aba0
6 changed files with 75 additions and 115 deletions

View File

@@ -59,9 +59,12 @@ export interface AssetResolveResponse {
realname_policy?: string // 实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名) realname_policy?: string // 实名认证策略 (none:无需实名, before_order:先实名后充值/购买, after_order:先充值/购买后实名)
network_status?: NetworkStatus // 网络状态0 停机 / 1 开机(仅 card network_status?: NetworkStatus // 网络状态0 停机 / 1 开机(仅 card
current_package: string // 当前套餐名称(无则空) current_package: string // 当前套餐名称(无则空)
package_total_mb: number // 当前套餐总虚流量 MB current_package_usage_id: number | null // 当前套餐对应的套餐使用记录 ID无主套餐时为 null
package_used_mb: number // 已用虚流量 MB real_total_mb: number // 真流量总量
package_remain_mb: number // 剩余虚流量 MB real_used_mb: number // 真流量已用
virtual_total_mb: number // 业务停机阈值(展示用)
virtual_used_mb: number // 展示已用量
reduction_pct: number // 展示增幅比例(小数,如 0.428571
device_protect_status?: DeviceProtectStatus // 保护期状态none / stop / start仅 device device_protect_status?: DeviceProtectStatus // 保护期状态none / stop / start仅 device
activated_at: string // 激活时间 activated_at: string // 激活时间
created_at: string // 创建时间 created_at: string // 创建时间
@@ -140,9 +143,6 @@ export interface DeviceGatewayInfo {
wan_ip?: string // 基站分配 IPv4 wan_ip?: string // 基站分配 IPv4
lan_ip?: string // 局域网网关 IP lan_ip?: string // 局域网网关 IP
mac_address?: string // MAC 地址 mac_address?: string // MAC 地址
daily_usage?: string // 日使用流量(字节)
dl_stats?: string // 本次开机下载(字节)
ul_stats?: string // 本次开机上传(字节)
limit_speed?: number // 限速(KB/s)0=不限 limit_speed?: number // 限速(KB/s)0=不限
current_iccid?: string // 当前使用卡 ICCID current_iccid?: string // 当前使用卡 ICCID
max_clients?: number // 最大连接客户端数 max_clients?: number // 最大连接客户端数
@@ -202,12 +202,12 @@ export interface AssetPackageUsageRecord {
usage_type?: UsageType // 使用类型single_card/device usage_type?: UsageType // 使用类型single_card/device
status?: PackageUsageStatus // 0 待生效 / 1 生效中 / 2 已用完 / 3 已过期 / 4 已失效 status?: PackageUsageStatus // 0 待生效 / 1 生效中 / 2 已用完 / 3 已过期 / 4 已失效
status_name?: string // 状态中文名 status_name?: string // 状态中文名
data_limit_mb?: number // 真流量总量 MB real_total_mb?: number // 真流量总量(百分比以此为基准)
virtual_limit_mb?: number // 流量总量 MB已按 virtual_ratio 换算) real_used_mb?: number // 流量已用
data_usage_mb?: number // 已用真流量 MB virtual_total_mb?: number // 业务停机阈值
virtual_used_mb?: number // 已用虚流量 MB virtual_used_mb?: number // 展示已用量
virtual_remain_mb?: number // 剩余虚流量 MB
virtual_ratio?: number // 虚流量比例real/virtual virtual_ratio?: number // 虚流量比例real/virtual
reduction_pct?: number // 展示增幅比例(小数,如 0.428571
enable_virtual_data?: boolean // 是否启用虚流量 enable_virtual_data?: boolean // 是否启用虚流量
paid_amount?: number // 实际支付金额(分) paid_amount?: number // 实际支付金额(分)
package_price?: number // 套餐价格(分) package_price?: number // 套餐价格(分)

View File

@@ -330,17 +330,6 @@
{{ deviceRealtime.imsi || '-' }} {{ deviceRealtime.imsi || '-' }}
</ElDescriptionsItem> </ElDescriptionsItem>
<!-- 流量信息 -->
<ElDescriptionsItem label="今日流量">
{{ formatDataSize(Number(deviceRealtime.daily_usage || 0) / (1024 * 1024)) }}
</ElDescriptionsItem>
<ElDescriptionsItem label="本次下载">
{{ formatDataSize(Number(deviceRealtime.dl_stats || 0) / (1024 * 1024)) }}
</ElDescriptionsItem>
<ElDescriptionsItem label="本次上传">
{{ formatDataSize(Number(deviceRealtime.ul_stats || 0) / (1024 * 1024)) }}
</ElDescriptionsItem>
<!-- 设备配置 --> <!-- 设备配置 -->
<ElDescriptionsItem label="限速"> <ElDescriptionsItem label="限速">
{{ deviceRealtime.limit_speed ? `${deviceRealtime.limit_speed} KB/s` : '不限速' }} {{ deviceRealtime.limit_speed ? `${deviceRealtime.limit_speed} KB/s` : '不限速' }}
@@ -538,9 +527,6 @@
mac_address?: string mac_address?: string
imei?: string imei?: string
imsi?: string imsi?: string
daily_usage?: string
dl_stats?: string
ul_stats?: string
limit_speed?: number limit_speed?: number
software_version?: string software_version?: string
switch_mode?: string switch_mode?: string

View File

@@ -42,20 +42,20 @@
<span class="stat-item"> <span class="stat-item">
<span class="stat-label">已使用</span> <span class="stat-label">已使用</span>
<span class="stat-value">{{ <span class="stat-value">{{
formatDataSize(currentPackage.data_usage_mb || 0) formatDataSize(currentPackage.real_used_mb || 0)
}}</span> }}</span>
</span> </span>
<span class="stat-item"> <span class="stat-item">
<span class="stat-label">总量</span> <span class="stat-label">总量</span>
<span class="stat-value">{{ <span class="stat-value">{{
formatDataSize(currentPackage.data_limit_mb || 0) formatDataSize(currentPackage.real_total_mb || 0)
}}</span> }}</span>
</span> </span>
<span class="stat-item"> <span class="stat-item">
<span class="stat-label">剩余</span> <span class="stat-label">剩余</span>
<span class="stat-value">{{ <span class="stat-value">{{
formatDataSize( formatDataSize(
(currentPackage.data_limit_mb || 0) - (currentPackage.data_usage_mb || 0) (currentPackage.real_total_mb || 0) - (currentPackage.real_used_mb || 0)
) )
}}</span> }}</span>
</span> </span>
@@ -63,15 +63,15 @@
<ElProgress <ElProgress
:percentage=" :percentage="
getUsageProgress( getUsageProgress(
currentPackage.data_usage_mb || 0, currentPackage.real_used_mb || 0,
currentPackage.data_limit_mb || 0 currentPackage.real_total_mb || 0
) )
" "
:color=" :color="
getProgressColorByPercentage( getProgressColorByPercentage(
getUsageProgress( getUsageProgress(
currentPackage.data_usage_mb || 0, currentPackage.real_used_mb || 0,
currentPackage.data_limit_mb || 0 currentPackage.real_total_mb || 0
) )
) )
" "
@@ -85,36 +85,28 @@
<span class="stat-item"> <span class="stat-item">
<span class="stat-label">已使用</span> <span class="stat-label">已使用</span>
<span class="stat-value">{{ <span class="stat-value">{{
formatDataSize(currentPackage.virtual_data_used || 0) formatDataSize(currentPackage.virtual_used_mb || 0)
}}</span> }}</span>
</span> </span>
<span class="stat-item"> <span class="stat-item">
<span class="stat-label">总量</span> <span class="stat-label">停机阈值</span>
<span class="stat-value">{{ <span class="stat-value">{{
formatDataSize(currentPackage.virtual_limit_mb || 0) formatDataSize(currentPackage.virtual_total_mb || 0)
}}</span>
</span>
<span class="stat-item">
<span class="stat-label">剩余</span>
<span class="stat-value">{{
formatDataSize(
(currentPackage.virtual_limit_mb || 0) - (currentPackage.virtual_data_used || 0)
)
}}</span> }}</span>
</span> </span>
</div> </div>
<ElProgress <ElProgress
:percentage=" :percentage="
getUsageProgress( getUsageProgress(
currentPackage.virtual_data_used || 0, currentPackage.virtual_used_mb || 0,
currentPackage.virtual_limit_mb || 0 currentPackage.virtual_total_mb || 0
) )
" "
:color=" :color="
getProgressColorByPercentage( getProgressColorByPercentage(
getUsageProgress( getUsageProgress(
currentPackage.virtual_data_used || 0, currentPackage.virtual_used_mb || 0,
currentPackage.virtual_limit_mb || 0 currentPackage.virtual_total_mb || 0
) )
) )
" "
@@ -133,8 +125,8 @@
{{ {{
formatDataSize( formatDataSize(
currentPackage.enable_virtual_data currentPackage.enable_virtual_data
? currentPackage.virtual_data_used || 0 ? currentPackage.virtual_used_mb || 0
: currentPackage.data_usage_mb || 0 : currentPackage.real_used_mb || 0
) )
}} }}
</span> </span>
@@ -142,7 +134,7 @@
<div class="flow-stat-item"> <div class="flow-stat-item">
<span class="flow-stat-label">总量</span> <span class="flow-stat-label">总量</span>
<span class="flow-stat-value"> <span class="flow-stat-value">
{{ formatDataSize(currentPackage.data_limit_mb || 0) }} {{ formatDataSize(currentPackage.real_total_mb || 0) }}
</span> </span>
</div> </div>
<div class="flow-stat-item"> <div class="flow-stat-item">
@@ -150,7 +142,7 @@
<span class="flow-stat-value"> <span class="flow-stat-value">
{{ {{
formatDataSize( formatDataSize(
(currentPackage.data_limit_mb || 0) - (currentPackage.data_usage_mb || 0) (currentPackage.real_total_mb || 0) - (currentPackage.real_used_mb || 0)
) )
}} }}
</span> </span>
@@ -161,18 +153,18 @@
:percentage=" :percentage="
getUsageProgress( getUsageProgress(
currentPackage.enable_virtual_data currentPackage.enable_virtual_data
? currentPackage.virtual_data_used || 0 ? currentPackage.virtual_used_mb || 0
: currentPackage.data_usage_mb || 0, : currentPackage.real_used_mb || 0,
currentPackage.data_limit_mb || 0 currentPackage.real_total_mb || 0
) )
" "
:color=" :color="
getProgressColorByPercentage( getProgressColorByPercentage(
getUsageProgress( getUsageProgress(
currentPackage.enable_virtual_data currentPackage.enable_virtual_data
? currentPackage.virtual_data_used || 0 ? currentPackage.virtual_used_mb || 0
: currentPackage.data_usage_mb || 0, : currentPackage.real_used_mb || 0,
currentPackage.data_limit_mb || 0 currentPackage.real_total_mb || 0
) )
) )
" "

View File

@@ -61,16 +61,16 @@
<template v-if="isAdminOrPlatform"> <template v-if="isAdminOrPlatform">
<div class="progress-text"> <div class="progress-text">
<span class="used" <span class="used"
>已使用真流量: {{ formatDataSize(scope.row.data_usage_mb || 0) }}</span >已使用真流量: {{ formatDataSize(scope.row.real_used_mb || 0) }}</span
> >
<span class="total" <span class="total"
>真流量总量: {{ formatDataSize(scope.row.data_limit_mb || 0) }}</span >真流量总量: {{ formatDataSize(scope.row.real_total_mb || 0) }}</span
> >
<span class="remaining" <span class="remaining"
>真流量剩余: >真流量剩余:
{{ {{
formatDataSize( formatDataSize(
(scope.row.data_limit_mb || 0) - (scope.row.data_usage_mb || 0) (scope.row.real_total_mb || 0) - (scope.row.real_used_mb || 0)
) )
}}</span }}</span
> >
@@ -78,11 +78,11 @@
<ElProgress <ElProgress
style="margin-top: 4px" style="margin-top: 4px"
:percentage=" :percentage="
getUsageProgress(scope.row.data_usage_mb || 0, scope.row.data_limit_mb || 0) getUsageProgress(scope.row.real_used_mb || 0, scope.row.real_total_mb || 0)
" "
:color=" :color="
getProgressColorByPercentage( getProgressColorByPercentage(
getUsageProgress(scope.row.data_usage_mb || 0, scope.row.data_limit_mb || 0) getUsageProgress(scope.row.real_used_mb || 0, scope.row.real_total_mb || 0)
) )
" "
/> />
@@ -91,15 +91,7 @@
>已使用虚流量: {{ formatDataSize(scope.row.virtual_used_mb || 0) }}</span >已使用虚流量: {{ formatDataSize(scope.row.virtual_used_mb || 0) }}</span
> >
<span class="total" <span class="total"
>虚流量总量: {{ formatDataSize(scope.row.virtual_limit_mb || 0) }}</span >停机阈值: {{ formatDataSize(scope.row.virtual_total_mb || 0) }}</span
>
<span class="remaining"
>虚流量剩余:
{{
formatDataSize(
(scope.row.virtual_limit_mb || 0) - (scope.row.virtual_used_mb || 0)
)
}}</span
> >
</div> </div>
<ElProgress <ElProgress
@@ -107,14 +99,14 @@
:percentage=" :percentage="
getUsageProgress( getUsageProgress(
scope.row.virtual_used_mb || 0, scope.row.virtual_used_mb || 0,
scope.row.virtual_limit_mb || 0 scope.row.virtual_total_mb || 0
) )
" "
:color=" :color="
getProgressColorByPercentage( getProgressColorByPercentage(
getUsageProgress( getUsageProgress(
scope.row.virtual_used_mb || 0, scope.row.virtual_used_mb || 0,
scope.row.virtual_limit_mb || 0 scope.row.virtual_total_mb || 0
) )
) )
" "
@@ -128,18 +120,18 @@
formatDataSize( formatDataSize(
scope.row.enable_virtual_data scope.row.enable_virtual_data
? scope.row.virtual_used_mb || 0 ? scope.row.virtual_used_mb || 0
: scope.row.data_usage_mb || 0 : scope.row.real_used_mb || 0
) )
}}</span }}</span
> >
<span class="total" <span class="total"
>总量: {{ formatDataSize(scope.row.data_limit_mb || 0) }}</span >总量: {{ formatDataSize(scope.row.real_total_mb || 0) }}</span
> >
<span class="remaining" <span class="remaining"
>剩余: >剩余:
{{ {{
formatDataSize( formatDataSize(
(scope.row.data_limit_mb || 0) - (scope.row.data_usage_mb || 0) (scope.row.real_total_mb || 0) - (scope.row.real_used_mb || 0)
) )
}}</span }}</span
> >
@@ -150,8 +142,8 @@
getUsageProgress( getUsageProgress(
scope.row.enable_virtual_data scope.row.enable_virtual_data
? scope.row.virtual_used_mb || 0 ? scope.row.virtual_used_mb || 0
: scope.row.data_usage_mb || 0, : scope.row.real_used_mb || 0,
scope.row.data_limit_mb || 0 scope.row.real_total_mb || 0
) )
" "
:color=" :color="
@@ -159,8 +151,8 @@
getUsageProgress( getUsageProgress(
scope.row.enable_virtual_data scope.row.enable_virtual_data
? scope.row.virtual_used_mb || 0 ? scope.row.virtual_used_mb || 0
: scope.row.data_usage_mb || 0, : scope.row.real_used_mb || 0,
scope.row.data_limit_mb || 0 scope.row.real_total_mb || 0
) )
) )
" "

View File

@@ -105,12 +105,12 @@ export function useAssetInfo() {
// 流量/套餐信息 // 流量/套餐信息
current_package: data.current_package || '', current_package: data.current_package || '',
packageSeries: data.series_name || '-', packageSeries: data.series_name || '-',
packageTotalFlow: formatDataSize(data.package_total_mb || 0), packageTotalFlow: formatDataSize(data.real_total_mb || 0),
usedFlow: formatDataSize(data.package_used_mb || 0), usedFlow: formatDataSize(data.real_used_mb || 0),
remainFlow: formatDataSize((data.package_total_mb || 0) - (data.package_used_mb || 0)), remainFlow: formatDataSize((data.real_total_mb || 0) - (data.real_used_mb || 0)),
usedFlowPercentage: usedFlowPercentage:
data.package_total_mb > 0 data.real_total_mb > 0
? `${((data.package_used_mb / data.package_total_mb) * 100).toFixed(2)}%` ? `${((data.real_used_mb / data.real_total_mb) * 100).toFixed(2)}%`
: '0.00%', : '0.00%',
packageList: [] // 套餐列表需要单独调用API获取 packageList: [] // 套餐列表需要单独调用API获取
} }
@@ -191,25 +191,20 @@ export function useAssetInfo() {
order_no: pkg.order_no || '', order_no: pkg.order_no || '',
package_name: pkg.package_name || '', package_name: pkg.package_name || '',
paid_amount: pkg.paid_amount || 0, paid_amount: pkg.paid_amount || 0,
package_total_data: pkg.data_limit_mb || 0, real_total_mb: pkg.real_total_mb || 0,
real_data_used: pkg.data_usage_mb || 0, real_used_mb: pkg.real_used_mb || 0,
real_data_remaining: (pkg.data_limit_mb || 0) - (pkg.data_usage_mb || 0), real_remaining_mb: (pkg.real_total_mb || 0) - (pkg.real_used_mb || 0),
real_data_total: pkg.data_limit_mb || 0, virtual_total_mb: pkg.virtual_total_mb || 0,
virtual_data_used: pkg.virtual_used_mb || 0, virtual_used_mb: pkg.virtual_used_mb || 0,
virtual_data_remaining: pkg.virtual_remain_mb || 0, virtual_remaining_mb: (pkg.virtual_total_mb || 0) - (pkg.virtual_used_mb || 0),
virtual_data_total: pkg.virtual_limit_mb || 0, reduction_pct: pkg.reduction_pct || 0,
start_time: pkg.activated_at || '', start_time: pkg.activated_at || '',
expire_time: pkg.expires_at || '', expire_time: pkg.expires_at || '',
status: pkg.status || 0, status: pkg.status || 0,
status_name: pkg.status_name, status_name: pkg.status_name,
duration_days: undefined, duration_days: undefined,
virtual_ratio: pkg.virtual_ratio,
package_type: pkg.package_type, package_type: pkg.package_type,
enable_virtual_data: pkg.enable_virtual_data, enable_virtual_data: pkg.enable_virtual_data,
data_limit_mb: pkg.data_limit_mb,
virtual_limit_mb: pkg.virtual_limit_mb,
virtual_remain_mb: pkg.virtual_remain_mb,
data_usage_mb: pkg.data_usage_mb,
created_at: pkg.created_at || '' created_at: pkg.created_at || ''
} }
@@ -217,18 +212,18 @@ export function useAssetInfo() {
const useVirtual = pkg.enable_virtual_data const useVirtual = pkg.enable_virtual_data
cardInfo.value.current_package = pkg.package_name cardInfo.value.current_package = pkg.package_name
cardInfo.value.packageTotalFlow = formatDataSize( cardInfo.value.packageTotalFlow = formatDataSize(
useVirtual ? pkg.virtual_limit_mb || 0 : pkg.data_limit_mb || 0 useVirtual ? pkg.virtual_total_mb || 0 : pkg.real_total_mb || 0
) )
cardInfo.value.usedFlow = formatDataSize( cardInfo.value.usedFlow = formatDataSize(
useVirtual ? pkg.virtual_used_mb || 0 : pkg.data_usage_mb || 0 useVirtual ? pkg.virtual_used_mb || 0 : pkg.real_used_mb || 0
) )
cardInfo.value.remainFlow = formatDataSize( cardInfo.value.remainFlow = formatDataSize(
useVirtual useVirtual
? pkg.virtual_remain_mb || 0 ? (pkg.virtual_total_mb || 0) - (pkg.virtual_used_mb || 0)
: (pkg.data_limit_mb || 0) - (pkg.data_usage_mb || 0) : (pkg.real_total_mb || 0) - (pkg.real_used_mb || 0)
) )
const totalMb = useVirtual ? pkg.virtual_limit_mb || 0 : pkg.data_limit_mb || 0 const totalMb = useVirtual ? pkg.virtual_total_mb || 0 : pkg.real_total_mb || 0
const usedMb = useVirtual ? pkg.virtual_used_mb || 0 : pkg.data_usage_mb || 0 const usedMb = useVirtual ? pkg.virtual_used_mb || 0 : pkg.real_used_mb || 0
cardInfo.value.usedFlowPercentage = cardInfo.value.usedFlowPercentage =
totalMb > 0 ? `${((usedMb / totalMb) * 100).toFixed(2)}%` : '0.00%' totalMb > 0 ? `${((usedMb / totalMb) * 100).toFixed(2)}%` : '0.00%'
} else { } else {

View File

@@ -76,25 +76,20 @@ export interface PackageInfo {
package_id: number package_id: number
package_name: string package_name: string
package_price: number package_price: number
package_total_data: number real_total_mb: number
real_data_used: number real_used_mb: number
real_data_remaining: number real_remaining_mb: number
real_data_total: number virtual_total_mb: number
virtual_data_used: number virtual_used_mb: number
virtual_data_remaining: number virtual_remaining_mb: number
virtual_data_total: number
start_time: string start_time: string
expire_time: string expire_time: string
status: number status: number
status_name?: string status_name?: string
duration_days?: number duration_days?: number
virtual_ratio?: number // 虚流量比例 reduction_pct?: number // 展示增幅比例
package_type?: string // 套餐类型: formal正式套餐/ addon加油包 package_type?: string // 套餐类型: formal正式套餐/ addon加油包
enable_virtual_data?: boolean // 是否启用虚流量 enable_virtual_data?: boolean // 是否启用虚流量
data_limit_mb?: number // 总量
virtual_limit_mb?: number // 虚流量上限
virtual_remain_mb?: number // 虚流量剩余
data_usage_mb?: number // 已用流量
order_no?: string // 订单号 order_no?: string // 订单号
} }