refactor:页面位置调整

main
lizhichao 2 years ago
parent 78c36cd692
commit 1ff801633c
  1. 4
      src/page/index/sidebar/index.vue
  2. 145
      src/page/index/sidebar/opsSidebar.vue
  3. 423
      src/page/opsVisualization/alarmProcess.vue
  4. 874
      src/page/opsVisualization/index.vue
  5. 66
      src/page/opsVisualization/jiedian.vue
  6. 50
      src/page/opsVisualization/serverUnit.vue
  7. 171
      src/page/opsVisualization/serviceDataOAM.vue
  8. BIN
      src/page/opsVisualization/systemMonitoring/icon/icon1.png
  9. BIN
      src/page/opsVisualization/systemMonitoring/icon/icon2.png
  10. BIN
      src/page/opsVisualization/systemMonitoring/icon/icon3.png
  11. BIN
      src/page/opsVisualization/systemMonitoring/icon/icon4.png
  12. 286
      src/page/opsVisualization/systemMonitoring/index.vue
  13. 396
      src/page/opsVisualization/tuobu.vue
  14. 175
      src/router/page/index.js

@ -5,7 +5,7 @@
<div v-if="validatenull(menu)" class="avue-sidebar--tip">{{$t('menuTip')}}
</div>
<el-menu unique-opened :default-active="nowTagValue" mode="horizontal" :show-timeout="200"
:collapse="keyCollapse">
:collapse="keyCollapse" v-if="$route.path.indexOf('opsVisualization') == -1">
<sidebar-item :menu="menu" :screen="screen" first :props="website.menu.props" :collapse="keyCollapse">
</sidebar-item>
</el-menu>
@ -49,4 +49,4 @@
/deep/.el-scrollbar__bar.is-vertical{
display: none;
}
</style>
</style>

@ -1,79 +1,80 @@
<template>
<div class="page">
<div style="background: #1e283d; height: 92vh; width: 218px">
<el-menu
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#1E283D"
active-background-color="red"
text-color="#fff"
active-text-color="#ffd04b"
:default-active="$route.path"
router
>
<el-submenu index="1">
<template slot="title">
<span class="point"></span>
<span>系统监控</span>
</template>
<el-menu-item-group>
<el-menu-item index="/opsVisualization/index">服务监控</el-menu-item>
<el-menu-item index="/opsVisualization/warnHistory">Redis监控</el-menu-item>
<el-menu-item index="/opsVisualization/index">数据库监控</el-menu-item>
<el-menu-item index="/opsVisualization/index">网络监控</el-menu-item>
<el-menu-item index="/opsVisualization/index">系统硬件监控</el-menu-item>
</el-menu-item-group>
</el-submenu>
<el-submenu index="2">
<template slot="title">
<i class="point"></i>
<span>业务数据运维</span>
</template>
<el-menu-item-group>
<el-menu-item index="/opsVisualization/alarmProcess">服务监控</el-menu-item>
<el-menu-item index="/opsVisualization/tuobu">Redis监控</el-menu-item>
<el-menu-item index="/opsVisualization/index">数据库监控</el-menu-item>
<el-menu-item index="/opsVisualization/index">网络监控</el-menu-item>
<el-menu-item index="/opsVisualization/index">系统硬件监控</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</div>
<div class="page">
<div style="background: #1e283d; height: 92vh; width: 218px">
<el-menu
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#1E283D"
active-background-color="red"
text-color="#fff"
active-text-color="#ffd04b"
:default-active="$route.path"
router
>
<el-submenu index="1">
<template slot="title">
<span class="point"></span>
<span>系统监控</span>
</template>
<el-menu-item-group>
<el-menu-item index="/opsVisualization/tuobu"
>系统监控</el-menu-item
>
<el-menu-item index="/opsVisualization/systemMonitoring"
>服务监控</el-menu-item
>
</el-menu-item-group>
</el-submenu>
<el-submenu index="2">
<template slot="title">
<i class="point"></i>
<span>业务数据运维</span>
</template>
<el-menu-item-group>
<el-menu-item index="/opsVisualization/alarmProcess"
>业务数据监控</el-menu-item
>
<el-menu-item index="/opsVisualization/serviceDataOAM"
>报警信息记录</el-menu-item
>
</el-menu-item-group>
</el-submenu>
</el-menu>
</div>
</template>
</div>
</template>
<script>
export default {
data() {
return {};
},
watch: {},
computed: {},
mounted() {},
methods: {},
};
</script>
export default {
data() {
return {};
},
watch: {},
computed: {},
mounted() {},
methods: {},
};
</script>
<style lang="scss" scoped>
.page{
position: absolute;
top: 64px;
left: 0;
z-index: 1027;
}
/deep/.el-menu-item-group__title {
padding: 0;
}
.point {
width: 4px;
height: 4px;
background: #fff;
opacity: 0.7;
display: inline-block;
margin: 0 20px 0 30px;
border-radius: 50%;
}
</style>
.page {
position: absolute;
top: 64px;
left: 0;
z-index: 1027;
}
/deep/.el-menu-item-group__title {
padding: 0;
}
.point {
width: 4px;
height: 4px;
background: #fff;
opacity: 0.7;
display: inline-block;
margin: 0 20px 0 30px;
border-radius: 50%;
}
</style>

@ -0,0 +1,423 @@
<template>
<div class="content">
<div class="process">
<div class="title">报警节点示意图</div>
<div class="main">
<div class="process-example">
<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">
<img class="nav_img" src="../../../public/img/process/node1.png">
<div class="node-text">脚本</div>
</div>
<div class="yes-no">
<div class="yes"></div>
<img class="nav_img" src="../../../public/img/process/yes.png">
</div>
<div class="node-img">
<img class="nav_img" src="../../../public/img/process/node2.png">
<div class="node-text">电子围栏服务</div>
</div>
<div class="yes-no">
<div class="yes"></div>
<img class="nav_img" src="../../../public/img/process/yes.png">
</div>
<div class="node-img">
<img class="nav_img" src="../../../public/img/process/node3.png">
<div class="node-text">网关</div>
</div>
<div class="yes-no">
<div class="yes"></div>
<img class="nav_img" src="../../../public/img/process/yes.png">
</div>
<div class="node-img">
<div class="baojing">dtu断联报警</div>
<img class="nav_img" src="../../../public/img/process/node4.png">
<div class="node-text">dtu</div>
</div>
<div class="yes-no">
<div class="no"></div>
<img class="nav_img" src="../../../public/img/process/no.png">
</div>
<div class="node-img">
<img class="nav_img" src="../../../public/img/process/node5.png">
<div class="node-text">电子围栏</div>
</div>
</div>
<div class="process-more">
<div class="button">查看更多报警信息</div>
</div>
</div>
<div class="process-bottom">
<div class="line">
<div class="item">
<div class="item-box">
<div class="time">2024-5-17 08:51:12</div>
<div class="point red"></div>
<div class="name">dtu断联报警</div>
<div class="code">dtu编号SJK001</div>
<div class="btn red-btn">
<img class="img" src="../../../public/img/process/serch.png" alt="">
<div class="text">请检查dtu设备</div>
</div>
</div>
<div class="item-box">
<div class="time">2024-5-17 08:51:13</div>
<div class="point grey"></div>
<div class="name">静默</div>
<div class="code">设备编号SHUIBIAO1</div>
<div class="btn grey-btn">
<img class="img" src="../../../public/img/process/loading.png" alt="">
<div class="text">等待重新链接</div>
</div>
</div>
</div>
<div class="restart">
<div class="restart-title">操作</div>
<div class="restart-btn">一键重启</div>
</div>
</div>
</div>
</div>
</div>
<div class="method">
<div class="title">报警解决方法</div>
<div class="main">
<div class="text-box">
<div class="label">设备位置</div>
<div class="value">
<div class="item">园区2号围栏</div>
</div>
</div>
<div class="text-box">
<div class="label">排查方法</div>
<div class="value">
<div class="item">1.检查电源是否正常重新接入或更换电源</div>
<div class="item">2.检查是否过载重新调整系统负载或更换更高性能的设备</div>
<div class="item">3.检查温度是否过高采取措施降低温度如改变工作环境或更换散热设备</div>
<div class="item">4.检查是否受到电磁干扰采取措施降低干扰如改变工作环境或更换屏蔽设备</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
export default {
data() {
return {
}
},
created() {
},
mounted() {
},
methods: {
}
}
</script>
<style lang="scss" scoped>
.content{
padding: 20px !important;
.process{
width: calc(100% - 218px);
margin-left: 218px;
height: 584px;
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;
}
.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{
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;
.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>

@ -0,0 +1,874 @@
<template>
<el-row>
<el-col :span="3">
<div class="box">
<el-row class="tac">
<el-col :span="12" style="width: 100%">
<el-menu
default-active="2"
class="el-menu-vertical-demo"
@open="handleOpen"
@close="handleClose"
background-color="#545c64"
text-color="#fff"
active-text-color="#ffd04b"
>
<el-submenu index="1">
<template slot="title">
<i class="el-icon-location"></i>
<span>系统监控</span>
</template>
<el-menu-item-group>
<el-menu-item index="1-1">选项1</el-menu-item>
<el-menu-item index="1-2">选项2</el-menu-item>
</el-menu-item-group>
</el-submenu>
<el-submenu index="2">
<template slot="title">
<i class="el-icon-location"></i>
<span>业务数据运维</span>
</template>
<el-menu-item-group>
<el-menu-item index="2-1">选项1</el-menu-item>
<el-menu-item index="2-2">选项2</el-menu-item>
</el-menu-item-group>
</el-submenu>
</el-menu>
</el-col>
</el-row>
</div>
</el-col>
<el-col :span="21">
<div style="width: 100%; height: 92vh; background-color: gray"></div>
</el-col>
</el-row>
</template>
<script>
import {
getList,
getDeptLazyTree,
getDeptLazyTree2,
remove,
add,
getDetails,
getQy,
getLc,
getQy1,
getLc1,
saveImg,
getDetail,
} from "@/api/equipment/index";
import { mapGetters } from "vuex";
import website from "@/config/website";
import { getToken } from "@/util/auth";
export default {
data() {
return {
options: [],
iDisabled: true,
eqiupType: "", //
build: [], //
floored: [], //
props: {
value: "key",
label: "title",
emitPath: false,
// lazy: true,
// lazyLoad(node, resolve) {
// console.log(node)
// const parentId = (node.level === 0) ? 0 : node.data.id;
// getDeptLazyTree(parentId).then(res => {
// console.log(res)
// resolve(res.data.data.map(item => {
// return {
// ...item,
// leaf: !item.hasChildren
// }
// }))
// });
// }
},
ruleForm: {
classCode: null, //
//
warnVO: {
warnLevel: null, //
notifier: null, //
},
//
electricConfig: {
ip: null, //ip
port: null, //
offsetData: null, //
offsetStatus: null, //
},
lightConfigPowerVO: {
mac: null, //
addr: null, //线
},
thirdId: null, //id
area: null, //
build: null, //
floored: null, //
//
code: null, //
name: null, //
shortName: null, //
brand: null, //
useStartTime: null, //使
location: null, //
tendingUser: null,
tendingPhone: null,
tendingTime: null,
},
rules: {
warnVO: {
warnLevel: [
{
required: true,
message: "请选择报警级别",
trigger: "change",
},
],
notifier: [
{
required: true,
message: "请选择通知人",
trigger: "change",
},
],
},
electricConfig: {
ip: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
port: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
offsetData: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
offsetStatus: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
},
// mqttdkh: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// dyzt: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// fbzt: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// appkey: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// secret: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
thirdId: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
lightConfigPowerVO: {
mac: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
addr: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
},
// ywqipdz: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// ttipdz: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// httpdkh: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// websocketdkh: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
area: [
{
required: true,
message: "请选择模型",
trigger: "change",
},
],
// sb: [{
// required: true,
// message: '',
// trigger: 'change'
// }],
// sb2: [{
// required: true,
// message: '',
// trigger: 'change'
// }],
build: [
{
required: true,
message: "请选择区域",
trigger: "change",
},
],
floored: [
{
required: true,
message: "请选择楼层",
trigger: "change",
},
],
code: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
name: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
shortName: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
brand: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
useStartTime: [
{
type: "string",
required: true,
message: "请选择日期",
trigger: "change",
},
],
location: [
{
required: true,
message: "请输入内容",
trigger: "blur",
},
],
// tendingUser: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// tendingPhone: [{
// required: true,
// message: '',
// trigger: 'blur'
// }],
// tendingTime: [{
// required: true,
// message: '',
// trigger: 'change'
// }],
},
equipmentBox: false,
equipmentTit: "新增设备",
form: {},
search: {},
excelBox: false,
selectionList: [],
query: {},
loading: true,
page: {
pageSize: 10,
currentPage: 1,
total: 0,
},
treeDeptId: this.$route.query.classCode
? this.$route.query.classCode
: "",
treeData: [],
treeOption: {
nodeKey: "id",
lazy: true,
treeLoad: function (node, resolve) {
const parentId = node.level === 0 ? 0 : node.data.id;
getDeptLazyTree(parentId).then((res) => {
resolve(
res.data.data.map((item) => {
return {
...item,
leaf: !item.hasChildren,
};
})
);
});
},
addBtn: false,
menu: false,
size: "small",
props: {
labelText: "标题",
label: "title",
value: "value",
children: "children",
},
},
option: {
addBtn: false,
editBtn: false,
delBtn: false,
// height: 'auto',
// calcHeight: 80,
tip: false,
searchShow: true,
searchMenuSpan: 6,
border: true,
index: true,
selection: true,
viewBtn: false,
//dialogType: 'drawer',
dialogClickModal: false,
column: [
{
label: "设备种类",
prop: "className",
},
{
label: "设备名称",
prop: "name",
search: true,
},
{
label: "设备编号",
prop: "code",
},
{
label: "生产厂家",
prop: "brand",
},
{
label: "设备位置",
prop: "location",
search: true,
},
{
label: "状态",
prop: "statusName",
},
{
label: "投入使用时间",
prop: "useStartTime",
},
{
label: "固定资产编号",
prop: "inventarNummer",
},
{
label: "更新时间",
prop: "updateTime",
},
],
},
data: [],
excelForm: {},
excelOption: {
submitBtn: false,
emptyBtn: false,
column: [
{
label: "模板上传",
prop: "excelFile",
type: "upload",
drag: true,
loadText: "模板上传中,请稍等",
span: 24,
propsHttp: {
res: "data",
},
tip: "请上传 .xls,.xlsx 标准格式文件",
action: "/api/blade-user/import-user",
},
{
label: "数据覆盖",
prop: "isCovered",
type: "switch",
align: "center",
width: 80,
dicData: [
{
label: "否",
value: 0,
},
{
label: "是",
value: 1,
},
],
value: 0,
slot: true,
rules: [
{
required: true,
message: "请选择是否覆盖",
trigger: "blur",
},
],
},
{
label: "模板下载",
prop: "excelTemplate",
formslot: true,
span: 24,
},
],
},
imgList: [],
fileList: [],
};
},
watch: {},
computed: {
//
ids() {
let ids = [];
this.selectionList.forEach((ele) => {
ids.push(ele.id);
});
return ids.join(",");
},
equipmentType() {
if (this.ruleForm.classCode) {
return this.ruleForm.classCode.slice(0, 2);
}
return null;
},
},
mounted() {
if (this.$route.query.code) {
getDetail({ equipCode: this.$route.query.code }).then((res) => {
console.log(res);
this.ruleForm = res.data.data;
this.equipmentBox = true;
this.eqiupType = "look";
this.equipmentTit = "查看设备";
});
}
getDeptLazyTree2().then((res) => {
let data = res.data.data;
for (let i = 0; i < data.length; i++) {
data[i].key = data[i].key.length < 4 ? "0" + data[i].key : data[i].key;
if (data[i].hasChildren) {
for (let a = 0; a < data[i].children.length; a++) {
data[i].children[a].key =
data[i].children[a].key.length < 4
? "0" + data[i].children[a].key
: data[i].children[a].key;
}
}
}
this.options = data;
});
},
methods: {
//
nodeClick(data) {
this.treeDeptId = data.key;
this.page.currentPage = 1;
this.onLoad(this.page);
},
//
searchReset() {
this.query = {};
this.treeDeptId = "";
this.onLoad(this.page);
},
//
searchChange(params, done) {
this.query = params;
this.page.currentPage = 1;
this.onLoad(this.page, params);
done();
},
//
selectionChange(list) {
this.selectionList = list;
},
//
selectionClear() {
this.selectionList = [];
this.$refs.crud.toggleSelection();
},
//
handleSuccess(response, file, fileList) {
console.log(response);
if (response.code == 200) {
this.imgList.push(response.data.link);
}
console.log(this.imgList);
},
beforeRemove(file, fileList) {
if (this.eqiupType == "look") {
return false;
}
},
handleRemove(file, fileList) {
console.log(file);
if (file.response) {
this.imgList = this.imgList.filter(
(item) => item !== file.response.data.link
);
} else {
this.imgList = this.imgList.filter(
(item) => item !== file.url.slice(file.url)
);
}
console.log(this.imgList);
},
//
handleDelete() {
if (this.selectionList.length === 0) {
this.$message.warning("请选择至少一条数据");
return;
}
this.$confirm("确定将选择数据删除?", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
return remove(this.ids);
})
.then(() => {
this.onLoad(this.page);
this.$message({
type: "success",
message: "操作成功!",
});
this.$refs.crud.toggleSelection();
});
},
//
handleImport() {
this.excelBox = true;
},
// ,function(res,done)doneloading
uploadAfter(res, done, loading, column) {
window.console.log(column);
this.excelBox = false;
this.refreshChange();
done();
},
//
// handleExport() {
// this.$confirm("?", "", {
// confirmButtonText: "",
// cancelButtonText: "",
// type: "warning"
// }).then(() => {
// window.open(
// `/api/blade-user/export-user?${this.website.tokenHeader}=${getToken()}&account=${this.search.account}&realName=${this.search.realName}`
// );
// });
// },
//
handleTemplate() {
window.open(
`/api/blade-user/export-template?${
this.website.tokenHeader
}=${getToken()}`
);
},
//
currentChange(currentPage) {
this.page.currentPage = currentPage;
},
// pageSize
sizeChange(pageSize) {
this.page.pageSize = pageSize;
},
//
refreshChange() {
this.onLoad(this.page, this.query);
},
//
onLoad(page, params = {}) {
this.loading = true;
console.log(this.treeDeptId);
getList(
page.currentPage,
page.pageSize,
Object.assign(params, this.query),
this.treeDeptId
).then((res) => {
const data = res.data.data;
this.page.total = data.total;
this.data = data.records;
this.loading = false;
this.selectionClear();
});
},
//
handleAdd(type, row) {
this.equipmentBox = true;
this.iDisabled = false;
this.eqiupType = type;
this.imgList = [];
this.fileList = [];
if (type == "add") {
//
this.equipmentTit = "新增设备";
} else if (type == "edit") {
//
this.equipmentTit = "编辑设备";
getDetails(row.id).then((res) => {
this.ruleForm = res.data.data;
console.log("data", this.ruleForm);
this.ruleForm.images.map((item) => {
this.fileList.push({ url: item.filePath });
this.imgList.push(item.filePath);
});
console.log("设备编辑", this.ruleForm);
getQy1(this.ruleForm.area).then((res) => {
this.build = res.data.data;
});
// getLc(this.ruleForm.area).then(res => {
// this.floored = res.data.data;
// });
});
} else {
this.iDisabled = true;
//
this.equipmentTit = "查看设备";
getDetails(row.id).then((res) => {
this.ruleForm = res.data.data;
this.ruleForm.images.map((item) => {
this.fileList.push({ url: item.filePath });
this.imgList.push(item.filePath);
});
getQy1(this.ruleForm.area).then((res) => {
this.build = res.data.data;
});
// getLc(this.ruleForm.area).then(res => {
// this.floored = res.data.data;
// });
});
}
},
chooseFloor(e) {
getLc1(Number(e)).then((res) => {
this.ruleForm.floored = null;
this.floored = res.data.data;
});
},
//
submitForm(formName) {
if (!this.ruleForm.classCode) {
this.$message({
message: "请选择设备类型",
type: "warning",
});
return;
}
if (!this.iDisabled) {
this.$refs[formName].validate((valid) => {
if (valid) {
// let data = []
// if(this.imgList.length !== 0){
// this.imgList.map(item =>{
// data.push({
// equipCode:this.ruleForm.code,
// filePath:item
// })
// })
// }
console.log(this.imgList);
let data = {
equipCode: this.ruleForm.code,
filepaths: this.imgList.join(","),
};
console.log(data);
saveImg(data).then((res) => {
if (res.data.code == 200) {
add(this.ruleForm).then((res) => {
this.resetForm("ruleForm");
this.page.currentPage = 1;
this.onLoad(this.page);
});
}
});
// }else{
// add(this.ruleForm).then(res => {
// this.resetForm('ruleForm');
// this.page.currentPage = 1;
// this.onLoad(this.page);
// });
// }
} else {
return false;
}
});
} else {
this.resetForm("ruleForm");
}
},
//
resetForm(formName) {
this.ruleForm = {
classCode: null, //
//
warnVO: {
warnLevel: null, //
notifier: null, //
},
//
electricConfig: {
ip: null, //ip
port: null, //
offsetData: null, //
offsetStatus: null, //
},
lightConfigPowerVO: {
mac: null, //
addr: null, //线
},
thirdId: null, //id
area: null, //
build: null, //
floored: null, //
//
code: null, //
name: null, //
shortName: null, //
brand: null, //
useStartTime: null, //使
location: null, //
};
this.equipmentBox = false;
this.equipmentTit = "新增设备";
this.$refs[formName].resetFields();
this.$refs.cascaderClassroom.$refs.panel.clearCheckedNodes();
this.$refs.cascaderClassroom.$refs.panel.activePath = [];
this.equipmentType = null;
},
//
addModel(val) {
// console.log(row)
this.$router.replace({
path: "/equipment/model",
query: {
row: val,
},
}); // name
},
//
mxChange(val) {
this.ruleForm.build = null;
this.ruleForm.floored = null;
getQy1(this.ruleForm.area).then((res) => {
// console.log(res)
this.build = res.data.data;
});
// getLc(this.ruleForm.area).then(res => {
// console.log(res)
// this.floored = res.data.data;
// });
},
},
};
</script>
<style lang="scss" scoped>
.box {
height: 800px;
}
.el-scrollbar {
height: 100%;
}
.box .el-scrollbar__wrap {
overflow: scroll;
}
.floor {
.title {
font-size: 18px;
color: #303133;
padding-bottom: 5px;
border-bottom: 2px solid #e5e5e5;
margin: 0 0 20px 0;
}
}
.btn {
margin-top: 50px;
}
/deep/.el-input {
width: 220px;
}
.hide {
/deep/ .el-upload--picture-card {
display: none;
}
}
</style>

@ -0,0 +1,66 @@
<template>
<div class="unit">
<!-- <img :class="img == 'jiedian_red' ? 'fuwuyigua' : 'jiedianyigua'" src="../../../public/img/tuobu/fuwuyigua.png" alt=""> -->
<img class="img" :src="require(`../../../public/img/tuobu/${img}.png`)" alt="">
<div class="text" :style="`left: ${left}px; top: ${top}px`">{{ text }}</div>
</div>
</template>
<script>
export default {
data() {
return {
}
},
props: {
img: {
type: String,
},
text: {
type: String
},
left: {
type: String
},
top: {
type: String
}
},
created() {},
mounted() {
console.log('img', this.img, this.left, this.top)
},
computed: {
},
methods: {
}
};
</script>
<style lang="scss" scoped>
.unit{
position: relative;
width: 100px;
.img{
cursor: pointer;
}
.text{
width: 120px;
position: absolute;
transform: skewY(-25deg);
}
.fuwuyigua{
position: absolute;
top: -60px;
left: -10px;
}
.jiedianyigua{
position: absolute;
top: -60px;
left: -25px;
}
}
</style>

@ -0,0 +1,50 @@
<template>
<div class="unit">
<img class="img" :src="require(`../../../public/img/tuobu/${img}.png`)" alt="">
<div class="text">{{ text }}</div>
</div>
</template>
<script>
export default {
data() {
return {
}
},
props: {
img: {
type: String,
},
text: {
type: String
},
},
created() {},
mounted() {
console.log('img', this.img)
},
computed: {
},
methods: {
}
};
</script>
<style lang="scss" scoped>
.unit{
position: relative;
width: 100px;
.img{
}
.text{
width: 20px;
position: absolute;
top: 20px;
right: 0px;
}
}
</style>

@ -1,8 +1,8 @@
<template>
<el-row>
<el-row style="margin-top: 10px; height: 98%">
<el-col :span="3"> </el-col>
<el-col :span="21">
<basic-container>
<el-col :span="21" style="height: 100%">
<basic-container style="height: 100%">
<avue-crud
:option="option"
:table-loading="loading"
@ -31,15 +31,6 @@
<el-option label="塔台" value="2"></el-option>
</el-select>
</template>
<template slot-scope="scope" slot="startDateSearch">
<el-input
v-model="startDate"
placeholder=""
value-format="yyyy-MM-dd"
format="yyyy-MM-dd"
>
</el-input>
</template>
<!-- <template slot-scope="scope" slot="startDateSearch">
<el-date-picker
v-model="startDate"
@ -62,56 +53,18 @@
</template> -->
</avue-crud>
<div class="box">
<div>
<div class="box_nav">
<span class="box_tab" style="margin-right: 50px">报警详情信息</span>
<span class="box_tab" style="color: #2b8ee5">报警信息记录</span>
</div>
<el-select placeholder="按报警时间查询" class="box_select">
</el-select>
<div class="timelineBox">
<div>
<div class="timelineBoxTitle">dtu报警信息记录</div>
<div class="timelineBoxContent">
<div
v-for="(item, index) in myList"
:key="item.time"
style="display: flex; align-items: center; line-height: 50px"
>
{{ item.time }}
<div
style="
width: 40px;
display: flex;
align-items: center;
justify-content: center;
position: relative;
"
>
<div
style="
width: 10px;
height: 10px;
border-radius: 50%;
background: #e1e1e1;
"
></div>
<div
v-if="index < myList.length - 1"
style="
border-right: 1px dashed #d1d1d1;
height: 45px;
position: absolute;
left: 19px;
top: 9px;
"
></div>
</div>
{{ item.content }}dtu编号:{{ item.id }}
</div>
<div style="width: 100%">
<div class="timelineBoxTitle">
<span>设备报警信息详情</span>
<span>更多</span>
</div>
</div>
<div>
<div class="timelineBoxTitle">设备报警信息详情</div>
<div class="timelineBoxContent">
<div
v-for="(item, index) in myList"
@ -170,32 +123,37 @@
height: 30px;
margin-top: 20px;
}
.box_nav{
>span{
cursor: pointer;
}
}
.timelineBox {
margin-top: 30px;
width: 100%;
height: 19vh;
height: 24vh;
display: flex;
justify-content: space-around;
border: 1px solid #d1d1d1;
> div {
width: 50%;
}
> :nth-child(1) {
border-right: 1px solid #d1d1d1;
}
}
.timelineBoxTitle {
text-align: center;
height: 40px;
line-height: 40px;
background: #e5e5e5;
display: flex;
justify-content: space-between;
padding: 0 30px 0 24px;
> span {
cursor: pointer;
}
}
.timelineBoxContent {
display: flex;
flex-direction: column;
align-items: center;
overflow: auto;
height: 132px;
height: 170px;
padding: 10px 0 0 53px;
}
/deep/ .basic-container__card {
height: 100%;
}
</style>
<script>
@ -306,7 +264,7 @@ export default {
loading: false,
parentId: 0,
page: {
pageSize: 6,
pageSize: 5,
currentPage: 1,
total: 0,
},
@ -326,15 +284,22 @@ export default {
addBtn: false,
delBtn: false,
editBtn: false,
emptyBtn: false,
column: [
{
label: "通讯状态",
prop: "equipName",
align: "center",
search: true,
type: "select",
dicData: DIC.alarmType,
},
{
label: "业务类别",
prop: "location",
search: true,
type: "select",
dicData: DIC.alarmType,
align: "center",
},
{
@ -343,30 +308,43 @@ export default {
align: "center",
},
{
label: "业务类型",
prop: "warnType",
search: true,
type: "select",
dicData: DIC.alarmType,
label: "dtu编号",
prop: "warnContent",
align: "center",
},
{
label: "状态",
prop: "warnType",
label: "设备编号",
prop: "warnContent",
align: "center",
search: true,
type: "select",
type: "input",
dicData: DIC.alarmType,
align: "center",
},
{
label: "报警状态",
prop: "status",
type: "select",
dicData: DIC.statusType,
align: "center",
},
// {
// label: "",
// prop: "warnType",
// search: true,
// type: "select",
// dicData: DIC.alarmType,
// align: "center",
// },
// {
// label: "",
// prop: "warnType",
// search: true,
// type: "select",
// dicData: DIC.alarmType,
// align: "center",
// },
// {
// label: "",
// prop: "status",
// type: "select",
// dicData: DIC.statusType,
// align: "center",
// },
{
label: "报警时间",
label: "设备位置",
prop: "warnDate",
type: "datetime",
width: "140",
@ -374,17 +352,6 @@ export default {
// valueFormat:'yyyy-MM-dd',
align: "center",
},
{
label: "",
prop: "startDate",
align: "center",
searchslot: true,
hide: true,
search: true,
row: false,
display: false,
viewDisplay: false,
},
// {
// label: "",
// prop: "endDate",
@ -397,19 +364,25 @@ export default {
// viewDisplay:false
// },
{
label: "恢复方式",
label: "dtu报警信息",
prop: "recoveryType",
dicData: DIC.recoveryType,
type: "select",
align: "center",
},
{
label: "恢复人",
label: "报警时间",
prop: "recoveryPerson",
align: "center",
},
{
label: "恢复时间",
label: "设备报警信息",
prop: "recoveryDate",
type: "datetime",
align: "center",
},
{
label: "报警时间",
prop: "recoveryDate",
type: "datetime",
align: "center",

Binary file not shown.

After

Width:  |  Height:  |  Size: 369 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 665 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 585 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 684 B

@ -0,0 +1,286 @@
<template>
<div class="page">
<div class="search_box">
<el-select class="search_select" placeholder="按服务类别查询">
</el-select>
<el-input class="search_input" />
<el-button class="search_button">
<i class="el-icon-search"></i>
</el-button>
</div>
<div class="content_box1">
<div class="content_title">
<img src="./icon/icon1.png" alt="" />
应用服务
</div>
<div class="flexBox">
<div
v-for="item in list"
:key="item.value"
class="itemBox"
:style="{
borderColor: item.state ? '#dcdcdc' : '#e14b33',
background: item.state ? '' : '#FFF2F2 ',
}"
>
<div
class="item_title"
:style="{ color: item.state ? '' : '#E14B33 ' }"
>
权限服务
</div>
<div
class="item_EnTitle"
:style="{ color: item.state ? '#999999' : '#E14B33 ' }"
>
AuthApplication
</div>
<div
class="color_block"
:style="{ background: item.state ? '#4fd069' : '#e14b33' }"
></div>
<div class="item_bottom">
<div>状态</div>
<div :style="{ color: item.state ? '#26B843' : '#E14B33' }">
{{ item.state ? "正常" : "服务已挂" }}
</div>
</div>
</div>
</div>
</div>
<div class="content_box2" style="margin-top: 30px; display: flex">
<div
class="itemBox"
style="width: 240px; height: 216px; position: relative"
>
<div
class="item_title content_title"
style="position: absolute; left: 20px"
>
<img src="./icon/icon2.png" alt="" />
Redis服务监控
</div>
<div
style="
width: 76px;
height: 76px;
background: #4fd069;
margin: 92px 0 14px 0;
"
></div>
<div class="item_bottom">
<div>状态</div>
<div>正常</div>
</div>
</div>
<div
class="itemBox"
style="
width: 240px;
height: 216px;
margin-left: 27px;
position: relative;
"
>
<div
class="item_title content_title"
style="position: absolute; left: 20px"
>
<img src="./icon/icon3.png" alt="" />
数据库监控
</div>
<div
style="
width: 76px;
height: 76px;
background: #4fd069;
margin: 92px 0 14px 0;
"
></div>
<div class="item_bottom">
<div>状态</div>
<div>正常</div>
</div>
</div>
<div class="content_box3">
<div
class="item_title content_title"
style="height: 0; width: 100%; margin-bottom: 20px"
>
<img src="./icon/icon4.png" alt="" />
系统硬件监控
</div>
<div style="display: flex; max-width: 1280px">
<div v-for="item in list2" :key="item.value" class="itemBox3">
<div class="item_title">权限服务</div>
<div class="item_EnTitle">AuthApplication</div>
<div
style="
width: 57px;
height: 76px;
background: #e8e8e8;
margin: 20px 0 14px 0;
position: relative;
"
>
<div
style="
background: green;
width: 100%;
height: 33%;
position: absolute;
bottom: 0;
"
></div>
</div>
<div class="item_bottom">
<div>状态</div>
<div>正常</div>
</div>
</div>
</div>
</div>
</div>
</div>
</template>
<script>
import { color } from "echarts";
export default {
data() {
return {
list: [
{ name: "应用服务", value: 1, state: 1 },
{ name: "应用服务", value: 2, state: 1 },
{ name: "应用服务", value: 3, state: 0 },
{ name: "应用服务", value: 4, state: 1 },
{ name: "应用服务", value: 5, state: 1 },
{ name: "应用服务", value: 6, state: 1 },
{ name: "应用服务", value: 7, state: 1 },
{ name: "应用服务", value: 8, state: 1 },
{ name: "应用服务", value: 9, state: 1 },
{ name: "应用服务", value: 10, state: 0 },
{ name: "应用服务", value: 11, state: 1 },
{ name: "应用服务", value: 12, state: 1 },
],
list2: [
{ name: "应用服务", value: 1, state: 1 },
{ name: "应用服务", value: 2, state: 1 },
{ name: "应用服务", value: 3, state: 1 },
{ name: "应用服务", value: 4, state: 1 },
{ name: "应用服务", value: 5, state: 1 },
],
};
},
watch: {},
computed: {},
mounted() {},
methods: {},
};
</script>
<style lang="scss" scoped>
.page {
padding: 30px 20px;
}
.search_box {
display: flex;
margin-bottom: 30px;
.search_select {
// width: 138px;
height: 40px;
}
.search_input {
width: 238px;
height: 40px;
margin: 0 14px;
}
/deep/.el-input__inner {
border-radius: 0;
}
.search_button {
width: 50px;
height: 40px;
border-radius: 0;
display: flex;
justify-content: center;
align-items: center;
.el-icon-search {
font-size: 19px;
color: #c9c9c9;
}
}
}
.content_box1 {
border: 1px solid #dcdcdc;
height: 520px;
padding: 20px 0 0 20px;
}
.content_box3 {
padding: 20px;
flex: 1;
height: 178px;
border: 1px solid #dcdcdc;
}
.content_title {
font-size: 20px;
font-weight: bold;
display: flex;
align-items: center;
> img {
margin-right: 13px;
}
}
.flexBox {
display: flex;
margin-top: 20px;
flex-wrap: wrap;
}
.itemBox {
width: 200px;
height: 212px;
border: 1px solid #dcdcdc;
margin: 0 20px 30px 0;
display: flex;
flex-direction: column;
align-items: center;
cursor: pointer;
.color_block {
width: 76px;
height: 76px;
margin: 20px 0 14px 0;
}
}
.itemBox3 {
width: 210px;
height: 154px;
border: 1px solid #dcdcdc;
margin: 0 20px 30px 0;
display: flex;
flex-direction: column;
align-items: center;
}
.item_title {
font-weight: bold;
margin: 20px 0 2px 0;
}
.item_EnTitle {
font-size: 14px;
}
.item_bottom {
width: 100%;
display: flex;
justify-content: space-between;
> :nth-child(1) {
margin-left: 20px;
font-size: 12px;
color: #333333;
}
> :nth-child(2) {
margin-right: 20px;
font-size: 12px;
color: #26b843;
}
}
</style>

@ -0,0 +1,396 @@
<template>
<div class="content">
<!-- 第一个 -->
<serverUnit class="server_1" :img="'server_img'" :text="'应用服务器'"></serverUnit>
<!-- 左边 -->
<img class="server_1_top_left" src="../../../public/img/tuobu/server_1_top_left.png" alt="">
<div class="top_left_jiedian_box">
<jiedian class="jiedian jiedian_1" :img="'jiedian_blue'" :text="'定时任务服务'" :left="'-15'" :top="'35'"></jiedian>
<jiedian class="jiedian jiedian_2" :img="'jiedian_blue'" :text="'系统服务'" :left="'0'" :top="'35'"></jiedian>
<jiedian class="jiedian jiedian_3" :img="'jiedian_blue'" :text="'websocke服务'" :left="'-15'" :top="'35'"></jiedian>
<jiedian class="jiedian jiedian_4" :img="'jiedian_blue'" :text="'门禁服务'" :left="'0'" :top="'35'"></jiedian>
<jiedian class="jiedian jiedian_5" :img="'jiedian_blue'" :text="'xxljob服务'" :left="'-5'" :top="'35'"></jiedian>
<jiedian class="jiedian jiedian_6" :img="'jiedian_blue'" :text="'用户服务'" :left="'0'" :top="'35'"></jiedian>
<jiedian class="jiedian jiedian_7" :img="'jiedian_blue'" :text="'权限服务'" :left="'0'" :top="'35'"></jiedian>
<jiedian class="jiedian jiedian_8" :img="'jiedian_blue'" :text="'网关服务'" :left="'0'" :top="'35'"></jiedian>
<jiedian class="jiedian jiedian_9" :img="'jiedian_blue'" :text="'应用服务'" :left="'0'" :top="'35'"></jiedian>
</div>
<img class="server_1_top_right" src="../../../public/img/tuobu/server_1_top_right.png" alt="">
<img class="server_1_center_left" src="../../../public/img/tuobu/server_1_center_left.png" alt="">
<img class="server_1_center_center" src="../../../public/img/tuobu/server_1_center_center.png" alt="">
<img class="server_1_center_right" src="../../../public/img/tuobu/server_1_center_right.png" alt="">
<div class="center_jiedian_box">
<jiedian class="jiedian jiedian_1" :img="'jiedian_blue'" :text="'mqtt服务'" :left="'-33'"></jiedian>
<jiedian class="jiedian jiedian_2" :img="'jiedian_blue'" :text="'http服务'" :left="'-30'"></jiedian>
<jiedian class="jiedian jiedian_3" :img="'jiedian_blue'" :text="'modebus服务'" :left="'-30'"></jiedian>
</div>
<img class="server_1_bottom_center_left" src="../../../public/img/tuobu/server_1_bottom_center.png" alt="">
<div class="bottom_jiedian_box_1">
<jiedian class="jiedian jiedian_1" :img="'dut_img'" :text="'dut'" :left="'5'" :top="'20'"></jiedian>
</div>
<img class="server_1_bottom_left" src="../../../public/img/tuobu/server_1_bottom_left.png" alt="">
<img class="server_1_bottom_item_1" src="../../../public/img/tuobu/server_1_bottom_item.png" alt="">
<img class="server_1_bottom_item_2" src="../../../public/img/tuobu/server_1_bottom_item.png" alt="">
<img class="server_1_bottom_item_3" src="../../../public/img/tuobu/server_1_bottom_item.png" alt="">
<img class="server_1_bottom_item_4" src="../../../public/img/tuobu/server_1_bottom_item.png" alt="">
<div class="bottom_left_jiedian_box">
<jiedian class="jiedian jiedian_4" :img="'dianti_img'" :text="'电梯'" :left="'15'" :top="'110'"></jiedian>
<jiedian class="jiedian jiedian_3" :img="'xiaofang_img'" :text="'消防'" :left="'10'" :top="'75'"></jiedian>
<jiedian class="jiedian jiedian_2" :img="'nuanbiao_img'" :text="'暖表'" :left="'18'" :top="'40'"></jiedian>
<jiedian class="jiedian jiedian_1" :img="'shuibiao_img'" :text="'水表'" :left="'15'" :top="'40'"></jiedian>
</div>
<img class="server_1_bottom_center_4" src="../../../public/img/tuobu/server_1_bottom_center_4.png" alt="">
<img class="server_1_bottom_center_1" src="../../../public/img/tuobu/server_1_bottom_center_1.png" alt="">
<img class="server_1_bottom_center_2" src="../../../public/img/tuobu/server_1_bottom_center_2.png" alt="">
<img class="server_1_bottom_center_3" src="../../../public/img/tuobu/server_1_bottom_center_3.png" alt="">
<jiedian class="jiedian jiedian_haikang" :img="'haikang_img'" :text="'海康接口'" :left="'-15'" :top="'40'"></jiedian>
<jiedian class="jiedian jiedian_kongkai" :img="'kongkai_img'" :text="'空开'" :left="'5'" :top="'40'"></jiedian>
<jiedian class="jiedian jiedian_shexiangtou" :img="'shexiangtou_img'" :text="'摄像头'" :left="'5'" :top="'30'"></jiedian>
<img class="server_1_bottom_center_left_right" src="../../../public/img/tuobu/server_1_bottom_center.png" alt="">
<jiedian class="jiedian jiedian_wangguan" :img="'wangguan_img'" :text="'网关'" :left="'-15'" :top="'30'"></jiedian>
<img class="server_1_right_center" src="../../../public/img/tuobu/server_1_right_center.png" alt="">
<img class="server_1_right_center_left" src="../../../public/img/tuobu/server_1_right_center_left.png" alt="">
<img class="server_1_right_center_right" src="../../../public/img/tuobu/server_1_right_center_right.png" alt="">
<jiedian class="jiedian jiedian_kongtiao" :img="'kongtiao_img'" :text="'空调面板'" :left="'-10'" :top="'60'"></jiedian>
<jiedian class="jiedian jiedian_dianbiao" :img="'dianbiao_img'" :text="'电表'" :left="'5'" :top="'60'"></jiedian>
<!-- 第二个 -->
<serverUnit class="server_2" :img="'server_img'" :text="'应用服务器'"></serverUnit>
<img class="server_2_top_right" src="../../../public/img/tuobu/server_1_top_right.png" alt="">
<jiedian class="jiedian jiedian_weilan" :img="'jiedian_blue'" :text="'电子围栏服务'" :left="'-33'"></jiedian>
<img class="server_2_center" src="../../../public/img/tuobu/server_1_right_center.png" alt="">
<jiedian class="jiedian jiedian_dianziweilan" :img="'weilan_img'" :text="'电子围栏'" :left="'5'" :top="'130'"></jiedian>
<!-- 第三个 -->
<serverUnit class="server_3" :img="'server_img'" :text="'应用服务器'"></serverUnit>
<img class="server_3_top_right" src="../../../public/img/tuobu/server_1_top_right.png" alt="">
<jiedian class="jiedian jiedian_loukong" :img="'jiedian_blue'" :text="'楼空服务'" :left="'-33'"></jiedian>
<img class="server_3_center" src="../../../public/img/tuobu/server_1_right_center.png" alt="">
<img class="server_3_center_left" src="../../../public/img/tuobu/server_1_right_center_left.png" alt="">
<img class="server_3_center_right" src="../../../public/img/tuobu/server_1_right_center_right.png" alt="">
<jiedian class="jiedian jiedian_kongtiao_2" :img="'kongtiao_2_img'" :text="'空调'" :left="'5'" :top="'60'"></jiedian>
<jiedian class="jiedian jiedian_zhaoming" :img="'zhaoming_img'" :text="'照明'" :left="'35'" :top="'30'"></jiedian>
<!-- 第四个 -->
<serverUnit class="server_4" :img="'server_img'" :text="'应用服务器'"></serverUnit>
<img class="server_4_top_right" src="../../../public/img/tuobu/server_1_top_right.png" alt="">
<div class="right_jiedian_box">
<jiedian class="jiedian jiedian_1" :img="'jiedian_blue'" :text="'resdis服务监控'" :left="'0'" :top="'40'"></jiedian>
<jiedian class="jiedian jiedian_2" :img="'jiedian_blue'" :text="'数据库监控'" :left="'10'" :top="'40'"></jiedian>
</div>
</div>
</template>
<script>
import serverUnit from "./serverUnit.vue"
import jiedian from "./jiedian.vue"
export default {
data() {
return {
}
},
components: {
serverUnit,
jiedian
},
}
</script>
<style lang="scss" scoped>
.content{
padding: 20px !important;
width: calc(100% - 218px);
margin-left: 218px;
position: relative;
.server_1{
position: absolute;
left: 400px;
}
.server_1_top_left{
position: absolute;
left: 350px;
top: 150px;
}
.top_left_jiedian_box{
position: relative;
top: 230px;
left: 0px;
display: flex;
flex-wrap: wrap;
width: 300px;
.jiedian{
height: 80px;
// cursor: pointer;
}
.jiedian_2{
top: -55px;
}
.jiedian_3{
top: -110px;
}
.jiedian_4{
left: 55px;
}
.jiedian_5{
left: 55px;
top: -55px;
}
.jiedian_6{
left: 55px;
top: -110px;
}
.jiedian_7{
left: 110px;
}
.jiedian_8{
left: 110px;
top: -55px;
}
.jiedian_9{
left: 110px;
top: -110px;
}
}
.server_1_top_right{
position: absolute;
left: 450px;
top: 135px;
}
.center_jiedian_box{
position: absolute;
left: 440px;
top: 345px;
display: flex;
.jiedian_2{
top: -55px;
left: 5px;
}
.jiedian_3{
top: -110px;
}
}
.server_1_center_left{
position: absolute;
left: 427px;
top: 290px;
}
.server_1_center_center{
position: absolute;
left: 538px;
top: 292px;
}
.server_1_center_right{
position: absolute;
left: 533px;
top: 238px;
}
.server_1_bottom_center_left{
position: absolute;
left: 470px;
top: 388px;
}
.bottom_jiedian_box_1{
position: absolute;
top: 460px;
left: 490px;
}
.server_1_bottom_left{
position: absolute;
top: 480px;
left: 220px;
}
.server_1_bottom_item_1{
position: absolute;
top: 515px;
left: 405px;
}
.server_1_bottom_item_2{
position: absolute;
top: 546px;
left: 346px;
}
.server_1_bottom_item_3{
position: absolute;
top: 577px;
left: 287px;
}
.server_1_bottom_item_4{
position: absolute;
top: 614px;
left: 220px;
}
.bottom_left_jiedian_box{
position: absolute;
top: 530px;
left: 140px;
display: flex;
.jiedian_2{
top: 30px;
left: 35px;
}
.jiedian_3{
top: 63px;
left: 80px;
}
.jiedian_4{
top: 95px;
left: 100px;
}
}
.server_1_bottom_center_4{
position: absolute;
top: 333px;
left: 576px;
}
.server_1_bottom_center_1{
position: absolute;
top: 419px;
left: 576px;
}
.server_1_bottom_center_2{
position: absolute;
top: 419px;
left: 579px;
}
.server_1_bottom_center_3{
position: absolute;
top: 460px;
left: 620px;
}
.jiedian_haikang{
position: absolute;
top: 425px;
left: 600px;
}
.jiedian_kongkai{
position: absolute;
top: 590px;
left: 590px;
}
.jiedian_shexiangtou{
position: absolute;
top: 570px;
left: 645px;
}
.server_1_bottom_center_left_right{
position: absolute;
top: 278px;
left: 670px;
}
.jiedian_wangguan{
position: absolute;
left: 693px;
top: 350px;
}
.server_1_right_center{
position: absolute;
top: 388px;
left: 710px;
}
.server_1_right_center_left{
position: absolute;
top: 437px;
left: 700px;
}
.server_1_right_center_right{
position: absolute;
top: 418px;
left: 745px;
}
.jiedian_kongtiao{
position: absolute;
left: 725px;
top: 470px;
}
.jiedian_dianbiao{
position: absolute;
left: 795px;
top: 421px;
}
.server_2{
position: absolute;
left: 750px;
top: 20px;
}
.server_2_top_right{
position: absolute;
left: 790px;
top: 140px;
}
.jiedian_weilan{
position: absolute;
left: 850px;
top: 293px;
}
.server_2_center{
position: absolute;
top: 335px;
left: 892px;
}
.jiedian_dianziweilan{
position: absolute;
left: 885px;
top: 360px;
}
.server_3{
position: absolute;
left: 1000px;
top: 20px;
}
.server_3_top_right{
position: absolute;
left: 1040px;
top: 140px;
}
.jiedian_loukong{
position: absolute;
left: 1100px;
top: 293px;
}
.server_3_center{
position: absolute;
top: 335px;
left: 1142px;
}
.server_3_center_left{
position: absolute;
top: 385px;
left: 1129px;
}
.server_3_center_right{
position: absolute;
top: 365px;
left: 1175px;
}
.jiedian_kongtiao_2{
position: absolute;
left: 1150px;
top: 420px;
}
.jiedian_zhaoming{
position: absolute;
left: 1210px;
top: 362px;
}
.server_4{
position: absolute;
left: 1250px;
top: 20px;
}
.server_4_top_right{
position: absolute;
left: 1290px;
top: 140px;
}
.right_jiedian_box{
position: absolute;
left: 1310px;
top: 310px;
display: flex;
.jiedian_2{
top: -60px;
}
}
}
</style>

@ -11,76 +11,115 @@ export default [{
isAuth: false
}
},
{
path: '/lock',
name: '锁屏页',
component: () =>
import( /* webpackChunkName: "page" */ '@/page/lock/index'),
meta: {
keepAlive: true,
isTab: false,
isAuth: false
}
},
{
path: '/404',
component: () =>
import( /* webpackChunkName: "page" */ '@/components/error-page/404'),
name: '404',
meta: {
keepAlive: true,
isTab: false,
isAuth: false
}
{
path: '/lock',
name: '锁屏页',
component: () =>
import( /* webpackChunkName: "page" */ '@/page/lock/index'),
meta: {
keepAlive: true,
isTab: false,
isAuth: false
}
},
{
path: '/404',
component: () =>
import( /* webpackChunkName: "page" */ '@/components/error-page/404'),
name: '404',
meta: {
keepAlive: true,
isTab: false,
isAuth: false
}
},
{
path: '/403',
component: () =>
import( /* webpackChunkName: "page" */ '@/components/error-page/403'),
name: '403',
meta: {
keepAlive: true,
isTab: false,
isAuth: false
}
},
{
path: '/500',
},
{
path: '/403',
component: () =>
import( /* webpackChunkName: "page" */ '@/components/error-page/403'),
name: '403',
meta: {
keepAlive: true,
isTab: false,
isAuth: false
}
},
{
path: '/500',
component: () =>
import( /* webpackChunkName: "page" */ '@/components/error-page/500'),
name: '500',
meta: {
keepAlive: true,
isTab: false,
isAuth: false
}
},
{
path: '/',
name: '主页',
redirect: '/garden'
},
{
path: '/equipment',
name: '设备管理',
redirect: '/equipment'
},
{
path: '/myiframe',
component: Layout,
redirect: '/myiframe',
children: [{
path: ":routerPath",
name: 'iframe',
component: () =>
import( /* webpackChunkName: "page" */ '@/components/error-page/500'),
name: '500',
meta: {
keepAlive: true,
isTab: false,
isAuth: false
}
},
{
path: '/',
name: '主页',
redirect: '/garden'
},
{
path: '/equipment',
name: '设备管理',
redirect: '/equipment'
},
{
path: '/myiframe',
component: Layout,
redirect: '/myiframe',
children: [{
path: ":routerPath",
name: 'iframe',
component: () =>
import( /* webpackChunkName: "page" */ '@/components/iframe/main'),
props: true
}]
import( /* webpackChunkName: "page" */ '@/components/iframe/main'),
props: true
}]
},
{
path: '*',
redirect: '/404'
},
{
path: '/opsVisualization',
name: '系统监控',
component: Layout,
meta: {
keepAlive: true,
isTab: false,
isAuth: false
},
{
path: '*',
redirect: '/404'
}
children: [
{
path: "alarmProcess",
name: '系统监控1',
component: () =>
import( /* webpackChunkName: "page" */ '@/page/opsVisualization/alarmProcess'),
},
{
path: "systemMonitoring",
name: '服务监控',
component: () =>
import( /* webpackChunkName: "page" */ '@/page/opsVisualization/systemMonitoring'),
},
{
path: "serviceDataOAM",
name: '业务数据监控',
component: () =>
import( /* webpackChunkName: "page" */ '@/page/opsVisualization/systemMonitoring'),
},
{
path: 'tuobu',
name: 'tuobu',
meta: {
i18n: 'dashboard'
},
component: () =>
import( /* webpackChunkName: "views" */ '@/views/opsVisualization/tuobu')
}
]
},
]

Loading…
Cancel
Save