parent
b8d2cad598
commit
12f8a46157
@ -0,0 +1,32 @@ |
||||
<template> |
||||
<el-tabs type="border-card" class="demo-tabs"> |
||||
<el-tab-pane> |
||||
<template #label> |
||||
<span class="custom-tabs-label"> |
||||
<el-icon><MostlyCloudy /></el-icon> |
||||
<span>有线无法上网</span> |
||||
</span> |
||||
</template> |
||||
<wired-is-not-available :dev-id="prop.devId" /> |
||||
</el-tab-pane> |
||||
</el-tabs> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
import { MostlyCloudy } from "@element-plus/icons-vue"; |
||||
import WiredIsNotAvailable from "@/views/family/operate/fault-management/components/WiredIsNotAvailable.vue"; |
||||
|
||||
const prop = defineProps<{ |
||||
devId: number; |
||||
}>(); |
||||
</script> |
||||
|
||||
<style scoped> |
||||
.demo-tabs .custom-tabs-label .el-icon { |
||||
vertical-align: middle; |
||||
} |
||||
.demo-tabs .custom-tabs-label span { |
||||
vertical-align: middle; |
||||
margin-left: 4px; |
||||
} |
||||
</style> |
@ -0,0 +1,607 @@ |
||||
<template> |
||||
<div> |
||||
<div class="flex justify-end"> |
||||
<el-button |
||||
type="primary" |
||||
:disabled="prop.devId === 0" |
||||
@click="startDiagnosis" |
||||
>开始诊断</el-button |
||||
> |
||||
</div> |
||||
<el-scrollbar height="350"> |
||||
<el-descriptions |
||||
v-loading="loading" |
||||
direction="vertical" |
||||
border |
||||
:column="8" |
||||
> |
||||
<template #title> |
||||
<div style="display: flex; align-items: center; margin-top: 10px"> |
||||
<el-icon size="15"> <Grid /> </el-icon> <span |
||||
style="font-weight: 500; font-size: 14px; line-height: 16px" |
||||
>链路信息</span |
||||
> |
||||
</div> |
||||
</template> |
||||
<el-descriptions-item |
||||
label="链路状态" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ link["Status"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="线路协议" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ link["ModulationType"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="上行速率(Kbps)" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
>{{ link["UpstreamMaxRate"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="下行速率(Kbps)" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ link["DownstreamMaxRate"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="上行衰减(0.1dB)" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ link["UpstreamAttenuation"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="下行衰减(0.dB)" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ link["DownstreamAttenuation"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="上行性噪比(0.dB)" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ link["UpstreamNoiseMargin"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="下行性噪比(0.dB)" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ link["DownstreamNoiseMargin"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label-align="center" |
||||
align="left" |
||||
label-class-name="my-label-none" |
||||
class-name="my-content" |
||||
width="150px" |
||||
v-if="link['state'] != '2' && link['state'] != undefined" |
||||
> |
||||
<div style="color: red; padding: 0 8px; font-size: 10px"> |
||||
错误信息:{{ link["result"] }} |
||||
</div> |
||||
</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions |
||||
v-loading="loading" |
||||
direction="vertical" |
||||
border |
||||
:column="4" |
||||
> |
||||
<template #title> |
||||
<div style="display: flex; align-items: center; margin-top: 10px"> |
||||
<el-icon size="15"> <Grid /> </el-icon> <span |
||||
style="font-weight: 500; font-size: 14px; line-height: 16px" |
||||
>业务参数检查</span |
||||
> |
||||
</div> |
||||
</template> |
||||
<el-descriptions-item |
||||
label="PVC/VLAN配置" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ broadband["PVC"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="宽带账号" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ broadband["Username"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="NAT" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
>{{ broadband["NAT"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="DNS" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ broadband["DNSServer"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label-align="center" |
||||
align="left" |
||||
label-class-name="my-label-none" |
||||
class-name="my-content" |
||||
width="150px" |
||||
v-if="broadband['state'] != '2' && broadband['state'] != undefined" |
||||
> |
||||
<div style="color: red; padding: 0 8px; font-size: 10px"> |
||||
错误信息:{{ broadband["result"] }} |
||||
</div> |
||||
</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions |
||||
v-loading="loading" |
||||
direction="vertical" |
||||
border |
||||
:column="2" |
||||
> |
||||
<template #title> |
||||
<div style="display: flex; align-items: center; margin-top: 10px"> |
||||
<el-icon size="15"> <Grid /> </el-icon> <span |
||||
style="font-weight: 500; font-size: 14px; line-height: 16px" |
||||
>拨号检查</span |
||||
> |
||||
</div> |
||||
</template> |
||||
<el-descriptions-item |
||||
label="拨号方式" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ broadband["ConnectType"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="宽带账号" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ broadband["ConnectStatus"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label-align="center" |
||||
align="left" |
||||
label-class-name="my-label-none" |
||||
class-name="my-content" |
||||
width="150px" |
||||
v-if="broadband['state'] != '2' && broadband['state'] != undefined" |
||||
> |
||||
<div style="color: red; padding: 0 8px; font-size: 10px"> |
||||
错误信息:{{ broadband["result"] }} |
||||
</div> |
||||
</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions |
||||
v-loading="loadingPing" |
||||
direction="vertical" |
||||
border |
||||
:column="7" |
||||
> |
||||
<template #title> |
||||
<div style="display: flex; align-items: center; margin-top: 10px"> |
||||
<el-icon size="15"> <Grid /> </el-icon> <span |
||||
style="font-weight: 500; font-size: 14px; line-height: 16px" |
||||
>PING一个DNS的IP地址</span |
||||
> |
||||
</div> |
||||
</template> |
||||
<el-descriptions-item |
||||
label="目的IP" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ pingDNS["IP"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="包大小" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ pingDNS["PackSize"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="次数" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
>{{ pingDNS["Number"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="PING结果" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
<span v-if="pingDNS['SuccessCount'] != undefined"> |
||||
成功次数 {{ pingDNS["SuccessCount"] }},失败次数 |
||||
{{ pingDNS["FailureCount"] }} |
||||
</span> |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="最小响应时间" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ pingDNS["MinimumResponseTime"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="最大响应时间" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ pingDNS["MaximumResponseTime"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="平均响应时间" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ pingDNS["AverageResponseTime"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label-align="center" |
||||
align="left" |
||||
label-class-name="my-label-none" |
||||
class-name="my-content" |
||||
width="150px" |
||||
v-if="pingDNS['state'] != '2' && pingDNS['state'] != undefined" |
||||
> |
||||
<div style="color: red; padding: 0 8px; font-size: 10px"> |
||||
错误信息:{{ pingDNS["result"] }} |
||||
</div> |
||||
</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions |
||||
v-loading="loading" |
||||
direction="vertical" |
||||
border |
||||
:column="4" |
||||
> |
||||
<template #title> |
||||
<div style="display: flex; align-items: center; margin-top: 10px"> |
||||
<el-icon size="15"> <Grid /> </el-icon> <span |
||||
style="font-weight: 500; font-size: 14px; line-height: 16px" |
||||
>PC连接检查</span |
||||
> |
||||
</div> |
||||
</template> |
||||
<el-descriptions-item |
||||
label="LAN1" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ getLanValue("1") }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="LAN2" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ getLanValue("2") }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="LAN3" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
>{{ getLanValue("3") }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="LAN4" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ getLanValue("4") }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label-align="center" |
||||
align="left" |
||||
label-class-name="my-label-none" |
||||
class-name="my-content" |
||||
width="150px" |
||||
v-if="lan['state'] != '2' && lan['state'] != undefined" |
||||
> |
||||
<div style="color: red; padding: 0 8px; font-size: 10px"> |
||||
错误信息:{{ lan["result"] }} |
||||
</div> |
||||
</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions |
||||
v-loading="loading" |
||||
direction="vertical" |
||||
border |
||||
:column="3" |
||||
> |
||||
<template #title> |
||||
<div style="display: flex; align-items: center; margin-top: 10px"> |
||||
<el-icon size="15"> <Grid /> </el-icon> <span |
||||
style="font-weight: 500; font-size: 14px; line-height: 16px" |
||||
>DHCP检查</span |
||||
> |
||||
</div> |
||||
</template> |
||||
<el-descriptions-item |
||||
label="IP地址" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ getDhcpResult["IpAddress"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="MAC地址" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ getDhcpResult["MacAddress"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="地址来源" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
>{{ getDhcpResult["AddressSource"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label-align="center" |
||||
align="left" |
||||
label-class-name="my-label-none" |
||||
class-name="my-content" |
||||
width="150px" |
||||
v-if="lan['state'] != '2' && lan['state'] != undefined" |
||||
> |
||||
<div style="color: red; padding: 0 8px; font-size: 10px"> |
||||
错误信息:{{ lan["result"] }} |
||||
</div> |
||||
</el-descriptions-item> |
||||
</el-descriptions> |
||||
<el-descriptions |
||||
v-loading="loading" |
||||
direction="vertical" |
||||
border |
||||
:column="2" |
||||
> |
||||
<template #title> |
||||
<div style="display: flex; align-items: center; margin-top: 10px"> |
||||
<el-icon size="15"> <Grid /> </el-icon> <span |
||||
style="font-weight: 500; font-size: 14px; line-height: 16px" |
||||
>DNS检查</span |
||||
> |
||||
</div> |
||||
</template> |
||||
<el-descriptions-item |
||||
label="DNS信息" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ broadband["DNSServer"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label="IP地址" |
||||
label-align="center" |
||||
align="center" |
||||
label-class-name="my-label" |
||||
class-name="my-content" |
||||
width="150px" |
||||
> |
||||
{{ broadband["Ipaddress"] }} |
||||
</el-descriptions-item> |
||||
<el-descriptions-item |
||||
label-align="center" |
||||
align="left" |
||||
label-class-name="my-label-none" |
||||
class-name="my-content" |
||||
width="150px" |
||||
v-if="broadband['state'] != '2' && broadband['state'] != undefined" |
||||
> |
||||
<div style="color: red; padding: 0 8px; font-size: 10px"> |
||||
错误信息:{{ broadband["result"] }} |
||||
</div> |
||||
</el-descriptions-item> |
||||
</el-descriptions> |
||||
</el-scrollbar> |
||||
</div> |
||||
</template> |
||||
|
||||
<script setup lang="ts"> |
||||
import { Grid } from "@element-plus/icons-vue"; |
||||
import { faultServiceStatus, pingDNSResult } from "@/api/fault"; |
||||
|
||||
const prop = defineProps<{ |
||||
devId: number; |
||||
}>(); |
||||
const link = ref<any>({}); |
||||
const broadband = ref<any>({}); |
||||
const pingDNS = ref<any>({}); |
||||
const lan = ref<any>({}); |
||||
const loading = ref<boolean>(false); |
||||
const loadingPing = ref<boolean>(false); |
||||
const getServiceDetailInfo = (remote: string) => { |
||||
loading.value = true; |
||||
faultServiceStatus(prop.devId, remote) |
||||
.then(({ data }) => { |
||||
switch (remote) { |
||||
case "LinkInfoQueryDSL": |
||||
link.value = data; |
||||
break; |
||||
case "DigitalhomeQueryDSL": |
||||
broadband.value = data; |
||||
break; |
||||
case "LanActiveQuery": |
||||
lan.value = data; |
||||
break; |
||||
} |
||||
}) |
||||
.finally(() => { |
||||
loading.value = false; |
||||
}); |
||||
}; |
||||
function getLanValue(index?: string) { |
||||
let active = lan.value["Active"]; |
||||
let lanIndex = lan.value["lanIndex"]; |
||||
if (active === undefined || lanIndex == undefined) { |
||||
return; |
||||
} |
||||
let tmpActive: string[] = active.split("#"); |
||||
let tmpLanIndex: string[] = lanIndex.split("#"); |
||||
for (let i = 0; i < tmpLanIndex.length; i++) { |
||||
if (tmpLanIndex[i] === index) { |
||||
return tmpActive[i]; |
||||
} |
||||
} |
||||
} |
||||
// eslint-disable-next-line vue/return-in-computed-property |
||||
const getDhcpResult = computed(() => { |
||||
let active = lan.value["Active"]; |
||||
let addressSource = lan.value["AddressSource"]; |
||||
let ipAddress = lan.value["ipAddress"]; |
||||
let macAddress = lan.value["MACAddress"]; |
||||
if (active === undefined) { |
||||
return { IpAddress: "", MacAddress: "", AddressSource: "" }; |
||||
} |
||||
let tmpIpAddress: string[] = ipAddress.split("#"); |
||||
let tmpMacAddress: string[] = macAddress.split("#"); |
||||
let tmpAddressSource: string[] = addressSource.split("#"); |
||||
let tmpActive: string[] = active.split("#"); |
||||
for (let i = 0; i < tmpActive.length; i++) { |
||||
if (tmpActive[i] === "true" && tmpAddressSource[i] === "DHCP") { |
||||
return { |
||||
IpAddress: tmpIpAddress[i], |
||||
MacAddress: tmpMacAddress[i], |
||||
AddressSource: tmpAddressSource[i], |
||||
}; |
||||
} |
||||
} |
||||
}); |
||||
const getPingResult = (remote: string) => { |
||||
loadingPing.value = true; |
||||
pingDNSResult(prop.devId, remote) |
||||
.then(({ data }) => { |
||||
pingDNS.value = data; |
||||
}) |
||||
.finally(() => { |
||||
loadingPing.value = false; |
||||
}); |
||||
}; |
||||
const startDiagnosis = async () => { |
||||
await getServiceDetailInfo("LinkInfoQueryDSL"); |
||||
await getServiceDetailInfo("DigitalhomeQueryDSL"); |
||||
await getPingResult("ipping"); |
||||
await getServiceDetailInfo("LanActiveQuery"); |
||||
}; |
||||
</script> |
||||
|
||||
<style scoped> |
||||
:deep(.my-content) { |
||||
height: 32px; |
||||
} |
||||
|
||||
:deep(.my-label-none) { |
||||
display: none; |
||||
} |
||||
|
||||
:deep( |
||||
.el-descriptions__body |
||||
.el-descriptions__table.is-bordered |
||||
.el-descriptions__cell |
||||
) { |
||||
padding: 8px 0; |
||||
} |
||||
</style> |
Loading…
Reference in new issue