<template> <el-row :gutter="20" class="panel-group"> <div> <el-col> <div class="flagBoxStyle"> <div class="flagStyle" /> <div>数据总体情况</div> </div> </el-col> </div> <div v-for="card in dataGroup" :key="card.title"> <el-col v-if="hasPerm(card.permission)" :lg="{span:'4-8'}" :md="8" :sm="12" :xs="24" class="card-panel-col"> <card :title="card.title" :context="card.context" :flags="card.flags" :icon="card.icon" :color="card.color" @click.native="goPage(card)" /> </el-col> </div> <el-dialog append-to-body :visible.sync="dialogFormVisible"> <el-table v-loading="listLoading" :data="list" class="table" border> <el-table-column v-for="column in columns" :key="column.value" :label="column.text" :width="column.width" :align="column.align" show-overflow-tooltip > <template v-slot="scope"> <span>{{ scope.row[column.value] }}</span> </template> </el-table-column> </el-table> </el-dialog> </el-row> </template> <script> import Card from '@/components/BigData/Card' import { wellCountByBfzt } from '@/api/well/well' import { deviceStaticByStatus, alarmNowStatic } from '@/api/data/dataStatics' import { jobCountByStatus } from '@/api/alarm/job' export default { name: 'PanelGroup', components: { Card }, data() { return { dialogFormVisible: false, listLoading: false, columns: [ { text: '设备编号', value: '', align: 'center' }, { text: '设备类型', value: '', align: 'center' }, { text: '点位编号', value: '', align: 'center' }, { text: '最新记录上传时间', width: '200', value: '', align: 'center' }, { text: '离线天数', value: '', align: 'center' } ], // 显示列 dataGroup: [ { title: '井', context: '--', flags: '条', icon: 'icon-well', color: '#40c9c6', permission: '/well/list' }, { title: '设备', context: '--', flags: '个', icon: 'icon-device', color: '#36a3f7', permission: '/device/list' }, { title: '今日数据', context: '--', flags: '条', icon: 'icon-alarm', color: '#f4516c', permission: '/alarm/now' }, { title: '离线设备', context: '--', flags: '个', icon: 'icon-order', color: '#f4516c', permission: '/job/list' }, { title: '当前报警', context: '--', flags: '条', icon: 'icon-alarm', color: '#40c9c6', permission: '/well/list' } ] } }, created() { this.getWellCount() this.getDeviceCount() this.getAlarmCount() this.getJobCount() }, methods: { goPage(card) { if (card.title === '离线设备') { this.dialogFormVisible = true } }, getWellCount() { wellCountByBfzt().then(response => { this.dataGroup[0].context = response.data.total }) }, getDeviceCount() { deviceStaticByStatus().then(response => { this.dataGroup[1].context = response.data.total }) }, getAlarmCount() { alarmNowStatic().then(response => { this.dataGroup[2].context = response.data.total }) }, getJobCount() { jobCountByStatus().then(response => { const data = response.data const total = data.beforeGet + data.beforeConfirm + data.inHandle this.dataGroup[3].context = total }) } } } </script> <style lang="scss" scoped> .flagBoxStyle { display: flex; margin-bottom: 20px; margin-top: -20px; } .flagBoxStyle div:nth-child(2){ line-height: 30px; font-weight: 600; } .flagStyle { width: 4px; height: 30px; margin-right: 6px; background: rgb(64 121 242); } .panel-group { margin-top: 18px; .card-panel-col { margin-bottom: 32px; } .card-panel { height: 108px; cursor: pointer; font-size: 12px; position: relative; overflow: hidden; color: #666; background: #fff; box-shadow: 4px 4px 40px rgba(0, 0, 0, .05); border-color: rgba(0, 0, 0, .05); &:hover { .card-panel-icon-wrapper { color: #fff; } .icon-people { background: #40c9c6; } .icon-message { background: #36a3f7; } .icon-money { background: #f4516c; } .icon-shopping { background: #34bfa3 } } .icon-people { color: #40c9c6; } .icon-message { color: #36a3f7; } .icon-money { color: #f4516c; } .icon-shopping { color: #34bfa3 } .card-panel-icon-wrapper { float: left; margin: 14px 0 0 14px; padding: 16px; transition: all 0.38s ease-out; border-radius: 6px; } .card-panel-icon { float: left; font-size: 48px; } .card-panel-description { float: right; font-weight: bold; margin: 26px; margin-left: 0px; .card-panel-text { line-height: 18px; color: rgba(0, 0, 0, 0.45); font-size: 16px; margin-bottom: 12px; } .card-panel-num { font-size: 20px; } } } } @media only screen and (min-width: 768px) { .el-col-sm-4-8 { width: 20%; } .el-col-sm-offset-4-8 { margin-left: 20%; } .el-col-sm-pull-4-8 { position: relative; right: 20%; } .el-col-sm-push-4-8 { position: relative; left: 20%; } } @media only screen and (min-width: 992px) { .el-col-md-4-8 { width: 20%; } .el-col-md-offset-4-8 { margin-left: 20%; } .el-col-md-pull-4-8 { position: relative; right: 20%; } .el-col-md-push-4-8 { position: relative; left: 20%; } } @media only screen and (min-width: 1200px) { .el-col-lg-4-8 { width: 20%; } .el-col-lg-offset-4-8 { margin-left: 20%; } .el-col-lg-pull-4-8 { position: relative; right: 20%; } .el-col-lg-push-4-8 { position: relative; left: 20%; } } @media only screen and (min-width: 1920px) { .el-col-xl-4-8 { width: 20%; } .el-col-xl-offset-4-8 { margin-left: 20%; } .el-col-xl-pull-4-8 { position: relative; right: 20%; } .el-col-xl-push-4-8 { position: relative; left: 20%; } } </style>