<template>
  <view style="margin-top: 100px;">
    <view class="flex ai-c jc-c">
      <view class="flex type_box jc-sb ai-c">
        <view class="type_item" :class="tCurrent==0?'checked':'unchecked'" @tap="sectionChange(0)">答题</view>
        <view class="type_item" :class="tCurrent==1?'checked':'unchecked'" @tap="sectionChange(1)">背题</view>
      </view>
    </view>
    <swiper class="swiper" :current="swiperIndex" :duration="duration" :autoplay="false" :disable-programmatic-animation="true"	@change="onChange" @animationfinish="onAnimationfinish">
      <swiper-item v-for="(quesItem,quesIndex) in swiperList" :key="quesIndex">
        <scroll-view scroll-y="true" class="swiper-scroll">
          <view>
            <view class="m14lr">
              <text class="tag_box">{{quesItem.questionTypeDesc}}</text>
              <text class="fs18">{{quesItem.questionDesc}}</text>
            </view>
            <view class="flex m14lr ai-c mt20" v-for="(item,index) in quesItem.optionList"
                  :key="item.op" @tap="answerQues(item.op,index)">
              <template
                  v-if="quesItem.clickAnswer&&item.op===quesItem.rightOp">
                <u-icon class="mr15" name="checkmark-circle-fill" color="#05C341" size="30"></u-icon>
              </template>
              <template
                  v-else-if="quesItem.clickAnswer===item.op&&item.op!==quesItem.rightAnswer">
                <u-icon class="mr15" name="close-circle-fill" color="red" size="30"></u-icon>
              </template>
              <template v-else-if="!item.chooseOption">
                <view class="option_item">{{item.op}}</view>
              </template>
              <text class="fs18">{{item.opDesc}}</text>
            </view>
            <view class="m14lr mt30"
                  v-if="quesItem.clickAnswer&&quesItem.clickAnswer!==quesItem.rightOp || tCurrent===1">
              <view class="answer_box">
                <text class="fs18 fw600 cor-000">答案:{{quesItem.rightOp}}</text>
                <view class="fs18 cor-000" style="text-indent:2em;"> 这里是相关解释文字,这里是相关解释文字相关解释文字</view>
              </view>
            </view>
          </view>
        </scroll-view>
      </swiper-item>
    </swiper>
    <u-modal :show="tipShow" :title="title" :content="content">
      <template #confirmButton>
        <view class="p10" >
          <u-button :customStyle="{width:'100%',height:'68rpx',borderRadius:'34rpx'}">查看练题结果</u-button>
        </view>
      </template>
    </u-modal>
  </view>
</template>

<script>
export default {
  data() {
    return {
      content:'太棒啦,已答完最后一题~',
      tipShow:false,
      title:'提示',
      tCurrent:0,
      questionList: [],//数据源
      swiperList: [], // 轮播图数据列表
      swiperIndex: 0, // 轮播图当前位置
      isChange: false, // 是否切换
      topicIndex: 0, // 题目位置
      duration: 200, // 动画过渡时长
    }
  },
  onLoad() {
    this.getQuestionList()
    this.renderSwiper(0)
  },
  methods: {
    // 渲染 swiper
    renderSwiper(index) {
      let list = [];
      let current = 1;
      if (this.questionList[index - 1]) {
        list.push(this.questionList[index - 1]);
      } else {
        current = 0;
      }

      list.push(this.questionList[index])

      if (this.questionList[index + 1]) {
        list.push(this.questionList[index + 1]);
      }
			
      this.duration = 0;

      setTimeout(() => {
        this.swiperList = list;
        this.swiperIndex = current;
        setTimeout(() => {
          this.duration = 200;
        }, 100)
      }, 50)
    },

    // 轮播图切换
    onChange(e) {
      // 非触摸事件不做轮播图状态更新
      if (e.detail.source != "touch") return;

      // 标识已切换
      this.isChange = true;
      // 轮播图当前位置大于原来时则表示为下一题
      if (e.detail.current > this.swiperIndex) {
        this.topicIndex++;
      } else {
        // 轮播图当前位置小于原来时则表示为上一题
        this.topicIndex--;
      }

      // 更新轮播图位置数值,为更新时让 Vue 能监听到数据有改变
      this.swiperIndex = e.detail.current;
    },
    // 轮播图动画结束
    onAnimationfinish(e) {
      if (!this.isChange) return;

      this.isChange = false;
      setTimeout(() => {
        this.renderSwiper(this.topicIndex);
      }, 10);
    },
    // 选择题目
    pickerTopic(index) {
      this.topicIndex = index;
      this.renderSwiper(index);
    },
    //答题
    answerQues(op, index) {
      if (!this.questionList[this.topicIndex].clickAnswer) {
        this.questionList[this.topicIndex].optionList[index].chooseOption = op
        this.questionList[this.topicIndex].clickAnswer = op
      }
      if(this.tCurrent!==1){
        if(this.questionList[this.topicIndex].clickAnswer===this.questionList[this.topicIndex].rightOp){
          if(this.topicIndex<=this.questionList.length-1){
            if(this.topicIndex===this.questionList.length-1){
              this.tipShow=true
            }else{
              this.tipShow=false
            }
            this.topicIndex ++;
            setTimeout(()=>{
              this.renderSwiper(this.topicIndex);
            },1000)
          }
        }
      }
    },
    sectionChange(index) {
      this.tCurrent = index
      this.getQuestionList()
      this.renderSwiper(0)
    },
    getQuestionList() {
      this.questionList = [{
        questionId: 0,
        questionTypeDesc: '单选',
        questionDesc: '第一题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
        optionList: [{
          op: 'A',
          opDesc: '注意新手标志'
        }, {
          op: 'B',
          opDesc: '注意新手标志'
        }, {
          op: 'C',
          opDesc: '注意新手标志'
        }, {
          op: 'D',
          opDesc: '注意新手标志'
        }],
        rightOp: 'C',
      }, {
        questionId: 1,
        questionTypeDesc: '单选',
        questionDesc: '第二题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
        optionList: [{
          op: 'A',
          opDesc: '注意新手标志'
        }, {
          op: 'B',
          opDesc: '注意新手标志'
        }, {
          op: 'C',
          opDesc: '注意新手标志'
        }, {
          op: 'D',
          opDesc: '注意新手标志'
        }],
        rightOp: 'B',
      }, {
        questionId: 2,
        questionTypeDesc: '单选',
        questionDesc: '第三题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
        optionList: [{
          op: 'A',
          opDesc: '注意新手标志'
        }, {
          op: 'B',
          opDesc: '注意新手标志'
        }, {
          op: 'C',
          opDesc: '注意新手标志'
        }, {
          op: 'D',
          opDesc: '注意新手标志'
        }],
        rightOp: 'A',
      },
        {
          questionId: 3,
          questionTypeDesc: '单选',
          questionDesc: '第四题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        }, {
          questionId: 4,
          questionTypeDesc: '单选',
          questionDesc: '第5题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        },
        {
          questionId: 5,
          questionTypeDesc: '单选',
          questionDesc: '第6题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        }, {
          questionId: 6,
          questionTypeDesc: '单选',
          questionDesc: '第7题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        }, {
          questionId: 7,
          questionTypeDesc: '单选',
          questionDesc: '第8题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        }, {
          questionId: 8,
          questionTypeDesc: '单选',
          questionDesc: '第9题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'C',
        }, {
          questionId: 9,
          questionTypeDesc: '单选',
          questionDesc: '第10题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'B',
        }, {
          questionId: 10,
          questionTypeDesc: '单选',
          questionDesc: '第11题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        },
        {
          questionId: 11,
          questionTypeDesc: '单选',
          questionDesc: '第12题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        }, {
          questionId: 12,
          questionTypeDesc: '单选',
          questionDesc: '第13题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        },
        {
          questionId: 13,
          questionTypeDesc: '单选',
          questionDesc: '第14题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        }, {
          questionId: 14,
          questionTypeDesc: '单选',
          questionDesc: '第15题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        }, {
          questionId: 15,
          questionTypeDesc: '单选',
          questionDesc: '第16题,在实习期内驾驶机动车的,应当在车身后部粘贴或者悬挂哪种标志?',
          optionList: [{
            op: 'A',
            opDesc: '注意新手标志'
          }, {
            op: 'B',
            opDesc: '注意新手标志'
          }, {
            op: 'C',
            opDesc: '注意新手标志'
          }, {
            op: 'D',
            opDesc: '注意新手标志'
          }],
          rightOp: 'A',
        }
      ]
      if(this.tCurrent===1){
        this.questionList=this.questionList.map(item=>{
          return{
            ...item,
            clickAnswer:item.rightOp
          }
        })
      }
    }
  }
}
</script>

<style scoped>
.type_box {
  width: 280rpx;
  height: 72rpx;
  background-color: #FFFFFF;
  border-radius: 8rpx;
}

.type_item {
  text-align: center;
  line-height: 64rpx;
  width: 126rpx;
  height: 64rpx;
  border-radius: 8rpx;
}

.checked {
  color: #fff;
  background-color: #05C341;
}

.unchecked {
  color: #666;
}

.tag_box {
  display: inline-block;
  width: 78rpx;
  height: 42rpx;
  background: #05C341;
  border-radius: 8rpx;
  text-align: center;
  line-height: 42rpx;
  color: #fff;
  font-size: 12px;
  margin-right: 5px;
}

.option_item {
  width: 60rpx;
  height: 60rpx;
  border: 1px solid #666;
  border-radius: 50%;
  text-align: center;
  line-height: 60rpx;
  margin-right: 30rpx;
}

.swiper {
  height: 100vh;
}

.answer_box {
  width: 100%;
  padding: 30rpx;
  background: #EEEEEE;
  border-radius: 20rpx;
}
</style>