fix: update some files
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 8m2s
All checks were successful
构建并部署前端到测试环境 / build-and-deploy (push) Successful in 8m2s
This commit is contained in:
@@ -254,8 +254,18 @@
|
||||
<ElDivider class="info-section-divider" content-position="left">
|
||||
<span class="section-divider-title">绑定卡列表</span>
|
||||
</ElDivider>
|
||||
<div v-if="cardInfo.cards && cardInfo.cards.length > 0" class="binding-card-list">
|
||||
<ElCard v-for="bindingCard in sortedDeviceCards" :key="bindingCard.iccid" shadow="never">
|
||||
<div
|
||||
v-if="cardInfo.cards && cardInfo.cards.length > 0"
|
||||
class="binding-card-list"
|
||||
:class="`binding-card-list--${Math.min(sortedDeviceCards.length, 3)}`"
|
||||
>
|
||||
<ElCard
|
||||
v-for="bindingCard in sortedDeviceCards"
|
||||
:key="bindingCard.iccid"
|
||||
class="binding-card"
|
||||
shadow="never"
|
||||
:class="{ 'binding-card--current': bindingCard.is_current }"
|
||||
>
|
||||
<div class="binding-card-header">
|
||||
<div class="binding-card-identifier">
|
||||
<ElButton type="primary" link @click="handleNavigateToCardInfo(bindingCard.iccid)">
|
||||
@@ -265,40 +275,63 @@
|
||||
<CopyDocument />
|
||||
</el-icon>
|
||||
</div>
|
||||
<ElTag v-if="bindingCard.is_current" type="primary" size="small">当前</ElTag>
|
||||
<ElTag
|
||||
v-if="bindingCard.is_current"
|
||||
class="binding-card-current-tag"
|
||||
type="primary"
|
||||
size="default"
|
||||
>
|
||||
当前
|
||||
</ElTag>
|
||||
</div>
|
||||
|
||||
<div class="binding-card-details">
|
||||
<ElDescriptions :column="bindingCardColumns" direction="vertical">
|
||||
<ElDescriptionsItem label="MSISDN">
|
||||
{{ bindingCard.msisdn || '-' }}
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="运营商">
|
||||
{{ bindingCard.carrier_name || '-' }}
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="卡槽位置">
|
||||
<div class="binding-card-field">
|
||||
<span class="binding-card-field-label">MSISDN</span>
|
||||
<span class="binding-card-field-value">{{ bindingCard.msisdn || '-' }}</span>
|
||||
</div>
|
||||
<div class="binding-card-field">
|
||||
<span class="binding-card-field-label">运营商</span>
|
||||
<span class="binding-card-field-value">{{ bindingCard.carrier_name || '-' }}</span>
|
||||
</div>
|
||||
<div class="binding-card-field">
|
||||
<span class="binding-card-field-label">卡槽位置</span>
|
||||
<span class="binding-card-field-value">
|
||||
SIM-{{ bindingCard.slot_position ?? '-' }}
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="网络状态">
|
||||
</span>
|
||||
</div>
|
||||
<div class="binding-card-field">
|
||||
<span class="binding-card-field-label">网络状态</span>
|
||||
<span class="binding-card-field-value">
|
||||
<ElTag :type="bindingCard.network_status === 1 ? 'success' : 'danger'" size="small">
|
||||
{{ bindingCard.network_status === 1 ? '正常' : '停机' }}
|
||||
</ElTag>
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="实名状态">
|
||||
</span>
|
||||
</div>
|
||||
<div class="binding-card-field">
|
||||
<span class="binding-card-field-label">实名状态</span>
|
||||
<span class="binding-card-field-value">
|
||||
<ElTag :type="getRealNameStatusType(bindingCard.real_name_status)" size="small">
|
||||
{{ getRealNameStatusName(bindingCard.real_name_status) }}
|
||||
</ElTag>
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="实名认证策略">
|
||||
</span>
|
||||
</div>
|
||||
<div class="binding-card-field">
|
||||
<span class="binding-card-field-label">实名认证策略</span>
|
||||
<span class="binding-card-field-value">
|
||||
{{ getRealnamePolicyName(bindingCard.realname_policy) }}
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="实名时间">
|
||||
</span>
|
||||
</div>
|
||||
<div class="binding-card-field">
|
||||
<span class="binding-card-field-label">实名时间</span>
|
||||
<span class="binding-card-field-value">
|
||||
{{ bindingCard.real_name_at ? formatDateTime(bindingCard.real_name_at) : '-' }}
|
||||
</ElDescriptionsItem>
|
||||
<ElDescriptionsItem label="运营商停机原因">
|
||||
{{ bindingCard.gateway_extend || '-' }}
|
||||
</ElDescriptionsItem>
|
||||
</ElDescriptions>
|
||||
</span>
|
||||
</div>
|
||||
<div class="binding-card-field">
|
||||
<span class="binding-card-field-label">运营商停机原因</span>
|
||||
<span class="binding-card-field-value">{{ bindingCard.gateway_extend || '-' }}</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="binding-card-actions">
|
||||
@@ -306,7 +339,6 @@
|
||||
v-if="bindingCard.network_status === 0"
|
||||
type="success"
|
||||
size="small"
|
||||
link
|
||||
:disabled="isBindingStartDisabled(bindingCard)"
|
||||
@click="handleEnableBindingCard(bindingCard)"
|
||||
v-permission="'iot_info:start'"
|
||||
@@ -317,7 +349,6 @@
|
||||
v-if="bindingCard.network_status === 1"
|
||||
type="warning"
|
||||
size="small"
|
||||
link
|
||||
:disabled="isBindingStopDisabled(bindingCard)"
|
||||
@click="handleDisableBindingCard(bindingCard)"
|
||||
v-permission="'iot_info:stop'"
|
||||
@@ -327,7 +358,6 @@
|
||||
<ElButton
|
||||
type="primary"
|
||||
size="small"
|
||||
link
|
||||
@click="handleUpdateBindingCardRealnameStatus(bindingCard)"
|
||||
v-permission="'bound_card:update_realname_status'"
|
||||
>
|
||||
@@ -337,7 +367,6 @@
|
||||
v-if="getBindingCardAuditTarget(bindingCard)"
|
||||
type="primary"
|
||||
size="small"
|
||||
link
|
||||
@click="openBindingCardAudit(bindingCard)"
|
||||
>
|
||||
卡审计
|
||||
@@ -347,6 +376,8 @@
|
||||
</div>
|
||||
<ElEmpty v-else description="暂无绑定卡" :image-size="80" style="margin-top: 16px" />
|
||||
|
||||
<slot name="current-package" />
|
||||
|
||||
<!-- 设备实时信息 -->
|
||||
<ElDivider class="info-section-divider" content-position="left">
|
||||
<span class="section-divider-title">设备实时信息</span>
|
||||
@@ -369,6 +400,8 @@
|
||||
<ElEmpty v-else description="暂无实时信息" :image-size="80" style="margin-top: 16px" />
|
||||
</template>
|
||||
|
||||
<slot v-if="cardInfo?.asset_type !== 'device'" name="current-package" />
|
||||
|
||||
<!-- IoT卡操作按钮 -->
|
||||
<ElAlert
|
||||
v-if="startErrorMessage"
|
||||
@@ -714,8 +747,6 @@
|
||||
return 5
|
||||
})
|
||||
|
||||
const bindingCardColumns = computed(() => (width.value <= 640 ? 1 : 2))
|
||||
|
||||
// Emits
|
||||
interface Emits {
|
||||
(e: 'update:pollingEnabled', value: boolean): void
|
||||
@@ -759,7 +790,15 @@
|
||||
} = useAssetFormatters()
|
||||
|
||||
// 排序后的设备卡列表(按卡槽位置排序,当前卡排在最前面)
|
||||
const realtimeDescriptionItems = computed(() => {
|
||||
type RealtimeDescriptionItem = {
|
||||
key: string
|
||||
label: string
|
||||
value: string
|
||||
tagType?: 'primary' | 'success' | 'warning' | 'info' | 'danger'
|
||||
span?: number
|
||||
}
|
||||
|
||||
const realtimeDescriptionItems = computed<RealtimeDescriptionItem[]>(() => {
|
||||
const realtime = props.deviceRealtime
|
||||
|
||||
return [
|
||||
@@ -1132,6 +1171,18 @@
|
||||
gap: 16px;
|
||||
}
|
||||
|
||||
.binding-card-list--1 {
|
||||
grid-template-columns: 1fr;
|
||||
}
|
||||
|
||||
.binding-card-list--2 {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
|
||||
.binding-card {
|
||||
min-width: 0;
|
||||
}
|
||||
|
||||
.binding-card-header,
|
||||
.binding-card-identifier,
|
||||
.binding-card-actions {
|
||||
@@ -1142,11 +1193,52 @@
|
||||
.binding-card-header {
|
||||
justify-content: space-between;
|
||||
padding-bottom: 12px;
|
||||
border-bottom: 1px solid var(--el-border-color-lighter);
|
||||
}
|
||||
|
||||
.binding-card-details {
|
||||
padding-top: 12px;
|
||||
margin-top: 12px;
|
||||
overflow: hidden;
|
||||
border: 1px solid var(--el-border-color);
|
||||
border-radius: 6px;
|
||||
}
|
||||
|
||||
.binding-card-field {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 16px;
|
||||
min-height: 42px;
|
||||
min-width: 0;
|
||||
padding: 10px 12px;
|
||||
border-bottom: 1px solid var(--el-border-color-lighter);
|
||||
|
||||
&:last-child {
|
||||
border-bottom: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.binding-card-field-label {
|
||||
flex: 0 0 auto;
|
||||
font-size: 14px;
|
||||
color: var(--el-text-color-secondary);
|
||||
}
|
||||
|
||||
.binding-card-field-value {
|
||||
min-width: 0;
|
||||
font-size: 15px;
|
||||
font-weight: 500;
|
||||
color: var(--el-text-color-primary);
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.binding-card--current {
|
||||
border-color: var(--el-color-primary);
|
||||
box-shadow: 0 0 0 2px var(--el-color-primary-light-8);
|
||||
}
|
||||
|
||||
.binding-card-current-tag {
|
||||
font-size: 14px;
|
||||
font-weight: 600;
|
||||
}
|
||||
|
||||
.binding-card-identifier {
|
||||
@@ -1168,23 +1260,20 @@
|
||||
}
|
||||
|
||||
.binding-card-actions {
|
||||
flex-wrap: wrap;
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
gap: 8px;
|
||||
padding-top: 12px;
|
||||
margin-top: 12px;
|
||||
border-top: 1px solid var(--el-border-color-lighter);
|
||||
|
||||
.el-button {
|
||||
flex: 1 1 0;
|
||||
min-width: 0;
|
||||
width: 100%;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@media (width <= 1200px) {
|
||||
.binding-card-list {
|
||||
grid-template-columns: repeat(2, minmax(0, 1fr));
|
||||
}
|
||||
}
|
||||
|
||||
.card-operations,
|
||||
.device-operations {
|
||||
display: flex;
|
||||
|
||||
@@ -1,13 +1,8 @@
|
||||
<template>
|
||||
<ElCard shadow="never" class="info-card current-package-card">
|
||||
<template #header>
|
||||
<div class="card-header">
|
||||
<span class="header-title">当前生效套餐</span>
|
||||
<div class="header-actions">
|
||||
<slot name="header-actions" />
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<div class="current-package-section">
|
||||
<ElDivider class="info-section-divider" content-position="left">
|
||||
<span class="section-divider-title">当前生效套餐</span>
|
||||
</ElDivider>
|
||||
|
||||
<!-- 绑定设备提示(优先于一切内容) -->
|
||||
<template v-if="props.boundDeviceId">
|
||||
@@ -222,12 +217,12 @@
|
||||
|
||||
<!-- 空状态 -->
|
||||
<ElEmpty v-else-if="!loading" :description="errorMsg || '暂无当前生效套餐'" :image-size="100" />
|
||||
</ElCard>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script setup lang="ts">
|
||||
import {
|
||||
ElCard,
|
||||
ElDivider,
|
||||
ElButton,
|
||||
ElDescriptions,
|
||||
ElDescriptionsItem,
|
||||
@@ -322,16 +317,37 @@
|
||||
</script>
|
||||
|
||||
<style scoped lang="scss">
|
||||
.current-package-card {
|
||||
.card-header {
|
||||
.current-package-section {
|
||||
.info-section-divider {
|
||||
display: flex;
|
||||
gap: 12px;
|
||||
height: 20px;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
border-top: 0;
|
||||
|
||||
.header-title {
|
||||
font-size: 16px;
|
||||
font-weight: 500;
|
||||
:deep(.el-divider__text) {
|
||||
position: static;
|
||||
display: inline-flex;
|
||||
padding: 0;
|
||||
font-size: 15px;
|
||||
font-weight: 600;
|
||||
line-height: 20px;
|
||||
color: var(--el-text-color-primary);
|
||||
background-color: transparent;
|
||||
transform: none;
|
||||
}
|
||||
|
||||
.section-divider-title {
|
||||
display: inline-flex;
|
||||
gap: 8px;
|
||||
align-items: center;
|
||||
|
||||
&::before {
|
||||
width: 3px;
|
||||
height: 16px;
|
||||
content: '';
|
||||
background-color: var(--el-color-primary);
|
||||
border-radius: 2px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -460,15 +476,6 @@
|
||||
}
|
||||
|
||||
@media (width <= 768px) {
|
||||
.card-header {
|
||||
flex-direction: column;
|
||||
align-items: flex-start;
|
||||
|
||||
.header-actions {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
|
||||
.flow-progress-card {
|
||||
padding: 14px;
|
||||
|
||||
|
||||
@@ -46,20 +46,20 @@
|
||||
@navigate-to-asset="handleNavigateToAsset"
|
||||
@navigate-to-card="handleNavigateToCard"
|
||||
@navigate-to-device="handleNavigateToDevice"
|
||||
/>
|
||||
</div>
|
||||
|
||||
<div class="row overview-secondary">
|
||||
<CurrentPackageCard
|
||||
:current-package="currentPackage"
|
||||
:loading="currentPackageLoading"
|
||||
:error-msg="currentPackageErrorMsg"
|
||||
:bound-device-id="cardInfo.bound_device_id"
|
||||
:bound-device-no="cardInfo.bound_device_no"
|
||||
:bound-device-name="cardInfo.bound_device_name"
|
||||
@show-recharge="showRechargeDialog"
|
||||
@navigate-to-device="handleNavigateToDevice"
|
||||
/>
|
||||
>
|
||||
<template #current-package>
|
||||
<CurrentPackageCard
|
||||
:current-package="currentPackage"
|
||||
:loading="currentPackageLoading"
|
||||
:error-msg="currentPackageErrorMsg"
|
||||
:bound-device-id="cardInfo.bound_device_id"
|
||||
:bound-device-no="cardInfo.bound_device_no"
|
||||
:bound-device-name="cardInfo.bound_device_name"
|
||||
@show-recharge="showRechargeDialog"
|
||||
@navigate-to-device="handleNavigateToDevice"
|
||||
/>
|
||||
</template>
|
||||
</BasicInfoCard>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user