倒计时没有覆盖复机停机的问题
This commit is contained in:
@@ -20,6 +20,14 @@
|
||||
:device-realtime="deviceRealtime"
|
||||
v-model:polling-enabled="pollingEnabled"
|
||||
:realtime-loading="realtimeLoading"
|
||||
:start-disabled="startDisabled"
|
||||
:stop-disabled="stopDisabled"
|
||||
:start-remaining-text="startRemainingText"
|
||||
:stop-remaining-text="stopRemainingText"
|
||||
:get-start-remaining-text="getStartRemainingText"
|
||||
:get-stop-remaining-text="getStopRemainingText"
|
||||
:is-start-disabled="isStartActionDisabled"
|
||||
:is-stop-disabled="isStopActionDisabled"
|
||||
@enable-card="handleEnableCard"
|
||||
@disable-card="handleDisableCard"
|
||||
@manual-deactivate="handleManualDeactivate"
|
||||
@@ -176,7 +184,8 @@
|
||||
import {
|
||||
formatRemainingTime,
|
||||
FrontendRateLimitError,
|
||||
getAssetActionRateLimitState
|
||||
getAssetActionRateLimitState,
|
||||
type AssetRateLimitedAction
|
||||
} from '@/utils/business/apiRateLimit'
|
||||
|
||||
// 引入子组件
|
||||
@@ -248,6 +257,8 @@
|
||||
|
||||
// ========== 资产操作方法(使用 composable) ==========
|
||||
const {
|
||||
enableCardLoading,
|
||||
disableCardLoading,
|
||||
enableCard: enableCardOp,
|
||||
disableCard: disableCardOp,
|
||||
manualDeactivateCard: manualDeactivateCardOp,
|
||||
@@ -342,6 +353,59 @@
|
||||
: ''
|
||||
)
|
||||
|
||||
const startRateLimitState = computed(() => {
|
||||
const identifier = cardInfo.value?.iccid || cardInfo.value?.identifier
|
||||
if (!identifier) {
|
||||
return {
|
||||
limited: false,
|
||||
remainingMs: 0,
|
||||
retryAt: 0
|
||||
}
|
||||
}
|
||||
return getAssetActionRateLimitState('start', identifier, rateLimitNow.value)
|
||||
})
|
||||
|
||||
const stopRateLimitState = computed(() => {
|
||||
const identifier = cardInfo.value?.iccid || cardInfo.value?.identifier
|
||||
if (!identifier) {
|
||||
return {
|
||||
limited: false,
|
||||
remainingMs: 0,
|
||||
retryAt: 0
|
||||
}
|
||||
}
|
||||
return getAssetActionRateLimitState('stop', identifier, rateLimitNow.value)
|
||||
})
|
||||
|
||||
const startDisabled = computed(() => enableCardLoading.value || startRateLimitState.value.limited)
|
||||
const stopDisabled = computed(() => disableCardLoading.value || stopRateLimitState.value.limited)
|
||||
const startRemainingText = computed(() =>
|
||||
startRateLimitState.value.limited
|
||||
? formatRemainingTime(startRateLimitState.value.remainingMs)
|
||||
: ''
|
||||
)
|
||||
const stopRemainingText = computed(() =>
|
||||
stopRateLimitState.value.limited
|
||||
? formatRemainingTime(stopRateLimitState.value.remainingMs)
|
||||
: ''
|
||||
)
|
||||
|
||||
const getActionRemainingText = (action: AssetRateLimitedAction, identifier?: string) => {
|
||||
if (!identifier) return ''
|
||||
const state = getAssetActionRateLimitState(action, identifier, rateLimitNow.value)
|
||||
return state.limited ? formatRemainingTime(state.remainingMs) : ''
|
||||
}
|
||||
|
||||
const isActionDisabled = (action: AssetRateLimitedAction, identifier?: string) => {
|
||||
if (!identifier) return false
|
||||
return getAssetActionRateLimitState(action, identifier, rateLimitNow.value).limited
|
||||
}
|
||||
|
||||
const getStartRemainingText = (identifier: string) => getActionRemainingText('start', identifier)
|
||||
const getStopRemainingText = (identifier: string) => getActionRemainingText('stop', identifier)
|
||||
const isStartActionDisabled = (identifier: string) => isActionDisabled('start', identifier)
|
||||
const isStopActionDisabled = (identifier: string) => isActionDisabled('stop', identifier)
|
||||
|
||||
const updateRateLimitNow = () => {
|
||||
rateLimitNow.value = Date.now()
|
||||
}
|
||||
@@ -399,14 +463,24 @@
|
||||
* IoT卡操作 - 启用卡
|
||||
*/
|
||||
const handleEnableCard = async () => {
|
||||
await enableCardOp()
|
||||
if (startDisabled.value) return
|
||||
try {
|
||||
await enableCardOp()
|
||||
} finally {
|
||||
updateRateLimitNow()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* IoT卡操作 - 停用卡
|
||||
*/
|
||||
const handleDisableCard = async () => {
|
||||
await disableCardOp()
|
||||
if (stopDisabled.value) return
|
||||
try {
|
||||
await disableCardOp()
|
||||
} finally {
|
||||
updateRateLimitNow()
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -550,6 +624,7 @@
|
||||
*/
|
||||
const handleEnableBindingCard = async (payload: { card: any }) => {
|
||||
const { card } = payload
|
||||
if (isStartActionDisabled(card.iccid)) return
|
||||
try {
|
||||
const { AssetService } = await import('@/api/modules')
|
||||
await AssetService.startAsset(card.iccid)
|
||||
@@ -562,6 +637,8 @@
|
||||
return
|
||||
}
|
||||
console.error('启用绑定卡失败:', error)
|
||||
} finally {
|
||||
updateRateLimitNow()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -570,6 +647,7 @@
|
||||
*/
|
||||
const handleDisableBindingCard = async (payload: { card: any }) => {
|
||||
const { card } = payload
|
||||
if (isStopActionDisabled(card.iccid)) return
|
||||
try {
|
||||
const { AssetService } = await import('@/api/modules')
|
||||
await AssetService.stopAsset(card.iccid)
|
||||
@@ -577,7 +655,13 @@
|
||||
if (cardInfo.value)
|
||||
await loadRealtimeStatus(cardInfo.value.identifier, cardInfo.value.asset_type)
|
||||
} catch (error: any) {
|
||||
if (error instanceof FrontendRateLimitError) {
|
||||
ElMessage.warning(`操作过于频繁,请${formatRemainingTime(error.remainingMs)}后再试`)
|
||||
return
|
||||
}
|
||||
console.error('停用绑定卡失败:', error)
|
||||
} finally {
|
||||
updateRateLimitNow()
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user