<template>
  <div
    class="top_list apass_scroll"
    @mouseenter="mouseenter"
    @mouseleave="mouseleave"
  >
    <ul>
      <li class="item_list" v-for="(option, index) in options" :key="index">
        <div class="item_index">
          <span v-text="'TOP' + (index + 1)"></span>
        </div>
        <div class="item_logo">
          <el-avatar shape="square" :size="28" fit="cover" :src="option.logo" />
        </div>
        <div class="item_detail">
          <p class="item_info">
            <span class="text_clip">
              {{ option.name }}
              <i class="el-icon-arrow-right"></i>
            </span>
            <span v-text="option.value + (option.unit || '次')"></span>
          </p>
          <el-progress
            class="item_progress"
            :percentage="getPercent(option.value)"
            :show-text="false"
            color="#e56600"
          ></el-progress>
        </div>
      </li>
    </ul>
  </div>
</template>

<script>
export default {
  props: {
    options: {
      type: Array,
      default: () => [],
    },
    targetValue: {
      type: Number,
      default: () => 1000,
    },
  },
  data() {
    return {
      timer: null,
    };
  },
  watch: {
    text() {
      this.autoScroll();
    },
  },
  methods: {
    getPercent(value) {
      return Math.min((value / this.targetValue) * 100, 100);
    },
    autoScroll() {
      if (this.timer) {
        clearInterval(this.timer);
      }

      this.$el.scrollTop = 0;

      this.timer = setInterval(() => {
        let curScrollTop = this.$el.scrollTop + 1;
        if (curScrollTop > this.$el.scrollHeight - this.$el.clientHeight) {
          curScrollTop = 0;
        }
        this.$el.scrollTop = curScrollTop;
      }, 50);
    },
    mouseenter() {
      if (this.timer) {
        clearInterval(this.timer);
      }
    },
    mouseleave() {
      this.autoScroll();
    },
  },
  mounted() {
    this.autoScroll();

    window.addEventListener("resize", () => {
      this.autoScroll();
    });
  },
  destroyed() {
    if (this.timer) {
      clearInterval(this.timer);
    }
  },
};
</script>

<style scoped>
.top_list {
  overflow-x: hidden;
  overflow-y: auto;
}
.item_list {
  display: flex;
  justify-content: flex-start;
  align-items: center;
  margin-bottom: 18px;
}
.item_index {
  width: 35px;
  flex-shrink: 0;
  margin-right: 10px;
  font-size: 12px;
  color: #58617a;
}
.item_logo {
  margin-right: 10px;
  flex-shrink: 0;
  font-size: 0;
  border: 2px solid #e3e5ef;
  border-radius: 6px;
  overflow: hidden;
}
.item_info {
  flex-grow: 1;
  display: flex;
  justify-content: flex-start;
  align-items: center;
  font-size: 14px;
  line-height: 20px;
  color: #58617a;
}
.item_detail {
  flex-grow: 1;
}
.item_info > span:first-child {
  flex-grow: 1;
  margin-right: 10px;
}
.item_info > span:first-child > i {
  font-weight: bold;
  font-size: 12px;
  color: #8e96ab;
}
.item_info > span:nth-child(2) {
  color: #0d1847;
}
.item_progress {
  margin-top: 6px;
}
</style>
