Browse Source

1.添加主机参数页面

2.修改设备监测页面结构,采用全屏无侧边栏大屏
3.修改路由动态配置
4.记录添加处理状态、时间范围参数,添加处理操作
5全局添加报警提醒,完善页面权限按钮
dev
selia-zx 1 month ago
parent
commit
51e716ca18
  1. 8
      src/api/alarm/alarmRecord.js
  2. 16
      src/api/centerairC/sysMonitor.js
  3. 1
      src/assets/icons/svg/arrow.svg
  4. BIN
      src/assets/images/back-icon.png
  5. BIN
      src/assets/images/back.png
  6. BIN
      src/assets/images/bar.png
  7. BIN
      src/assets/images/big.png
  8. BIN
      src/assets/images/cicle1.png
  9. BIN
      src/assets/images/circle.png
  10. BIN
      src/assets/images/detail-line.png
  11. BIN
      src/assets/images/di.png
  12. BIN
      src/assets/images/fanBlade.png
  13. BIN
      src/assets/images/host-img3.png
  14. BIN
      src/assets/images/host-img4.png
  15. BIN
      src/assets/images/menu.png
  16. BIN
      src/assets/images/title-center.png
  17. BIN
      src/assets/images/title-left.png
  18. BIN
      src/assets/images/title-right.png
  19. BIN
      src/assets/images/标题.png
  20. 27
      src/assets/styles/element-ui.scss
  21. 63
      src/layout/components/Navbar.vue
  22. 3
      src/router/index.js
  23. 221
      src/store/modules/permission.js
  24. 14
      src/views/alarm/alarmCode/index.vue
  25. 138
      src/views/alarm/alarmRecord/index.vue
  26. 16
      src/views/alarm/alarmRule/index.vue
  27. 2
      src/views/bigScreen/index.vue
  28. 415
      src/views/centerairC/sysMonitor/components/hostChart.vue
  29. 0
      src/views/centerairC/sysMonitor/components/lineChildren.vue
  30. 67
      src/views/centerairC/sysMonitor/components/lineSquare.vue
  31. 452
      src/views/centerairC/sysMonitor/components/loadData.vue
  32. 15
      src/views/centerairC/sysMonitor/components/titleImg.vue
  33. 1039
      src/views/centerairC/sysMonitor/hostDetails.vue
  34. 2253
      src/views/centerairC/sysMonitor/index.vue
  35. 2658
      src/views/centerairC/sysMonitor/monitorCenter.vue
  36. 344
      src/views/centerairC/sysMonitor/performance.vue
  37. 14
      src/views/device/comm/index.vue
  38. 14
      src/views/device/gateway/index.vue
  39. 14
      src/views/device/gather/index.vue
  40. 14
      src/views/device/ledger/index.vue
  41. 14
      src/views/device/maintenance/index.vue
  42. 14
      src/views/device/qrCode/index.vue
  43. 14
      src/views/device/spare/index.vue
  44. 8
      src/views/device/spareInOut/index.vue
  45. 2
      src/views/region/index.vue
  46. 8
      src/views/temSys/temHistory/index.vue

8
src/api/alarm/alarmRecord.js

@ -16,3 +16,11 @@ export function getAlarmRecord(ardId) {
method: "get",
});
}
// 修改报警记录状态
export function updateAlarmRecord(data) {
return request({
url: "/alarm/ard",
method: "put",
data: data,
});
}

16
src/api/centerairC/sysMonitor.js

@ -65,3 +65,19 @@ export function systemMode(query) {
params: query,
});
}
// 查询主机参数
export function hostDetailsData(query) {
return request({
url: "/chillers/list",
method: "get",
params: query,
});
}
// 主机冷冻冷却进出水温度
export function hostTemData(data) {
return request({
url: "/chillers/lineList",
method: "post",
data
});
}

1
src/assets/icons/svg/arrow.svg

@ -0,0 +1 @@
<?xml version="1.0" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg t="1745981751444" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="4350" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><path d="M978.46285085 519.68535919l-611.60394228 0L366.85890857 463.05536438 978.46285085 463.05536438l-2e-8 56.62999481z" fill="" p-id="4351"></path><path d="M360.30189532 689.14672739L30.97795841 495.73425621l329.32393691-198.63983493 0 392.05230611z" fill="" p-id="4352"></path></svg>

After

Width:  |  Height:  |  Size: 612 B

BIN
src/assets/images/back-icon.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 974 B

BIN
src/assets/images/back.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 974 B

BIN
src/assets/images/bar.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.8 KiB

BIN
src/assets/images/big.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 KiB

BIN
src/assets/images/cicle1.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
src/assets/images/circle.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 392 KiB

BIN
src/assets/images/detail-line.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
src/assets/images/di.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

BIN
src/assets/images/fanBlade.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 KiB

BIN
src/assets/images/host-img3.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 417 KiB

BIN
src/assets/images/host-img4.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 531 KiB

BIN
src/assets/images/menu.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
src/assets/images/title-center.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

BIN
src/assets/images/title-left.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.4 KiB

BIN
src/assets/images/title-right.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

BIN
src/assets/images/标题.png

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.6 KiB

27
src/assets/styles/element-ui.scss

@ -1411,6 +1411,31 @@
.el-tabs--border-card > .el-tabs__header .el-tabs__item {
color: #c3cbd4;
}
.drawing-item:hover > .el-form-item, .drawing-row-item:hover > .el-form-item {
.drawing-item:hover > .el-form-item,
.drawing-row-item:hover > .el-form-item {
background: #b6b6b6 !important;
}
.el-cascader__suggestion-list {
color: #a4b2af;
}
.el-cascader__suggestion-item:hover,
.el-cascader__suggestion-item:focus {
background-color: #00b4ff;
color: #ffffff;
}
.el-cascader__search-input {
background: transparent !important;
color: #a4b2af;
margin-left: 10px !important;
min-width: 50px !important;
z-index: 0;
}
.el-input__suffix{
z-index: 10;
}
.el-cascader__tags {
display: flex;
flex-direction: row;
align-items: center;
flex-wrap: nowrap;
}

63
src/layout/components/Navbar.vue

@ -16,6 +16,14 @@
<div class="right-menu">
<template v-if="device !== 'mobile'">
<img
v-if="isShowWarning"
class="warning"
src="../../assets/images/warning.png"
title="报警记录"
@click="goWarning"
alt=""
/>
<search id="header-search" class="right-menu-item" />
<screenfull id="screenfull" class="right-menu-item hover-effect" />
</template>
@ -51,7 +59,8 @@ import TopNav from "@/components/TopNav";
import Hamburger from "@/components/Hamburger";
import Screenfull from "@/components/Screenfull";
import Search from "@/components/HeaderSearch";
import { alarmRecordList } from "@/api/alarm/alarmRecord";
import { getDay } from "@/utils/datetime";
export default {
components: {
Breadcrumb,
@ -79,6 +88,14 @@ export default {
},
},
},
data() {
return {
isShowWarning: false,
};
},
mounted() {
this.getAlarnStatus();
},
methods: {
toggleSideBar() {
this.$store.dispatch("app/toggleSideBar");
@ -96,6 +113,27 @@ export default {
})
.catch(() => {});
},
//
getAlarnStatus() {
let data = {
pageNum: 1,
pageSize: 10,
status: "0",
};
let timeArr = [getDay(0), getDay(0)];
alarmRecordList(this.addDateRange(data, timeArr)).then((res) => {
console.log("请求了报警列表·············");
if (res.code == 200 && res.rows.length > 0) {
this.isShowWarning = true;
} else {
this.isShowWarning = false;
}
});
},
goWarning() {
// this.exitFullscreen();
this.$router.push("/alarm/alarmRecord");
},
},
};
</script>
@ -126,6 +164,23 @@ export default {
background: rgba(0, 0, 0, 0.025);
}
}
.warning {
width: 30px;
height: 30px;
margin: 0 10px;
z-index: 10;
cursor: pointer;
/* 添加闪烁动画 */
animation: blink 1s infinite;
}
@keyframes blink {
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
.breadcrumb-container {
float: left;
@ -206,7 +261,11 @@ export default {
.hamburger-container {
line-height: 0.46rem !important;
}
.warning {
width: 0.3rem !important;
height: 0.3rem !important;
margin: 0 0.1rem !important;
}
.topmenu-container {
left: 0.5rem !important;
}

3
src/router/index.js

@ -90,7 +90,8 @@ export const constantRoutes = [
},
// 综合大屏
{
path: "/bigScreen",
path: "/Screen",
name:"Screen",
hidden: true,
component: () => import("@/views/bigScreen/bigScreen"),
meta: { title: "大屏总览", icon: "screen" },

221
src/store/modules/permission.js

@ -1,9 +1,9 @@
import auth from '@/plugins/auth'
import router, { constantRoutes, dynamicRoutes } from '@/router'
import { getRouters } from '@/api/menu'
import Layout from '@/layout/index'
import ParentView from '@/components/ParentView'
import InnerLink from '@/layout/components/InnerLink'
import auth from "@/plugins/auth";
import router, { constantRoutes, dynamicRoutes } from "@/router";
import { getRouters } from "@/api/menu";
import Layout from "@/layout/index";
import ParentView from "@/components/ParentView";
import InnerLink from "@/layout/components/InnerLink";
const permission = {
state: {
@ -11,127 +11,216 @@ const permission = {
addRoutes: [],
defaultRoutes: [],
topbarRouters: [],
sidebarRouters: []
sidebarRouters: [],
},
mutations: {
SET_ROUTES: (state, routes) => {
state.addRoutes = routes
state.routes = constantRoutes.concat(routes)
state.addRoutes = routes;
state.routes = constantRoutes.concat(routes);
},
SET_DEFAULT_ROUTES: (state, routes) => {
state.defaultRoutes = constantRoutes.concat(routes)
state.defaultRoutes = constantRoutes.concat(routes);
},
SET_TOPBAR_ROUTES: (state, routes) => {
state.topbarRouters = routes
state.topbarRouters = routes;
},
SET_SIDEBAR_ROUTERS: (state, routes) => {
state.sidebarRouters = routes
state.sidebarRouters = routes;
},
},
actions: {
// 生成路由
GenerateRoutes({ commit }) {
return new Promise(resolve => {
return new Promise((resolve) => {
// 向后端请求路由数据
getRouters().then(res => {
const sdata = JSON.parse(JSON.stringify(res.data))
const rdata = JSON.parse(JSON.stringify(res.data))
const sidebarRoutes = filterAsyncRouter(sdata)
const rewriteRoutes = filterAsyncRouter(rdata, false, true)
getRouters().then((res) => {
const sdata = JSON.parse(JSON.stringify(res.data));
const rdata = JSON.parse(JSON.stringify(res.data));
const sidebarRoutes = filterAsyncRouter(sdata);
const rewriteRoutes = filterAsyncRouter(rdata, false, true);
const asyncRoutes = filterDynamicRoutes(dynamicRoutes);
rewriteRoutes.push({ path: '*', redirect: '/404', hidden: true })
rewriteRoutes.push({ path: "*", redirect: "/404", hidden: true });
// 如果动态的路由有中央空调-系统监控-系统监测页面,那就添加一个hidden为true非Layout的大屏页面
const result = checkRouteArray(
sidebarRoutes,
"centerairC",
"monitorControl",
"sysMonitor"
);
router.addRoutes(asyncRoutes);
commit('SET_ROUTES', rewriteRoutes)
commit('SET_SIDEBAR_ROUTERS', constantRoutes.concat(sidebarRoutes))
commit('SET_DEFAULT_ROUTES', sidebarRoutes)
commit('SET_TOPBAR_ROUTES', sidebarRoutes)
resolve(rewriteRoutes)
})
})
if (result) {
// console.log(
// "满足条件,添加中央空调-系统监控-系统监测相关的大屏页面路由"
// );
// 定义要添加的多个路由对象数组
const additionalRoutes = [
{
path: "/monitorCenter",
name: "monitorCenter",
hidden: true,
component: () =>
import("@/views/centerairC/sysMonitor/monitorCenter"),
meta: { title: "系统监测", icon: "screen" },
},
{
path: "/hostDetails",
name: "hostDetails",
hidden: true,
component: () =>
import("@/views/centerairC/sysMonitor/hostDetails"),
meta: { title: "主机性能", icon: "new2" },
},
{
path: "/performance",
name: "performance",
hidden: true,
component: () =>
import("@/views/centerairC/sysMonitor/performance"),
meta: { title: "冷机性能性能", icon: "new2" },
},
// 可以继续添加更多路由对象
];
// 循环添加额外的路由对象到各路由数组
additionalRoutes.forEach((route) => {
sidebarRoutes.push(route);
rewriteRoutes.push(route);
asyncRoutes.push(route);
});
} else {
// console.log("不满足条件");
}
commit("SET_ROUTES", rewriteRoutes);
commit("SET_SIDEBAR_ROUTERS", constantRoutes.concat(sidebarRoutes));
commit("SET_DEFAULT_ROUTES", sidebarRoutes);
commit("SET_TOPBAR_ROUTES", sidebarRoutes);
console.log("返回的动态路由", sidebarRoutes);
console.log("静态的动态路由", constantRoutes);
resolve(rewriteRoutes);
});
});
},
},
};
//判断是否返回特定的菜单,再添加大屏路由的动态菜单
function checkRouteArray(routes, ...paths) {
// 检查传入路径参数的数量,用于确定要检查的层级
const level = paths.length;
function checkLevel(route, currentLevel) {
// 如果当前层级的路径参数存在且当前路由的 path 包含该路径
if (
paths[currentLevel] &&
route.path &&
route.path.includes(paths[currentLevel])
) {
// 如果已经到达指定的最后一层级,返回 true
if (currentLevel === level - 1) {
return true;
}
// 如果还有下一层级且当前路由有 children 属性
if (route.children) {
for (let i = 0; i < route.children.length; i++) {
const childRoute = route.children[i];
// 递归检查下一层级
if (checkLevel(childRoute, currentLevel + 1)) {
return true;
}
}
}
}
return false;
}
// 遍历路由数组,对每个一级路由调用 checkLevel 函数开始检查
for (let i = 0; i < routes.length; i++) {
const route = routes[i];
if (checkLevel(route, 0)) {
return true;
}
}
return false;
}
// 遍历后台传来的路由字符串,转换为组件对象
function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = false) {
return asyncRouterMap.filter(route => {
return asyncRouterMap.filter((route) => {
if (type && route.children) {
route.children = filterChildren(route.children)
route.children = filterChildren(route.children);
}
if (route.component) {
// Layout ParentView 组件特殊处理
if (route.component === 'Layout') {
route.component = Layout
} else if (route.component === 'ParentView') {
route.component = ParentView
} else if (route.component === 'InnerLink') {
route.component = InnerLink
if (route.component === "Layout") {
route.component = Layout;
} else if (route.component === "ParentView") {
route.component = ParentView;
} else if (route.component === "InnerLink") {
route.component = InnerLink;
} else {
route.component = loadView(route.component)
route.component = loadView(route.component);
}
}
if (route.children != null && route.children && route.children.length) {
route.children = filterAsyncRouter(route.children, route, type)
route.children = filterAsyncRouter(route.children, route, type);
} else {
delete route['children']
delete route['redirect']
delete route["children"];
delete route["redirect"];
}
return true
})
return true;
});
}
function filterChildren(childrenMap, lastRouter = false) {
var children = []
var children = [];
childrenMap.forEach((el, index) => {
if (el.children && el.children.length) {
if (el.component === 'ParentView' && !lastRouter) {
el.children.forEach(c => {
c.path = el.path + '/' + c.path
if (el.component === "ParentView" && !lastRouter) {
el.children.forEach((c) => {
c.path = el.path + "/" + c.path;
if (c.children && c.children.length) {
children = children.concat(filterChildren(c.children, c))
return
children = children.concat(filterChildren(c.children, c));
return;
}
children.push(c)
})
return
children.push(c);
});
return;
}
}
if (lastRouter) {
el.path = lastRouter.path + '/' + el.path
el.path = lastRouter.path + "/" + el.path;
if (el.children && el.children.length) {
children = children.concat(filterChildren(el.children, el))
return
children = children.concat(filterChildren(el.children, el));
return;
}
}
children = children.concat(el)
})
return children
children = children.concat(el);
});
return children;
}
// 动态路由遍历,验证是否具备权限
export function filterDynamicRoutes(routes) {
const res = []
routes.forEach(route => {
const res = [];
routes.forEach((route) => {
if (route.permissions) {
if (auth.hasPermiOr(route.permissions)) {
res.push(route)
res.push(route);
}
} else if (route.roles) {
if (auth.hasRoleOr(route.roles)) {
res.push(route)
res.push(route);
}
}
})
return res
});
return res;
}
export const loadView = (view) => {
if (process.env.NODE_ENV === 'development') {
return (resolve) => require([`@/views/${view}`], resolve)
if (process.env.NODE_ENV === "development") {
return (resolve) => require([`@/views/${view}`], resolve);
} else {
// 使用 import 实现生产环境的路由懒加载
return () => import(`@/views/${view}`)
}
return () => import(`@/views/${view}`);
}
};
export default permission
export default permission;

14
src/views/alarm/alarmCode/index.vue

@ -83,7 +83,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['alarm:ac:add']">
<el-button
type="primary"
icon="el-icon-plus"
@ -94,7 +94,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['alarm:ac:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -106,7 +106,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['alarm:ac:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -117,7 +117,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -127,7 +127,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -189,7 +189,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['alarm:ac:edit']"
>修改</el-button
>
<el-button
@ -197,7 +197,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['alarm:ac:remove']"
>删除</el-button
>
</template>

138
src/views/alarm/alarmRecord/index.vue

@ -67,6 +67,30 @@
@keyup.enter.native="handleQuery"
/>
</el-form-item>
<el-form-item label="处理状态" prop="status">
<el-select
v-model="queryParams.status"
placeholder="选择处理状态"
clearable
>
<el-option label="未处理" value="0" />
<el-option label="已处理" value="1" />
</el-select>
</el-form-item>
<el-form-item label="日期范围" prop="timeArr">
<el-date-picker
style="width: 220px"
v-model="timeArr"
type="daterange"
unlink-panels
range-separator="~"
start-placeholder="开始日期"
end-placeholder="结束日期"
value-format="yyyy-MM-dd"
@change="dateChange"
>
</el-date-picker>
</el-form-item>
</el-form>
<div class="primary-btn">
<el-button
@ -86,7 +110,7 @@
>重置</el-button
>
</div>
<div class="warning-btn" v-hasPermi="['system:post:export']">
<!-- <div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
icon="el-icon-download"
@ -94,7 +118,7 @@
@click="handleExport"
>导出</el-button
>
</div>
</div> -->
</div>
</div>
<el-table v-loading="loading" :data="postList" stripe>
@ -125,16 +149,25 @@
</template>
</el-table-column>
<el-table-column label="报警内容" align="center" prop="content" />
<!-- <el-table-column
label="更新时间"
align="center"
prop="updateTime"
width="180"
>
<el-table-column label="报警时间" align="center" prop="createTime">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.createTime) }}</span>
</template>
</el-table-column>
<el-table-column label="处理状态" align="center" prop="status">
<template slot-scope="scope">
<span>{{ parseTime(scope.row.updateTime) }}</span>
<span
:class="getStatusClass(scope.row.status)"
v-if="scope.row.status === 0"
>未处理</span
>
<span
:class="getStatusClass(scope.row.status)"
v-if="scope.row.status === 1"
>已处理</span
>
</template>
</el-table-column> -->
</el-table-column>
<el-table-column
label="操作"
align="center"
@ -144,9 +177,17 @@
<el-button
size="mini"
type="text"
icon="el-icon-tickets"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['alarm:ard:edit']"
>处理</el-button
>
<el-button
size="mini"
type="text"
icon="el-icon-tickets"
@click="handleLook(scope.row)"
v-hasPermi="['alarm:ard:query']"
>详情</el-button
>
</template>
@ -251,13 +292,18 @@
</template>
<script>
import { alarmRecordList, getAlarmRecord } from "@/api/alarm/alarmRecord";
import {
alarmRecordList,
getAlarmRecord,
updateAlarmRecord,
} from "@/api/alarm/alarmRecord";
export default {
name: "alarmRecord",
dicts: ["alarm_type", , "alarm_type", "alarm_event_type", "alarm_level"],
data() {
return {
timeArr: [],
//
loading: true,
//
@ -285,6 +331,9 @@ export default {
eventType: "",
alarmLevel: "",
content: "",
status: "",
beginTime: "",
endTime: "",
},
//
form: {},
@ -296,14 +345,36 @@ export default {
this.getList();
},
methods: {
//
getStatusClass(status) {
switch (status) {
case 0:
return "status-green";
case 1:
return "status-red";
default:
return "";
}
},
//
dateChange() {
// console.log("", this.timeArr);
if (!this.timeArr) {
this.$nextTick(() => {
this.timeArr = [];
});
}
},
/** 查询报警编码列表 */
getList() {
this.loading = true;
alarmRecordList(this.queryParams).then((response) => {
alarmRecordList(this.addDateRange(this.queryParams, this.timeArr)).then(
(response) => {
this.postList = response.rows;
this.total = response.total;
this.loading = false;
});
}
);
},
//
cancel() {
@ -333,8 +404,8 @@ export default {
this.resetForm("queryForm");
this.handleQuery();
},
/** 修改按钮操作 */
handleUpdate(row) {
/** 详情 */
handleLook(row) {
this.reset();
this.form.id = "";
const acId = row.id || this.ids;
@ -364,6 +435,31 @@ export default {
this.title = "报警记录详情";
});
},
/** 处理 */
handleUpdate(row) {
if (row.status === 0) {
this.$confirm(`是否要处理该条报警记录?`, "提示", {
confirmButtonText: "确定",
cancelButtonText: "取消",
type: "warning",
})
.then(() => {
let data = {
id: row.id,
status: 1,
};
updateAlarmRecord(data).then((res) => {
if (res.code == 200) {
this.$modal.msgSuccess("处理成功!");
this.getList();
}
});
})
.catch(() => {});
} else if (row.status === 1) {
this.$modal.msgWarning("该报警记录已被处理!");
}
},
/** 导出按钮操作 */
handleExport() {
this.download(
@ -377,3 +473,11 @@ export default {
},
};
</script>
<style lang="scss" scoped>
.status-green {
color: red;
}
.status-red {
color: rgb(7, 214, 110);
}
</style>

16
src/views/alarm/alarmRule/index.vue

@ -75,7 +75,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['alarm:ar:add']">
<el-button
type="primary"
icon="el-icon-plus"
@ -86,7 +86,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['alarm:ar:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -98,7 +98,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['alarm:ar:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -109,7 +109,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -119,7 +119,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -219,7 +219,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['alarm:ar:edit']"
>修改</el-button
>
<el-button
@ -227,7 +227,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['alarm:ar:remove']"
>删除</el-button
>
</template>
@ -669,6 +669,8 @@ export default {
//
this.getCpmIdList(this.form.ledgerId);
}
//
this.form.cpmId = ""
},
//
getCpmIdList(id) {

2
src/views/bigScreen/index.vue

@ -11,7 +11,7 @@ export default {
toPage() {
console.log("需要跳转的")
//
this.$router.push("/bigScreen")
this.$router.push("/Screen")
},
},
};

415
src/views/centerairC/sysMonitor/components/hostChart.vue

@ -0,0 +1,415 @@
<template>
<div>
<div class="historyCharts" ref="chart_ref"></div>
</div>
</template>
<script>
import * as echarts from "echarts";
export default {
props: {
temArray: {
type: Array,
default: () => [],
},
},
data() {
return {
chartInstance: null,
option: {},
chartData1: [],
chartData2: [],
chartData3: [],
chartData4: [],
bottomData: [],
};
},
watch: {
temArray: {
immediate: true, //
handler(newVal, oldVal) {
if (newVal) {
this.chartData1 = []; // chartData1
this.chartData2 = []; // chartData2
this.bottomData = []; // bottomData
console.log("charts传值", newVal);
let data = newVal;
if (data.length > 0) {
// title titleStr
const title = data.data[0].title;
const titleStr = data.data[1].titleStr;
// dataList
const dataList = data.data[3].dataList;
// dataList
dataList.forEach((item) => {
// name title
const index = title.indexOf(item.name);
if (index !== -1) {
// name titleStr
item.name = titleStr[index];
}
});
console.log("处理后的data", data);
data.forEach((item) => {
if (item.timeStr) {
this.bottomData = item.timeStr;
}
if (item.dataList) {
let name1 = "";
let name2 = "";
let name3 = "";
let name4 = "";
item.dataList.forEach((val, index) => {
if (val.name) {
switch (index) {
case 0:
this.chartData1 = val.value;
name1 = val.name;
break;
case 1:
this.chartData2 = val.value;
name2 = val.name;
break;
case 2:
this.chartData3 = val.value;
name3 = val.name;
break;
case 3:
this.chartData4 = val.value;
name4 = val.name;
break;
default:
break;
}
}
});
}
});
this.$nextTick(() => {
const adapterOption = {
xAxis: {
data: this.bottomData,
},
series: [
{
yAxisIndex: 0,
name:name1,
data: this.chartData1,
},
{
yAxisIndex: 0,
name:name2,
data: this.chartData2,
},
{
yAxisIndex: 0,
name:name3,
data: this.chartData3,
},
{
yAxisIndex: 0,
name:name4,
data: this.chartData4,
},
],
};
this.chartInstance.setOption(adapterOption);
//resize
this.chartInstance.resize();
});
} else {
this.$nextTick(() => {
const adapterOption = {
xAxis: {
data: [],
},
series: [
{
yAxisIndex: 0,
data: [],
},
{
yAxisIndex: 0,
data: [],
},
{
yAxisIndex: 0,
data: [],
},
{
yAxisIndex: 0,
data: [],
},
],
};
this.chartInstance.setOption(adapterOption);
//resize
this.chartInstance.resize();
this.screenAdapter();
});
}
}
},
},
},
mounted() {
this.initChart();
this.screenAdapter();
},
destroyed() {
//
window.removeEventListener("resize", this.screenAdapter);
},
methods: {
// 线+ + 线
screenAdapter() {
//,2.6 mes_ref
const titleFontSize = this.$refs.chart_ref.offsetWidth / 130;
//optionoption
const adapterOption = {};
//.chartInstanceoptiondataoption
this.chartInstance.setOption(adapterOption);
//resize
this.chartInstance.resize();
},
//chartInstance
initChart() {
const chartRef = this.$refs.chart_ref;
if (chartRef) {
//
this.chartInstance = echarts.init(this.$refs.chart_ref);
this.option = {
tooltip: {
trigger: "axis",
},
legend: {
show: true,
top: 0,
textStyle: {
color: "white",
},
},
grid: {
top: "10%",
left: "4%",
right: "6%",
bottom: "3%",
containLabel: true,
},
xAxis: {
type: "category",
//true
boundaryGap: true,
// x
axisLabel: {
// interval: 0, //x
// rotate: 30, //x30
color: "rgba(255, 255, 255, 1)",
},
axisTick: {
show: false, // 线
},
// x
axisLine: {
show: true,
lineStyle: {
color: "#365576",
},
},
splitLine: {
lineStyle: {
color: "#e2e6f0",
},
}, //x线
data: this.bottomData,
},
yAxis: {
min: 0,
// max:20,
// // // min:'dataMin',
// // // max:'dataMax',
// name: "kwh", // y
// name
nameTextStyle: {
color: "rgba(255, 255, 255, 1)",
fontSize: 12,
},
miniInterval: 5,
type: "value",
// y
axisLabel: {
color: "rgba(255, 255, 255, 1)",
},
// y
axisLine: {
show: true,
lineStyle: {
color: "#365576", // y 线
},
},
//y线
// splitNumber: 10,
// y线
splitLine: {
lineStyle: {
color: "#1a3d62", // 线
type: "dashed", // 线线
},
},
},
series: [
{
type: "line",
//
symbolSize: 8,
data: this.chartData1,
//线
itemStyle: {
color: "#1a69f1", //线
},
lineStyle: {
color: "#1a69f1", //线
},
smooth: false,
// 线
showSymbol: false,
//
areaStyle: {
color: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: "rgba(26, 105, 241, 0.5)", //
},
{
offset: 1,
color: "rgba(26, 105, 241, 0)", //
},
],
global: false, // false
},
},
},
{
type: "line",
//
symbolSize: 8,
data: this.chartData2,
//线
itemStyle: {
color: "#00CED1", //线
},
smooth: false,
// 线
showSymbol: false,
areaStyle: {
color: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: "rgba(0, 206, 209, 0.5)", //
},
{
offset: 1,
color: "rgba(0, 206, 209, 0)", //
},
],
global: false, // false
},
},
},
{
type: "line",
//
symbolSize: 8,
data: this.chartData3,
//线
itemStyle: {
color: "#00CED1", //线
},
smooth: false,
// 线
showSymbol: false,
areaStyle: {
color: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: "rgba(0, 206, 209, 0.5)", //
},
{
offset: 1,
color: "rgba(0, 206, 209, 0)", //
},
],
global: false, // false
},
},
},
{
type: "line",
//
symbolSize: 8,
data: this.chartData4,
//线
itemStyle: {
color: "#00CED1", //线
},
smooth: false,
// 线
showSymbol: false,
areaStyle: {
color: {
type: "linear",
x: 0,
y: 0,
x2: 0,
y2: 1,
colorStops: [
{
offset: 0,
color: "rgba(0, 206, 209, 0.5)", //
},
{
offset: 1,
color: "rgba(0, 206, 209, 0)", //
},
],
global: false, // false
},
},
},
],
};
//
this.chartInstance.setOption(this.option, true);
} else {
console.error("未找到有效的 DOM 元素");
}
},
},
};
</script>
<style lang="scss" scoped>
.historyCharts {
width: 100%;
height: 4rem;
}
</style>

0
src/views/centerairC/sysMonitor/lineChildren.vue → src/views/centerairC/sysMonitor/components/lineChildren.vue

67
src/views/centerairC/sysMonitor/components/lineSquare.vue

@ -0,0 +1,67 @@
<template>
<div class="crossed-lines-container">
<!-- 上边线 -->
<div
class="line horizontal-line"
:style="{ width: (horizontalLength / 100) + 'rem', left: `calc(50% - ${horizontalLength / 200}rem)`, top: `calc(50% - ${(verticalLength / 200) - (overlap / 100)}rem)` }"
></div>
<!-- 右边线 -->
<div
class="line vertical-line"
:style="{ height: (verticalLength / 100) + 'rem', top: `calc(50% - ${verticalLength / 200}rem)`, left: `calc(50% + ${(horizontalLength / 200) - (overlap / 100)}rem)` }"
></div>
<!-- 下边线 -->
<div
class="line horizontal-line"
:style="{ width: (horizontalLength / 100) + 'rem', left: `calc(50% - ${horizontalLength / 200}rem)`, top: `calc(50% + ${(verticalLength / 200) - (overlap / 100)}rem)` }"
></div>
<!-- 左边线 -->
<div
class="line vertical-line"
:style="{ height: (verticalLength / 100) + 'rem', top: `calc(50% - ${verticalLength / 200}rem)`, left: `calc(50% - ${(horizontalLength / 200) - (overlap / 100)}rem)` }"
></div>
</div>
</template>
<script>
export default {
props: {
// 线
horizontalLength: {
type: Number,
default: 100
},
// 线
verticalLength: {
type: Number,
default: 100
},
// 线
overlap: {
type: Number,
default: 10
}
}
};
</script>
<style scoped>
.crossed-lines-container {
position: relative;
width: 100%;
height: 100%;
}
.line {
position: absolute;
background-color: rgb(45, 121, 236,0.7);
}
.horizontal-line {
height: 0.01rem;
}
.vertical-line {
width: 0.01rem;
}
</style>

452
src/views/centerairC/sysMonitor/components/loadData.vue

@ -0,0 +1,452 @@
<template>
<div>
<div class="sys_charts" ref="sys_charts"></div>
</div>
</template>
<script>
import * as echarts from "echarts";
import { eventBus } from "@/utils/evenBus";
import { overView } from "@/api/bigScreen";
import { getDay, getMonth, getYear } from "@/utils/datetime";
export default {
props: {
hostData: {
type: Array,
default: () => [],
},
},
data() {
return {
chartInstance: null,
option: {},
loadPercent: "",
};
},
watch: {
hostData: {
immediate: true, //
handler(newVal, oldVal) {
if (newVal) {
console.log("charts传值", newVal);
let data = newVal;
if (data.length > 0) {
data.forEach((item) => {
if (item.paramType === "28") {
this.loadPercent = item.curValue;
}
});
this.$nextTick(() => {
// ECharts
if (this.chartInstance) {
this.chartInstance.dispose();
}
//
this.initChart();
});
} else {
}
}
},
},
},
mounted() {
this.initChart();
this.screenAdapter();
window.addEventListener("resize", this.screenAdapter);
},
destroyed() {
//mounted
window.removeEventListener("resize", this.screenAdapter);
},
methods: {
//
getAxisLineColor(useData, maxData) {
//
// 0.75使
const threshold = maxData * 0.75;
//
if (useData > threshold) {
return [
[
useData / maxData,
new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{ offset: 0, color: "rgba(0,127,208,1)" },
{ offset: 0.6, color: "rgba(0,127,208,1)" },
{ offset: 1, color: "rgba(69, 235, 167,0.5)" },
]),
],
[1, "rgba(28,128,245,.0)"],
];
} else {
return [
[
useData / maxData,
new echarts.graphic.LinearGradient(0, 0, 1, 0, [
{ offset: 0, color: "rgba(0,127,208,1)" },
{ offset: 0.5, color: "rgba(0,127,208,1)" },
{ offset: 1, color: "rgba(0,127,208,1)" },
]),
],
[1, "rgba(28,128,245,.0)"],
];
}
},
//chartInstance2 线
initChart() {
var value = 80;
//
const dataArr = this.loadPercent; //
const dataX = 100;
this.chartInstance = echarts.init(this.$refs.sys_charts);
this.option = {
backgroundStyle: {
borderWidth: 1,
color: "transparent",
},
title: [
{
text: `${dataArr} %`,
bottom: "8%",
left: "center",
textStyle: {
fontSize: "16", //
color: "#ffff",
fontWeight: 800,
},
triggerEvent: true,
},
],
legend: {
show: false,
},
series: [
{
name: "最外部进度条",
type: "gauge",
radius: "99%",
splitNumber: 10,
axisLine: {
lineStyle: {
color: [
[
dataArr / dataX,
{
type: "linear",
x: 0,
y: 1,
x2: 0.5,
y2: 0.5,
colorStops: [
{
offset: 0,
color: "rgba(0,0,0,0)", // 0%
},
{
offset: 0.8,
color: "#195b9d", // 100%
},
{
offset: 1,
color: "#0a2256", // 100%
},
],
global: false, // false
},
],
[1, "#083158"],
],
width: 5, //
},
},
axisLabel: {
show: false,
},
axisTick: {
show: false,
},
splitLine: {
show: false,
},
itemStyle: {
show: false,
},
detail: {
show: false,
},
title: {
//
show: false,
},
data: [
{
name: "title",
value: dataArr,
},
],
pointer: {
show: false,
},
animationDuration: 4000,
},
{
name: "刻度尺",
type: "gauge",
radius: "88%",
splitNumber: 10, //
min: 0, //
max: dataX, //
// 线
splitLine: {
show: true,
length: 12,
lineStyle: {
width: 3,
color: "#12E5FE",
},
},
// 线
axisTick: {
show: true,
splitNumber: 10,
length: 5,
lineStyle: {
color: "#12E5FE",
width: 2,
},
},
//
axisLabel: {
distance: -8, //线
color: "#CEF3FE",
fontSize: "6",
fontWeight: 600,
},
detail: {
show: false,
},
axisLine: {
lineStyle: {
width: -10, //线
color: [
[
1,
{
type: "radial",
x: 0.5,
y: 0.6,
r: 0.6,
colorStops: [
{
offset: 0.85,
color: "#031F46", // 0%
},
{
offset: 0.93,
color: "#060d25", // 100%
},
{
offset: 1,
color: "#12D7EF", // 100%
},
],
},
],
],
},
},
},
{
name: "外部指针",
type: "gauge",
radius: "90%",
axisLine: {
lineStyle: {
color: [
[dataArr / dataX - 0.001, "rgba(0,0,0,0)"],
[dataArr / dataX + 0.003, "#e43c59"],
[1, "rgba(0,0,0,0)"],
],
width: 33,
},
},
axisLabel: {
show: false,
},
axisTick: {
show: false,
},
splitLine: {
show: false,
},
itemStyle: {
show: false,
},
detail: {
show: false,
},
title: {
//
show: false,
},
data: [
{
name: "title",
value: dataArr,
},
],
pointer: {
show: false,
},
},
{
name: "内层带指针",
type: "gauge",
radius: "60%",
splitNumber: 10, //
min: 0, //
max: dataX, //
// 线
axisLine: {
lineStyle: {
color: [
[
1,
{
type: "radial",
x: 0.5,
y: 0.59,
r: 0.6,
colorStops: [
{
offset: 0.72,
color: "#032046",
},
{
offset: 0.94,
color: "#086989",
},
{
offset: 0.98,
color: "#0FAFCB",
},
{
offset: 1,
color: "#0EA4C1",
},
],
},
],
],
width: 1000,
},
},
// 线
splitLine: {
show: false,
},
// 线
axisTick: {
show: false,
},
//
axisLabel: {
show: false,
},
//
pointer: {
show: true,
length: "95%",
width: 5, //
},
//
itemStyle: {
color: "#01eaf8",
},
data: [
{
value: dataArr,
},
],
detail: {
show: false,
},
},
//
{
type: "gauge",
radius: "110%", //
center: ["50%", "127%"],
axisLine: {
show: true,
lineStyle: {
// 线
width: 4, //
color: [
[
1,
{
type: "radial",
x: 0.5,
y: 0,
r: 0.6,
colorStops: [
{
offset: 0,
color: "#00f3f9", // 0%
},
{
offset: 1,
color: "#000", // 100%
},
],
},
],
],
},
},
axisTick: {
//
show: false,
},
splitLine: {
// 线
show: false,
},
axisLabel: {
//
show: false,
},
pointer: {
//
show: false,
},
detail: {
//
show: false,
},
},
],
};
//
this.chartInstance.setOption(this.option, true);
},
screenAdapter() {
const titleFontSize = this.$refs.sys_charts.offsetWidth / 18;
const adapterOption = {};
this.chartInstance.setOption(adapterOption);
this.chartInstance.resize();
},
},
};
</script>
<style lang="scss" scoped>
.sys_charts {
width: 2rem;
height: 2rem;
}
</style>

15
src/views/centerairC/sysMonitor/components/titleImg.vue

@ -0,0 +1,15 @@
<template>
<div class="title-img">
<img src="../../../../assets/images/big.png" class="img1" alt="" />
</div>
</template>
<style lang="scss" scoped>
.title-img {
position: relative;
}
.img1 {
width: 0.8rem;
height: 0.5rem;
z-index: 10;
}
</style>

1039
src/views/centerairC/sysMonitor/hostDetails.vue

File diff suppressed because it is too large Load Diff

2253
src/views/centerairC/sysMonitor/index.vue

File diff suppressed because it is too large Load Diff

2658
src/views/centerairC/sysMonitor/monitorCenter.vue

File diff suppressed because it is too large Load Diff

344
src/views/centerairC/sysMonitor/performance.vue

@ -0,0 +1,344 @@
<template>
<div class="monitor" v-loading="loading">
<div class="monitor-top">
<img
class="title-left"
src="../../../assets/images/title-left.png"
alt=""
/>
<img
class="title-center"
src="../../../assets/images/title-center.png"
alt=""
/>
<img
class="title-right"
src="../../../assets/images/title-right.png"
alt=""
/>
<div class="sys-title">铭汉高效冷源站管理系统</div>
<!-- logo -->
<img src="../../../assets/images/logo-3.png" class="sys-logo" alt="" />
<div class="nowTime">{{ formattedDate }}</div>
<div class="monitor-time">已监测时长:{{ dayData }}</div>
<img
class="icon_warning"
src="../../../assets/images/warning.png"
title="报警记录"
@click="goWarning"
v-if="isShowWarning"
alt=""
/>
<img
class="icon_home"
src="../../../assets/images/icon_home.png"
title="首页"
@click="goSys"
alt=""
/>
<img
class="back-icon"
src="../../../assets/images/back-icon.png"
title="返回"
@click="goBack"
alt=""
/>
</div>
<div class="host-detail">
<div class="detail-top">
<div class="detail-top-left"></div>
<div class="detail-top-middle"></div>
<div class="detail-top-right"></div>
</div>
<div class="detail-bottom"></div>
</div>
</div>
</template>
<script>
import {
hostDetailsData,
hostTemData,
runTime,
} from "@/api/centerairC/sysMonitor";
import { alarmRecordList } from "@/api/alarm/alarmRecord";
import { cpmList } from "@/api/device/gather";
import LoadData from "./components/loadData.vue";
import hostChart from "./components/hostChart.vue";
import titleImg from "./components/titleImg.vue";
import lineSquare from "./components/lineSquare.vue";
import { format } from "@/utils/datetime";
export default {
name: "sysControl",
components: { LoadData, hostChart, titleImg, lineSquare },
data() {
return {
loading: false,
currentDate: new Date(),
nowTimer: null,
deviceName: "", //
hostData: [], //
rightHostData: [], //
automaticObj: {}, //
localObj: {}, //
badObj: {}, //
timeObj: {}, //
compressorData: [], //
temArray: [], //
isMagnetic: false,
isShowWarning: false, //
dayData: "", //
};
},
computed: {
formattedDate() {
const year = this.currentDate.getFullYear();
const month = String(this.currentDate.getMonth() + 1).padStart(2, "0");
const day = String(this.currentDate.getDate()).padStart(2, "0");
const hours = String(this.currentDate.getHours()).padStart(2, "0");
const minutes = String(this.currentDate.getMinutes()).padStart(2, "0");
const seconds = String(this.currentDate.getSeconds()).padStart(2, "0");
const weekDays = [
"星期日",
"星期一",
"星期二",
"星期三",
"星期四",
"星期五",
"星期六",
];
const weekDay = weekDays[this.currentDate.getDay()];
return `${year}${month}${day}${hours}:${minutes}:${seconds} ${weekDay}`;
},
},
created() {},
mounted() {
this.getHostDetailsData();
this.getDayData();
//
setTimeout(() => {
this.requestFullscreen();
}, 100); // 100
},
beforeDestroy() {
//
if (this.nowTimer) {
clearInterval(this.nowTimer);
}
},
methods: {
//
requestFullscreen() {
const element = document.documentElement;
console.log("全屏了吗");
if (element.requestFullscreen) {
element.requestFullscreen();
} else if (element.mozRequestFullScreen) {
// Firefox
element.mozRequestFullScreen();
} else if (element.webkitRequestFullscreen) {
// Chrome, Safari and Opera
element.webkitRequestFullscreen();
} else if (element.msRequestFullscreen) {
// IE/Edge
element.msRequestFullscreen();
}
},
// 退
exitFullscreen() {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.mozCancelFullScreen) {
// Firefox
document.mozCancelFullScreen();
} else if (document.webkitExitFullscreen) {
// Chrome, Safari and Opera
document.webkitExitFullscreen();
} else if (document.msExitFullscreen) {
// IE/Edge
document.msExitFullscreen();
}
},
//
goSys() {
this.exitFullscreen();
this.$router.push("/");
},
//
goBack() {
this.$router.back();
},
getHostDetailsData() {
//
// this.getHostParams(deviceLedgerId);
},
//
getDayData() {
runTime().then((res) => {
if (res.code == 200) {
this.dayData = res.data.runTime;
}
});
},
//
getAlarnStatus() {
let data = {
pageNum: 1,
pageSize: 10,
status: "0",
};
let timeArr = [getDay(0), getDay(0)];
alarmRecordList(this.addDateRange(data, timeArr)).then((res) => {
if (res.code == 200 && res.rows.length > 0) {
this.isShowWarning = true;
} else {
this.isShowWarning = false;
}
});
},
goWarning() {
this.exitFullscreen();
this.$router.push("/alarm/alarmRecord");
},
},
};
</script>
<style lang="scss" scoped>
.monitor {
width: 100%;
min-height: 100vh;
height: auto;
background-color: black;
color: #fff;
.monitor-top {
width: 100%;
display: flex;
flex-direction: row;
align-items: flex-start;
justify-content: space-between;
flex-wrap: nowrap;
padding: 0.1rem 0.2rem;
position: relative;
.title-left {
width: 3.41rem;
height: 0.8rem;
}
.title-center {
width: 9.46rem;
height: 0.69rem;
}
.title-right {
width: 5.04rem;
height: 0.61rem;
}
.sys-title {
position: absolute;
top: 40%;
left: 50%;
transform: translate(-50%, -50%);
font-size: 0.28rem;
color: #ffffff;
font-weight: bold;
z-index: 100;
}
.nowTime {
position: absolute;
top: 0.3rem;
right: 0.6rem;
font-size: 0.18rem;
color: #ffffff;
font-weight: bold;
z-index: 100;
}
.sys-logo {
width: 1.8rem;
height: 0.5rem;
position: absolute;
top: 0.26rem;
left: 0.8rem;
z-index: 10;
}
.monitor-time {
position: absolute;
top: 0.44rem;
left: 4.2rem;
z-index: 10;
font-size: 0.18rem;
color: #ffffff;
font-weight: bold;
}
.icon_warning {
position: absolute;
top: 0.33rem;
right: 4.4rem;
z-index: 10;
width: 0.3rem;
height: 0.27rem;
margin: 0 0.25rem 0 0.27rem;
cursor: pointer;
/* 添加闪烁动画 */
animation: blink 1s infinite;
}
@keyframes blink {
100% {
opacity: 1;
}
50% {
opacity: 0;
}
}
.icon_home {
position: absolute;
top: 0.33rem;
right: 4rem;
z-index: 10;
width: 0.3rem;
height: 0.27rem;
margin: 0 0.2rem 0 0.27rem;
cursor: pointer;
}
.back-icon {
position: absolute;
top: 0.33rem;
right: 3.7rem;
z-index: 10;
width: 0.3rem;
height: 0.27rem;
cursor: pointer;
}
}
.host-detail {
padding: 0.2rem;
width: 100%;
display: flex;
flex-direction: column;
.detail-top {
width: 100%;
display: flex;
flex-direction: row;
align-items: center;
justify-content: space-between;
.detail-top-left {
width: 7rem;
height: 4.4rem;
// background-color: aquamarine;
position: relative;
}
.detail-top-right {
width: calc(100% - 7.25rem);
height: 4.4rem;
}
}
.detail-bottom {
height: 2.6rem;
margin-top: 0.3rem;
margin-left: 0.25rem;
display: flex;
flex-direction: row;
justify-content: space-between;
}
}
}
</style>

14
src/views/device/comm/index.vue

@ -47,7 +47,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:cmp:add']">
<el-button
type="primary"
icon="el-icon-plus"
@ -58,7 +58,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['device:cmp:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -70,7 +70,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['device:cmp:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -81,7 +81,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -91,7 +91,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -144,7 +144,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['device:cmp:edit']"
>修改</el-button
>
<el-button
@ -152,7 +152,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['device:cmp:remove']"
>删除</el-button
>
</template>

14
src/views/device/gateway/index.vue

@ -55,7 +55,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:gw:add']">
<el-button
type="primary"
icon="el-icon-plus"
@ -66,7 +66,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['device:gw:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -78,7 +78,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['device:gw:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -89,7 +89,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -99,7 +99,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -170,7 +170,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['device:gw:edit']"
>修改</el-button
>
<el-button
@ -178,7 +178,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['device:gw:remove']"
>删除</el-button
>
</template>

14
src/views/device/gather/index.vue

@ -92,7 +92,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:cpm:add']">
<el-button
type="primary"
icon="el-icon-plus"
@ -103,7 +103,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['device:cpm:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -115,7 +115,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['device:cpm:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -126,7 +126,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -136,7 +136,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -281,7 +281,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['device:cpm:edit']"
>修改</el-button
>
<el-button
@ -289,7 +289,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['device:cpm:remove']"
>删除</el-button
>
</template>

14
src/views/device/ledger/index.vue

@ -77,7 +77,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:ledger:add']">
<el-button
type="primary"
icon="el-icon-plus"
@ -88,7 +88,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['device:ledger:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -100,7 +100,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['device:ledger:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -111,7 +111,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -121,7 +121,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -192,7 +192,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['device:ledger:edit']"
>修改</el-button
>
<el-button
@ -200,7 +200,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['device:ledger:remove']"
>删除</el-button
>
</template>

14
src/views/device/maintenance/index.vue

@ -153,7 +153,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:maintain:add']">
<el-button
type="primary"
icon="el-icon-plus"
@ -164,7 +164,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['device:maintain:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -176,7 +176,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['device:maintain:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -187,7 +187,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -197,7 +197,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -263,7 +263,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['device:maintain:edit']"
>修改</el-button
>
<el-button
@ -271,7 +271,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['device:maintain:remove']"
>删除</el-button
>
</template>

14
src/views/device/qrCode/index.vue

@ -47,7 +47,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:qr:create']">
<el-button
type="primary"
icon="el-icon-folder-add"
@ -58,7 +58,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['device:qr:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -70,7 +70,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['device:qr:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -81,7 +81,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -91,7 +91,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -171,7 +171,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['device:qr:edit']"
>修改</el-button
>
<el-button
@ -179,7 +179,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['device:qr:remove']"
>删除</el-button
>
</template>

14
src/views/device/spare/index.vue

@ -63,7 +63,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:spare:add']">
<el-button
type="primary"
icon="el-icon-plus"
@ -74,7 +74,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="success-btn" v-hasPermi="['system:post:edit']">
<div class="success-btn" v-hasPermi="['device:spare:edit']">
<el-button
type="success"
icon="el-icon-edit"
@ -86,7 +86,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="delete-btn" v-hasPermi="['system:post:remove']">
<div class="delete-btn" v-hasPermi="['device:spare:remove']">
<el-button
type="delete"
icon="el-icon-delete"
@ -97,7 +97,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -107,7 +107,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"
@ -154,7 +154,7 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
v-hasPermi="['device:spare:edit']"
>修改</el-button
>
<el-button
@ -162,7 +162,7 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
v-hasPermi="['device:spare:remove']"
>删除</el-button
>
</template>

8
src/views/device/spareInOut/index.vue

@ -77,7 +77,7 @@
<el-row :gutter="10" class="mb8">
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:spareInOut:add']">
<el-button type="primary" size="mini" @click="handleOut"
><svg-icon
icon-class="Outbound"
@ -87,7 +87,7 @@
</div>
</el-col>
<el-col :span="1.5">
<div class="primary-btn" v-hasPermi="['system:post:add']">
<div class="primary-btn" v-hasPermi="['device:spareInOut:add']">
<el-button type="primary" size="mini" @click="handleIn"
><svg-icon
icon-class="Inbound"
@ -96,7 +96,7 @@
>
</div>
</el-col>
<el-col :span="1.5">
<!-- <el-col :span="1.5">
<div class="warning-btn" v-hasPermi="['system:post:export']">
<el-button
type="warning"
@ -106,7 +106,7 @@
>导出</el-button
>
</div>
</el-col>
</el-col> -->
<right-toolbar
:showSearch.sync="showSearch"
@queryTable="getList"

2
src/views/region/index.vue

@ -178,7 +178,6 @@
type="text"
icon="el-icon-edit"
@click="handleUpdate(scope.row)"
v-hasPermi="['system:post:edit']"
>修改</el-button
>
<el-button
@ -186,7 +185,6 @@
type="text"
icon="el-icon-delete"
@click="handleDelete(scope.row)"
v-hasPermi="['system:post:remove']"
>删除</el-button
>
</template>

8
src/views/temSys/temHistory/index.vue

@ -18,6 +18,7 @@
clearable
v-model="selectedValue"
@change="handleCascaderChange"
filterable
></el-cascader>
</el-form-item>
<el-form-item label="时间范围" prop="gwName">
@ -251,7 +252,7 @@ export default {
<style lang="scss" scoped>
.elCascader {
width: 290px;
width: 350px;
}
.history {
width: 100%;
@ -306,3 +307,8 @@ export default {
}
}
</style>
<style scoped>
.elCascader >>>.el-input__inner::placeholder {
color: transparent !important;
}
</style>

Loading…
Cancel
Save