fix: 套餐

This commit is contained in:
sexygoat
2026-04-29 11:29:53 +08:00
parent 686bddad79
commit 1dc4701540
44 changed files with 3912 additions and 150 deletions

View File

@@ -111,7 +111,10 @@
<SwitchModeDialog
v-model="switchModeDialogVisible"
:device-identifier="cardInfo?.virtual_no || ''"
:current-mode="cardInfo?.switch_mode as number"
:current-mode="Number(cardInfo?.switch_mode ?? 0)"
:cards="switchModeCards"
:has-imei="hasSwitchModeImei"
:confirm-loading="switchModeLoading"
@confirm="handleConfirmSwitchMode"
/>
<WiFiConfigDialog
@@ -160,10 +163,11 @@
</template>
<script setup lang="ts">
import { ref, watch, onMounted, nextTick } from 'vue'
import { computed, nextTick, onMounted, ref, watch } from 'vue'
import { useRoute, useRouter } from 'vue-router'
import { ElMessage, ElCard, ElEmpty } from 'element-plus'
import { RoutesAlias } from '@/router/routesAlias'
import { DeviceService } from '@/api/modules'
// 引入子组件
import AssetSearchCard from './components/AssetSearchCard.vue'
@@ -190,10 +194,21 @@
import { useAssetOperations } from './composables/useAssetOperations'
// 引入类型
import type { SwitchCardForm, WiFiForm } from './types'
import type { BindingCard, SwitchCardForm, WiFiForm } from './types'
defineOptions({ name: 'SingleCard' })
interface SwitchModeCardOption {
iot_card_id: number
iccid: string
slot_position?: number
carrier_name?: string
msisdn?: string
network_status?: number
real_name_status?: number
is_current?: boolean
}
const route = useRoute()
const router = useRouter()
@@ -239,6 +254,7 @@
// ========== 对话框状态 ==========
const switchCardDialogVisible = ref(false)
const switchModeDialogVisible = ref(false)
const switchModeLoading = ref(false)
const setWiFiDialogVisible = ref(false)
const rechargeDialogVisible = ref(false)
const dailyRecordsDialogVisible = ref(false)
@@ -252,6 +268,27 @@
const bindingCardRealnameStatusIccid = ref('')
const bindingCardRealnameStatusValue = ref<number>(0)
const switchModeCards = computed<SwitchModeCardOption[]>(() =>
(cardInfo.value?.cards || [])
.map((card: BindingCard) => ({
iot_card_id: Number(card.card_id ?? card.id),
iccid: card.iccid,
slot_position: card.slot_position,
carrier_name: card.carrier_name,
msisdn: card.msisdn,
network_status:
card.network_status === undefined ? undefined : Number(card.network_status),
real_name_status:
card.real_name_status === undefined ? undefined : Number(card.real_name_status),
is_current: card.is_current
}))
.filter(
(card: SwitchModeCardOption) => Number.isFinite(card.iot_card_id) && Boolean(card.iccid)
)
)
const hasSwitchModeImei = computed(() => Boolean(cardInfo.value?.imei))
// ========== 套餐列表分页状态 ==========
const packagePagination = ref({
page: 1,
@@ -375,19 +412,25 @@
/**
* 确认切换模式
*/
const handleConfirmSwitchMode = async (form: { switch_mode: number }) => {
const handleConfirmSwitchMode = async (form: { iot_card_id: number; switch_mode: 0 | 1 }) => {
const identifier = cardInfo.value?.virtual_no || ''
if (!identifier) return
switchModeLoading.value = true
try {
const { DeviceService } = await import('@/api/modules')
const identifier = cardInfo.value?.virtual_no || ''
const res = await DeviceService.setSwitchMode(identifier, form.switch_mode)
const res = await DeviceService.setSwitchMode(identifier, form)
if (res.code === 0) {
ElMessage.success('设置切卡模式成功')
switchModeDialogVisible.value = false
await loadRealtimeStatus(identifier, 'device')
} else {
ElMessage.error(res.msg || '设置切卡模式失败')
}
} catch (error: any) {
console.error('设置切卡模式失败:', error)
ElMessage.error('设置切卡模式失败')
} finally {
switchModeLoading.value = false
}
}