This commit is contained in:
@@ -1479,27 +1479,71 @@
|
||||
|
||||
// ========== 设备操作相关 ==========
|
||||
|
||||
// 获取设备IMEI(通过virtual_no)
|
||||
const getDeviceImei = async (virtualNo: string): Promise<string | null> => {
|
||||
try {
|
||||
const res = await AssetService.resolveAsset(virtualNo)
|
||||
if (res.code === 0 && res.data && res.data.asset_type === 'device') {
|
||||
return res.data.imei || null
|
||||
}
|
||||
return null
|
||||
} catch (error) {
|
||||
console.error('获取设备IMEI失败:', error)
|
||||
return null
|
||||
}
|
||||
}
|
||||
|
||||
// 设备操作路由
|
||||
const handleDeviceOperation = (command: string, deviceNo: string) => {
|
||||
const handleDeviceOperation = async (command: string, deviceNo: string) => {
|
||||
switch (command) {
|
||||
case 'view-cards':
|
||||
handleViewCardsByDeviceNo(deviceNo)
|
||||
break
|
||||
case 'reboot':
|
||||
handleRebootDevice(deviceNo)
|
||||
case 'reboot': {
|
||||
const imei = await getDeviceImei(deviceNo)
|
||||
if (!imei) {
|
||||
ElMessage.error('无法获取设备IMEI,无法执行重启操作')
|
||||
return
|
||||
}
|
||||
handleRebootDevice(imei)
|
||||
break
|
||||
case 'reset':
|
||||
handleResetDevice(deviceNo)
|
||||
}
|
||||
case 'reset': {
|
||||
const imei = await getDeviceImei(deviceNo)
|
||||
if (!imei) {
|
||||
ElMessage.error('无法获取设备IMEI,无法执行重置操作')
|
||||
return
|
||||
}
|
||||
handleResetDevice(imei)
|
||||
break
|
||||
case 'speed-limit':
|
||||
showSpeedLimitDialog(deviceNo)
|
||||
}
|
||||
case 'speed-limit': {
|
||||
const imei = await getDeviceImei(deviceNo)
|
||||
if (!imei) {
|
||||
ElMessage.error('无法获取设备IMEI,无法执行限速操作')
|
||||
return
|
||||
}
|
||||
showSpeedLimitDialog(imei)
|
||||
break
|
||||
case 'switch-card':
|
||||
showSwitchCardDialog(deviceNo)
|
||||
}
|
||||
case 'switch-card': {
|
||||
const imei = await getDeviceImei(deviceNo)
|
||||
if (!imei) {
|
||||
ElMessage.error('无法获取设备IMEI,无法执行切卡操作')
|
||||
return
|
||||
}
|
||||
showSwitchCardDialog(imei)
|
||||
break
|
||||
case 'set-wifi':
|
||||
showSetWiFiDialog(deviceNo)
|
||||
}
|
||||
case 'set-wifi': {
|
||||
const imei = await getDeviceImei(deviceNo)
|
||||
if (!imei) {
|
||||
ElMessage.error('无法获取设备IMEI,无法执行WiFi设置操作')
|
||||
return
|
||||
}
|
||||
showSetWiFiDialog(imei)
|
||||
break
|
||||
}
|
||||
case 'manual-deactivate':
|
||||
handleManualDeactivateDevice()
|
||||
break
|
||||
@@ -1654,8 +1698,8 @@
|
||||
}
|
||||
|
||||
// 显示切换SIM卡对话框
|
||||
const showSwitchCardDialog = async (deviceNo: string) => {
|
||||
currentOperatingImei.value = deviceNo
|
||||
const showSwitchCardDialog = async (imei: string) => {
|
||||
currentOperatingImei.value = imei
|
||||
switchCardForm.target_iccid = ''
|
||||
deviceBindingCards.value = []
|
||||
switchCardDialogVisible.value = true
|
||||
|
||||
@@ -1,10 +1,7 @@
|
||||
<template>
|
||||
<div class="single-card-page">
|
||||
<!-- 资产查询区域 -->
|
||||
<ElCard
|
||||
shadow="never"
|
||||
class="search-card"
|
||||
>
|
||||
<ElCard shadow="never" class="search-card">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span>资产查询</span>
|
||||
@@ -64,81 +61,120 @@
|
||||
</div>
|
||||
</template>
|
||||
<ElDescriptions :column="3" border>
|
||||
<ElDescriptionsItem label="虚拟号">{{
|
||||
cardInfo?.virtual_no || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="资产状态">
|
||||
<ElTag :type="getAssetStatusType(cardInfo?.status)" size="small">
|
||||
{{ getAssetStatusName(cardInfo?.status) }}
|
||||
</ElTag>
|
||||
</ElDescriptionsItem>
|
||||
<!--<ElDescriptionsItem label="资产状态">-->
|
||||
<!-- <ElTag :type="getAssetStatusType(cardInfo?.status)" size="small">-->
|
||||
<!-- {{ getAssetStatusName(cardInfo?.status) }}-->
|
||||
<!-- </ElTag>-->
|
||||
<!--</ElDescriptionsItem>-->
|
||||
|
||||
<!-- 卡专属字段 -->
|
||||
<template v-if="cardInfo?.asset_type === 'card'">
|
||||
<ElDescriptionsItem label="ICCID">{{ cardInfo?.iccid || '--' }}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="MSISDN">{{
|
||||
cardInfo?.msisdn || '--'
|
||||
<ElDescriptionsItem label="运营商账户">暂未接入</ElDescriptionsItem>
|
||||
<!--<ElDescriptionsItem label="运营商">{{-->
|
||||
<!-- cardInfo?.carrier_name || '--'-->
|
||||
<!-- }}</ElDescriptionsItem>-->
|
||||
<ElDescriptionsItem label="实名状态">
|
||||
<ElTag :type="getRealNameStatusType(cardInfo?.real_name_status)" size="small">
|
||||
{{ getRealNameStatusName(cardInfo?.real_name_status) }}
|
||||
</ElTag>
|
||||
</ElDescriptionsItem>
|
||||
|
||||
<ElDescriptionsItem label="店铺">{{
|
||||
cardInfo?.shop_name || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="IMSI">{{ cardInfo?.imsi || '--' }}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="运营商">{{
|
||||
cardInfo?.carrier_name || '--'
|
||||
<ElDescriptionsItem label="虚拟号">{{
|
||||
cardInfo?.virtual_no || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="网络状态">
|
||||
<ElTag :type="cardInfo?.network_status === 1 ? 'success' : 'danger'" size="small">
|
||||
{{ cardInfo?.network_status === 1 ? '开机' : '停机' }}
|
||||
</ElTag>
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="卡类型">{{
|
||||
cardInfo?.card_category || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="绑定设备">{{
|
||||
cardInfo?.bound_device_name || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="最后同步时间">{{
|
||||
formatDateTime(cardInfo?.last_sync_time) || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
|
||||
<ElDescriptionsItem label="本月已用流量">{{
|
||||
formatDataSize(cardInfo?.current_month_usage_mb || 0)
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="实名时间">暂未接入</ElDescriptionsItem>
|
||||
|
||||
<ElDescriptionsItem label="MSISDN">{{
|
||||
cardInfo?.msisdn || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<!--<ElDescriptionsItem label="IMSI">{{ cardInfo?.imsi || '--' }}</ElDescriptionsItem>-->
|
||||
|
||||
<!--<ElDescriptionsItem label="卡类型">{{-->
|
||||
<!-- cardInfo?.card_category || '--'-->
|
||||
<!--}}</ElDescriptionsItem>-->
|
||||
<!--<ElDescriptionsItem label="绑定设备">{{-->
|
||||
<!-- cardInfo?.bound_device_name || '--'-->
|
||||
<!--}}</ElDescriptionsItem>-->
|
||||
<!--<ElDescriptionsItem label="最后同步时间">{{-->
|
||||
<!-- formatDateTime(cardInfo?.last_sync_time) || '--'-->
|
||||
<!--}}</ElDescriptionsItem>-->
|
||||
</template>
|
||||
|
||||
<!-- 设备专属字段 -->
|
||||
<template v-if="cardInfo?.asset_type === 'device'">
|
||||
<ElDescriptionsItem label="设备名称">{{
|
||||
cardInfo?.device_name || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="设备型号">{{
|
||||
cardInfo?.device_model || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="设备类型">{{
|
||||
cardInfo?.device_type || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="制造商">{{
|
||||
cardInfo?.manufacturer || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="IMEI">{{ cardInfo?.imei || '--' }}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="SN">{{ cardInfo?.sn || '--' }}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="最大卡槽">{{
|
||||
cardInfo?.max_sim_slots || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="已绑定卡数">{{
|
||||
cardInfo?.bound_card_count || 0
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="保护期状态">
|
||||
<ElTag :type="getProtectStatusType(cardInfo?.device_protect_status)" size="small">
|
||||
{{ getProtectStatusName(cardInfo?.device_protect_status) }}
|
||||
</ElTag>
|
||||
</ElDescriptionsItem>
|
||||
</template>
|
||||
|
||||
<ElDescriptionsItem label="设备类型">暂未接入</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="实名状态">
|
||||
<ElTag :type="getRealNameStatusType(cardInfo?.real_name_status)" size="small">
|
||||
{{ getRealNameStatusName(cardInfo?.real_name_status) }}
|
||||
</ElTag>
|
||||
</ElDescriptionsItem>
|
||||
|
||||
<ElDescriptionsItem label="店铺">{{
|
||||
cardInfo?.shop_name || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="设备名称">{{
|
||||
cardInfo?.device_name || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="设备状态">
|
||||
<ElTag :type="getAssetStatusType(cardInfo?.status)" size="small">
|
||||
{{ getAssetStatusName(cardInfo?.status) }}
|
||||
</ElTag>
|
||||
</ElDescriptionsItem>
|
||||
|
||||
<ElDescriptionsItem label="虚拟号">{{
|
||||
cardInfo?.virtual_no || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="SN">{{ cardInfo?.sn || '--' }}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="设备型号">{{
|
||||
cardInfo?.device_model || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
|
||||
<ElDescriptionsItem label="供应商">暂未接入</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="已绑定卡数">{{
|
||||
cardInfo?.bound_card_count || 0
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="最大卡槽数">{{
|
||||
cardInfo?.max_sim_slots || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
|
||||
<ElDescriptionsItem label="激活时间">{{
|
||||
cardInfo?.activated_at || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="实名时间">暂未接入</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="信号强度">暂未接入</ElDescriptionsItem>
|
||||
<!--<ElDescriptionsItem label="制造商">{{-->
|
||||
<!-- cardInfo?.manufacturer || '--'-->
|
||||
<!--}}</ElDescriptionsItem>-->
|
||||
|
||||
<!--<ElDescriptionsItem label="保护期状态">-->
|
||||
<!-- <ElTag :type="getProtectStatusType(cardInfo?.device_protect_status)" size="small">-->
|
||||
<!-- {{ getProtectStatusName(cardInfo?.device_protect_status) }}-->
|
||||
<!-- </ElTag>-->
|
||||
<!--</ElDescriptionsItem>-->
|
||||
</template>
|
||||
|
||||
<!--<ElDescriptionsItem label="实名状态">-->
|
||||
<!-- <ElTag :type="getRealNameStatusType(cardInfo?.real_name_status)" size="small">-->
|
||||
<!-- {{ getRealNameStatusName(cardInfo?.real_name_status) }}-->
|
||||
<!-- </ElTag>-->
|
||||
<!--</ElDescriptionsItem>-->
|
||||
<!--<ElDescriptionsItem label="激活时间">{{-->
|
||||
<!-- cardInfo?.activated_at || '--'-->
|
||||
<!--}}</ElDescriptionsItem>-->
|
||||
</ElDescriptions>
|
||||
|
||||
<!-- 设备绑定卡列表 (放在设备信息卡片内) -->
|
||||
@@ -179,18 +215,10 @@
|
||||
class="card-operations"
|
||||
style="margin-top: 16px; text-align: right"
|
||||
>
|
||||
<ElButton
|
||||
type="success"
|
||||
@click="handleEnableCard"
|
||||
:loading="enableCardLoading"
|
||||
>
|
||||
<ElButton type="success" @click="handleEnableCard" :loading="enableCardLoading">
|
||||
启用此卡
|
||||
</ElButton>
|
||||
<ElButton
|
||||
type="warning"
|
||||
@click="handleDisableCard"
|
||||
:loading="disableCardLoading"
|
||||
>
|
||||
<ElButton type="warning" @click="handleDisableCard" :loading="disableCardLoading">
|
||||
停用此卡
|
||||
</ElButton>
|
||||
<ElButton
|
||||
@@ -203,19 +231,11 @@
|
||||
</div>
|
||||
|
||||
<!-- 设备操作按钮 -->
|
||||
<div v-else class="device-operations" style="margin-top: 16px; text-align: right;">
|
||||
<ElButton
|
||||
type="primary"
|
||||
@click="handleRebootDevice"
|
||||
:loading="rebootDeviceLoading"
|
||||
>
|
||||
<div v-else class="device-operations" style="margin-top: 16px; text-align: right">
|
||||
<ElButton type="primary" @click="handleRebootDevice" :loading="rebootDeviceLoading">
|
||||
重启设备
|
||||
</ElButton>
|
||||
<ElButton
|
||||
type="warning"
|
||||
@click="handleResetDevice"
|
||||
:loading="resetDeviceLoading"
|
||||
>
|
||||
<ElButton type="warning" @click="handleResetDevice" :loading="resetDeviceLoading">
|
||||
恢复出厂
|
||||
</ElButton>
|
||||
<ElButton
|
||||
@@ -232,11 +252,7 @@
|
||||
>
|
||||
切换SIM卡
|
||||
</ElButton>
|
||||
<ElButton
|
||||
type="primary"
|
||||
@click="handleShowSetWiFiDialog"
|
||||
:loading="setWiFiLoading"
|
||||
>
|
||||
<ElButton type="primary" @click="handleShowSetWiFiDialog" :loading="setWiFiLoading">
|
||||
设置WiFi
|
||||
</ElButton>
|
||||
<ElButton
|
||||
@@ -327,6 +343,14 @@
|
||||
}}</ElDescriptionsItem>
|
||||
</ElDescriptions>
|
||||
|
||||
<!-- 操作按钮组 -->
|
||||
<div class="package-actions">
|
||||
<ElButton type="primary">套餐充值</ElButton>
|
||||
<ElButton type="warning">更改过期时间</ElButton>
|
||||
<ElButton type="info">往期订单</ElButton>
|
||||
<ElButton type="success">增减流量</ElButton>
|
||||
</div>
|
||||
|
||||
<!-- 流量使用进度条 -->
|
||||
<!--<div class="traffic-progress-wrapper">-->
|
||||
<!-- <div class="progress-info">-->
|
||||
@@ -372,9 +396,9 @@
|
||||
</div>
|
||||
</template>
|
||||
<ElDescriptions :column="2" border>
|
||||
<ElDescriptionsItem label="所属店铺">{{
|
||||
cardInfo?.shop_name || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
<!--<ElDescriptionsItem label="所属店铺">{{-->
|
||||
<!-- cardInfo?.shop_name || '--'-->
|
||||
<!--}}</ElDescriptionsItem>-->
|
||||
<ElDescriptionsItem label="套餐系列">{{
|
||||
cardInfo?.series_name || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
@@ -384,11 +408,11 @@
|
||||
<ElDescriptionsItem label="创建时间">{{
|
||||
formatDateTime(cardInfo?.created_at)
|
||||
}}</ElDescriptionsItem>
|
||||
<template v-if="cardInfo?.asset_type === 'card'">
|
||||
<ElDescriptionsItem label="供应商">{{
|
||||
cardInfo?.supplier || '--'
|
||||
}}</ElDescriptionsItem>
|
||||
</template>
|
||||
<!--<template v-if="cardInfo?.asset_type === 'card'">-->
|
||||
<!-- <ElDescriptionsItem label="供应商">{{-->
|
||||
<!-- cardInfo?.supplier || '--'-->
|
||||
<!-- }}</ElDescriptionsItem>-->
|
||||
<!--</template>-->
|
||||
</ElDescriptions>
|
||||
</ElCard>
|
||||
</div>
|
||||
@@ -731,7 +755,9 @@
|
||||
label-width="120px"
|
||||
>
|
||||
<ElFormItem label="设备信息">
|
||||
<span style="font-weight: bold; color: #409eff">{{ cardInfo?.imei || cardInfo?.virtual_no }}</span>
|
||||
<span style="font-weight: bold; color: #409eff">{{
|
||||
cardInfo?.imei || cardInfo?.virtual_no
|
||||
}}</span>
|
||||
</ElFormItem>
|
||||
<ElFormItem label="下行速率" prop="download_speed">
|
||||
<ElInputNumber
|
||||
@@ -756,7 +782,11 @@
|
||||
</ElForm>
|
||||
<template #footer>
|
||||
<ElButton @click="speedLimitDialogVisible = false">取消</ElButton>
|
||||
<ElButton type="primary" @click="handleConfirmSpeedLimit" :loading="speedLimitConfirmLoading">
|
||||
<ElButton
|
||||
type="primary"
|
||||
@click="handleConfirmSpeedLimit"
|
||||
:loading="speedLimitConfirmLoading"
|
||||
>
|
||||
确认设置
|
||||
</ElButton>
|
||||
</template>
|
||||
@@ -791,7 +821,9 @@
|
||||
label-width="120px"
|
||||
>
|
||||
<ElFormItem label="设备信息">
|
||||
<span style="font-weight: bold; color: #409eff">{{ cardInfo?.imei || cardInfo?.virtual_no }}</span>
|
||||
<span style="font-weight: bold; color: #409eff">{{
|
||||
cardInfo?.imei || cardInfo?.virtual_no
|
||||
}}</span>
|
||||
</ElFormItem>
|
||||
<ElFormItem label="目标ICCID" prop="target_iccid">
|
||||
<ElSelect
|
||||
@@ -834,14 +866,11 @@
|
||||
|
||||
<!-- 设置WiFi对话框 -->
|
||||
<ElDialog v-model="setWiFiDialogVisible" title="设置WiFi" width="500px">
|
||||
<ElForm
|
||||
ref="setWiFiFormRef"
|
||||
:model="setWiFiForm"
|
||||
:rules="setWiFiRules"
|
||||
label-width="120px"
|
||||
>
|
||||
<ElForm ref="setWiFiFormRef" :model="setWiFiForm" :rules="setWiFiRules" label-width="120px">
|
||||
<ElFormItem label="设备信息">
|
||||
<span style="font-weight: bold; color: #409eff">{{ cardInfo?.imei || cardInfo?.virtual_no }}</span>
|
||||
<span style="font-weight: bold; color: #409eff">{{
|
||||
cardInfo?.imei || cardInfo?.virtual_no
|
||||
}}</span>
|
||||
</ElFormItem>
|
||||
<ElFormItem label="WiFi状态" prop="enabled">
|
||||
<ElRadioGroup v-model="setWiFiForm.enabled">
|
||||
@@ -953,8 +982,14 @@
|
||||
<ElTableColumn label="使用进度" min-width="200">
|
||||
<template #default="{ row }">
|
||||
<ElProgress
|
||||
:percentage="getUsageProgress(row.cumulative_usage_mb, dailyRecordsData.total_usage_mb)"
|
||||
:color="getProgressColorByPercentage(getUsageProgress(row.cumulative_usage_mb, dailyRecordsData.total_usage_mb))"
|
||||
:percentage="
|
||||
getUsageProgress(row.cumulative_usage_mb, dailyRecordsData.total_usage_mb)
|
||||
"
|
||||
:color="
|
||||
getProgressColorByPercentage(
|
||||
getUsageProgress(row.cumulative_usage_mb, dailyRecordsData.total_usage_mb)
|
||||
)
|
||||
"
|
||||
/>
|
||||
</template>
|
||||
</ElTableColumn>
|
||||
@@ -2560,6 +2595,11 @@
|
||||
|
||||
// 当前套餐卡片
|
||||
.current-package-card {
|
||||
.package-actions {
|
||||
margin-top: 16px;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.traffic-progress-wrapper {
|
||||
margin-top: 24px;
|
||||
padding: 20px;
|
||||
|
||||
Reference in New Issue
Block a user