You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
666 lines
19 KiB
666 lines
19 KiB
<template> |
|
<basic-container class="content"> |
|
<div class="process"> |
|
<div class="title"> |
|
<div>报警节点示意图</div> |
|
<el-button class="go-back" @click="goBack">返回</el-button> |
|
</div> |
|
<el-carousel |
|
style="position: relative" |
|
:autoplay="false" |
|
:loop="false" |
|
@change="change" |
|
> |
|
<div |
|
style=" |
|
width: 100%; |
|
height: 100%; |
|
position: absolute; |
|
background: rgba(255, 255, 255, 0.9); |
|
z-index: 9; |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
text-align: center; |
|
line-height: 300px; |
|
z-index: 99; |
|
" |
|
v-show="loading1 || !warnPoint.length" |
|
> |
|
{{ |
|
loading1 ? "数据加载中..." : "未查询到设备类型通讯链路及排除方案" |
|
}} |
|
</div> |
|
<el-carousel-item v-for="(item, index) in warnPoint" :key="item"> |
|
<div class="main"> |
|
<div class="process-example"> |
|
<div style="position: absolute; left: 24px"> |
|
共{{ warnPoint.length }}条,{{ |
|
index + 1 + "/" + warnPoint.length |
|
}} |
|
</div> |
|
<div class="example-title">示例:</div> |
|
<div class="example-box"> |
|
<div class="point blue"></div> |
|
<div class="value">正常</div> |
|
</div> |
|
<div class="example-box margin-right-left-20"> |
|
<div class="point red"></div> |
|
<div class="value">报警</div> |
|
</div> |
|
<div class="example-box"> |
|
<div class="point grey"></div> |
|
<div class="value">静默</div> |
|
</div> |
|
</div> |
|
<div class="process-center"> |
|
<div class="process-node-box"> |
|
<div class="node-img" v-if="item.lineData && item.lineData[0]"> |
|
<img |
|
class="nav_img" |
|
:src="require(`../../../public/img/opsVisualization/node1_${item.lineData[1].status ||3}.png`)" |
|
/> |
|
<div class="node-text"> |
|
{{ |
|
item.lineData && item.lineData[0] && item.lineData[0].name |
|
}} |
|
</div> |
|
</div> |
|
<normal |
|
v-if="item.lineData && item.lineData[1]" |
|
:params="item.lineData[1]" |
|
/> |
|
<div class="node-img" v-if="item.lineData && item.lineData[1]"> |
|
<img |
|
class="nav_img" |
|
:src="require(`../../../public/img/opsVisualization/node2_${item.lineData[1].status||3}.png`)" |
|
/> |
|
<div class="node-text"> |
|
{{ |
|
item.lineData && item.lineData[1] && item.lineData[1].name |
|
}} |
|
</div> |
|
</div> |
|
<normal |
|
v-if="item.lineData && item.lineData[2]" |
|
:params="item.lineData[2]" |
|
/> |
|
<div class="node-img" v-if="item.lineData && item.lineData[2]"> |
|
<img |
|
class="nav_img" |
|
:src="require(`../../../public/img/opsVisualization/node3_${item.lineData[2].status||3}.png`)" |
|
/> |
|
<div class="node-text"> |
|
{{ |
|
item.lineData && item.lineData[2] && item.lineData[2].name |
|
}} |
|
</div> |
|
</div> |
|
<normal |
|
v-if="item.lineData && item.lineData[3]" |
|
:params="item.lineData[3]" |
|
/> |
|
<div class="node-img" v-if="item.lineData && item.lineData[3]"> |
|
<img |
|
class="nav_img" |
|
:src="require(`../../../public/img/opsVisualization/node3_${item.lineData[3].status||3}.png`)" |
|
/> |
|
<div class="node-text"> |
|
{{ |
|
item.lineData && item.lineData[3] && item.lineData[3].name |
|
}} |
|
</div> |
|
</div> |
|
<normal |
|
v-if="item.lineData && item.lineData[4]" |
|
:params="item.lineData[4]" |
|
/> |
|
<div class="node-img" v-if="item.lineData && item.lineData[4]"> |
|
<img |
|
class="nav_img" |
|
:src="require(`../../../public/img/opsVisualization/node3_${item.lineData[4].status||3}.png`)" |
|
/> |
|
<div class="node-text"> |
|
{{ |
|
item.lineData && item.lineData[4] && item.lineData[4].name |
|
}} |
|
</div> |
|
</div> |
|
</div> |
|
<div class="process-more"> |
|
<div class="button" @click="() => open(item)"> |
|
查看更多报警信息 |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
</el-carousel-item> |
|
</el-carousel> |
|
</div> |
|
<div class="method"> |
|
<div class="title" style="z-index: 10">报警解决方法</div> |
|
<div |
|
style=" |
|
width: 100%; |
|
height: 280px; |
|
position: absolute; |
|
background: rgba(255, 255, 255, 0.9); |
|
z-index: 9; |
|
position: absolute; |
|
top: 0; |
|
left: 0; |
|
text-align: center; |
|
line-height: 300px; |
|
border: 1px solid #d1d1d1; |
|
border-top: none; |
|
" |
|
v-show="loading2 && !resolveTips.length" |
|
> |
|
{{ loading2 ? "数据加载中..." : "未查询到报警解决方法" }} |
|
</div> |
|
<div class="text-box" style="display: flex; padding: 28px 0 0 44px"> |
|
<div class="label" style="font-size: 18px; font-weight: bold"> |
|
排查方法: |
|
</div> |
|
<div> |
|
<div class="value"> |
|
<div class="item" v-for="item in resolveTips"> |
|
{{ item.shortNum }}.{{ item.tips }} |
|
</div> |
|
</div> |
|
</div> |
|
</div> |
|
<!-- <div class="text-box" style="margin: 0;"> |
|
<div class="label">{{ item.shortNum }}.</div> |
|
<div class="value"> |
|
<div class="item">{{ item.tips }}</div> |
|
</div> |
|
</div> --> |
|
</div> |
|
</basic-container> |
|
</template> |
|
|
|
<script> |
|
import { |
|
getWarnPoint, |
|
getResolveTips, |
|
} from "@/api/opsVisualization/alarmProcess"; |
|
import normal from "./components/normal.vue"; |
|
export default { |
|
data() { |
|
return { |
|
resolveTips: [], |
|
warnPoint: [], |
|
loading1: false, |
|
loading2: false, |
|
|
|
carouselIndex: 0, |
|
}; |
|
}, |
|
components: { |
|
normal, |
|
}, |
|
created() {}, |
|
mounted() { |
|
const { serviceCode = "" } = this.$route.query; |
|
|
|
this.loading1 = true; |
|
getWarnPoint({ serviceCode }) |
|
.then((res) => { |
|
//排序 |
|
this.loading1 = false; |
|
let arr = res.data.data; |
|
// let arr = [ |
|
// { |
|
// classCode: "0200", // 设备类型 |
|
// lineData: [ |
|
// { |
|
// parent: "294", // 父节点id |
|
// name: "data", // 节点名称 |
|
// id: 301, // 节点id |
|
// type: "equip", // 监控节点类型 |
|
// class_code: "0200", // 设备类型 |
|
// status: 4, // 节点状态 |
|
// }, |
|
// { |
|
// parent: "293", |
|
// name: "gateway", |
|
// id: 294, |
|
// type: "middleware", |
|
// status: 4, |
|
// }, |
|
// { |
|
// parent: "11", |
|
// name: "mqtt通讯服务", |
|
// id: 293, |
|
// type: "middleware", |
|
// status: 4, |
|
// }, |
|
// { |
|
// parent: "0", |
|
// name: "水表、热表、火警、电梯", |
|
// id: 11, |
|
// type: "service", |
|
// status: 2, |
|
// }, |
|
// ], |
|
// }, |
|
// { |
|
// classCode: "0201", // 设备类型 |
|
// lineData: [ |
|
// { |
|
// parent: "294", // 父节点id |
|
// name: "data", // 节点名称 |
|
// id: 301, // 节点id |
|
// type: "equip", // 监控节点类型 |
|
// class_code: "0200", // 设备类型 |
|
// status: 4, // 节点状态 |
|
// }, |
|
// { |
|
// parent: "293", |
|
// name: "gateway", |
|
// id: 294, |
|
// type: "middleware", |
|
// status: 4, |
|
// }, |
|
// { |
|
// parent: "11", |
|
// name: "mqtt通讯服务", |
|
// id: 293, |
|
// type: "middleware", |
|
// status: 4, |
|
// }, |
|
// { |
|
// parent: "0", |
|
// name: "水表、热表、火警、电梯", |
|
// id: 11, |
|
// type: "service", |
|
// status: 2, |
|
// }, |
|
// ], |
|
// }, |
|
// ]; |
|
arr.map((i) => { |
|
i.lineData = this.arrSort(i.lineData); |
|
}); |
|
|
|
this.warnPoint = arr; |
|
this.loading1 = false; |
|
|
|
console.log( |
|
arr, |
|
"warnPointwarnPointwarnPointwarnPointwarnPointwarnPoint" |
|
); |
|
|
|
//排查方案信息列表 |
|
this.loading2 = true; |
|
getResolveTips({ |
|
classCode: this.warnPoint[0].classCode, |
|
pointCode: this.warnPoint[0].lineData.find( |
|
(i) => i.status == 2 || i.status == 3 |
|
).type, |
|
}) |
|
.then((res) => { |
|
this.resolveTips = res.data.data; |
|
this.loading2 = false; |
|
}) |
|
.catch((err) => { |
|
this.$message.warning("排查方案信息列表查询失败,请联系管理员!"); |
|
this.loading2 = false; |
|
}); |
|
}) |
|
.catch((err) => { |
|
this.$message.warning( |
|
"设备类型通讯链路及排除方案查询失败,请联系管理员!" |
|
); |
|
this.loading1 = false; |
|
}); |
|
}, |
|
methods: { |
|
change(index) { |
|
console.log("indexindexindex", index); |
|
|
|
this.loading2 = true; |
|
getResolveTips({ |
|
classCode: this.warnPoint[index].classCode, |
|
pointCode: this.warnPoint[index].lineData.find( |
|
(i) => i.status == 2 || i.status == 3 |
|
).type, |
|
}) |
|
.then((res) => { |
|
this.resolveTips = res.data.data; |
|
this.loading2 = false; |
|
}) |
|
.catch((err) => { |
|
this.$message.warning("排查方案信息列表查询失败,请联系管理员!"); |
|
this.loading2 = false; |
|
}); |
|
}, |
|
open(detail) { |
|
this.$router.push({ |
|
path: `/opsVisualization/serviceDataOAM?equipCode=&warnStatus=1&classCode=${detail.classCode}`, |
|
}); |
|
}, |
|
arrSort(list) { |
|
let arr = []; |
|
arr[0] = list.find((i) => i.parent == 0); |
|
if (arr[0]) { |
|
arr[1] = list.find((i) => i.parent == arr[0].id); |
|
} |
|
if (arr[1]) { |
|
arr[2] = list.find((i) => i.parent == arr[1].id); |
|
} |
|
if (arr[2]) { |
|
arr[3] = list.find((i) => i.parent == arr[2].id); |
|
} |
|
if (arr[3]) { |
|
arr[4] = list.find((i) => i.parent == arr[3].id); |
|
} |
|
if (arr[4]) { |
|
arr[5] = list.find((i) => i.parent == arr[4].id); |
|
} |
|
if (arr[5]) { |
|
arr[6] = list.find((i) => i.parent == arr[4].id); |
|
} |
|
arr.splice(arr.length - 1, 1); |
|
return arr; |
|
}, |
|
goBack() { |
|
this.$router.go(-1); |
|
} |
|
}, |
|
}; |
|
</script> |
|
|
|
<style lang="scss" scoped> |
|
.content { |
|
// padding: 20px !important; |
|
.process { |
|
// width: calc(100% - 218px); |
|
// margin-left: 218px; |
|
height: 500px; |
|
background: #ffffff; |
|
border-radius: 0px 0px 0px 0px; |
|
border: 1px solid #d1d1d1; |
|
display: flex; |
|
flex-direction: column; |
|
.title { |
|
width: 100%; |
|
height: 40px; |
|
background: #e5e5e5; |
|
border-radius: 0px 0px 0px 0px; |
|
border: 1px solid #d1d1d1; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
font-size: 18px; |
|
color: #333333; |
|
position: relative; |
|
.go-back{ |
|
position: absolute; |
|
right: 2px; |
|
} |
|
} |
|
.main { |
|
display: flex; |
|
flex-direction: column; |
|
padding: 30px; |
|
height: 50%; |
|
.process-example { |
|
width: 100%; |
|
display: flex; |
|
justify-content: flex-end; |
|
.example-title { |
|
color: #999999; |
|
margin-right: 6px; |
|
font-size: 14px; |
|
} |
|
.example-box { |
|
display: flex; |
|
align-items: center; |
|
.point { |
|
width: 11px; |
|
height: 11px; |
|
border-radius: 10px; |
|
margin-right: 11px; |
|
} |
|
.value { |
|
color: #999999; |
|
font-size: 14px; |
|
} |
|
} |
|
.margin-right-left-20 { |
|
margin: 0 20px; |
|
} |
|
} |
|
.process-center { |
|
display: flex; |
|
align-items: center; |
|
justify-content: space-around; |
|
margin-top: 75px; |
|
.process-node-box { |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
.node-img { |
|
width: 69px; |
|
height: 69px; |
|
display: flex; |
|
flex-direction: column; |
|
justify-content: center; |
|
align-items: center; |
|
position: relative; |
|
.baojing { |
|
width: 133px; |
|
height: 31px; |
|
background: #fff3f3; |
|
border-radius: 0px 0px 0px 0px; |
|
border: 1px solid #ee6464; |
|
font-size: 16px; |
|
color: #e14b33; |
|
position: absolute; |
|
top: -55px; |
|
transform: translateY(-50%); |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
} |
|
.nav_img { |
|
width: 100%; |
|
height: 100%; |
|
// margin-bottom: 20px; |
|
} |
|
.node-text { |
|
position: absolute; |
|
transform: translateY(-50%); |
|
width: 100px; |
|
text-align: center; |
|
top: 100px; |
|
} |
|
} |
|
.yes-no { |
|
width: 163px; |
|
height: 17px; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
position: relative; |
|
.yes { |
|
width: 167px; |
|
height: 17px; |
|
background: #21a2e5; |
|
opacity: 0.18; |
|
position: absolute; |
|
} |
|
.no { |
|
width: 167px; |
|
height: 17px; |
|
background: #a5a5a5; |
|
opacity: 0.18; |
|
position: absolute; |
|
} |
|
.nav_img { |
|
width: 24px; |
|
height: 24px; |
|
opacity: 1; |
|
z-index: 10; |
|
} |
|
} |
|
} |
|
.process-more { |
|
.button { |
|
width: 190px; |
|
height: 40px; |
|
background: #ffffff; |
|
border-radius: 0px 0px 0px 0px; |
|
border: 1px solid #2b8ee5; |
|
color: #2b8ee5; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
cursor: pointer; |
|
} |
|
} |
|
} |
|
.process-bottom { |
|
border-top: 1px solid #d1d1d1; |
|
margin-top: 200px; |
|
display: flex; |
|
flex-direction: column; |
|
.line { |
|
margin-top: 20px; |
|
display: flex; |
|
align-items: flex-start; |
|
justify-content: center; |
|
} |
|
.item { |
|
display: flex; |
|
flex-direction: column; |
|
.item-box { |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
margin-bottom: 20px; |
|
.point { |
|
width: 10px; |
|
height: 10px; |
|
margin: 0 20px; |
|
border-radius: 10px; |
|
} |
|
.name { |
|
width: 200px; |
|
} |
|
.code { |
|
width: 250px; |
|
margin-left: 40px; |
|
} |
|
.btn { |
|
margin-left: 20px; |
|
width: 185px; |
|
height: 31px; |
|
border-radius: 0px 0px 0px 0px; |
|
display: flex; |
|
justify-content: space-around; |
|
align-items: center; |
|
font-size: 16px; |
|
.img { |
|
width: 15px; |
|
height: 15px; |
|
} |
|
} |
|
.red-btn { |
|
background: #fff3f3; |
|
border: 1px solid #ee6464; |
|
.text { |
|
color: #e14b33; |
|
} |
|
} |
|
.grey-btn { |
|
background: #f5f5f5; |
|
border: 1px solid #999999; |
|
.text { |
|
color: #999999; |
|
} |
|
} |
|
} |
|
} |
|
.restart { |
|
margin-left: 72px; |
|
display: flex; |
|
align-items: center; |
|
cursor: pointer; |
|
.restart-text { |
|
font-size: 16px; |
|
color: #333333; |
|
} |
|
.restart-btn { |
|
width: 93px; |
|
height: 31px; |
|
background: #2b8ee5; |
|
border-radius: 0px 0px 0px 0px; |
|
font-size: 16px; |
|
color: #ffffff; |
|
margin-left: 7px; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
.method { |
|
height: 270px; |
|
flex: 1; |
|
margin-top: 30px; |
|
// width: calc(100% - 218px); |
|
// // height: 326px; |
|
// margin-left: 218px; |
|
background: #ffffff; |
|
border-radius: 0px 0px 0px 0px; |
|
border: 1px solid #d1d1d1; |
|
display: flex; |
|
flex-direction: column; |
|
position: relative; |
|
.title { |
|
width: 100%; |
|
height: 40px; |
|
background: #e5e5e5; |
|
border-radius: 0px 0px 0px 0px; |
|
border: 1px solid #d1d1d1; |
|
display: flex; |
|
justify-content: center; |
|
align-items: center; |
|
font-size: 18px; |
|
color: #333333; |
|
} |
|
.main { |
|
display: flex; |
|
flex-direction: column; |
|
padding: 22px; |
|
// height: 50%; |
|
overflow: auto; |
|
.text-box { |
|
margin-bottom: 22px; |
|
display: flex; |
|
.label { |
|
} |
|
.value { |
|
.item { |
|
margin-bottom: 12px; |
|
} |
|
} |
|
} |
|
} |
|
} |
|
.blue { |
|
background: #21a2e5; |
|
} |
|
.red { |
|
background: #e96955; |
|
} |
|
.grey { |
|
background: #e1e1e1; |
|
} |
|
} |
|
</style> |