• echarts


    <template>
      <div class="server-charts">
        <!-- 为ECharts准备一个具备大小(宽高)的Dom -->
        <div :id="IdName" class="chart-block"></div>
         <div class="chart-bottom">
          <div class="left">
            <el-button class="el-icon-d-arrow-left"></el-button>
          </div>
           <div class="center">
            <el-button class="el-icon-zoom-out"></el-button>
            <el-button class="all">全貌</el-button>
            <el-button class="el-icon-zoom-in"></el-button>
          </div>
          <div class="right">
            <el-button class="el-icon-d-arrow-right"></el-button>
          </div>
        </div>
      </div>
    </template>

    <script>
    // 引入echarts
    import * as echarts from 'echarts'
    // 引入dayJS
    import dayjs from 'dayjs'
    // 引入获取数据接口
    import { getServerData } from '@/api/report.js'

    export default {
      name: 'server-charts',
      props: ['IdName'],
      data () {
        return {
          // 入参
          testRunId: '11',
          indices: ['cpu', 'mem', 'diskiops', 'diskmbps', 'netiops', 'netmbps'],
          interval: 10,
          // 图标数据
          option: {
            title: {
              text: `${this.IdName}(%)`,
              padding: 20
            },
            tooltip: {
              trigger: 'axis'
            },
            legend: {
              icon: 'circle',
              right: 55,
              top: 20
            },
            grid: {
              left: '3%',
              right: '3%',
              top: '20%',
              bottom: '11%',
              containLabel: true
            },
            // toolbox: {
            //   feature: {}
            // },
            xAxis: {
              type: 'category',
              boundaryGap: false,
              data: []
            },
            yAxis: {
              min: 0,
              max: 100,
              // splitNumber: 5,
              type: 'value',
              axisLabel: {
                show: true,
                interval: 'auto',
                formatter: '{value} %'
              },
              splitLine: {
                lineStyle: {
                  type: 'dashed'
                }
              }
            },
            series: []
          },
          // 时间选择器
          pickerOptions: {
            shortcuts: [{
              text: '最近一周',
              onClick (picker) {
                const end = new Date()
                const start = new Date()
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 7)
                picker.$emit('pick', [start, end])
              }
            }, {
              text: '最近一个月',
              onClick (picker) {
                const end = new Date()
                const start = new Date()
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 30)
                picker.$emit('pick', [start, end])
              }
            }, {
              text: '最近三个月',
              onClick (picker) {
                const end = new Date()
                const start = new Date()
                start.setTime(start.getTime() - 3600 * 1000 * 24 * 90)
                picker.$emit('pick', [start, end])
              }
            }]
          },
          value1: [new Date(2000, 10, 10, 10, 10), new Date(2000, 10, 11, 10, 10)],
          value2: ''
        }
      },
      computed: {
        refreshChartStatus () {
          return this.$store.getters.getRefreshChart
        }
      },
      watch: {
        // 侧边栏变化重载图表
        refreshChartStatus () {
          const myChart = echarts.getInstanceByDom(document.getElementById(this.IdName))
          this.$nextTick(() => {
            myChart.resize()
          })
        }
      },
      methods: {
        // echarts 自适应大小
        chartResize () {
          this.myChart = echarts.init(document.getElementById(this.IdName))
          this.$nextTick(() => {
            this.myChart.resize()
          })
          this.myChart.setOption(this.option)
          window.addEventListener('resize', () => {
            this.myChart.resize()
          })
        },
        // 获取图表数据
        async getWorkData (params) {
          const { data } = await getServerData(params)
          // 数据填充option
          var res = data.data
          res.indices.forEach((item) => {
            const ydata = []
            for (var i = 0; i < item.data.length; i++) {
              ydata.push(item.data[i].split('%')[0])
            }
            var seriesItem = {
              name: item.name,
              type: 'line',
              data: ydata,
              symbol: 'none', // 去掉折现交接处圆圈
              symbolSize: 2, // 折线粗细
              color: 'rgb(75, 168, 255)'
            }
            this.option.series.push(seriesItem)
          })
          // 处理x轴坐标
          // var sDate = dayjs(res.startdate).format('YYYY/MM/DD H:m:s')
          res.indices[0].data.forEach((item, i) => {
          // 使用dayJS处理时间相加
            var sDate = dayjs(res.startdate).add(res.interval * i, 's').format('YYYY/M/DD H:m:s')
            this.option.xAxis.data.push(sDate)
          })
          // 绘制echarts图表
          this.myChart.setOption(this.option)
        }
      },
      created () {
        // 调用接口
        if (this.IdName === 'cpu') {
          this.getWorkData({
            testRunId: this.testRunId,
            indices: this.indices[0],
            interval: this.interval
          })
        } else if (this.IdName === 'mem') {
          this.getWorkData({
            testRunId: this.testRunId,
            indices: this.indices[1],
            interval: this.interval
          })
        } else if (this.IdName === 'diskiops') {
          this.getWorkData({
            testRunId: this.testRunId,
            indices: this.indices[2],
            interval: this.interval
          })
        } else if (this.IdName === 'diskmbps') {
          this.getWorkData({
            testRunId: this.testRunId,
            indices: this.indices[3],
            interval: this.interval
          })
        } else if (this.IdName === 'netiops') {
          this.getWorkData({
            testRunId: this.testRunId,
            indices: this.indices[4],
            interval: this.interval
          })
        } else if (this.IdName === 'netmbps') {
          this.getWorkData({
            testRunId: this.testRunId,
            indices: this.indices[5],
            interval: this.interval
          })
        }
      },
      mounted () {
        this.chartResize()
      }
    }
    </script>

    <style lang="less" scoped>
      .server-charts {
        padding: 5px 0;
        border: 1px solid #e6e6e6;
        position: relative;
        .chart-block {
          100%;
          height: 447px;
        }
        .check-box {
          position: relative;
          .tital {
            position: absolute;
            right: 310px;
            top: 20px;
            font-size: 14px;
            height: 19px;
            line-height: 19px;
          }
          .el-checkbox-group {
            300px;
            position: absolute;
            right: 0;
            top: 20px;
            .el-checkbox {
              z-index: 2;
              margin-right: 20px;
              margin-bottom: 10px;
            }
          }
        }
          .chart-bottom {
          display: flex;
          justify-content: space-between;
          100%;
          padding: 0 2%;
          position: absolute;
          bottom: 20px;
          .center {
            display: flex;
            justify-content: center;
          }
          .el-button {
            padding: 8px 8px;
            border-radius: 0;
          }
          /deep/ .all {
            padding: 8px 20px!important;
          }
        }
      }
    </style>
  • 相关阅读:
    Oracle(PLSQL)入门学习五
    visual studio 调试 不进断点 断点失效 提示当前不会命中该断点等问题解决
    java maven项目 导入jar包注意
    sql语句 like 条件查询
    sql语句 查询分组后的每组的第一条或最后一条数据
    文件上传的一些验证(文件类型)
    图片上传回显
    oracle数据库建表设置自增主键
    bootstrap时时提醒填入数据是否与数据库数据重复
    Oracle分析函数列表分享
  • 原文地址:https://www.cnblogs.com/bwnnxxx123/p/15826286.html
Copyright © 2020-2023  润新知