Echarts---折線圖--柱狀圖


 

<template>
  <div>
    <h2 style="float: right">
      <a-icon type="user" style=""/>{{ username }}
    </h2>
    <div>
      <a-row :gutter="24">
        <a-col :md="12" :lg="12">
          <h3>心率</h3>
          <span>{{ xinludata }}</span>
          <div id="myChart" class="notfound"></div>
          <h3>力竭狀態</h3>
          <span>{{status}}</span>
          <div class="progress">
            <div class="progress-bar progress-bar-success" :style="{width: widthData + '%'}">
              <span class="sr-only">{{widthData}}%</span>
            </div>
          </div>
        </a-col>
        <a-col :md="12" :lg="12">
          <span>{{ peisudata }}</span>
            <div id="myChart1" class="notfound"></div>
        </a-col>
      </a-row>
    </div>
    <a-row>
      <a-col span="10">
        <a-button @click="handleGoBack">返回</a-button>
      </a-col>
    </a-row>
  </div>
</template>
<script src="https://unpkg.com/viser-vue/umd/viser-vue.min.js"></script>
<script>
import moment from 'moment'
import { STable } from '@/components'
import { getRoleList } from '@/api/manage'
import { getTrainingRecordPrecise } from '@/api/training'
export default {
  name: 'TrainingStatus',
  components: {
    STable,
  },
  data() {
    return {
      dateList: [],
      valueList: [],
      peopleparameterdata: [],//原生跑后台數據
      sourceData2:[], //原生化跑整理數據
      keydata:[],
      widthData: 0,//力竭狀態數據
      status: '',
      xinludata: '',
      peisudata: '',
      username: '' // 隊員名字
    }
  },
  props: ['record'],
  created () {
    // console.log('record是個啥:' + JSON.stringify(this.record))
    const getparam = {
      course_training_id: this.record.course_training_id,
      kind: 1
    }
    getRoleList({ t: new Date() })
    // console.log('向后台傳遞的參數' + JSON.stringify(getparam))
    getTrainingRecordPrecise(getparam).then(res => {
      // console.log('返回的狀態數據' + JSON.stringify(res))
      this.username = res.data[0].name
      if (res.data[0].status == 0) {
       this.status = '暫無狀態數據!'
      } else {
        this.widthData = res.data[0].status
      }
      if (res.data[0].heart_rate.xaxis.length !== 0) {
        // this.trainingdata = res.data[0].heart_rate
        this.dateList = res.data[0].heart_rate.xaxis
        this.valueList =  res.data[0].heart_rate.data
        this.drawLine()
      } else {
        this.xinludata = '暫無心率數據'
      }
      if (res.data[0].pace.length !== 0) {
        console.log('原生跑數據' + JSON.stringify(res.data[0].pace))
        this.peopleparameterdata = res.data[0].pace
        for (var j = 0; j < this.peopleparameterdata.length; j++) {
          var key1 = j + 1;
          this.keydata[j] = key1
          // console.log('沒變化之前的數據' + this.peopleparameterdata[j])
          let value4 = this.peopleparameterdata[j].replace(/(\w*)分(.*)秒/g, '$1:$2')
          let value2 = value4.split(':');
          // 這里可以換成以分鍾為單位--
         // var hs = parseInt(value2[0] * 60);
          let ms = parseInt(value2[0] * 1);
          let ss = (value2[1] * 0.01);
          /*var hs = parseInt(value2[0] * 3600);
          var ms = parseInt(value2[1] * 60);
          var ss = parseInt(value2[2]);*/
          var value3 = ms + ss;
          this.sourceData2[j] = value3
        }
        console.log('原生跑配速key值' + this.keydata)
        console.log('原生跑配速' + this.sourceData2)
        this.drawLine1()
      } else {
        console.log('暫無配速數據')
        this.peisudata = '暫無配速數據'
        this.widthData = res.data[0].status
      }
    })
  },
  mounted(){
    // this.drawLine();
  },
  methods: {
    moment,
    drawLine(){
      let myChart = this.$echarts.init(document.getElementById('myChart'))
      // 繪制圖表
      myChart.setOption({
        // Make gradient line here
        backgroundColor: ['#081944'], // 全圖默認背景
        grid: [{
          show: false,
          borderWidth: 1,
        }],
        visualMap: [{
          show: false, // 是否顯示 visualMap-piecewise 組件。如果設置為 false,不會顯示,但是數據映射的功能還存在。
          type: 'continuous', // 定義為連續型 visualMap
          seriesIndex: 0, // 指定取哪個系列的數據,即哪個系列的 series.data。默認取所有系列
          min: 0, // 指定 visualMapPiecewise 組件的最小值。
          max: 400
        }],
        // 提示框組件
        tooltip: {
          trigger: 'axis' // 觸發類型。坐標軸觸發,主要在柱狀圖,折線圖等會使用類目軸的圖表中使用/none什么都不觸發
        },
        xAxis: [{
          data: this.dateList,
          show: true //是否顯示x軸
        }],
        yAxis: [{
          nameTextStyle: { // 坐標軸名稱的文字樣式。
            color: '#63B8FF',
            fontWeight:'bold', // 坐標軸名稱文字字體的粗細
            fontSize: 15
          },
          name: '心率次數/bmp',
          splitLine: {
            show: true, // x軸、y軸顯示網格線,坐標軸在 grid 區域中的分隔線
            lineStyle:{
              // 使用深淺的間隔色--分隔線顏色,可以設置成單個顏色。也可以設置成顏色數組,分隔線會按數組中顏色的順序依次循環設置顏色。
              color: ['#4F5258', '#30394F']
            }
          }
        }],
        // 系列列表。每個系列通過 type 決定自己的圖表類型
        series: [{
          type: 'line', // 線條
          showSymbol: false, // 是否顯示 symbol符號, 如果 false 則只有在 tooltip hover 的時候顯示。
          data: this.valueList,
          lineStyle: {color: '#BA3945'}, // 線條樣式
          markPoint: { // 圖表標注
            data: [
              {
                type: 'max',
                name: '最高心率',
                label: {
                  formatter: "{c}"+"/bmp",
                  color: '#CCCCCC',
                  show: true,
                  offset: [-5,-10] // 是否對文字進行偏移。默認不偏移
                },
                symbolSize: [1, 1]
              },
              {
                type: 'min',
                name: '最小心率',
                label: {
                  formatter: "{c}"+"/bmp",
                  color: '#CCCCCC',
                  show: true,
                  position: 'bottom',
                  offset: [-5,5] // 是否對文字進行偏移。默認不偏移
                },
                symbolSize: [1, 1] // 標記的大小,可以設置成諸如 10 這樣單一的數字,也可以用數組分開表示寬和高,例如 [20, 10] 表示標記寬為20,高為10。
              }
            ],
            label: { // 標注的文本
              show: true
            },
            itemStyle: {
              color: '#081944', // 圖形的顏色--設置這個是為了隱藏掉圖標
              opacity: 1 // 圖形透明度。支持從 0 到 1 的數字,為 0 時不繪制該圖形。
            }
          }
        }]
      });
    },
    drawLine1(){
      let myChart1 = this.$echarts.init(document.getElementById('myChart1'))
      // 繪制圖表
      myChart1.setOption({
        color: ['#3398DB'], // 柱狀條顏色默認色板
        tooltip : { // 提示框
          trigger: 'axis', // 觸發類型'axis坐標軸觸發,主要在柱狀圖,折線圖等會使用類目軸的圖表中使用
          axisPointer : {            // 坐標軸指示器,坐標軸觸發有效
            type : 'shadow'
          }
        },
        grid: {
          left: '3%',
          right: '4%',
          bottom: '3%',
          containLabel: true // 區域是否包含坐標軸的刻度標簽。
        },
        xAxis : [
          {
            type : 'value',  // 數值軸,適用於連續數據
            show: false //是否顯示x軸
          }
        ],
        yAxis : [
          {
            type : 'category', // 坐標軸類型- 類目軸,適用於離散的類目數據,為該類型時必須通過 data 設置類目數據
            data : ['1', '2', '3', '4', '5'],
            axisTick: { // 坐標軸刻度相關設置-
              alignWithLabel: true // 類目軸中在 boundaryGap 為 true 的時候有效,可以保證刻度線和標簽對齊
            },
            nameTextStyle: { // 坐標軸名稱的文字樣式。
              color: '#63B8FF',
              fontWeight:'bold', // 坐標軸名稱文字字體的粗細
              fontSize: 15
            },
            name: '配速/分鍾',
            axisTick: {
              show: false
            },
            axisLine: {
              show: false // 是否顯示坐標軸軸線。
            }
          }
        ],
        series : [
          {
            name:'配速時長',
            type:'bar', // 柱狀/條形圖
            barMaxWidth: '50%', // 柱條的最大寬度,不設時自適應。支持設置成相對於類目寬度的百分比
            data:[200, 334, 390, 330, 220],
            label:{ // 圖形上的文本標簽,可用於說明圖形的一些數據信息,比如值,名稱等
              normal: {
                formatter: "{c}"+"/分鍾",
                show: true,
                position: 'insideLeft',
                offset: [20,0] // 是否對文字進行偏移。默認不偏移
              }
            },
            markPoint: { // 圖表標注
              data: [
                {
                  type: 'max',
                  name: '最慢',
                  label: {
                    formatter: "{b}", // {b}:數據名
                    // color: '#CCCCCC',
                    show: true,
                    offset: [15,0]
                  },
                  symbolSize: [1, 1]
                },
                {
                  type: 'min',
                  name: '最快',
                  label: {
                    formatter: "最快" ,// {c}:數據值
                    // color: '#CCCCCC',
                    show: true,
                    offset: [15,0]
                    //position: 'bottom',
                  },
                  symbolSize: [1, 1] // 標記的大小,可以設置成諸如 10 這樣單一的數字,也可以用數組分開表示寬和高,例如 [20, 10] 表示標記寬為20,高為10。
                }
              ],
              // symbol: 'none', // 標記的圖形。circle-圓形,rect-方形
              label: { // 標注的文本
                show: true
              },
              itemStyle: {
                color: '#081944', // 圖形的顏色--設置這個是為了隱藏掉圖標
                opacity: 1 // 圖形透明度。支持從 0 到 1 的數字,為 0 時不繪制該圖形。
              }
            }
          }
        ]
      })
    },
    handleGoBack () {
      this.$emit('onGoBack')
    },
    getFormatDate (times) {
      var nowDate = new Date(times);
      var year = nowDate.getFullYear();
      var month = nowDate.getMonth() + 1 < 10 ? "0" + (nowDate.getMonth() + 1) : nowDate.getMonth() + 1;
      var date = nowDate.getDate() < 10 ? "0" + nowDate.getDate() : nowDate.getDate();
      var hour = nowDate.getHours() < 10 ? "0" + nowDate.getHours() : nowDate.getHours();
      var minute = nowDate.getMinutes() < 10 ? "0" + nowDate.getMinutes() : nowDate.getMinutes();
      var second = nowDate.getSeconds() < 10 ? "0" + nowDate.getSeconds() : nowDate.getSeconds();
      //return year + "-" + month + "-" + date + " " + hour + ":" + minute + ":" + second;
      return  hour + ":" + minute +":" + second;
    }
  }
}
</script>
  <style lang="less" scoped>
    .notfound{
      height: 400px;
    }
    .progress{
      background-color: #f5f5f5;
      border-radius: 4px;
      box-shadow: 0 1px 2px rgba(0, 0, 0, 0.1) inset;
      height: 20px;
      margin-bottom: 20px;
      overflow: hidden;
    }
    .progress-bar{
      background-color: #337ab7;
      box-shadow: 0 -1px 0 rgba(0, 0, 0, 0.15) inset;
      color: #fff;
      float: left;
      font-size: 12px;
      height: 100%;
      line-height: 20px;
      text-align: center;
      transition: width 0.6s ease 0s;
      width: 0;
    }
    .progress-bar-success{
      background:linear-gradient(to right,#76EE00,#CD0000);
    }
  </style>

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM