<template>
  <div class="train">
    <div class="logo"> <img src="@/assets/images/logo.png">
      </img></div>
    <div class="close" @click="getExit"></div>
    <div class="menu" :class="projectList.length <= 6 ? 'menu1' : 'menu2'">
      <swiper :slides-per-view="6" :modules="[Grid]" :grid="{
        fill: projectList.length <= 6 ? 'row' : 'column',
        rows: projectList.length <= 6 ? 1 : 2,
      }" :space-between="20" :slides-per-group="12">
        <swiper-slide v-for="(item, index) in projectList " :key="index" @click="getOption(item)">
          <div class="li">
            <div class="pic"><img :src="'static/images/train/' + item.key + '.png'"></div>
            <div class="name">
              {{ item.name }}
            </div>
          </div>
        </swiper-slide>
      </swiper>
    </div>
    <OptionWindow ref="optionWindowRef" :projectList="projectList" />
  </div>
</template>

<script setup name="TrainIndex" lang="ts">
import { Swiper, SwiperSlide } from 'swiper/vue';
import { Grid } from 'swiper/modules';
import 'swiper/css';
import 'swiper/css/grid';



const router = useRouter();
const { proxy } = getCurrentInstance() as any;
const optionWindowRef = ref();


const data = reactive<any>({
  projectList: [],
  timerManager: {},
});

const { projectList, timerManager } = toRefs(data);

/**
 * 获取项目
*/
const getExam = () => {
  proxy?.$http.train.projectList().then((res: any) => {
    projectList.value = proxy?.$utils.getProject(res.exams).filter((item: any) => {
      //只显示能开的
      return item.area.length > 0;
    });
  });
};

/**
 * 弹出选项窗口
*/
const getOption = (data: any) => {
  optionWindowRef.value.open(data);
};

/**
 * 清空定时任务
*/
const getClearTimer = () => {
  for (let key in timerManager.value) {
    if (timerManager.value.hasOwnProperty(key)) {
      clearInterval(timerManager.value[key])
      timerManager.value[key] = null;
    }
  }
};

/**
 * 初始化项目
*/
const getInitExam = () => {
  getExam();
  //定时刷新
  timerManager.value.exam = setInterval(() => {
    getExam();
  }, 5000)
};

/**
 * 退出
*/
const getExit = () => {
  router.go(-1);
};

onBeforeMount(() => {
  getInitExam();
})

onUnmounted(() => {
  getClearTimer();
})
</script>

<style lang="scss" scoped>
$topPadding: 5.19rem;
$waiPadding: 6.51rem;

.logo {
  img {
    width: 14.563rem;
  }

  position: absolute;
  left: $waiPadding;
  top: $topPadding;
}

.close {
  width: 3.2rem;
  height: 3.2rem;
  position: absolute;
  right: calc($waiPadding - 3.2rem);
  top: $topPadding;
  box-sizing: border-box;
  border: 1px solid #979797;
  background-image: url("@/assets/images/common/close.png");
  background-position: center;
  background-repeat: no-repeat;
  background-size: 45% 45%;
  background-color: rgba(216, 216, 216, 0.8);
  border-radius: 50%;
  transition: all 0.5s;
  cursor: pointer;

  &:hover {
    transform: rotate(180deg);
    background-color: rgba(216, 216, 216, 1);
  }
}

.menu {
  width: calc(100% - ($waiPadding * 2));
  height: 72vh;
  padding-top: 10rem;
  margin: 0 auto;

  .li {
    // width: calc((100% / 6) - 1rem + (1rem/6));
    // margin-right: 1rem;
    // margin-bottom: 1rem;
    width: 100%;
    height: 100%;
    padding: 2.2vh 0;
    border-radius: 1.6rem;
    box-sizing: border-box;
    box-shadow: inset 0px 1px 0px 2px rgba(255, 255, 255, 0.9046), inset 0px 3px 6px 0px rgba(0, 0, 0, 0.0851);
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    text-align: center;

    flex-shrink: 0;
    cursor: pointer;

    .name {
      width: 100%;
      font-size: 2.48rem;
      color: #1A293A;
      padding: 0.5rem 0;
    }


    .pic {
      width: 11.36vw;
      height: 11.36vw;
      border-radius: 50%;
      background: radial-gradient(78% 78% at 53% 50%, #07121A 0%, #2A4256 49%, #5180A9 100%);
      box-shadow: 0px 0px 2px 2px #FFFFFF;
      margin-bottom: 2vh;
      overflow: hidden;
      display: flex;
      align-items: center;
      justify-content: center;
      flex-shrink: 0;

      img {
        max-width: 88%;
        max-height: 88%;
        transition: all 1s;
      }
    }

    &:hover {
      img {
        transform: translateY(-0.5vw);
      }
    }
  }

  .swiper-slide {
    border-radius: 1.6rem;
    overflow: hidden;
  }
}

.menu1 {

  .swiper-slide:nth-child(odd) {
    background: radial-gradient(96% 96% at 2% 32%, #FFFFFF 0%, #FCFDFD 54%, #E1E4E7 100%);
  }

  .swiper-slide:nth-child(even) {
    background: radial-gradient(167% 126% at 97% 6%, #35FFC6 0%, #00FFE8 100%);
  }

}

.menu2 {
  display: flex;

  .swiper-slide {

    &:nth-child(1),
    &:nth-child(4),
    &:nth-child(5),
    &:nth-child(8),
    &:nth-child(9),
    &:nth-child(12),
    &:nth-child(13),
    &:nth-child(16),
    &:nth-child(17),
    &:nth-child(20),
    &:nth-child(21),
    &:nth-child(24),
    &:nth-child(25),
    &:nth-child(28),
    &:nth-child(29),
    &:nth-child(32),
    &:nth-child(33),
    &:nth-child(36),
    &:nth-child(37),
    &:nth-child(40),
    &:nth-child(41),
    &:nth-child(44) {
      background: radial-gradient(96% 96% at 2% 32%, #FFFFFF 0%, #FCFDFD 54%, #E1E4E7 100%);
    }

    &:nth-child(2),
    &:nth-child(3),
    &:nth-child(6),
    &:nth-child(7),
    &:nth-child(10),
    &:nth-child(11),
    &:nth-child(14),
    &:nth-child(15),
    &:nth-child(18),
    &:nth-child(19),
    &:nth-child(22),
    &:nth-child(23),
    &:nth-child(26),
    &:nth-child(27),
    &:nth-child(30),
    &:nth-child(31),
    &:nth-child(34),
    &:nth-child(35),
    &:nth-child(38),
    &:nth-child(39),
    &:nth-child(42),
    &:nth-child(43) {
      background: radial-gradient(167% 126% at 97% 6%, #35FFC6 0%, #00FFE8 100%);
    }
  }
}

@media screen and (max-width: 1450px) {
  .menu {

    .li {
      .name {
        font-size: 1.8rem;
      }

      .pic {
        width: 10vw;
        height: 10vw;
      }
    }
  }
}
</style>
