Compare commits
8 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1f73019714 | |||
| 0b39c9c602 | |||
| ec77b28cf2 | |||
| 983b865ff7 | |||
| 161f7db147 | |||
| 01a2a5bda6 | |||
| 6437b6bf35 | |||
| 848f2a0018 |
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "ndm-web-platform",
|
"name": "ndm-web-platform",
|
||||||
"version": "0.41.0",
|
"version": "0.42.0",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"engines": {
|
"engines": {
|
||||||
|
|||||||
@@ -1,4 +1,20 @@
|
|||||||
[
|
[
|
||||||
|
{
|
||||||
|
"version": "0.42.0",
|
||||||
|
"date": "2026-05-20",
|
||||||
|
"changes": {
|
||||||
|
"fixes": [
|
||||||
|
{ "content": "优化安防箱环境数据卡片,避免空标签渲染并改进风扇信息展示" },
|
||||||
|
{ "content": "修复设备硬件卡片进度条异常值显示问题,并完善状态判断逻辑" }
|
||||||
|
],
|
||||||
|
"feats": [
|
||||||
|
{ "content": "新增服务器网卡信息展示" },
|
||||||
|
{ "content": "新增安防箱网卡信息展示,并优化相关卡片标题" },
|
||||||
|
{ "content": "为交换机诊断信息新增温度字段" },
|
||||||
|
{ "content": "新增录像机环境状态卡片和网卡信息展示" }
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"version": "0.41.0",
|
"version": "0.41.0",
|
||||||
"date": "2026-05-19",
|
"date": "2026-05-19",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
{
|
{
|
||||||
"version": "0.41.0",
|
"version": "0.42.0",
|
||||||
"buildTime": "2026-05-19 19:40:37"
|
"buildTime": "2026-05-20 13:52:07"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,6 +10,37 @@ export interface NdmNvrDiagInfo {
|
|||||||
totalSize?: number;
|
totalSize?: number;
|
||||||
}[];
|
}[];
|
||||||
};
|
};
|
||||||
|
ethInfo: {
|
||||||
|
adminStatus?: string; // '1'
|
||||||
|
desc?: string; // 'bond1'
|
||||||
|
ifType?: string; // '6'
|
||||||
|
inDiscards?: string; // '17931688'
|
||||||
|
inErrors?: string; // '0'
|
||||||
|
inNUcastPkts?: string; // '40945433'
|
||||||
|
inOctets?: string; // '3453544614'
|
||||||
|
inUcastPkts?: string; // '3375411816'
|
||||||
|
inUnknownProtos?: string; // '0'
|
||||||
|
index?: string; // '8'
|
||||||
|
lastChange?: string; // '0:05:42.15'
|
||||||
|
mTU?: string; // '1500'
|
||||||
|
macAddress?: string; // '04:7b:cb:69:92:58'
|
||||||
|
operStatus?: string; // '1'
|
||||||
|
outDiscards?: string; // '0'
|
||||||
|
outErrors?: string; // '0'
|
||||||
|
outNUcastPkts?: string; // '0'
|
||||||
|
outOctets?: string; // '3443476717'
|
||||||
|
outQLen?: string; // '0'
|
||||||
|
outUcastPkts?: string; // '415381735'
|
||||||
|
specific?: string; // '0.0'
|
||||||
|
speed?: string; // '2000000000'
|
||||||
|
};
|
||||||
|
ipInfo: {
|
||||||
|
broadcastAddress?: string; // '1'
|
||||||
|
iPAddress?: string; // '10.14.1.22'
|
||||||
|
index?: string; // '8'
|
||||||
|
mASK?: string; // '255.255.255.0'
|
||||||
|
reasmMaxSize?: string; // '0'
|
||||||
|
};
|
||||||
stCommonInfo?: {
|
stCommonInfo?: {
|
||||||
设备ID?: string;
|
设备ID?: string;
|
||||||
软件版本?: string;
|
软件版本?: string;
|
||||||
@@ -20,12 +51,16 @@ export interface NdmNvrDiagInfo {
|
|||||||
内存使用率?: string;
|
内存使用率?: string;
|
||||||
CPU使用率?: string;
|
CPU使用率?: string;
|
||||||
};
|
};
|
||||||
cdFanInfo?: {
|
cdFanInfo?: NdmNvrFanInfo[];
|
||||||
索引号?: string;
|
cdPowerSupplyInfo?: NdmNvrPowerSupplyInfo[];
|
||||||
'风扇转速(rpm)'?: string;
|
}
|
||||||
}[];
|
|
||||||
cdPowerSupplyInfo?: {
|
export interface NdmNvrFanInfo {
|
||||||
索引号?: string;
|
索引号?: string;
|
||||||
电源状态?: string;
|
'风扇转速(rpm)'?: string;
|
||||||
}[];
|
}
|
||||||
|
|
||||||
|
export interface NdmNvrPowerSupplyInfo {
|
||||||
|
索引号?: string;
|
||||||
|
电源状态?: string;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,36 @@
|
|||||||
export interface NdmSecurityBoxDiagInfo {
|
export interface NdmSecurityBoxDiagInfo {
|
||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
|
ethInfo?: {
|
||||||
|
adminStatus?: string; // '1'
|
||||||
|
desc?: string; // 'br-lan'
|
||||||
|
ifType?: string; // '6'
|
||||||
|
inDiscards?: string; // '84977'
|
||||||
|
inErrors?: string; // '0'
|
||||||
|
inNUcastPkts?: string; // '233473'
|
||||||
|
inOctets?: string; // '92355850'
|
||||||
|
inUcastPkts?: string; // '899970'
|
||||||
|
inUnknownProtos?: string; // '0'
|
||||||
|
index?: string; // '8'
|
||||||
|
lastChange?: string; // '0:00:00.00'
|
||||||
|
mTU?: string; // '1500'
|
||||||
|
macAddress?: string; // '56:62:bc:d3:9e:37'
|
||||||
|
operStatus?: string; // '1'
|
||||||
|
outDiscards?: string; // '0'
|
||||||
|
outErrors?: string; // '0'
|
||||||
|
outNUcastPkts?: string; // '0'
|
||||||
|
outOctets?: string; // '68175904'
|
||||||
|
outQLen?: string; // '0'
|
||||||
|
outUcastPkts?: string; // '748100'
|
||||||
|
specific?: string; // '0.0'
|
||||||
|
speed?: string; // '0'
|
||||||
|
};
|
||||||
|
ipInfo?: {
|
||||||
|
broadcastAddress?: string; // '1'
|
||||||
|
iPAddress?: string; // '10.24.18.101'
|
||||||
|
index?: string; // '8'
|
||||||
|
mASK?: string; // '255.255.255.0'
|
||||||
|
reasmMaxSize?: string; // '0'
|
||||||
|
};
|
||||||
info?: [
|
info?: [
|
||||||
{
|
{
|
||||||
addrCode?: number;
|
addrCode?: number;
|
||||||
|
|||||||
@@ -6,4 +6,35 @@ export interface NdmServerDiagInfo {
|
|||||||
磁盘使用率?: string;
|
磁盘使用率?: string;
|
||||||
系统运行时间?: string;
|
系统运行时间?: string;
|
||||||
};
|
};
|
||||||
|
ethInfo?: {
|
||||||
|
adminStatus?: string; // '1'
|
||||||
|
desc?: string; // 'Intel Corporation I350 Gigabit Network Connection'
|
||||||
|
ifType?: string; // '6'
|
||||||
|
inDiscards?: string; // '6707634'
|
||||||
|
inErrors?: string; // '0'
|
||||||
|
inNUcastPkts?: string; // '8991944'
|
||||||
|
inOctets?: string; // '4220524983'
|
||||||
|
inUcastPkts?: string; // '2342740610'
|
||||||
|
inUnknownProtos?: string; // '0'
|
||||||
|
index?: string; // '2'
|
||||||
|
lastChange?: string; // '0:03:15.26'
|
||||||
|
mTU?: string; // '1500'
|
||||||
|
macAddress?: string; // 'e8:78:ee:f6:8d:98'
|
||||||
|
operStatus?: string; // '1'
|
||||||
|
outDiscards?: string; // '0'
|
||||||
|
outErrors?: string; // '0'
|
||||||
|
outNUcastPkts?: string; // '0'
|
||||||
|
outOctets?: string; // '1415770066'
|
||||||
|
outQLen?: string; // '0'
|
||||||
|
outUcastPkts?: string; // '3335494729'
|
||||||
|
specific?: string; // '0.0'
|
||||||
|
speed?: string; // '1000000000'
|
||||||
|
};
|
||||||
|
ipInfo?: {
|
||||||
|
broadcastAddress?: string; // '1'
|
||||||
|
iPAddress?: string; // '10.14.1.8'
|
||||||
|
index?: string; // '2'
|
||||||
|
mASK?: string; // '255.255.255.0'
|
||||||
|
reasmMaxSize?: string; // '0'
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ export interface NdmSwitchDiagInfo {
|
|||||||
[key: string]: any;
|
[key: string]: any;
|
||||||
cpuRatio?: string; // 因环境不同可能不存在
|
cpuRatio?: string; // 因环境不同可能不存在
|
||||||
memoryRatio?: string; // 因环境不同可能不存在
|
memoryRatio?: string; // 因环境不同可能不存在
|
||||||
|
temperature?: number;
|
||||||
logTime?: string;
|
logTime?: string;
|
||||||
info?: {
|
info?: {
|
||||||
overFlowPorts?: string[];
|
overFlowPorts?: string[];
|
||||||
|
|||||||
@@ -51,8 +51,13 @@ const formattedRunningTime = computed(() => {
|
|||||||
return (runningTime?.value ?? '-').replace('days', '天');
|
return (runningTime?.value ?? '-').replace('days', '天');
|
||||||
});
|
});
|
||||||
|
|
||||||
const getProgressStatus = (percent?: number): ProgressStatus | undefined => {
|
const getProgressPercentage = (percent: number) => {
|
||||||
if (!percent) return undefined;
|
if (percent < 0) return 0;
|
||||||
|
if (percent > 100) return 100;
|
||||||
|
return percent;
|
||||||
|
};
|
||||||
|
|
||||||
|
const getProgressStatus = (percent: number): ProgressStatus => {
|
||||||
if (percent >= 90) return 'error';
|
if (percent >= 90) return 'error';
|
||||||
if (percent >= 70) return 'warning';
|
if (percent >= 70) return 'warning';
|
||||||
return 'success';
|
return 'success';
|
||||||
@@ -66,20 +71,20 @@ const getProgressStatus = (percent?: number): ProgressStatus | undefined => {
|
|||||||
</template>
|
</template>
|
||||||
<template #default>
|
<template #default>
|
||||||
<NFlex vertical>
|
<NFlex vertical>
|
||||||
<NFlex v-if="cpuUsage" style="width: 100%" align="center" :wrap="false">
|
<NFlex v-if="cpuPercent" style="width: 100%" align="center" :wrap="false">
|
||||||
<NIcon :component="CpuIcon" />
|
<NIcon :component="CpuIcon" />
|
||||||
<span style="word-break: keep-all">{{ cpuUsageLabel || 'CPU' }}</span>
|
<span style="word-break: keep-all">{{ cpuUsageLabel || 'CPU' }}</span>
|
||||||
<NProgress :percentage="cpuPercent" :status="getProgressStatus(cpuPercent)">{{ cpuPercent ?? '-' }}%</NProgress>
|
<NProgress :percentage="getProgressPercentage(cpuPercent)" :status="getProgressStatus(cpuPercent)">{{ cpuPercent }}%</NProgress>
|
||||||
</NFlex>
|
</NFlex>
|
||||||
<NFlex v-if="memUsage" style="width: 100%" align="center" :wrap="false">
|
<NFlex v-if="memPercent" style="width: 100%" align="center" :wrap="false">
|
||||||
<NIcon :component="MemoryStickIcon" />
|
<NIcon :component="MemoryStickIcon" />
|
||||||
<span style="word-break: keep-all">{{ memUsageLabel || '内存' }}</span>
|
<span style="word-break: keep-all">{{ memUsageLabel || '内存' }}</span>
|
||||||
<NProgress :percentage="memPercent" :status="getProgressStatus(memPercent)">{{ memPercent ?? '-' }}%</NProgress>
|
<NProgress :percentage="getProgressPercentage(memPercent)" :status="getProgressStatus(memPercent)">{{ memPercent }}%</NProgress>
|
||||||
</NFlex>
|
</NFlex>
|
||||||
<NFlex v-if="diskUsage" style="width: 100%" align="center" :wrap="false">
|
<NFlex v-if="diskPercent" style="width: 100%" align="center" :wrap="false">
|
||||||
<NIcon :component="HardDriveIcon" />
|
<NIcon :component="HardDriveIcon" />
|
||||||
<span style="word-break: keep-all">{{ diskUsageLabel || '磁盘' }}</span>
|
<span style="word-break: keep-all">{{ diskUsageLabel || '磁盘' }}</span>
|
||||||
<NProgress :percentage="diskPercent" :status="getProgressStatus(diskPercent)">{{ diskPercent ?? '-' }}%</NProgress>
|
<NProgress :percentage="getProgressPercentage(diskPercent)" :status="getProgressStatus(diskPercent)">{{ diskPercent }}%</NProgress>
|
||||||
</NFlex>
|
</NFlex>
|
||||||
<NFlex v-if="runningTime" style="width: 100%" align="center" :wrap="false">
|
<NFlex v-if="runningTime" style="width: 100%" align="center" :wrap="false">
|
||||||
<NIcon :component="ClockCheckIcon" />
|
<NIcon :component="ClockCheckIcon" />
|
||||||
|
|||||||
@@ -2,6 +2,7 @@ import type { ComponentInstance } from 'vue';
|
|||||||
import DeviceCommonCard from './device-common-card.vue';
|
import DeviceCommonCard from './device-common-card.vue';
|
||||||
import DeviceHardwareCard from './device-hardware-card.vue';
|
import DeviceHardwareCard from './device-hardware-card.vue';
|
||||||
import DeviceHeaderCard from './device-header-card.vue';
|
import DeviceHeaderCard from './device-header-card.vue';
|
||||||
|
import NvrEnvCard from './nvr-env-card.vue';
|
||||||
import NvrDiskCard from './nvr-disk-card.vue';
|
import NvrDiskCard from './nvr-disk-card.vue';
|
||||||
import NvrRecordCheckCard from './nvr-record-check-card.vue';
|
import NvrRecordCheckCard from './nvr-record-check-card.vue';
|
||||||
import SecurityBoxCircuitCard from './security-box-circuit-card.vue';
|
import SecurityBoxCircuitCard from './security-box-circuit-card.vue';
|
||||||
@@ -16,6 +17,7 @@ export {
|
|||||||
DeviceCommonCard,
|
DeviceCommonCard,
|
||||||
DeviceHardwareCard,
|
DeviceHardwareCard,
|
||||||
DeviceHeaderCard,
|
DeviceHeaderCard,
|
||||||
|
NvrEnvCard,
|
||||||
NvrDiskCard,
|
NvrDiskCard,
|
||||||
NvrRecordCheckCard,
|
NvrRecordCheckCard,
|
||||||
SecurityBoxCircuitCard,
|
SecurityBoxCircuitCard,
|
||||||
|
|||||||
@@ -0,0 +1,47 @@
|
|||||||
|
<script setup lang="ts">
|
||||||
|
import type { NdmNvrFanInfo, NdmNvrPowerSupplyInfo } from '@/apis';
|
||||||
|
import { FanIcon, PlugIcon } from 'lucide-vue-next';
|
||||||
|
import { NCard, NFlex, NIcon, NTag } from 'naive-ui';
|
||||||
|
import { computed, toRefs } from 'vue';
|
||||||
|
|
||||||
|
const props = defineProps<{
|
||||||
|
fanInfo?: NdmNvrFanInfo[];
|
||||||
|
powerSupplyInfo?: NdmNvrPowerSupplyInfo[];
|
||||||
|
}>();
|
||||||
|
|
||||||
|
const { fanInfo, powerSupplyInfo } = toRefs(props);
|
||||||
|
|
||||||
|
const showCard = computed(() => {
|
||||||
|
return Object.values(props).some((value) => !!value);
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<NCard v-if="showCard" hoverable size="small">
|
||||||
|
<template #header>
|
||||||
|
<span>录像机环境状态</span>
|
||||||
|
</template>
|
||||||
|
<template #default>
|
||||||
|
<NFlex vertical>
|
||||||
|
<NTag v-for="info in fanInfo ?? []" :key="info['索引号']">
|
||||||
|
<template #icon>
|
||||||
|
<NIcon :component="FanIcon" />
|
||||||
|
</template>
|
||||||
|
<template #default>
|
||||||
|
<span>风扇{{ info['索引号'] }}: {{ info['风扇转速(rpm)'] }} RPM</span>
|
||||||
|
</template>
|
||||||
|
</NTag>
|
||||||
|
<NTag v-for="info in powerSupplyInfo ?? []" :key="info['索引号']">
|
||||||
|
<template #icon>
|
||||||
|
<NIcon :component="PlugIcon" />
|
||||||
|
</template>
|
||||||
|
<template #default>
|
||||||
|
<span>电源{{ info['索引号'] }}: {{ info['电源状态'] }}</span>
|
||||||
|
</template>
|
||||||
|
</NTag>
|
||||||
|
</NFlex>
|
||||||
|
</template>
|
||||||
|
</NCard>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped></style>
|
||||||
+7
-12
@@ -35,21 +35,16 @@ const getStatusTagType = (status: string | null) => {
|
|||||||
if (['失效', '开门'].includes(status ?? '')) return 'error';
|
if (['失效', '开门'].includes(status ?? '')) return 'error';
|
||||||
return 'default';
|
return 'default';
|
||||||
};
|
};
|
||||||
|
|
||||||
const formattedFanSpeeds = computed(() => {
|
|
||||||
if (!fanSpeeds?.value || fanSpeeds.value.length === 0) return null;
|
|
||||||
return fanSpeeds.value.map((speed, index) => `风扇${index + 1}: ${speed} RPM`).join(', ');
|
|
||||||
});
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
<NCard v-if="showCard" hoverable size="small">
|
<NCard v-if="showCard" hoverable size="small">
|
||||||
<template #header>
|
<template #header>
|
||||||
<span>安防箱状态</span>
|
<span>安防箱环境状态</span>
|
||||||
</template>
|
</template>
|
||||||
<template #default>
|
<template #default>
|
||||||
<NFlex vertical>
|
<NFlex vertical>
|
||||||
<NTag>
|
<NTag v-if="!!temperature">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<NIcon :component="ThermometerIcon" />
|
<NIcon :component="ThermometerIcon" />
|
||||||
</template>
|
</template>
|
||||||
@@ -57,7 +52,7 @@ const formattedFanSpeeds = computed(() => {
|
|||||||
<span>温度: {{ temperature }}℃</span>
|
<span>温度: {{ temperature }}℃</span>
|
||||||
</template>
|
</template>
|
||||||
</NTag>
|
</NTag>
|
||||||
<NTag>
|
<NTag v-if="!!humidity">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<NIcon :component="DropletIcon" />
|
<NIcon :component="DropletIcon" />
|
||||||
</template>
|
</template>
|
||||||
@@ -65,15 +60,15 @@ const formattedFanSpeeds = computed(() => {
|
|||||||
<span>湿度: {{ humidity }}%</span>
|
<span>湿度: {{ humidity }}%</span>
|
||||||
</template>
|
</template>
|
||||||
</NTag>
|
</NTag>
|
||||||
<NTag>
|
<NTag v-for="(speed, index) in fanSpeeds ?? []" :key="index">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<NIcon :component="FanIcon" />
|
<NIcon :component="FanIcon" />
|
||||||
</template>
|
</template>
|
||||||
<template #default>
|
<template #default>
|
||||||
<span>风扇: {{ formattedFanSpeeds }}</span>
|
<span>风扇{{ index + 1 }}: {{ speed }} RPM</span>
|
||||||
</template>
|
</template>
|
||||||
</NTag>
|
</NTag>
|
||||||
<NTag :type="getStatusTagType(accessControlStatus)">
|
<NTag v-if="!!accessControlStatus" :type="getStatusTagType(accessControlStatus)">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<NIcon :component="ShieldIcon" />
|
<NIcon :component="ShieldIcon" />
|
||||||
</template>
|
</template>
|
||||||
@@ -81,7 +76,7 @@ const formattedFanSpeeds = computed(() => {
|
|||||||
<span>门禁: {{ accessControlStatus }}</span>
|
<span>门禁: {{ accessControlStatus }}</span>
|
||||||
</template>
|
</template>
|
||||||
</NTag>
|
</NTag>
|
||||||
<NTag :type="getStatusTagType(lightningProtectionStatus)">
|
<NTag v-if="!!lightningProtectionStatus" :type="getStatusTagType(lightningProtectionStatus)">
|
||||||
<template #icon>
|
<template #icon>
|
||||||
<NIcon :component="ZapIcon" />
|
<NIcon :component="ZapIcon" />
|
||||||
</template>
|
</template>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import type { NdmNvrDiagInfo, NdmNvrResultVO, Station } from '@/apis';
|
import type { NdmNvrDiagInfo, NdmNvrResultVO, Station } from '@/apis';
|
||||||
import { DeviceCommonCard, DeviceHardwareCard, DeviceHeaderCard, NvrDiskCard, NvrRecordCheckCard, type DeviceCommonCardProps } from '@/components';
|
import { DeviceCommonCard, DeviceHardwareCard, DeviceHeaderCard, NvrDiskCard, NvrEnvCard, NvrRecordCheckCard, type DeviceCommonCardProps } from '@/components';
|
||||||
import { isNvrCluster } from '@/helpers';
|
import { isNvrCluster } from '@/helpers';
|
||||||
import destr from 'destr';
|
import destr from 'destr';
|
||||||
import { NFlex } from 'naive-ui';
|
import { NFlex } from 'naive-ui';
|
||||||
@@ -21,9 +21,14 @@ const lastDiagInfo = computed(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const commonInfo = computed<DeviceCommonCardProps['commonInfo']>(() => {
|
const commonInfo = computed<DeviceCommonCardProps['commonInfo']>(() => {
|
||||||
const { stCommonInfo } = lastDiagInfo.value ?? {};
|
const { ipAddress } = ndmDevice.value;
|
||||||
if (!stCommonInfo) return undefined;
|
const { ethInfo, ipInfo, stCommonInfo } = lastDiagInfo.value ?? {};
|
||||||
const { 设备ID, 软件版本, 生产厂商, 设备别名, 设备型号, 硬件版本 } = stCommonInfo;
|
const { 设备ID, 软件版本, 生产厂商, 设备别名, 设备型号, 硬件版本 } = stCommonInfo ?? {};
|
||||||
|
|
||||||
|
let operStatus = '-';
|
||||||
|
if (!!ethInfo?.operStatus) {
|
||||||
|
operStatus = ethInfo?.operStatus === '1' ? '正常' : '异常';
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
@@ -37,6 +42,17 @@ const commonInfo = computed<DeviceCommonCardProps['commonInfo']>(() => {
|
|||||||
{ label: '硬件版本', value: 硬件版本 || '-' },
|
{ label: '硬件版本', value: 硬件版本 || '-' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: '设备网卡信息',
|
||||||
|
items: [
|
||||||
|
{ label: 'IP地址', value: ipAddress || '-' },
|
||||||
|
{ label: '子网掩码', value: ipInfo?.mASK || '-' },
|
||||||
|
{ label: 'MAC地址', value: ethInfo?.macAddress || '-' },
|
||||||
|
{ label: '连接速率', value: ethInfo?.speed || '-' },
|
||||||
|
{ label: 'MTU', value: ethInfo?.mTU || '-' },
|
||||||
|
{ label: '运行状态', value: operStatus },
|
||||||
|
],
|
||||||
|
},
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -45,6 +61,9 @@ const memUsage = computed(() => lastDiagInfo.value?.stCommonInfo?.内存使用
|
|||||||
|
|
||||||
const diskHealth = computed(() => lastDiagInfo.value?.info?.diskHealth);
|
const diskHealth = computed(() => lastDiagInfo.value?.info?.diskHealth);
|
||||||
const diskArray = computed(() => lastDiagInfo.value?.info?.groupInfoList);
|
const diskArray = computed(() => lastDiagInfo.value?.info?.groupInfoList);
|
||||||
|
|
||||||
|
const fanInfo = computed(() => lastDiagInfo.value?.cdFanInfo);
|
||||||
|
const powerSupplyInfo = computed(() => lastDiagInfo.value?.cdPowerSupplyInfo);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -52,6 +71,7 @@ const diskArray = computed(() => lastDiagInfo.value?.info?.groupInfoList);
|
|||||||
<DeviceHeaderCard :ndm-device="ndmDevice" :station="station" />
|
<DeviceHeaderCard :ndm-device="ndmDevice" :station="station" />
|
||||||
<DeviceCommonCard :common-info="commonInfo" />
|
<DeviceCommonCard :common-info="commonInfo" />
|
||||||
<DeviceHardwareCard :cpu-usage="cpuUsage" :mem-usage="memUsage" />
|
<DeviceHardwareCard :cpu-usage="cpuUsage" :mem-usage="memUsage" />
|
||||||
|
<NvrEnvCard :fan-info="fanInfo" :power-supply-info="powerSupplyInfo" />
|
||||||
<NvrDiskCard :disk-health="diskHealth" :disk-array="diskArray" />
|
<NvrDiskCard :disk-health="diskHealth" :disk-array="diskArray" />
|
||||||
<template v-if="isNvrCluster(ndmDevice)">
|
<template v-if="isNvrCluster(ndmDevice)">
|
||||||
<NvrRecordCheckCard :ndm-device="ndmDevice" :station="station" />
|
<NvrRecordCheckCard :ndm-device="ndmDevice" :station="station" />
|
||||||
|
|||||||
@@ -35,9 +35,15 @@ const vendor = computed(() => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const commonInfo = computed<DeviceCommonCardProps['commonInfo']>(() => {
|
const commonInfo = computed<DeviceCommonCardProps['commonInfo']>(() => {
|
||||||
const { stCommonInfo } = lastDiagInfo.value ?? {};
|
const { ipAddress } = ndmDevice.value;
|
||||||
|
const { ethInfo, ipInfo, stCommonInfo } = lastDiagInfo.value ?? {};
|
||||||
const { 设备ID, 软件版本, 设备厂商, 设备别名, 设备型号, 硬件版本 } = stCommonInfo ?? {};
|
const { 设备ID, 软件版本, 设备厂商, 设备别名, 设备型号, 硬件版本 } = stCommonInfo ?? {};
|
||||||
|
|
||||||
|
let operStatus = '-';
|
||||||
|
if (!!ethInfo?.operStatus) {
|
||||||
|
operStatus = ethInfo?.operStatus === '1' ? '正常' : '异常';
|
||||||
|
}
|
||||||
|
|
||||||
return [
|
return [
|
||||||
{
|
{
|
||||||
title: '设备型号信息',
|
title: '设备型号信息',
|
||||||
@@ -50,6 +56,17 @@ const commonInfo = computed<DeviceCommonCardProps['commonInfo']>(() => {
|
|||||||
{ label: '硬件版本', value: 硬件版本 || '-' },
|
{ label: '硬件版本', value: 硬件版本 || '-' },
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
title: '设备网卡信息',
|
||||||
|
items: [
|
||||||
|
{ label: 'IP地址', value: ipAddress || '-' },
|
||||||
|
{ label: '子网掩码', value: ipInfo?.mASK || '-' },
|
||||||
|
{ label: 'MAC地址', value: ethInfo?.macAddress || '-' },
|
||||||
|
{ label: '连接速率', value: ethInfo?.speed || '-' },
|
||||||
|
{ label: 'MTU', value: ethInfo?.mTU || '-' },
|
||||||
|
{ label: '运行状态', value: operStatus },
|
||||||
|
],
|
||||||
|
},
|
||||||
];
|
];
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { type NdmServerDiagInfo, type NdmServerResultVO, type Station } from '@/apis';
|
import { type NdmServerDiagInfo, type NdmServerResultVO, type Station } from '@/apis';
|
||||||
import { DeviceHardwareCard, DeviceHeaderCard, ServerAlive, ServerHighAvailable, ServerStreamPush } from '@/components';
|
import { DeviceCommonCard, DeviceHardwareCard, DeviceHeaderCard, ServerAlive, ServerHighAvailable, ServerStreamPush, type DeviceCommonCardProps } from '@/components';
|
||||||
import destr from 'destr';
|
import destr from 'destr';
|
||||||
import { NFlex } from 'naive-ui';
|
import { NFlex } from 'naive-ui';
|
||||||
import { computed, toRefs } from 'vue';
|
import { computed, toRefs } from 'vue';
|
||||||
@@ -19,6 +19,30 @@ const lastDiagInfo = computed(() => {
|
|||||||
return result as NdmServerDiagInfo;
|
return result as NdmServerDiagInfo;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const commonInfo = computed<DeviceCommonCardProps['commonInfo']>(() => {
|
||||||
|
const { ipAddress } = ndmDevice.value;
|
||||||
|
const { ethInfo, ipInfo } = lastDiagInfo.value ?? {};
|
||||||
|
|
||||||
|
let operStatus = '-';
|
||||||
|
if (!!ethInfo?.operStatus) {
|
||||||
|
operStatus = ethInfo?.operStatus === '1' ? '正常' : '异常';
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
{
|
||||||
|
title: '设备网卡信息',
|
||||||
|
items: [
|
||||||
|
{ label: 'IP地址', value: ipAddress || '-' },
|
||||||
|
{ label: '子网掩码', value: ipInfo?.mASK || '-' },
|
||||||
|
{ label: 'MAC地址', value: ethInfo?.macAddress || '-' },
|
||||||
|
{ label: '连接速率', value: ethInfo?.speed || '-' },
|
||||||
|
{ label: 'MTU', value: ethInfo?.mTU || '-' },
|
||||||
|
{ label: '运行状态', value: operStatus },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
});
|
||||||
|
|
||||||
const cpuUsage = computed(() => lastDiagInfo.value?.commInfo?.CPU使用率);
|
const cpuUsage = computed(() => lastDiagInfo.value?.commInfo?.CPU使用率);
|
||||||
const memUsage = computed(() => lastDiagInfo.value?.commInfo?.内存使用率);
|
const memUsage = computed(() => lastDiagInfo.value?.commInfo?.内存使用率);
|
||||||
const diskUsage = computed(() => lastDiagInfo.value?.commInfo?.磁盘使用率);
|
const diskUsage = computed(() => lastDiagInfo.value?.commInfo?.磁盘使用率);
|
||||||
@@ -29,6 +53,7 @@ const runningTime = computed(() => lastDiagInfo.value?.commInfo?.系统运行时
|
|||||||
<NFlex vertical>
|
<NFlex vertical>
|
||||||
<ServerHighAvailable :ndm-device="ndmDevice" :station="station" />
|
<ServerHighAvailable :ndm-device="ndmDevice" :station="station" />
|
||||||
<DeviceHeaderCard :ndm-device="ndmDevice" :station="station" />
|
<DeviceHeaderCard :ndm-device="ndmDevice" :station="station" />
|
||||||
|
<DeviceCommonCard :common-info="commonInfo" />
|
||||||
<DeviceHardwareCard running-time-label="服务器运行时间" :cpu-usage="cpuUsage" :mem-usage="memUsage" :disk-usage="diskUsage" :running-time="runningTime" />
|
<DeviceHardwareCard running-time-label="服务器运行时间" :cpu-usage="cpuUsage" :mem-usage="memUsage" :disk-usage="diskUsage" :running-time="runningTime" />
|
||||||
<ServerAlive :ndm-device="ndmDevice" :station="station" />
|
<ServerAlive :ndm-device="ndmDevice" :station="station" />
|
||||||
<ServerStreamPush :ndm-device="ndmDevice" :station="station" />
|
<ServerStreamPush :ndm-device="ndmDevice" :station="station" />
|
||||||
|
|||||||
Reference in New Issue
Block a user