You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

440 lines
12 KiB
Vue

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<template>
<div class="navbar">
<hamburger
id="hamburger-container"
:is-active="sidebar.opened"
class="hamburger-container"
@toggleClick="toggleSideBar"
/>
<breadcrumb
id="breadcrumb-container"
class="breadcrumb-container"
v-if="!topNav"
/>
<top-nav id="topmenu-container" class="topmenu-container" v-if="topNav" />
<div class="right-menu">
<template v-if="device !== 'mobile'">
<el-select
v-model="poolName"
placeholder="请选择工厂数据源"
@change="handleChange"
:disabled="poolNameList.length <= 1"
class="right-menu-item hover-effect"
>
<el-option
v-for="item in poolNameList"
:key="item.poolName"
:label="item.parkName"
:value="item.poolName"
></el-option>
</el-select>
<el-tooltip content="异常处理">
<span
class="exceptionHandling"
:class="{ warnTxt: (typeList && typeList.length) || 0 }"
@click="getAlarmData(true)"
><i class="el-icon-message"></i>{{
(typeList && typeList.length > 0 && typeList.length) || ""
}}
</span>
</el-tooltip>
<el-tooltip :content="unReadComments" effect="dark" v-if="showPrise">
<el-badge :value="commentNum" class="item" style="margin-right: 10px;">
<i class="el-icon-bell right-menu-item hover-effect"
style="line-height: 50px;color:#FF4D4F;font-size: 25px;padding-right: 0px;margin-top: -9px;"
@click="gotoComment"></i>
</el-badge>
</el-tooltip>
<el-tooltip :content="unReadComments" effect="dark" v-else>
<i class="el-icon-bell right-menu-item hover-effect" style="line-height: 50px;color:grey;font-size: 25px;" @click="gotoComment"></i>
</el-tooltip>
<screenfull id="screenfull" class="right-menu-item hover-effect" />
<el-tooltip content="布局大小" effect="dark" placement="bottom">
<size-select id="size-select" class="right-menu-item hover-effect" />
</el-tooltip>
</template>
<el-dropdown
class="avatar-container right-menu-item hover-effect"
trigger="click"
>
<div class="avatar-wrapper">
<!-- <img :src="avatar" class="user-avatar" /> -->
<!-- admin -->
{{ nickName }}
<i class="el-icon-caret-bottom" />
</div>
<el-dropdown-menu slot="dropdown">
<router-link to="/user/profile">
<el-dropdown-item>个人中心</el-dropdown-item>
</router-link>
<el-dropdown-item @click.native="setting = true">
<span>布局设置</span>
</el-dropdown-item>
<el-dropdown-item divided @click.native="logout">
<span>退出登录</span>
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</div>
<!-- 警告对话框 -->
<el-dialog
:title="title1"
:visible.sync="open1"
width="800px"
append-to-body
>
<el-table
v-loading="deviceloading"
:data="typeList"
@selection-change="handleSelectionChange1"
>
<el-table-column type="selection" width="55" align="center" />
<el-table-column
label="计量设备名称"
align="center"
prop="monitorName"
/>
<el-table-column
label="采集设备编号"
align="center"
prop="collectDeviceId"
/>
<el-table-column label="记录时间" align="center" prop="collectTime" />
<el-table-column label="异常类型" align="center" prop="alarmType">
<template slot-scope="scope">
<dict-tag
:options="dict.type.alarmType"
:value="scope.row.alarmType"
/>
</template>
</el-table-column>
<el-table-column label="异常状态" align="center" prop="alarmStatus">
<template slot-scope="scope">
<dict-tag
:options="dict.type.alarmStatus"
:value="scope.row.alarmStatus"
/>
</template>
</el-table-column>
<el-table-column label="异常数据" align="center" prop="alarmData" />
<el-table-column label="备注" align="center" prop="cause" />
</el-table>
<!-- <pagination
v-show="devicetotal > 0"
:total="devicetotal"
:page.sync="queryParams1.pageNum"
:limit.sync="queryParams1.pageSize"
@pagination="getDeviceList"
/> -->
<div slot="footer" class="dialog-footer">
<el-button type="primary" @click="editAlarmStatus">确 定</el-button>
<el-button @click="open1 = false"> </el-button>
</div>
</el-dialog>
</div>
</template>
<script>
import { mapGetters } from "vuex";
import Breadcrumb from "@/components/Breadcrumb";
import TopNav from "@/components/TopNav";
import Hamburger from "@/components/Hamburger";
import Screenfull from "@/components/Screenfull";
import SizeSelect from "@/components/SizeSelect";
import Search from "@/components/HeaderSearch";
import RuoYiGit from "@/components/RuoYi/Git";
import RuoYiDoc from "@/components/RuoYi/Doc";
import { getUnReadComment} from '@/api/plan/workorder';
import {
listNotice,
getNotice,
delNotice,
addNotice,
updateNotice,
} from "@/api/system/notice";
//import { listData, editAlarmStatus } from "@/api/energy/exception/data.js";
import { changePoolName } from "@/api/system/user";
export default {
dicts: ["alarmType", "alarmStatus"],
data() {
return {
poolNameList: [],
poolName: "",
title1: "异常处理",
open1: false,
deviceloading: false,
typeList: null,
devicetotal: null,
// 选中数组
ids1: [],
// 非单个禁用
single1: true,
// 非多个禁用
multiple1: true,
showPrise: false,
unReadComments: '您有0新的未读消息请点击查看',
commentNum:0,
queryParams:{}
};
},
created() {
localStorage.setItem("this.devicetotal", 0);
},
mounted() {
this.getAlarmData();
setInterval(() => this.getAlarmData(), 1000 * 60);
this.poolNameList = JSON.parse(localStorage.getItem("POOL_NAME_LIST"));
this.poolName = localStorage.getItem("USER_POOL_NAME_CURRENT");
//先执行一次
this.getUnReadList();
// 实现轮询
this.timer = setInterval(() => {
setTimeout(this.getUnReadList(), 30000);
}, 30000);
},
components: {
Breadcrumb,
TopNav,
Hamburger,
Screenfull,
SizeSelect,
Search,
RuoYiGit,
RuoYiDoc,
},
computed: {
...mapGetters(["sidebar", "avatar", "device", "nickName"]),
setting: {
get() {
return this.$store.state.settings.showSettings;
},
set(val) {
this.$store.dispatch("settings/changeSetting", {
key: "showSettings",
value: val,
});
},
},
topNav: {
get() {
return this.$store.state.settings.topNav;
},
},
},
methods: {
// 打开右下角异常
openAlarm() {
this.$notify({
title: "异常数据提示",
position: "bottom-right",
message: this.$createElement(
"div",
{
on: {
click: () => {
this.getAlarmData(true);
},
},
},
[this.$createElement("el-button", {}, ["点击查看"])]
),
});
},
// 处理报警
editAlarmStatus() {
/**editAlarmStatus({ objIds: this.ids1 }).then((res) => {
this.$message({
type: "success",
message: "异常数据已处理!",
duration: 1500,
});
this.getAlarmData();
});
**/
},
/** 报警列表 */
getAlarmData(open) {
/**this.open1 = open;
this.deviceloading = true;
listData({ alarmStatus: 1 }).then((response) => {
this.typeList = response.rows;
this.devicetotal = response.total;
this.deviceloading = false;
if (localStorage.getItem("this.devicetotal") != this.devicetotal) {
localStorage.setItem("this.devicetotal", this.devicetotal);
this.openAlarm();
}
});
**/
},
// 多选框选中数据
handleSelectionChange1(selection) {
this.ids1 = selection.map((item) => item.objId);
this.single1 = selection.length !== 1;
this.multiple1 = !selection.length;
},
toggleSideBar() {
this.$store.dispatch("app/toggleSideBar");
},
async logout() {
this.$confirm("确定注销并退出系统吗?", "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
this.$store.dispatch("LogOut").then(() => {
location.href = "/index";
});
})
.catch(() => {});
},
// 选中数据源
handleChange(value) {
//修改后台数据源
changePoolName(value).then((res) => {
localStorage.setItem("USER_POOL_NAME_CURRENT", value);
this.poolName = value;
window.location.reload();
});
},
/** 获取未读消息数 */
getUnReadList() {
console.log("++未读消息查询++");
getUnReadComment(this.queryParams).then(response => {
if(response.length>0){
this.unReadComments='您有'+response.length+'新的未读消息,请点击查看';
this.commentNum = response.length;
this.showPrise = true;
}else{
this.showPrise = false;
}
});
},
/** 跳转到【消息】 */
gotoComment() {
alert("301")
this.showPrise = false;
}
},
};
</script>
<style lang="scss" scoped>
@keyframes color-cycle {
0% {
color: red;
}
50% {
color: rgb(186, 186, 16);
}
100% {
color: red;
}
}
.navbar {
.warnTxt {
animation-name: color-cycle;
animation-duration: 0.5s;
animation-iteration-count: infinite;
}
height: 50px;
overflow: hidden;
position: relative;
background: #fff;
box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08);
.exceptionHandling {
/* line-height: 50px;
display: inline-block;
color: black;*/
vertical-align: text-bottom;
cursor: pointer;
padding: 0.8px;
}
.hamburger-container {
line-height: 46px;
height: 100%;
float: left;
cursor: pointer;
transition: background 0.3s;
-webkit-tap-highlight-color: transparent;
&:hover {
background: rgba(0, 0, 0, 0.025);
}
}
.breadcrumb-container {
float: left;
}
.topmenu-container {
position: absolute;
left: 50px;
}
.errLog-container {
display: inline-block;
vertical-align: top;
}
.right-menu {
float: right;
height: 100%;
line-height: 50px;
&:focus {
outline: none;
}
.right-menu-item {
display: inline-block;
padding: 0 8px;
height: 100%;
font-size: 18px;
color: #5a5e66;
vertical-align: text-bottom;
&.hover-effect {
cursor: pointer;
transition: background 0.3s;
&:hover {
background: rgba(0, 0, 0, 0.025);
}
}
}
.avatar-container {
margin-right: 30px;
.avatar-wrapper {
margin-top: 5px;
position: relative;
.user-avatar {
cursor: pointer;
width: 40px;
height: 40px;
border-radius: 10px;
}
.el-icon-caret-bottom {
cursor: pointer;
position: absolute;
right: -20px;
top: 25px;
font-size: 12px;
}
}
}
}
}
</style>