<template>
  <view class="multiple-options">
    <view class="list">
      <block v-for="(item, index) in listData" :key="index">
        <view
          class="list__item"
          :class="[`tn-main-gradient-${tuniaoColorList[item.bgColorIndex]}--light`]"
          @tap="navOptionsPage(item.url)"
        >
          <view class="list__content">
            <view class="list__content__title">{{ item.title }}</view>
            <view class="list__content__desc">{{ item.desc }}</view>
          </view>
          <view class="list__icon">
            <view class="list__icon__main" :class="[`tn-icon-${item.mainIcon}`, `tn-main-gradient-${tuniaoColorList[item.bgColorIndex]}`]"></view>
            <view class="list__icon__sub" :class="[`tn-icon-${item.subIcon}`, `tn-main-gradient-${tuniaoColorList[item.bgColorIndex]}`]"></view>
          </view>
        </view>
      </block>
    </view>
  </view>
</template>

<script>
  export default {
    name: 'multiple-options-demo',
    props: {
      // 显示的列表数据
      list: {
        type: Array,
        default() {
          return []
        }
      }
    },
    data() {
      return {
        // 图鸟颜色列表
        tuniaoColorList: [
          'red',
          'purplered',
          'purple',
          'bluepurple',
          'aquablue',
          'blue',
          'indigo',
          'cyan',
          'teal',
          'green',
          'orange',
          'orangered'
        ],
        listData: []
      }
    },
    watch: {
      list(val) {
        this.initList()
      }
    },
    created() {
      this.initList()
    },
    methods: {
      // 初始化列表数据
      initList() {
        // 给列表添加背景颜色数据
        this.listData = this.list.map((item, index) => {
          item.bgColorIndex = this.getBgNum()
          item.mainIcon = item?.mainIcon || 'computer-fill'
          item.subIcon = item?.subIcon || 'share'
          return item
        })
      },
      // 跳转到对应的选项页面
      navOptionsPage(url) {
        uni.navigateTo({
          url: url
        })
      },
      // 获取酷炫背景随机数
      getBgNum() {
        return Math.floor((Math.random() * this.tuniaoColorList.length))
      }
    }
  }
</script>

<style lang="scss" scoped>
  
  .list {
    
    &__item {
      display: flex;
      flex-direction: row;
      align-items: center;
      justify-content: space-between;
      width: calc(100% - 60rpx);
      margin: 108rpx 30rpx 0rpx 30rpx;
      box-shadow: 0rpx 10rpx 50rpx 0rpx rgba(0, 3, 72, 0.1);
      border-radius: 20rpx;
    }
    
    &__content {
      flex: 1;
      // color: $tn-font-color;
      margin: 34rpx 0rpx 27rpx 37rpx;
      
      &__title {
        font-size: 36rpx;
        font-weight: bold;
        margin-bottom: 12rpx;
      }
      &__desc {
        font-size: 28rpx;
      }
    }
    
    &__icon {
      flex: 1;
      margin-right: 26rpx;
      position: relative;
      
      &__main, &__sub {
        -webkit-background-clip: text;
        color: transparent;
        position: absolute;
        transition: transform 0.25s ease;
      }
      
      &__main {
        font-size: 200rpx;
        width: 190rpx;
        line-height: 200rpx;
        top: 0;
        right: 0rpx;
        transform: translateY(-60%);
      }
      &__sub {
        font-size: 70rpx;
        top: 0;
        right: 175rpx;
        transform: translateY(-5rpx);
      }
    }
  }
</style>