|                                                                                             |  | <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>
 |