<template>
  <Card title="设备管理">
    <div class="container">
      <div class="item" ref="firstChart"></div>
      <div class="item" ref="secondChart"></div>
      <div class="item" ref="thirdChart"></div>
      <div class="first-box box">
        <div class="box-title">塔吊设备数</div>
        <img class="image" src="../assets/images/command-center/icon-tower.png" alt="">
      </div>
      <div class="second-box box">
        <div class="box-title">升降机设备数</div>
        <img class="image" src="../assets/images/command-center/icon-lifter.png" alt="">
      </div>
      <div class="third-box box">
        <div class="box-title">视频设备数</div>
        <img class="image" src="../assets/images/command-center/icon-video.png" alt="">
      </div>
    </div>
  </Card>
</template>

<script>
import echarts from 'echarts4'

import Card from '../components/Card'

export default {
  components: { Card },
  data() {
    return {}
  },
  mounted() {
    this.initChart('firstChart')
    this.initChart('secondChart')
    this.initChart('thirdChart')
  },
  methods: {
    initChart(ref) {
      const myChart = echarts.init(this.$refs[ref])

      let angle = 0 //角度，用来做简单的动画效果的
      let value = 7
      const option = {
        // backgroundColor: '#061740',
        title: {
          text: value,
          x: 'center',
          y: 'center',
          top: '35%',
          textStyle: {
            fontSize: 20,
            color: '#e5e442'
          }
        },
        series: [
          {
            name: 'ring5',
            type: 'custom',
            coordinateSystem: 'none',
            renderItem: function (params, api) {
              return {
                type: 'arc',
                shape: {
                  cx: api.getWidth() / 2,
                  cy: api.getHeight() / 2,
                  r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
                  startAngle: ((0 + angle) * Math.PI) / 180,
                  endAngle: ((90 + angle) * Math.PI) / 180
                },
                style: {
                  stroke: '#0CD3DB',
                  fill: 'transparent',
                  lineWidth: 1.5
                },
                silent: true
              }
            },
            data: [0]
          },
          {
            name: 'ring5',
            type: 'custom',
            coordinateSystem: 'none',
            renderItem: function (params, api) {
              return {
                type: 'arc',
                shape: {
                  cx: api.getWidth() / 2,
                  cy: api.getHeight() / 2,
                  r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.6,
                  startAngle: ((180 + angle) * Math.PI) / 180,
                  endAngle: ((270 + angle) * Math.PI) / 180
                },
                style: {
                  stroke: '#0CD3DB',
                  fill: 'transparent',
                  lineWidth: 1
                },
                silent: true
              }
            },
            data: [0]
          },
          {
            name: 'ring5',
            type: 'custom',
            coordinateSystem: 'none',
            renderItem: function (params, api) {
              return {
                type: 'arc',
                shape: {
                  cx: api.getWidth() / 2,
                  cy: api.getHeight() / 2,
                  r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
                  startAngle: ((270 + -angle) * Math.PI) / 180,
                  endAngle: ((40 + -angle) * Math.PI) / 180
                },
                style: {
                  stroke: '#0CD3DB',
                  fill: 'transparent',
                  lineWidth: 1
                },
                silent: true
              }
            },
            data: [0]
          },
          {
            name: 'ring5',
            type: 'custom',
            coordinateSystem: 'none',
            renderItem: function (params, api) {
              return {
                type: 'arc',
                shape: {
                  cx: api.getWidth() / 2,
                  cy: api.getHeight() / 2,
                  r: (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65,
                  startAngle: ((90 + -angle) * Math.PI) / 180,
                  endAngle: ((220 + -angle) * Math.PI) / 180
                },
                style: {
                  stroke: '#0CD3DB',
                  fill: 'transparent',
                  lineWidth: 1
                },
                silent: true
              }
            },
            data: [0]
          },
          {
            name: 'ring5',
            type: 'custom',
            coordinateSystem: 'none',
            renderItem: function (params, api) {
              let x0 = api.getWidth() / 2
              let y0 = api.getHeight() / 2
              let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
              let point = getCirlPoint(x0, y0, r, 90 + -angle)
              return {
                type: 'circle',
                shape: {
                  cx: point.x,
                  cy: point.y,
                  r: 2
                },
                style: {
                  stroke: '#0CD3DB', // 粉
                  fill: '#0CD3DB'
                },
                silent: true
              }
            },
            data: [0]
          },
          {
            name: 'ring5', // 绿点
            type: 'custom',
            coordinateSystem: 'none',
            renderItem: function (params, api) {
              let x0 = api.getWidth() / 2
              let y0 = api.getHeight() / 2
              let r = (Math.min(api.getWidth(), api.getHeight()) / 2) * 0.65
              let point = getCirlPoint(x0, y0, r, 270 + -angle)
              return {
                type: 'circle',
                shape: {
                  cx: point.x,
                  cy: point.y,
                  r: 2
                },
                style: {
                  stroke: '#0CD3DB', // 绿
                  fill: '#0CD3DB'
                },
                silent: true
              }
            },
            data: [0]
          },
          {
            name: '吃猪肉频率',
            type: 'pie',
            radius: ['56%', '45%'],
            center: ['50%', '50%'],
            silent: true,
            clockwise: true,
            startAngle: 90,
            z: 0,
            zlevel: 0,
            label: {
              normal: {
                position: 'center'
              }
            },
            data: [
              {
                value: value,
                name: '',
                itemStyle: {
                  normal: {
                    color: {
                      // 完成的圆环的颜色
                      colorStops: [
                        {
                          offset: 0,
                          color: '#4FADFD' // 0% 处的颜色
                        },
                        {
                          offset: 1,
                          color: '#28E8FA' // 100% 处的颜色
                        }
                      ]
                    }
                  }
                }
              },
              {
                value: 100 - value,
                name: '',
                label: {
                  normal: {
                    show: false
                  }
                },
                itemStyle: {
                  normal: {
                    color: '#173164'
                  }
                }
              }
            ]
          },

          {
            name: '',
            type: 'gauge',
            radius: '58%',
            center: ['50%', '50%'],
            startAngle: 0,
            endAngle: 359.9,
            splitNumber: 8,
            hoverAnimation: true,
            axisTick: {
              show: false
            },
            splitLine: {
              length: 60,
              lineStyle: {
                width: 3,
                // 分隔线的颜色
                color: '#182337'
              }
            },
            axisLabel: {
              show: false
            },
            pointer: {
              show: false
            },
            axisLine: {
              lineStyle: {
                opacity: 0
              }
            },
            detail: {
              show: false
            },
            data: [
              {
                value: 0,
                name: ''
              }
            ]
          }
        ]
      }
      //获取圆上面某点的坐标(x0,y0表示坐标，r半径，angle角度)
      function getCirlPoint(x0, y0, r, angle) {
        let x1 = x0 + r * Math.cos((angle * Math.PI) / 180)
        let y1 = y0 + r * Math.sin((angle * Math.PI) / 180)
        return {
          x: x1,
          y: y1
        }
      }

      function draw() {
        angle = angle + 3
        myChart.setOption(option, true)
        //window.requestAnimationFrame(draw);
      }

      setInterval(function () {
        //用setInterval做动画感觉有问题
        draw()
      }, 100)
      myChart.setOption(option)
    }
  }
}
</script>

<style lang="less" scoped>
.container {
  position: relative;
  width: 100%;
  height: 100%;
  white-space: nowrap;
  transform: translateY(-20px);


  .item {
    display: inline-block;
    width: calc(100% / 2);
    height: 100%;
    color: transparent;

    &:nth-child(1) {
      transform: translateX(-22%);
    }

    &:nth-child(2) {
      transform: translateX(-48%);
    }

    &:nth-child(3) {
      transform: translateX(-75%);
    }
  }

  .box {
    position: absolute;
    color: #fff;
    text-align: center;
    font-size: 12px;
    
    .box-title {
      margin-bottom: 3px;
    }

    .image {
      width: 20px;
      height: 20px;
    }
  }

  .first-box {
    bottom: 30%;
    left: 7%;
  }

  .first-box {
    bottom: 30%;
    left: 8%;
  }

  .second-box {
    bottom: 30%;
    left: 43.5%;
  }

  .third-box {
    bottom: 30%;
    left: 81.5%;
  }
}
</style>
