<template>
  <view class="flex progress_box" :style="style">
    <view>{{ label || '' }}</view>
		<canvas ref="canvas"
      class="progress_bar" 
      :canvas-id="`cpbar${code}`" 
      :id="`cpbar${code}`" 
      type="2d"></canvas>
    <view class="value">{{ value || 0 }}</view>
  </view>
</template>

<script>

  const START = - Math.PI * 3 / 2  + Math.PI * 1 / 4 - Math.PI * 1 / 24
  const END = Math.PI * 1 / 4 + Math.PI * 1 / 24

  export default {
    props: {
      label: {
        type: String,
        default: '',
      },
      value: {
        type: String | Number,
        default: 0,
      },
      color: {
        type: String,
        default: '#014FA2'
      }
    },
    data() {
      return {
        code: Math.floor(Math.random() * 100).toString()
      }
    },
    computed: {
      style() {
        return `color: ${this.color};`
      }
    },
    mounted() {
      this.drawProgress(this.color)
    },
    methods: {
      drawProgress(color) {

        const clientWidth = this.$refs.canvas.$el.clientWidth

        const ctx = uni.createCanvasContext(`cpbar${this.code}`)
        
        let Ratio = clientWidth / 126
        let w = 14 * Ratio
        ctx.setLineWidth(w); // 设置圆环的宽度
        ctx.setStrokeStyle(color); // 设置圆环的颜色

        let width = 126 * Ratio
        let height = 126 * Ratio
        ctx.beginPath();
        let x = width / 2
        let y = height / 2
        let r = 62 * Ratio - w / 2
        ctx.arc(x, y, r, START, END, false);
        ctx.stroke();

        ctx.draw()

        return

        uni.createSelectorQuery().in(this)
        .select('.progress_bar')
        .fields({
          node: true,
          size: true
        })
        .exec(async (res) => {
          // const canvas = res[0].node
          console.log('res', res)
          // Canvas 画布的实际绘制宽高
          // const width = res[0].width
          // const height = res[0].height
          const width = res.width
          const height = res.height
          // //根据dpr调整
          // const dpr = wx.getWindowInfo().pixelRatio
          // canvas.width = width * dpr
          // canvas.height = height * dpr

          // let Ratio = width / 126
          let Ratio = 1
          console.log('Ratio', Ratio)
          
          // 渲染上下文
				  const ctx = uni.createCanvasContext('myCanvas', this)
          console.log('ctx', ctx)

          // ctx.scale(dpr, dpr)
          // ctx.clearRect(0, 0, width, height)
          
          let w = 14 * Ratio
          ctx.setLineWidth(w); // 设置圆环的宽度
          ctx.setStrokeStyle(color); // 设置圆环的颜色
          // ctx.lineCap = 'round'; // 设置圆环端点的形状
          
          ctx.beginPath();
          let x = width / 2
          let y = height / 2
          let r = 62 * Ratio - w / 2
          ctx.arc(x, y, r, START, END, false);
          ctx.stroke();

          ctx.draw()
        })

      },
    },
  }
</script>

<style lang="scss" scoped>

  $size: 126rpx;

  .progress_box {
    position: relative;
    width: $size;
    // height: $size;
    height: 154rpx;
    align-items: flex-end;
    font-size: 22rpx;
    line-height: 40rpx;
  }

  .progress_bar {
    position: absolute;
    top: 0;
    left: 0;
    width: $size;
    height: $size;
  }

  .value {
    position: absolute;
    top: 40rpx;
    left: 50%;
    transform: translateX(-50%);
    font-size: 32rpx;
    font-weight: 600;
  }


</style>