<template> 
 | 
  <view class="box"> 
 | 
    <view class="box_bgimage" :style="{ backgroundImage: 'url(' + bg + ')' }"> 
 | 
      <text class="box_bgimage_a">{{ title }}</text> 
 | 
      <text class="box_bgimage_b">{{ content }}</text> 
 | 
    </view> 
 | 
    <view class="box_list"> 
 | 
      <view class="box_list_answer" v-if="list && list.length > 0"> 
 | 
        <view v-if="status == 1 || status == 2" class="score_static"> 
 | 
          <text class="name">本次得分:</text> 
 | 
          <text class="num" :class="{ warry: status == 2 }">{{ score }}分</text> 
 | 
        </view> 
 | 
        <!--    单选/判断   --> 
 | 
        <view v-for="(item, index) in list" :key="index" class="list_item"> 
 | 
          <view class="box_list_answer_name"> 
 | 
            <text>{{ index + 1 }}、{{ item.title }}</text> 
 | 
            <text v-if="item.score"> ({{ item.score }}分)</text> 
 | 
            <text style="color: #ed4545">*</text> 
 | 
          </view> 
 | 
          <template v-if="item.type == 1 || item.type == 0"> 
 | 
            <view 
 | 
              class="box_list_answer_item" 
 | 
              v-for="(line, lIndex) in item.options" 
 | 
              :key="lIndex" 
 | 
              @click="select(line, index)" 
 | 
            > 
 | 
              <image 
 | 
                src="@/static/video@2x.png" 
 | 
                v-if="!item.selAnswer || item.selAnswer !== line.code" 
 | 
              /> 
 | 
              <image 
 | 
                src="@/static/video_sel@2x.png" 
 | 
                v-if=" 
 | 
                  (item.selAnswer && 
 | 
                    item.answer === item.selAnswer && 
 | 
                    item.selAnswer == line.code) || 
 | 
                  (item.selAnswer == line.code && status != '2') || 
 | 
                  (item.answer === item.selAnswer && 
 | 
                    item.selAnswer == line.code) 
 | 
                " 
 | 
              /> 
 | 
              <image 
 | 
                src="@/static/video_error@2x.png" 
 | 
                v-if=" 
 | 
                  item.selAnswer && 
 | 
                  item.selAnswer == line.code && 
 | 
                  item.answer !== item.selAnswer && 
 | 
                  status == '2' 
 | 
                " 
 | 
              /> 
 | 
              <text v-if="!item.selAnswer || item.selAnswer !== line.code" 
 | 
                ><text class="mr24">{{ line.code }}</text> 
 | 
                {{ line.value }}</text 
 | 
              > 
 | 
              <text 
 | 
                v-if=" 
 | 
                  (item.selAnswer && 
 | 
                    item.answer === item.selAnswer && 
 | 
                    item.selAnswer == line.code) || 
 | 
                  (item.selAnswer == line.code && status != '2') || 
 | 
                  (item.answer === item.selAnswer && 
 | 
                    item.selAnswer == line.code) 
 | 
                " 
 | 
                style="color: rgba(77, 153, 168, 1)" 
 | 
                ><text class="mr24" style="color: rgba(77, 153, 168, 1)">{{ 
 | 
                  line.code 
 | 
                }}</text> 
 | 
                {{ line.value }}</text 
 | 
              > 
 | 
              <text 
 | 
                v-if=" 
 | 
                  item.selAnswer && 
 | 
                  item.selAnswer == line.code && 
 | 
                  item.answer !== item.selAnswer && 
 | 
                  status == '2' 
 | 
                " 
 | 
                style="color: rgba(237, 69, 69, 1)" 
 | 
                ><text class="mr24" style="color: rgba(237, 69, 69, 1)">{{ 
 | 
                  line.code 
 | 
                }}</text> 
 | 
                {{ line.value }}</text 
 | 
              > 
 | 
            </view> 
 | 
            <view 
 | 
              class="box_list_answer_tips" 
 | 
              style="margin-bottom: 0rpx" 
 | 
              v-if=" 
 | 
                item.selAnswer && 
 | 
                item.answer !== item.selAnswer && 
 | 
                status != '0' 
 | 
              " 
 | 
            > 
 | 
              <view class="line"> 
 | 
                <image src="@/static/ic_wrong@2x.png" /> 
 | 
                <text>回答错误</text> 
 | 
              </view> 
 | 
              <view class="line">正确答案:{{ item.answer }}</view> 
 | 
            </view> 
 | 
            <view 
 | 
              class="box_list_answer_tips" 
 | 
              v-if=" 
 | 
                item.selAnswer && 
 | 
                item.answer === item.selAnswer && 
 | 
                status != '0' 
 | 
              " 
 | 
            > 
 | 
              <view class="line"> 
 | 
                <image src="@/static/ic_success@2.png" /> 
 | 
                <text class="success">回答正确</text> 
 | 
              </view> 
 | 
            </view> 
 | 
          </template> 
 | 
          <template v-if="item.type == 2"> 
 | 
            <view 
 | 
              class="box_list_answer_item" 
 | 
              v-for="(line, lIndex) in item.options" 
 | 
              :key="lIndex" 
 | 
              @click="changeBox(index, lIndex)" 
 | 
            > 
 | 
              <image src="@/static/checkbox@2x.png" v-if="!line.checked" /> 
 | 
              <image 
 | 
                src="@/static/checkbo1x_sel@2x.png" 
 | 
                v-if=" 
 | 
                  (line.checked && status != '2') || 
 | 
                  (item.selAnswer === item.answer && line.checked) 
 | 
                " 
 | 
              /> 
 | 
              <image 
 | 
                src="@/static/checkbox_wrong@2x.png" 
 | 
                v-if=" 
 | 
                  line.checked && 
 | 
                  item.selAnswer !== item.answer && 
 | 
                  status == '2' 
 | 
                " 
 | 
              /> 
 | 
              <text v-if="!line.checked" 
 | 
                ><text class="mr24">{{ line.code }}</text> 
 | 
                {{ line.value }}</text 
 | 
              > 
 | 
              <text 
 | 
                v-if=" 
 | 
                  (line.checked && status != '2') || 
 | 
                  (item.selAnswer === item.answer && line.checked) 
 | 
                " 
 | 
                style="color: rgba(77, 153, 168, 1)" 
 | 
                ><text class="mr24" style="color: rgba(77, 153, 168, 1)">{{ 
 | 
                  line.code 
 | 
                }}</text> 
 | 
                {{ line.value }}</text 
 | 
              > 
 | 
              <text 
 | 
                v-if=" 
 | 
                  line.checked && 
 | 
                  item.selAnswer !== item.answer && 
 | 
                  status == '2' 
 | 
                " 
 | 
                style="color: rgba(237, 69, 69, 1)" 
 | 
                ><text class="mr24" style="color: rgba(237, 69, 69, 1)">{{ 
 | 
                  line.code 
 | 
                }}</text> 
 | 
                {{ line.value }}</text 
 | 
              > 
 | 
            </view> 
 | 
            <view 
 | 
              class="box_list_answer_tips" 
 | 
              v-if=" 
 | 
                item.selAnswer && 
 | 
                item.answer !== item.selAnswer && 
 | 
                status != '0' 
 | 
              " 
 | 
            > 
 | 
              <view class="line"> 
 | 
                <image src="@/static/ic_wrong@2x.png" /> 
 | 
                <text>回答错误</text> 
 | 
              </view> 
 | 
              <view class="line">正确答案:{{ item.answer }}</view> 
 | 
            </view> 
 | 
            <view 
 | 
              class="box_list_answer_tips" 
 | 
              v-if=" 
 | 
                item.selAnswer && 
 | 
                item.answer === item.selAnswer && 
 | 
                status != '0' 
 | 
              " 
 | 
            > 
 | 
              <view class="line"> 
 | 
                <image src="@/static/ic_success@2.png" /> 
 | 
                <text class="success">回答正确</text> 
 | 
              </view> 
 | 
            </view> 
 | 
          </template> 
 | 
        </view> 
 | 
        <view class="empty"></view> 
 | 
        <view 
 | 
          v-if="status == '0'" 
 | 
          class="box_list_answer_btn" 
 | 
          :class="{ disable: !answerIng }" 
 | 
          @click="onSubmit()" 
 | 
          >提交</view 
 | 
        > 
 | 
        <view v-if="status == '1'" class="box_list_answer_btn" @click="next()" 
 | 
          >恭喜你答题成功,去申请</view 
 | 
        > 
 | 
        <view 
 | 
          v-if="status == '2'" 
 | 
          style="background-color: #db534c" 
 | 
          class="box_list_answer_btn" 
 | 
          @click="handleAgain" 
 | 
          >答题失败,再来一次</view 
 | 
        > 
 | 
        <!--    多选    --> 
 | 
        <!--                 <template v-else-if="list[i].type === 2"> 
 | 
                    <view class="box_list_answer_item" v-for="(item, index) in list[i].options" :key="index" 
 | 
                        @click="selectMultiple(item.code)"> 
 | 
                        <image src="@/static/checkbox_wrong@2x.png" 
 | 
                            v-if="success && multiple.toString().indexOf(item.code) !== -1" /> 
 | 
                        <image src="@/static/checkbox@2x.png" 
 | 
                            v-else-if="!multiple || multiple.toString().indexOf(item.code) === -1" /> 
 | 
                        <image src="@/static/checkbo1x_sel@2x.png" 
 | 
                            v-else-if="multiple.toString().indexOf(item.code) !== -1" /> 
 | 
                        <text style="color: rgba(237, 69, 69, 1)" 
 | 
                            v-if="success && multiple.toString().indexOf(item.code) !== -1">{{item.code}} {{item.value}}</text> 
 | 
                        <text v-else-if="!multiple || multiple.toString().indexOf(item.code) === -1">{{item.code}} {{item.value}}</text> 
 | 
                        <text style="color: rgba(77, 153, 168, 1)" 
 | 
                            v-else-if="multiple.toString().indexOf(item.code) !== -1">{{item.code}} {{item.value}}</text> 
 | 
                    </view> 
 | 
                </template> --> 
 | 
      </view> 
 | 
    </view> 
 | 
  </view> 
 | 
</template> 
 | 
  
 | 
<script> 
 | 
import { getProblemsVO, getSystemDictData, saveProblemsVO } from '@/api' 
 | 
export default { 
 | 
  name: 'answer', 
 | 
  
 | 
  data() { 
 | 
    return { 
 | 
      list: [], 
 | 
      bg: require("@/static/banner_dati.png"), 
 | 
      title: '', 
 | 
      content: '', 
 | 
  
 | 
      status: '0', 
 | 
      score: 0 
 | 
    } 
 | 
  }, 
 | 
  computed: { 
 | 
    answerIng() { 
 | 
      let count = 0 
 | 
      this.list.forEach(item => { 
 | 
        if (item.selAnswer || item.selAnswer == 0) { 
 | 
          count++ 
 | 
        } 
 | 
      }) 
 | 
      return count === this.list.length 
 | 
    } 
 | 
  }, 
 | 
  onLoad() { 
 | 
    this.getProblems() 
 | 
    this.getInfo() 
 | 
  }, 
 | 
  
 | 
  methods: { 
 | 
    getInfo() { 
 | 
      // title 
 | 
      getSystemDictData({ 
 | 
        dictCode: 'SYSTEM', 
 | 
        label: 'THEME' 
 | 
      }).then(res => { 
 | 
        if (res.code === 200) { 
 | 
          this.title = res.data.code 
 | 
        } 
 | 
      }) 
 | 
      // this.$u.api.getSystemDictData({ 
 | 
      getSystemDictData({ 
 | 
        dictCode: 'SYSTEM', 
 | 
        label: 'DESCRIPTION' 
 | 
      }).then(res => { 
 | 
        if (res.code === 200) { 
 | 
          this.content = res.data.code 
 | 
        } 
 | 
      }) 
 | 
    }, 
 | 
    getProblems() { 
 | 
      getProblemsVO({ useType: 1 }) 
 | 
        .then(res => { 
 | 
          if (res.code === 200) { 
 | 
            res.data.forEach(item => { 
 | 
              // 判断 
 | 
              if (item.type === 0) { 
 | 
                item.options = [{ code: '正确' }, { code: '错误' }] 
 | 
              } 
 | 
              // 单选/多选 
 | 
              if (item.type === 1 || item.type === 2) { 
 | 
                item.options = JSON.parse(item.options) 
 | 
              } 
 | 
              if (item.type === 2) { 
 | 
                item.options.forEach(i => { 
 | 
                  i.checked = false 
 | 
                }) 
 | 
              } 
 | 
              item.status = '0' 
 | 
              item.selAnswer = null 
 | 
            }) 
 | 
            this.list = res.data 
 | 
          } 
 | 
          // res.param.problemsDOList.forEach(item => { 
 | 
          //     item.options = JSON.parse(item.options) 
 | 
          // }) 
 | 
          // this.list = res.param.problemsDOList 
 | 
          // console.log(this.list) 
 | 
        }) 
 | 
    }, 
 | 
    // 单选选择中题目 
 | 
    select(line, i) { 
 | 
      if (this.status != '0') return 
 | 
      this.list.forEach((item, index) => { 
 | 
        if (index === i) { 
 | 
          item.selAnswer = line.code 
 | 
        } 
 | 
      }) 
 | 
      // this.problemIndex = index 
 | 
    }, 
 | 
    changeBox(index, jeck) { 
 | 
      if (this.status != '0') return 
 | 
      this.list.forEach((item, i) => { 
 | 
        if (index === i) { 
 | 
          item.options.forEach((item2, j) => { 
 | 
            if (j === jeck) { 
 | 
              item2.checked = !item2.checked 
 | 
            } 
 | 
          }) 
 | 
          item.selAnswer = item.options.filter(a => a.checked).map(b => b.code).sort().join(',') 
 | 
        } 
 | 
      }) 
 | 
    }, 
 | 
    sort(arr) { 
 | 
      arr.sort(function (a, b) { 
 | 
        return a.localeCompare(b) 
 | 
      }) 
 | 
    }, 
 | 
    // 多选 
 | 
    selectMultiple(key) { 
 | 
      if (!this.multiple) { 
 | 
        this.multiple = key 
 | 
        return 
 | 
      } 
 | 
      let arr = this.multiple.split(',') 
 | 
      if (this.multiple.indexOf(key) !== -1) { 
 | 
        arr.forEach((item, index) => { 
 | 
          if (key === item) { 
 | 
            arr.splice(index, 1) 
 | 
          } 
 | 
        }) 
 | 
        this.sort(arr) 
 | 
        this.multiple = arr.join(',') 
 | 
      } else { 
 | 
        arr.push(key) 
 | 
        this.sort(arr) 
 | 
        this.multiple = arr.join(',') 
 | 
      } 
 | 
    }, 
 | 
    // 下一题 
 | 
    onSubmit() { 
 | 
      if (!this.answerIng) return 
 | 
      const { list } = this 
 | 
      // 验证所有题目都有选项 
 | 
      let count = 0 
 | 
      list.forEach(item => { 
 | 
        if (!item.selAnswer) { 
 | 
          count++ 
 | 
        } 
 | 
      }) 
 | 
      if (count > 0) { 
 | 
        return uni.showToast({ 
 | 
          title: '请先完成所有答题在提交', 
 | 
          icon: 'none' 
 | 
        }) 
 | 
      } 
 | 
      // 判断对错 
 | 
      let flag = 0 
 | 
      list.forEach(item => { 
 | 
        if (item.selAnswer !== item.answer) { 
 | 
          flag++ 
 | 
        } else { 
 | 
          this.score += item.score 
 | 
        } 
 | 
      }) 
 | 
      if (flag > 0) { 
 | 
        this.status = '2' 
 | 
        return uni.showToast({ 
 | 
          title: '答题失败,再来一次', 
 | 
          icon: 'none' 
 | 
        }) 
 | 
      } else { 
 | 
        this.status = '1' 
 | 
      } 
 | 
    }, 
 | 
    handleAgain() { 
 | 
      this.status = '0' 
 | 
      this.score = 0 
 | 
      this.getProblems() 
 | 
    }, 
 | 
    next() { 
 | 
      saveProblemsVO({ 
 | 
        openId: this.$store.state.openId, 
 | 
        useType: '1', 
 | 
        content: '' 
 | 
      }).then(res => { 
 | 
        this.score = 0 
 | 
        uni.navigateTo({ 
 | 
          url: `/pages/userinfo/userinfo?answerId=${res.data}` 
 | 
        }) 
 | 
      }) 
 | 
  
 | 
    } 
 | 
  } 
 | 
} 
 | 
</script> 
 | 
  
 | 
<style lang="scss" scoped> 
 | 
.box { 
 | 
  width: 100%; 
 | 
  height: 100vh; 
 | 
  background: $uni-color-primary; 
 | 
  .box_bgimage { 
 | 
    width: 100%; 
 | 
    padding: 0 40rpx; 
 | 
    box-sizing: border-box; 
 | 
    height: 223rpx; 
 | 
    display: flex; 
 | 
    flex-direction: column; 
 | 
    align-items: flex-start; 
 | 
    justify-content: center; 
 | 
    background-repeat: no-repeat; 
 | 
    background-size: cover; 
 | 
    .box_bgimage_a { 
 | 
      font-size: 54rpx; 
 | 
      font-weight: bold; 
 | 
      color: #ffffff; 
 | 
      text-shadow: 0rpx 4rpx 8rpx rgba(0, 0, 0, 0.19); 
 | 
    } 
 | 
    .box_bgimage_b { 
 | 
      font-size: 26rpx; 
 | 
      font-weight: 400; 
 | 
      color: #ffffff; 
 | 
      text-shadow: 0rpx 2rpx 4rpx rgba(0, 0, 0, 0.24); 
 | 
      margin-top: 18rpx; 
 | 
    } 
 | 
  } 
 | 
  .box_list { 
 | 
    width: 100%; 
 | 
    height: calc(100vh - 253rpx); 
 | 
    padding: 0 30rpx 30rpx 30rpx; 
 | 
    box-sizing: border-box; 
 | 
    .box_list_answer { 
 | 
      width: 100%; 
 | 
      height: 100%; 
 | 
      overflow-y: auto; 
 | 
      background: #ffffff; 
 | 
      border-radius: 16rpx; 
 | 
      padding: 30rpx; 
 | 
      box-sizing: border-box; 
 | 
      position: relative; 
 | 
      .box_list_answer_name { 
 | 
        font-size: 30rpx; 
 | 
        font-weight: 400; 
 | 
        color: #222222; 
 | 
        margin-bottom: 32rpx; 
 | 
      } 
 | 
      .box_list_answer_tips { 
 | 
        width: 100%; 
 | 
        padding: 22rpx 30rpx; 
 | 
        box-sizing: border-box; 
 | 
        background: #f7f7f7; 
 | 
        border-radius: 8rpx; 
 | 
        margin-bottom: 24rpx; 
 | 
        .line { 
 | 
          display: flex; 
 | 
          align-items: center; 
 | 
          font-size: 28rpx; 
 | 
          color: #333333; 
 | 
          margin-bottom: 20rpx; 
 | 
          &:nth-last-child(1){ 
 | 
            margin-bottom: 0; 
 | 
          } 
 | 
        } 
 | 
        image { 
 | 
          width: 28rpx; 
 | 
          height: 28rpx; 
 | 
        } 
 | 
        text { 
 | 
          font-size: 28rpx; 
 | 
          font-weight: 400; 
 | 
          color: #e42d2d; 
 | 
          margin-left: 16rpx; 
 | 
        } 
 | 
        .success { 
 | 
          color: $uni-color-primary; 
 | 
        } 
 | 
      } 
 | 
    } 
 | 
    .score_static { 
 | 
      display: flex; 
 | 
      font-size: 32rpx; 
 | 
      margin-bottom: 40rpx; 
 | 
      .name { 
 | 
        font-weight: 600; 
 | 
      } 
 | 
      .num { 
 | 
        color: $uni-color-primary; 
 | 
      } 
 | 
      .warry { 
 | 
        color: #ed4545; 
 | 
      } 
 | 
    } 
 | 
    .list_item { 
 | 
      margin-bottom: 46rpx; 
 | 
    } 
 | 
    .box_list_answer_item { 
 | 
      width: 100%; 
 | 
      display: flex; 
 | 
      align-items: center; 
 | 
      margin-bottom: 30rpx; 
 | 
      image { 
 | 
        width: 36rpx; 
 | 
        height: 36rpx; 
 | 
        margin-right: 20rpx; 
 | 
      } 
 | 
      text { 
 | 
        font-size: 28rpx; 
 | 
        font-weight: 400; 
 | 
        color: #333333; 
 | 
      } 
 | 
    } 
 | 
    .des { 
 | 
      background: #cccccc !important; 
 | 
      border: none !important; 
 | 
    } 
 | 
    .empty { 
 | 
      height: 160rpx; 
 | 
      width: 100%; 
 | 
    } 
 | 
    .box_list_answer_btn { 
 | 
      position: fixed; 
 | 
      bottom: 120rpx; 
 | 
      left: 60rpx; 
 | 
      width: 630rpx; 
 | 
      height: 88rpx; 
 | 
      line-height: 88rpx; 
 | 
      text-align: center; 
 | 
      background: $uni-color-primary; 
 | 
      box-shadow: 0rpx 4rpx 12rpx 0rpx rgba(77, 153, 168, 0.3); 
 | 
      border-radius: 44rpx; 
 | 
      font-size: 30rpx; 
 | 
      color: #ffffff; 
 | 
    } 
 | 
    .disable { 
 | 
      background-color: #cccccc; 
 | 
    } 
 | 
  } 
 | 
} 
 | 
</style> 
 |