<template>
  <div class="progress">
    <div class="progress-item flex" v-for="(item, index) in arr" :key="`${code}-${index}`"
      :style="getStyle(item.index)"
    >
      {{ item.text }}
    </div>
    <div class="progress-text" :style="textStyle">
      <div class="flex" v-for="(item, index) in arr" :key="`${code}-text-${index}`" >
        {{ item.text }}
      </div>
    </div>
  </div>
</template>

<script>
  const WIDTH = 40;

  export default {
    props: {
      value: {
        default: 0
      }
    },
    data() {
      return {
        code: Math.floor(Math.random() * 100).toString()
      }
    },
    computed: {
      current() {
        return Math.floor(this.value / 20)
      },
      arr() {
        let arr = new Array(this.current).fill(1).map((item, index) => {
          return {
            text: `${(index + 1) * 20}%`,
            index,
          }
        })

        return arr.reverse()
      },
      textStyle() {
        const n = this.arr.length
        const width = WIDTH * n

        return `width: ${width}rpx; grid-template-columns: repeat(${n}, 1fr);`
      },
    },
    methods: {
      getStyle(index) {
        const width = WIDTH * (index + 1)

        return `width: ${width}rpx;`
      },
    },
  }
</script>

<style lang="scss" scoped>
  .progress {
    position: relative;
    font-size: 0;
    width: 100%;
    box-sizing: border-box;

    &-item {
      position: absolute;
      top: 0;
      left: 0;
      padding: 2rpx 0;
      font-size: 6rpx;
      color: transparent;
      background: #ee751c;
      border: 2rpx solid #FFFFFF;
      border-radius: 20rpx;

      &:first-child {
      }
    }

    &-text {
      position: absolute;
      display: grid;
      padding: 2rpx 0;
      font-size: 6rpx;
      color: #FFFFFF;
      background: transparent;
      border: 2rpx solid transparent;
    }
  }
</style>