<template> <div class="app-container"> <div v-if="checkPermission(['manage isadmin'])"> <el-row :gutter="20"> <el-col :span="20"> <!-- 用户操作 --> <div> <el-row :gutter="20"> <el-col :span="6"><el-card shadow="always">用户数量<span style="margin-left: 12px;color: #606266;">{{ synthesizecount.usercount }}</span>个</el-card></el-col> <el-col :span="6"><el-card shadow="always">设备数量<span style="margin-left: 12px;color: #409EFF;">{{ synthesizecount.devicecount }}</span>个</el-card></el-col> <el-col :span="6"><el-card shadow="always">在线设备<span style="margin-left: 12px;color: green;">{{ synthesizecount.device_online }}</span>个</el-card></el-col> <el-col :span="6"><el-card shadow="always">报警数量<span style="margin-left: 12px;color: #e50015;">{{ synthesizecount.device_alarm }}</span>个</el-card></el-col> <el-col :span="6"><el-card shadow="always">未报警数量<span style="margin-left: 12px;color: green;">{{ synthesizecount.device_normal }}</span>个</el-card></el-col> <el-col :span="6"><el-card shadow="always">设备故障<span style="margin-left: 12px;color: #5d5f5f;">{{ synthesizecount.device_offline }}</span>个</el-card></el-col> <el-col :span="6"><el-card shadow="always">今天报警次数<span style="margin-left: 12px;color: #F56C6C;">{{ synthesizecount.timedevicepolice }}</span>个</el-card></el-col> </el-row> <el-row :align="'middle'"> <el-card class="box-card" style="margin-top:12px;height: 200px;"> <el-col :span="4" style="text-align: center;"> <el-progress type="dashboard" :percentage="synthesizecount.percent_alarm" color="red"></el-progress> <el-tooltip class="item" effect="red" :content="synthesizecount.percent_alarm + '%'" placement="top-start"> <p>当前报警率</p> </el-tooltip> </el-col> <el-col :span="4" style="text-align: center;"> <el-progress type="dashboard" :percentage="synthesizecount.percent_online" color="green"></el-progress> <el-tooltip class="item" effect="green" :content="synthesizecount.percent_online + '%'" placement="top-start"> <p>设备在线率</p> </el-tooltip> </el-col> <el-col :span="4" style="text-align: center;"> <el-progress type="dashboard" :percentage="memory" :color="colors"></el-progress> <el-tooltip class="item" effect="dark" :content="memory + 'MB'" placement="top-start"> <p>项目运行速度</p> </el-tooltip> </el-col> <el-col :span="4" style="text-align: center;"> <el-progress type="dashboard" :percentage="base_path" :color="colors"></el-progress> <el-tooltip class="item" effect="dark" :content="base_path * 10 + 'MB'" placement="top-start"> <p>项目容量</p> </el-tooltip> </el-col> <el-col :span="4" style="text-align: center;"> <el-progress type="dashboard" :percentage="end_time" :color="colors"></el-progress> <el-tooltip class="item" effect="dark" :content="end_time + 'S'" placement="top-start"> <p>访问接口速度</p> </el-tooltip> </el-col> <el-col :span="4" style="text-align: center;"> <el-progress type="dashboard" :percentage="databas" :color="colors"></el-progress> <el-tooltip class="item" effect="dark" :content="databas + 'S'" placement="top-start"> <p>访问数据库速度</p> </el-tooltip> </el-col> </el-card> </el-row> </div> <!-- 混合统计 --> <el-card class="box-card" style="margin-top:12px;padding-bottom:24px"> <div class="chart-container" style="position: relative; top: 2px; height: 560px;"> <chart height="100%" width="100%" /> </div> </el-card> </el-col> <el-col :span="4"> <!-- 时间线 --> <el-card class="box-card" style="width: 210px;position: relative;left: -13px;height: 908px;overflow:scroll"> <div style="position: relative;left: -55px;"> <el-timeline :reverse="reverse"> <el-timeline-item v-for="(activity, index) in activities" :key="index" :timestamp="activity.timestamp" style="width: 202px;">{{ activity.instructions }}<div style="padding-top: 7px;">ip:{{ activity.operationip }}</div></el-timeline-item> </el-timeline> </div> </el-card> </el-col> </el-row> </div> <div v-if="checkPermission(['manage device'])"> <!-- 用户首页 --> <el-row :gutter="20"> <el-col :span="6"><el-card shadow="always">设备数量<span style="margin-left: 12px;color: #1426fe;">{{ uerscount.devicecount }}</span>个</el-card></el-col> <el-col v-if="uerscount.devicepolice != 0" :span="6"><el-card shadow="always">今日正常设备<span style="margin-left: 12px;color: #409EFF;">{{ uerscount.devicepolice }}</span>个</el-card></el-col> <el-col v-if="uerscount.devicepolice == 0" :span="6"><el-card shadow="always">今日正常设备<span style="margin-left: 12px;color: #409EFF;">{{ uerscount.devicecount }}</span>个</el-card></el-col> <el-col :span="6"><el-card shadow="always">今天报警数量<span style="margin-left: 12px;color: #E6A23C;">{{ uerscount.timedevicepolice }}</span>个</el-card></el-col> <el-col :span="6"><el-card shadow="always">设备服务分析<span :style="{color: uerscount.timedevicepolice === 0 ? '#67C23A' : (uerscount.timedevicepolice > 10 ? '#909399': (uerscount.timedevicepolice > 20 ? '#E6A23C' : '#F56C6C'))}" style="margin-left: 12px;">{{ uerscount.timedevicepolice === 0 ? '正常' : (uerscount.timedevicepolice > 10 ? '良好': (uerscount.timedevicepolice > 20 ? '较差' : '极差')) }}</span></el-card></el-col> </el-row> <el-card class="box-card" style="margin-top:12px;padding-bottom:24px"> <div class="chart-container" style="position: relative; top: 2px; height: 560px;"> <LineChart height="100%" width="100%" /> </div> </el-card> </div> </div> </template> <script> import Chart from '@/components/Charts/MixChart'; import LineChart from '@/components/Charts/LineMarker'; import checkPermission from '@/utils/permission'; import { homepagecount, timeline, Project_statistics, UserStatistics } from '@/api/homepage'; export default { name: 'Dashboard', components: { Chart, LineChart }, data() { return { reverse: false, synthesizecount: [], uerscount: [], activities: [], memory: 0, base_path: 0, end_time: 0, databas: 0, rand: 0, colors: [ { color: '#f56c6c', memory: 20 }, { color: '#e6a23c', memory: 40 }, { color: '#5cb87a', memory: 60 }, { color: '#1989fa', memory: 80 }, { color: '#6f7ad3', memory: 100 }, ], }; }, created() { this.getList(); this.timeline(); this.Project(); this.UserStatistics(); }, methods: { checkPermission, getList() { homepagecount() .then(response => { this.synthesizecount = response.data; }) .catch(err => { console.log(err); }); }, timeline() { timeline() .then(response => { this.activities = response.data; }) .catch(err => { console.log(err); }); }, Project() { Project_statistics() .then(response => { this.base_path = response.data.base_path; this.memory = response.data.memory; this.end_time = response.data.end_time; this.databas = response.data.dabatime; this.rand = response.data.rand; }) .catch(err => { console.log(err); }); }, UserStatistics() { UserStatistics() .then(response => { if (response.code === 200) { this.uerscount = response.data; } }) .catch(err => { console.log(err); }); }, }, }; </script> <style rel="stylesheet/scss" lang="scss" scoped> .app-container{ .chart-container{ position: relative; width: 100%; top: 40px; // height: calc(100vh - 84px); } } </select>