From fb10b727600b30129e49f2af25b24f71e9bda06a Mon Sep 17 00:00:00 2001
From: sexygoat <1538832180@qq.com>
Date: Tue, 28 Apr 2026 11:14:13 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E6=89=8B=E5=8A=A8=E8=A7=A6=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/types/api/asset.ts | 1 +
src/types/auto-imports.d.ts | 1 +
.../components/AssetSearchCard.vue | 6 +-
.../components/BasicInfoCard.vue | 4 +
.../components/PackageListCard.vue | 4 +-
.../composables/useAssetInfo.ts | 13 +-
.../asset-information/index.vue | 13 +-
.../enterprise-cards/index.vue | 11 +-
.../manual-trigger/index.vue | 614 ++++++++++++------
9 files changed, 462 insertions(+), 205 deletions(-)
diff --git a/src/types/api/asset.ts b/src/types/api/asset.ts
index 2ed54bb..ba5c34b 100644
--- a/src/types/api/asset.ts
+++ b/src/types/api/asset.ts
@@ -169,6 +169,7 @@ export interface AssetRealtimeStatusResponse {
real_name_status?: RealNameStatus // 实名状态(仅 card)
realname_policy?: string // 实名认证策略(仅 card)
current_month_usage_mb?: number // 本月已用流量 MB(仅 card)
+ last_gateway_reading_mb?: number // 运营商周期月内已用流量 MB(仅 card)
last_sync_time?: string // 最后同步时间(仅 card)
// ===== 设备专属字段 =====
diff --git a/src/types/auto-imports.d.ts b/src/types/auto-imports.d.ts
index fe197da..927b2e5 100644
--- a/src/types/auto-imports.d.ts
+++ b/src/types/auto-imports.d.ts
@@ -7,6 +7,7 @@
export {}
declare global {
const EffectScope: typeof import('vue')['EffectScope']
+ const ElButton: typeof import('element-plus/es')['ElButton']
const ElMessageBox: typeof import('element-plus/es')['ElMessageBox']
const acceptHMRUpdate: typeof import('pinia')['acceptHMRUpdate']
const asyncComputed: typeof import('@vueuse/core')['asyncComputed']
diff --git a/src/views/asset-management/asset-information/components/AssetSearchCard.vue b/src/views/asset-management/asset-information/components/AssetSearchCard.vue
index 6238674..8e1d467 100644
--- a/src/views/asset-management/asset-information/components/AssetSearchCard.vue
+++ b/src/views/asset-management/asset-information/components/AssetSearchCard.vue
@@ -33,7 +33,7 @@
- 刷新
+ 刷新
@@ -54,10 +54,12 @@
// Props
interface Props {
hasCardInfo?: boolean
+ refreshDisabled?: boolean
}
withDefaults(defineProps(), {
- hasCardInfo: false
+ hasCardInfo: false,
+ refreshDisabled: false
})
// Emits
diff --git a/src/views/asset-management/asset-information/components/BasicInfoCard.vue b/src/views/asset-management/asset-information/components/BasicInfoCard.vue
index bd3890a..a5e1ad2 100644
--- a/src/views/asset-management/asset-information/components/BasicInfoCard.vue
+++ b/src/views/asset-management/asset-information/components/BasicInfoCard.vue
@@ -53,6 +53,9 @@
{{
formatDataSize(cardInfo?.current_month_usage_mb || 0)
}}
+ {{
+ formatDataSize(cardInfo?.last_gateway_reading_mb || 0)
+ }}
{{
cardInfo?.real_name_at ? formatDateTime(cardInfo.real_name_at) : '-'
}}
@@ -480,6 +483,7 @@
real_name_status?: number
network_status?: number
current_month_usage_mb?: number
+ last_gateway_reading_mb?: number
device_type?: string
device_name?: string
device_model?: string
diff --git a/src/views/asset-management/asset-information/components/PackageListCard.vue b/src/views/asset-management/asset-information/components/PackageListCard.vue
index 505c61e..9e58e7a 100644
--- a/src/views/asset-management/asset-information/components/PackageListCard.vue
+++ b/src/views/asset-management/asset-information/components/PackageListCard.vue
@@ -4,7 +4,9 @@
diff --git a/src/views/asset-management/asset-information/composables/useAssetInfo.ts b/src/views/asset-management/asset-information/composables/useAssetInfo.ts
index c2a7787..ef8d2a9 100644
--- a/src/views/asset-management/asset-information/composables/useAssetInfo.ts
+++ b/src/views/asset-management/asset-information/composables/useAssetInfo.ts
@@ -276,6 +276,9 @@ export function useAssetInfo() {
if (data.current_month_usage_mb !== undefined) {
cardInfo.value.current_month_usage_mb = data.current_month_usage_mb
}
+ if (data.last_gateway_reading_mb !== undefined) {
+ cardInfo.value.last_gateway_reading_mb = data.last_gateway_reading_mb
+ }
} else if (assetType === 'device') {
// 设备的实时状态
if (data.device_protect_status !== undefined) {
@@ -353,8 +356,9 @@ export function useAssetInfo() {
* 刷新资产数据(调用refresh接口后重新加载)
* @param identifier - 资产标识符
* @param assetType - 资产类型(card/device)
+ * @returns true if refresh was successful, false if rate limited (429)
*/
- const refreshAsset = async (identifier: string, assetType: string) => {
+ const refreshAsset = async (identifier: string, assetType: string): Promise => {
try {
await AssetService.refreshAsset(identifier)
ElMessage.success('刷新成功')
@@ -363,8 +367,15 @@ export function useAssetInfo() {
if (identifier) {
await loadRealtimeStatus(identifier, assetType)
}
+ return true
} catch (error: any) {
console.log(error)
+ // Check if it's a 429 rate limit error
+ if (error?.response?.status === 429) {
+ ElMessage.warning('操作过于频繁,请30秒后再试')
+ return false
+ }
+ return false
}
}
diff --git a/src/views/asset-management/asset-information/index.vue b/src/views/asset-management/asset-information/index.vue
index a18d7b7..f5371e9 100644
--- a/src/views/asset-management/asset-information/index.vue
+++ b/src/views/asset-management/asset-information/index.vue
@@ -4,6 +4,7 @@
@@ -266,6 +267,9 @@
await updatePollingStatus(val)
})
+ // ========== 刷新按钮状态 ==========
+ const refreshDisabled = ref(false)
+
// ========== 事件处理 ==========
/**
@@ -301,7 +305,14 @@
*/
const handleRefresh = async () => {
if (!cardInfo.value) return
- await refreshAsset(cardInfo.value.identifier, cardInfo.value.asset_type)
+ const success = await refreshAsset(cardInfo.value.identifier, cardInfo.value.asset_type)
+ if (!success) {
+ // 如果刷新失败(429错误),禁用刷新按钮30秒
+ refreshDisabled.value = true
+ setTimeout(() => {
+ refreshDisabled.value = false
+ }, 30000)
+ }
}
/**
diff --git a/src/views/asset-management/enterprise-cards/index.vue b/src/views/asset-management/enterprise-cards/index.vue
index a976c71..7284813 100644
--- a/src/views/asset-management/enterprise-cards/index.vue
+++ b/src/views/asset-management/enterprise-cards/index.vue
@@ -78,7 +78,7 @@
v-model:filter="cardSearchForm"
:items="cardSearchFormItems"
label-width="120"
- :show-expand="false"
+ show-expand
@reset="handleCardSearchReset"
@search="handleCardSearch"
>
@@ -107,6 +107,7 @@
:pageSize="cardPagination.pageSize"
:total="cardPagination.total"
:marginTop="10"
+ height="40vh"
@size-change="handleCardPageSizeChange"
@current-change="handleCardPageChange"
@selection-change="handleAvailableCardsSelectionChange"
@@ -710,14 +711,14 @@
label: '自然月累计流量(MB)',
width: 180,
formatter: (row: EnterpriseCardItem) =>
- ((row as any).current_month_usage_mb)?.toLocaleString() || '0'
+ (row as any).current_month_usage_mb?.toLocaleString() || '0'
},
{
prop: 'last_month_total_mb',
label: '上月流量总量(MB)',
width: 150,
formatter: (row: EnterpriseCardItem) =>
- ((row as any).last_month_total_mb)?.toLocaleString() || '0'
+ (row as any).last_month_total_mb?.toLocaleString() || '0'
},
{
prop: 'data_usage_mb',
@@ -737,7 +738,9 @@
label: '最后实名检查时间',
width: 180,
formatter: (row: EnterpriseCardItem) =>
- (row as any).last_real_name_check_at ? formatDateTime((row as any).last_real_name_check_at) : '-'
+ (row as any).last_real_name_check_at
+ ? formatDateTime((row as any).last_real_name_check_at)
+ : '-'
},
{
prop: 'enable_polling',
diff --git a/src/views/polling-management/manual-trigger/index.vue b/src/views/polling-management/manual-trigger/index.vue
index b407cd1..a96fbf8 100644
--- a/src/views/polling-management/manual-trigger/index.vue
+++ b/src/views/polling-management/manual-trigger/index.vue
@@ -53,28 +53,28 @@
:pageSize="pagination.page_size"
:total="pagination.total"
:marginTop="10"
- :row-class-name="getRowClassName"
+ :actions="getActions"
@size-change="handleSizeChange"
@current-change="handleCurrentChange"
- @row-contextmenu="handleRowContextMenu"
- @cell-mouse-enter="handleCellMouseEnter"
- @cell-mouse-leave="handleCellMouseLeave"
>
-
+
+
+
+
+ {{ getProgressPercentage(scope.row) }}%
+
+
+
-
-
-
-
-
-
@@ -85,91 +85,64 @@
:close-on-click-modal="false"
@close="handleBatchDialogClose"
>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 搜索
-
- 重置
-
-
- 已选择 {{ selectedBatchCards.length }} 张卡
-
- 最多选择1000张卡
-
-
-
-
-
-
-
-
-
-
- {{ getCardStatusName(row.status) }}
-
-
-
-
-
+
取消
-
+
确定
@@ -351,8 +324,21 @@