修改资产信息字段排序
Some checks failed
构建并部署前端到测试环境 / build-and-deploy (push) Has been cancelled

This commit is contained in:
sexygoat
2026-03-24 16:47:52 +08:00
parent a805c27902
commit 2af0346d04
2 changed files with 222 additions and 138 deletions

View File

@@ -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) { switch (command) {
case 'view-cards': case 'view-cards':
handleViewCardsByDeviceNo(deviceNo) handleViewCardsByDeviceNo(deviceNo)
break break
case 'reboot': case 'reboot': {
handleRebootDevice(deviceNo) const imei = await getDeviceImei(deviceNo)
if (!imei) {
ElMessage.error('无法获取设备IMEI,无法执行重启操作')
return
}
handleRebootDevice(imei)
break break
case 'reset': }
handleResetDevice(deviceNo) case 'reset': {
const imei = await getDeviceImei(deviceNo)
if (!imei) {
ElMessage.error('无法获取设备IMEI,无法执行重置操作')
return
}
handleResetDevice(imei)
break break
case 'speed-limit': }
showSpeedLimitDialog(deviceNo) case 'speed-limit': {
const imei = await getDeviceImei(deviceNo)
if (!imei) {
ElMessage.error('无法获取设备IMEI,无法执行限速操作')
return
}
showSpeedLimitDialog(imei)
break break
case 'switch-card': }
showSwitchCardDialog(deviceNo) case 'switch-card': {
const imei = await getDeviceImei(deviceNo)
if (!imei) {
ElMessage.error('无法获取设备IMEI,无法执行切卡操作')
return
}
showSwitchCardDialog(imei)
break break
case 'set-wifi': }
showSetWiFiDialog(deviceNo) case 'set-wifi': {
const imei = await getDeviceImei(deviceNo)
if (!imei) {
ElMessage.error('无法获取设备IMEI,无法执行WiFi设置操作')
return
}
showSetWiFiDialog(imei)
break break
}
case 'manual-deactivate': case 'manual-deactivate':
handleManualDeactivateDevice() handleManualDeactivateDevice()
break break
@@ -1654,8 +1698,8 @@
} }
// 显示切换SIM卡对话框 // 显示切换SIM卡对话框
const showSwitchCardDialog = async (deviceNo: string) => { const showSwitchCardDialog = async (imei: string) => {
currentOperatingImei.value = deviceNo currentOperatingImei.value = imei
switchCardForm.target_iccid = '' switchCardForm.target_iccid = ''
deviceBindingCards.value = [] deviceBindingCards.value = []
switchCardDialogVisible.value = true switchCardDialogVisible.value = true

View File

@@ -1,10 +1,7 @@
<template> <template>
<div class="single-card-page"> <div class="single-card-page">
<!-- 资产查询区域 --> <!-- 资产查询区域 -->
<ElCard <ElCard shadow="never" class="search-card">
shadow="never"
class="search-card"
>
<template #header> <template #header>
<div class="card-header"> <div class="card-header">
<span>资产查询</span> <span>资产查询</span>
@@ -64,81 +61,120 @@
</div> </div>
</template> </template>
<ElDescriptions :column="3" border> <ElDescriptions :column="3" border>
<ElDescriptionsItem label="虚拟号">{{ <!--<ElDescriptionsItem label="资产状态">-->
cardInfo?.virtual_no || '--' <!-- <ElTag :type="getAssetStatusType(cardInfo?.status)" size="small">-->
}}</ElDescriptionsItem> <!-- {{ getAssetStatusName(cardInfo?.status) }}-->
<ElDescriptionsItem label="资产状态"> <!-- </ElTag>-->
<ElTag :type="getAssetStatusType(cardInfo?.status)" size="small"> <!--</ElDescriptionsItem>-->
{{ getAssetStatusName(cardInfo?.status) }}
</ElTag>
</ElDescriptionsItem>
<!-- 卡专属字段 --> <!-- 卡专属字段 -->
<template v-if="cardInfo?.asset_type === 'card'"> <template v-if="cardInfo?.asset_type === 'card'">
<ElDescriptionsItem label="ICCID">{{ cardInfo?.iccid || '--' }}</ElDescriptionsItem> <ElDescriptionsItem label="ICCID">{{ cardInfo?.iccid || '--' }}</ElDescriptionsItem>
<ElDescriptionsItem label="MSISDN">{{ <ElDescriptionsItem label="运营商账户">暂未接入</ElDescriptionsItem>
cardInfo?.msisdn || '--' <!--<ElDescriptionsItem label="运营商">{{-->
<!-- cardInfo?.carrier_name || '&#45;&#45;'-->
<!-- }}</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>
<ElDescriptionsItem label="IMSI">{{ cardInfo?.imsi || '--' }}</ElDescriptionsItem> <ElDescriptionsItem label="虚拟号">{{
<ElDescriptionsItem label="运营商">{{ cardInfo?.virtual_no || '--'
cardInfo?.carrier_name || '--'
}}</ElDescriptionsItem> }}</ElDescriptionsItem>
<ElDescriptionsItem label="网络状态"> <ElDescriptionsItem label="网络状态">
<ElTag :type="cardInfo?.network_status === 1 ? 'success' : 'danger'" size="small"> <ElTag :type="cardInfo?.network_status === 1 ? 'success' : 'danger'" size="small">
{{ cardInfo?.network_status === 1 ? '开机' : '停机' }} {{ cardInfo?.network_status === 1 ? '开机' : '停机' }}
</ElTag> </ElTag>
</ElDescriptionsItem> </ElDescriptionsItem>
<ElDescriptionsItem label="卡类型">{{
cardInfo?.card_category || '--'
}}</ElDescriptionsItem>
<ElDescriptionsItem label="绑定设备">{{
cardInfo?.bound_device_name || '--'
}}</ElDescriptionsItem>
<ElDescriptionsItem label="最后同步时间">{{
formatDateTime(cardInfo?.last_sync_time) || '--'
}}</ElDescriptionsItem>
<ElDescriptionsItem label="本月已用流量">{{ <ElDescriptionsItem label="本月已用流量">{{
formatDataSize(cardInfo?.current_month_usage_mb || 0) formatDataSize(cardInfo?.current_month_usage_mb || 0)
}}</ElDescriptionsItem> }}</ElDescriptionsItem>
<ElDescriptionsItem label="实名时间">暂未接入</ElDescriptionsItem>
<ElDescriptionsItem label="MSISDN">{{
cardInfo?.msisdn || '--'
}}</ElDescriptionsItem>
<!--<ElDescriptionsItem label="IMSI">{{ cardInfo?.imsi || '&#45;&#45;' }}</ElDescriptionsItem>-->
<!--<ElDescriptionsItem label="卡类型">{{-->
<!-- cardInfo?.card_category || '&#45;&#45;'-->
<!--}}</ElDescriptionsItem>-->
<!--<ElDescriptionsItem label="绑定设备">{{-->
<!-- cardInfo?.bound_device_name || '&#45;&#45;'-->
<!--}}</ElDescriptionsItem>-->
<!--<ElDescriptionsItem label="最后同步时间">{{-->
<!-- formatDateTime(cardInfo?.last_sync_time) || '&#45;&#45;'-->
<!--}}</ElDescriptionsItem>-->
</template> </template>
<!-- 设备专属字段 --> <!-- 设备专属字段 -->
<template v-if="cardInfo?.asset_type === 'device'"> <template v-if="cardInfo?.asset_type === 'device'">
<ElDescriptionsItem label="IMEI">{{ cardInfo?.imei || '--' }}</ElDescriptionsItem>
<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="设备名称">{{ <ElDescriptionsItem label="设备名称">{{
cardInfo?.device_name || '--' cardInfo?.device_name || '--'
}}</ElDescriptionsItem> }}</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="设备型号">{{ <ElDescriptionsItem label="设备型号">{{
cardInfo?.device_model || '--' cardInfo?.device_model || '--'
}}</ElDescriptionsItem> }}</ElDescriptionsItem>
<ElDescriptionsItem label="设备类型">{{
cardInfo?.device_type || '--' <ElDescriptionsItem label="供应商">暂未接入</ElDescriptionsItem>
}}</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="已绑定卡数">{{ <ElDescriptionsItem label="已绑定卡数">{{
cardInfo?.bound_card_count || 0 cardInfo?.bound_card_count || 0
}}</ElDescriptionsItem> }}</ElDescriptionsItem>
<ElDescriptionsItem label="保护期状态"> <ElDescriptionsItem label="最大卡槽数">{{
<ElTag :type="getProtectStatusType(cardInfo?.device_protect_status)" size="small"> cardInfo?.max_sim_slots || '--'
{{ getProtectStatusName(cardInfo?.device_protect_status) }} }}</ElDescriptionsItem>
</ElTag>
</ElDescriptionsItem> <ElDescriptionsItem label="激活时间">{{
cardInfo?.activated_at || '--'
}}</ElDescriptionsItem>
<ElDescriptionsItem label="实名时间">暂未接入</ElDescriptionsItem>
<ElDescriptionsItem label="信号强度">暂未接入</ElDescriptionsItem>
<!--<ElDescriptionsItem label="制造商">{{-->
<!-- cardInfo?.manufacturer || '&#45;&#45;'-->
<!--}}</ElDescriptionsItem>-->
<!--<ElDescriptionsItem label="保护期状态">-->
<!-- <ElTag :type="getProtectStatusType(cardInfo?.device_protect_status)" size="small">-->
<!-- {{ getProtectStatusName(cardInfo?.device_protect_status) }}-->
<!-- </ElTag>-->
<!--</ElDescriptionsItem>-->
</template> </template>
<ElDescriptionsItem label="实名状态"> <!--<ElDescriptionsItem label="实名状态">-->
<ElTag :type="getRealNameStatusType(cardInfo?.real_name_status)" size="small"> <!-- <ElTag :type="getRealNameStatusType(cardInfo?.real_name_status)" size="small">-->
{{ getRealNameStatusName(cardInfo?.real_name_status) }} <!-- {{ getRealNameStatusName(cardInfo?.real_name_status) }}-->
</ElTag> <!-- </ElTag>-->
</ElDescriptionsItem> <!--</ElDescriptionsItem>-->
<ElDescriptionsItem label="激活时间">{{ <!--<ElDescriptionsItem label="激活时间">{{-->
cardInfo?.activated_at || '--' <!-- cardInfo?.activated_at || '&#45;&#45;'-->
}}</ElDescriptionsItem> <!--}}</ElDescriptionsItem>-->
</ElDescriptions> </ElDescriptions>
<!-- 设备绑定卡列表 (放在设备信息卡片内) --> <!-- 设备绑定卡列表 (放在设备信息卡片内) -->
@@ -179,18 +215,10 @@
class="card-operations" class="card-operations"
style="margin-top: 16px; text-align: right" style="margin-top: 16px; text-align: right"
> >
<ElButton <ElButton type="success" @click="handleEnableCard" :loading="enableCardLoading">
type="success"
@click="handleEnableCard"
:loading="enableCardLoading"
>
启用此卡 启用此卡
</ElButton> </ElButton>
<ElButton <ElButton type="warning" @click="handleDisableCard" :loading="disableCardLoading">
type="warning"
@click="handleDisableCard"
:loading="disableCardLoading"
>
停用此卡 停用此卡
</ElButton> </ElButton>
<ElButton <ElButton
@@ -202,51 +230,39 @@
</ElButton> </ElButton>
</div> </div>
<!-- 设备操作按钮 --> <!-- 设备操作按钮 -->
<div v-else class="device-operations" style="margin-top: 16px; text-align: right;"> <div v-else class="device-operations" style="margin-top: 16px; text-align: right">
<ElButton <ElButton type="primary" @click="handleRebootDevice" :loading="rebootDeviceLoading">
type="primary" 重启设备
@click="handleRebootDevice" </ElButton>
:loading="rebootDeviceLoading" <ElButton type="warning" @click="handleResetDevice" :loading="resetDeviceLoading">
> 恢复出厂
重启设备 </ElButton>
</ElButton> <ElButton
<ElButton type="info"
type="warning" @click="handleShowSpeedLimitDialog"
@click="handleResetDevice" :loading="speedLimitLoading"
:loading="resetDeviceLoading" >
> 设置限速
恢复出厂 </ElButton>
</ElButton> <ElButton
<ElButton type="success"
type="info" @click="handleShowSwitchCardDialog"
@click="handleShowSpeedLimitDialog" :loading="switchCardLoading"
:loading="speedLimitLoading" >
> 切换SIM卡
设置限速 </ElButton>
</ElButton> <ElButton type="primary" @click="handleShowSetWiFiDialog" :loading="setWiFiLoading">
<ElButton 设置WiFi
type="success" </ElButton>
@click="handleShowSwitchCardDialog" <ElButton
:loading="switchCardLoading" type="danger"
> @click="handleManualDeactivateDevice"
切换SIM卡 :loading="manualDeactivateDeviceLoading"
</ElButton> >
<ElButton 手动停用
type="primary" </ElButton>
@click="handleShowSetWiFiDialog" </div>
:loading="setWiFiLoading"
>
设置WiFi
</ElButton>
<ElButton
type="danger"
@click="handleManualDeactivateDevice"
:loading="manualDeactivateDeviceLoading"
>
手动停用
</ElButton>
</div>
</ElCard> </ElCard>
</div> </div>
@@ -327,6 +343,14 @@
}}</ElDescriptionsItem> }}</ElDescriptionsItem>
</ElDescriptions> </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="traffic-progress-wrapper">-->
<!-- <div class="progress-info">--> <!-- <div class="progress-info">-->
@@ -372,9 +396,9 @@
</div> </div>
</template> </template>
<ElDescriptions :column="2" border> <ElDescriptions :column="2" border>
<ElDescriptionsItem label="所属店铺">{{ <!--<ElDescriptionsItem label="所属店铺">{{-->
cardInfo?.shop_name || '--' <!-- cardInfo?.shop_name || '&#45;&#45;'-->
}}</ElDescriptionsItem> <!--}}</ElDescriptionsItem>-->
<ElDescriptionsItem label="套餐系列">{{ <ElDescriptionsItem label="套餐系列">{{
cardInfo?.series_name || '--' cardInfo?.series_name || '--'
}}</ElDescriptionsItem> }}</ElDescriptionsItem>
@@ -384,11 +408,11 @@
<ElDescriptionsItem label="创建时间">{{ <ElDescriptionsItem label="创建时间">{{
formatDateTime(cardInfo?.created_at) formatDateTime(cardInfo?.created_at)
}}</ElDescriptionsItem> }}</ElDescriptionsItem>
<template v-if="cardInfo?.asset_type === 'card'"> <!--<template v-if="cardInfo?.asset_type === 'card'">-->
<ElDescriptionsItem label="供应商">{{ <!-- <ElDescriptionsItem label="供应商">{{-->
cardInfo?.supplier || '--' <!-- cardInfo?.supplier || '&#45;&#45;'-->
}}</ElDescriptionsItem> <!-- }}</ElDescriptionsItem>-->
</template> <!--</template>-->
</ElDescriptions> </ElDescriptions>
</ElCard> </ElCard>
</div> </div>
@@ -731,7 +755,9 @@
label-width="120px" label-width="120px"
> >
<ElFormItem label="设备信息"> <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>
<ElFormItem label="下行速率" prop="download_speed"> <ElFormItem label="下行速率" prop="download_speed">
<ElInputNumber <ElInputNumber
@@ -756,7 +782,11 @@
</ElForm> </ElForm>
<template #footer> <template #footer>
<ElButton @click="speedLimitDialogVisible = false">取消</ElButton> <ElButton @click="speedLimitDialogVisible = false">取消</ElButton>
<ElButton type="primary" @click="handleConfirmSpeedLimit" :loading="speedLimitConfirmLoading"> <ElButton
type="primary"
@click="handleConfirmSpeedLimit"
:loading="speedLimitConfirmLoading"
>
确认设置 确认设置
</ElButton> </ElButton>
</template> </template>
@@ -791,7 +821,9 @@
label-width="120px" label-width="120px"
> >
<ElFormItem label="设备信息"> <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>
<ElFormItem label="目标ICCID" prop="target_iccid"> <ElFormItem label="目标ICCID" prop="target_iccid">
<ElSelect <ElSelect
@@ -834,14 +866,11 @@
<!-- 设置WiFi对话框 --> <!-- 设置WiFi对话框 -->
<ElDialog v-model="setWiFiDialogVisible" title="设置WiFi" width="500px"> <ElDialog v-model="setWiFiDialogVisible" title="设置WiFi" width="500px">
<ElForm <ElForm ref="setWiFiFormRef" :model="setWiFiForm" :rules="setWiFiRules" label-width="120px">
ref="setWiFiFormRef"
:model="setWiFiForm"
:rules="setWiFiRules"
label-width="120px"
>
<ElFormItem label="设备信息"> <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>
<ElFormItem label="WiFi状态" prop="enabled"> <ElFormItem label="WiFi状态" prop="enabled">
<ElRadioGroup v-model="setWiFiForm.enabled"> <ElRadioGroup v-model="setWiFiForm.enabled">
@@ -953,8 +982,14 @@
<ElTableColumn label="使用进度" min-width="200"> <ElTableColumn label="使用进度" min-width="200">
<template #default="{ row }"> <template #default="{ row }">
<ElProgress <ElProgress
:percentage="getUsageProgress(row.cumulative_usage_mb, dailyRecordsData.total_usage_mb)" :percentage="
:color="getProgressColorByPercentage(getUsageProgress(row.cumulative_usage_mb, dailyRecordsData.total_usage_mb))" getUsageProgress(row.cumulative_usage_mb, dailyRecordsData.total_usage_mb)
"
:color="
getProgressColorByPercentage(
getUsageProgress(row.cumulative_usage_mb, dailyRecordsData.total_usage_mb)
)
"
/> />
</template> </template>
</ElTableColumn> </ElTableColumn>
@@ -2560,6 +2595,11 @@
// 当前套餐卡片 // 当前套餐卡片
.current-package-card { .current-package-card {
.package-actions {
margin-top: 16px;
text-align: right;
}
.traffic-progress-wrapper { .traffic-progress-wrapper {
margin-top: 24px; margin-top: 24px;
padding: 20px; padding: 20px;