瀏覽代碼

连线题功能

任一存 2 年之前
父節點
當前提交
e9d46710f4
共有 10 個文件被更改,包括 844 次插入76 次删除
  1. 1 0
      package.json
  2. 二進制
      src/assets/images/correct-tip.png
  3. 二進制
      src/assets/images/wrong-tip.png
  4. 1 1
      src/quizData.js
  5. 4 4
      src/router/index.js
  6. 3 3
      src/views/HomeWeb.vue
  7. 475 0
      src/views/QuestionInner.vue
  8. 51 41
      src/views/QuestionPending.vue
  9. 30 21
      src/views/QuestionJudge.vue
  10. 279 6
      yarn.lock

+ 1 - 0
package.json

@@ -11,6 +11,7 @@
   "dependencies": {
     "axios": "^1.1.3",
     "core-js": "^3.8.3",
+    "d3": "^7.8.0",
     "element-ui": "^2.15.6",
     "html2canvas": "^1.3.3",
     "install": "^0.13.0",

二進制
src/assets/images/correct-tip.png


二進制
src/assets/images/wrong-tip.png


文件差異過大導致無法顯示
+ 1 - 1
src/quizData.js


+ 4 - 4
src/router/index.js

@@ -2,7 +2,7 @@ import Vue from 'vue'
 import VueRouter from 'vue-router'
 import HomeWeb from '../views/HomeWeb.vue'
 import HomeMobile from '../views/HomeMobile.vue'
-import QuestionJudge from '../views/QuestionJudge.vue'
+import QuestionView from '../views/QuestionView.vue'
 
 Vue.use(VueRouter)
 
@@ -18,9 +18,9 @@ const routes = [
     component: HomeWeb,
     children: [
       {
-        path: '/question-judge',
-        name: 'QuestionJudge',
-        component: QuestionJudge,
+        path: '/question-view',
+        name: 'QuestionView',
+        component: QuestionView,
       }
     ]
   },

+ 3 - 3
src/views/HomeWeb.vue

@@ -65,7 +65,7 @@ export default {
         return item.id === newId
       })
       this.setQuestionInfo(quizInfo)
-      this.$router.push({ name: 'QuestionJudge' })
+      this.$router.push({ name: 'QuestionView' })
     } else { //答过这个点位的题,可能要找到最近答的那道题,恢复现场
       const latestRecord = recordOnThisHotspot.reduce((accu, curr) => {
         if (new Date(accu.updateTime).getTime() <= new Date(curr.updateTime).getTime()) {
@@ -80,7 +80,7 @@ export default {
           return item.id === newId
         })
         this.setQuestionInfo(quizInfo)
-        this.$router.push({ name: 'QuestionJudge' })
+        this.$router.push({ name: 'QuestionView' })
       } else {
         const quizInfo = quizData.find((item) => {
           return item.id === latestRecord.num
@@ -90,7 +90,7 @@ export default {
         this.setIsSubmitted(true)
         this.setQuestionInfo(quizInfo)
         // if (quizInfo.questionType === '判断题') {
-        this.$router.push({ name: 'QuestionJudge' })
+        this.$router.push({ name: 'QuestionView' })
       }
     }
   },

+ 475 - 0
src/views/QuestionInner.vue

@@ -0,0 +1,475 @@
+<template>
+  <div class="question-inner">
+    <div class="type">
+      {{ questionInfo.questionType }}
+    </div>
+    <p class="question">
+      {{ questionInfo.question }}
+    </p>
+    <template v-if="questionInfo.questionType !== '连线题'">
+      <button
+        v-for="(option, index) in questionInfo.answerOptions"
+        :key="index"
+        :disabled="isSubmitted"
+        class="option"
+        :class="{
+          selected: selectedIdxList[index],
+          rightOption: questionInfo.rightOptionIdx.includes(index),
+          wrongOption: !questionInfo.rightOptionIdx.includes(index),
+          submitted: isSubmitted,
+          notSubmitted: !isSubmitted,
+        }"
+        :style="{
+          marginTop: questionInfo.answerOptions.length > 4 ? '0': '',
+        }"
+        @click="onClickOption(index)"
+      >
+        <div class="option-text">
+          {{ option }}
+        </div>
+        <div
+          v-show="isSubmitted && selectedIdxList[index] && questionInfo.rightOptionIdx.includes(index)"
+          class="result-tip"
+        >
+          <img
+            class="correct-icon"
+            src="@/assets/images/correct.png"
+            alt=""
+            draggable="false"
+          >
+          <span class="right-tip-text">恭喜你,回答正确</span>
+        </div>
+        <div
+          v-show="isSubmitted && selectedIdxList[index] && !questionInfo.rightOptionIdx.includes(index)"
+          class="result-tip"
+        >
+          <img
+            class="wrong-icon"
+            src="@/assets/images/wrong.png"
+            alt=""
+            draggable="false"
+          >
+          <span class="wrong-tip-text">很遗憾,回答错误</span>
+        </div>
+      </button>
+    </template>
+    <div
+      v-if="questionInfo.questionType === '连线题'"
+      class="line-quiz-wrapper"
+    >
+      <div class="left">
+        <button
+          v-for="(item, index) in questionInfo.answerOptions.left"
+          :key="index"
+          :class="{
+            active: activeButtonIdxLeft === index,
+          }"
+          @click="onClickButtonLeft(index)"
+        >
+          {{ item }}
+        </button>
+      </div>
+
+      <div class="svg-wrapper">
+        <svg
+          xmlns="http://www.w3.org/2000/svg"
+          version="1.1"
+        >
+          <g
+            v-for="(itemG, indexLeft) in questionInfo.answerOptions.left"
+            :key="indexLeft"
+          >
+            <line
+              v-for="(itemLine, indexRight) in questionInfo.answerOptions.right"
+              :key="indexRight"
+              :ref="`${indexLeft}-${indexRight}`"
+              x1="0"
+              :y1="`calc((100% + 64px) / ${questionInfo.answerOptions.left.length + 1} * ${indexLeft + 1} - 64px / 2)`"
+              x2="100%"
+              :y2="`calc((100% + 64px) / ${questionInfo.answerOptions.right.length + 1} * ${indexRight + 1} - 64px / 2)`"
+              stroke-width="2px"
+              :stroke="lineColor(indexLeft, indexRight)"
+            />
+          </g>
+        </svg>
+      </div>
+
+      <div class="right">
+        <button
+          v-for="(item, index) in questionInfo.answerOptions.right"
+          :key="index"
+          :class="{
+            active: activeButtonIdxRight === index,
+          }"
+          @click="onClickButtonRight(index)"
+        >
+          {{ item }}
+        </button>
+      </div>
+      <div
+        v-if="isSubmitted && isCorrect"
+        class="result-tip correct"
+      >
+        回答正确
+        <img
+          class=""
+          src="@/assets/images/correct-tip.png"
+          alt=""
+          draggable="false"
+        >
+      </div>
+      <div
+        v-if="isSubmitted && !isCorrect"
+        class="result-tip wrong"
+      >
+        回答错误
+        <img
+          class=""
+          src="@/assets/images/wrong-tip.png"
+          alt=""
+          draggable="false"
+        >
+      </div>
+    </div>
+  </div>
+</template>
+
+<script>
+// import browser from "@/utils/browser";
+// import * as d3 from "d3"
+
+export default {
+  props: [
+  ],
+  data() {
+    return {
+      selectedIdxList: [],
+      activeButtonIdxLeft: null,
+      activeButtonIdxRight: null,
+      // svgNode: null,
+    }
+  },
+  computed: {
+    ...globalMapState([
+      'questionInfo',
+      'isSubmitted',
+      'answerRecord',
+    ]),
+    canSubmit() {
+      if (this.questionInfo.questionType === '单选题' || this.questionInfo.questionType === '判断题') {
+        return this.selectedIdxList.filter((item) => {
+          return !!item
+        }).length > 0
+      } else if (this.questionInfo.questionType === '多选题') {
+        return this.selectedIdxList.length > 1
+      } else if (this.questionInfo.questionType === '连线题') {
+        if (this.selectedIdxList && this.selectedIdxList.flat().filter((item) => {
+          return !!item
+        }).length >= 1) {
+          return true
+        } else {
+          return false
+        }
+      } else {
+        return false
+      }
+    },
+    isCorrect() {
+      if (this.questionInfo.questionType !== '连线题') {
+        if (this.questionInfo.rightOptionIdx.length !== this.selectedIdxList.filter((item) => {
+          return !!item
+        }).length) {
+          return false
+        }
+        for (const iterator of this.questionInfo.rightOptionIdx) {
+          if (!this.selectedIdxList[iterator]) {
+            return false
+          }
+        }
+        return true
+      } else {
+        console.log(JSON.stringify(this.selectedIdxList))
+        if (JSON.stringify(this.selectedIdxList) === JSON.stringify(this.questionInfo.rightOptionIdx)) {
+          return true
+        } else {
+          return false
+        }
+      }
+    },
+  },
+  watch: {
+    activeButtonIdxLeft: {
+      handler(vNew) {
+        if (vNew !== null && this.activeButtonIdxRight !== null) {
+          this.$set(this.selectedIdxList[vNew], this.activeButtonIdxRight, true)
+          // this.selectedIdxList[vNew][this.activeButtonIdxRight] = true
+          this.activeButtonIdxLeft = null
+          this.activeButtonIdxRight = null
+        }
+      }
+    },
+    activeButtonIdxRight: {
+      handler(vNew) {
+        if (vNew !== null && this.activeButtonIdxLeft !== null) {
+          this.$set(this.selectedIdxList[this.activeButtonIdxLeft], vNew, true)
+          // this.selectedIdxList[this.activeButtonIdxLeft][vNew] = true
+          this.activeButtonIdxLeft = null
+          this.activeButtonIdxRight = null
+        }
+      }
+    },
+  },
+  async mounted() {
+    this.resetSelectedIdxList()
+  },
+  methods: {
+    ...globalMapMutations([
+      'setIsSubmitted',
+    ]),
+    resetSelectedIdxList() {
+      if (this.answerRecord) {
+      // this.selectedIdxList = []
+        this.selectedIdxList = JSON.parse(this.answerRecord.options)
+      } else {
+        if (this.questionInfo.questionType === '连线题') {
+          this.selectedIdxList = JSON.parse(JSON.stringify(this.questionInfo.emptyAnswer))
+        } else {
+          this.selectedIdxList = new Array(this.questionInfo.answerOptions.length)
+          this.selectedIdxList.forEach(element => {
+            return !!element
+          })
+        }
+      }
+    },
+    onClickOption(idx) {
+      if (this.questionInfo.questionType === '单选题' || this.questionInfo.questionType === '判断题') {
+        this.selectedIdxList = new Array(this.questionInfo.answerOptions.length)
+        this.selectedIdxList.forEach(element => {
+          return !!element
+        })
+        this.$set(this.selectedIdxList, idx, true)
+        this.$emit('submit')
+      } else if (this.questionInfo.questionType === '多选题') {
+        this.$set(this.selectedIdxList, idx, !this.selectedIdxList[idx])
+      }
+    },
+    onClickButtonLeft(index) {
+      this.activeButtonIdxLeft = index
+    },
+    onClickButtonRight(index) {
+      this.activeButtonIdxRight = index
+    },
+    lineColor(indexLeft, indexRight) {
+      if (!this.isSubmitted) {
+        return this.selectedIdxList && this.selectedIdxList[indexLeft] && this.selectedIdxList[indexLeft][indexRight] ? 'rgba(164, 87, 63, 1)' : 'transparent'
+      } else {
+        if ((this.selectedIdxList && this.selectedIdxList[indexLeft] && this.selectedIdxList[indexLeft][indexRight]) && (this.questionInfo.rightOptionIdx[indexLeft][indexRight])) {
+          console.log()
+          return '#81bf50'
+        } else if ((this.selectedIdxList && this.selectedIdxList[indexLeft] && this.selectedIdxList[indexLeft][indexRight]) && !(this.questionInfo.rightOptionIdx[indexLeft][indexRight])) {
+          return 'transparent'
+        } else if (!(this.selectedIdxList && this.selectedIdxList[indexLeft] && this.selectedIdxList[indexLeft][indexRight]) && (this.questionInfo.rightOptionIdx[indexLeft][indexRight])) {
+          return '#9a2d0a'
+        } else {
+          return 'transparent'
+        }
+      }
+    }
+  }
+}
+</script>
+
+<style lang="less" scoped>
+.question-inner {
+  flex: 1 0 1px;
+  width: calc(100% - 150px * 2);
+  margin-top: 10px;
+  counter-reset: count;
+  > .type {
+    padding-left: 10px;
+    padding-right: 10px;
+    font-size: 24px;
+    font-family: Source Han Sans CN-Bold, Source Han Sans CN;
+    font-weight: bold;
+    color: #693D2F;
+  }
+  > p.question {
+    margin-top: 10px;
+    padding-left: 10px;
+    padding-right: 10px;
+    font-size: 20px;
+    font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+    font-weight: 400;
+    color: #693D2F;
+  }
+  > button.option {
+    margin-top: 6px;
+    height: 45px;
+    padding-left: 10px;
+    padding-right: 50px;
+    padding-top: 5px;
+    width: 100%;
+    text-align: left;
+    display: flex;
+    justify-content: space-between;
+    align-items: center;
+    font-size: 20px;
+    font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+    font-weight: 400;
+    color: #693D2F;
+    counter-increment: count;
+    &.notSubmitted:hover {
+      color: #5f9533;
+    }
+    &.notSubmitted.selected {
+      background-image: url(@/assets/images/option-correct-bg.png);
+      background-size: cover;
+      background-repeat: no-repeat;
+      background-position: center center;
+      color: #5f9533;
+    }
+    &.submitted {
+      pointer-events: none;
+    }
+    &.submitted.selected.rightOption {
+      background-image: url(@/assets/images/option-correct-bg.png);
+      background-size: cover;
+      background-repeat: no-repeat;
+      background-position: center center;
+      color: #5f9533;
+    }
+    &.submitted.selected.wrongOption {
+      background-image: url(@/assets/images/option-wrong-bg.png);
+      background-size: cover;
+      background-repeat: no-repeat;
+      background-position: center center;
+    }
+    > .option-text {
+      &::before {
+        content: counter(count, upper-alpha);
+        margin-right: 0.5em;
+      }
+    }
+    > .result-tip {
+      display: inline-flex;
+      align-items: center;
+      > img.correct-icon {
+        width: 16px;
+        height: 12px;
+        margin-right: 9px;
+      }
+      > img.wrong-icon {
+        width: 13px;
+        height: 13px;
+        margin-right: 9px;
+      }
+      > .right-tip-text {
+        font-size: 16px;
+        font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+        font-weight: 400;
+        color: #3E7016;
+      }
+      > .wrong-tip-text {
+        font-size: 16px;
+        font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+        font-weight: 400;
+        color: #693D2F;
+      }
+    }
+  }
+  > .line-quiz-wrapper {
+    margin-top: 20px;
+    position: relative;
+    width: 100%;
+    height: 450px;
+    > .left {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 175px;
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      justify-content: space-evenly;
+      align-items: stretch;
+      > button {
+        width: 175px;
+        height: 64px;
+        border-radius: 32px;
+        border: 2px solid #8F4831;
+        font-size: 20px;
+        font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+        font-weight: 400;
+        color: #8F4831;
+        &:hover, &.active {
+          background: #FFE5BA;
+        }
+      }
+    }
+    > .svg-wrapper {
+      position: absolute;
+      top: 0;
+      left: 175px;
+      width: calc(100% - 175px * 2);
+      height: 100%;
+      > svg {
+        width: 100%;
+        height: 100%;
+        > g {
+          width: 100%;
+          height: 100%;
+          > line {
+
+          }
+        }
+      }
+    }
+    > .right {
+      position: absolute;
+      top: 0;
+      right: 0;
+      width: 175px;
+      height: 100%;
+      display: flex;
+      flex-direction: column;
+      justify-content: space-evenly;
+      align-items: stretch;
+      > button {
+        width: 175px;
+        height: 64px;
+        border-radius: 32px;
+        border: 2px solid #8F4831;
+        font-size: 20px;
+        font-family: Source Han Sans CN-Regular, Source Han Sans CN;
+        font-weight: 400;
+        color: #8F4831;
+        &:hover, &.active {
+          background: #FFE5BA;
+        }
+      }
+    }
+    > .result-tip {
+      position: absolute;
+      top: 100%;
+      left: 0;
+      display: flex;
+      align-items: center;
+      font-size: 14px;
+      font-family: Source Han Sans CN-Bold, Source Han Sans CN;
+      font-weight: bold;
+      letter-spacing: 1px;
+      &.correct {
+        color: #3E7016;
+      }
+      &.wrong {
+        color: #9A2D0A;
+      }
+      > img {
+        width: 13px;
+        height: 13px;
+        margin-left: 13px;
+      }
+    }
+  }
+}
+</style>

+ 51 - 41
src/views/QuestionPending.vue

@@ -1,12 +1,24 @@
 <template>
-  <div class="question-pending">
+  <div class="question-inner">
     <div class="type">
       {{ questionInfo.questionType }}
     </div>
     <p class="question">
       {{ questionInfo.question }}
     </p>
-    <button
+
+    <div class="wrapper-1">
+      <div class="left">
+        <button />
+      </div>
+
+      <div class="svg-wrapper" />
+
+      <div class="right">
+        <button />
+      </div>
+    </div>
+    <!-- <button
       v-for="(option, index) in questionInfo.answerOptions"
       :key="index"
       :disabled="isSubmitted"
@@ -47,7 +59,7 @@
         >
         <span class="wrong-tip-text">很遗憾,回答错误</span>
       </div>
-    </button>
+    </button> -->
   </div>
 </template>
 
@@ -69,30 +81,18 @@ export default {
       'answerRecord',
     ]),
     canSubmit() {
-      if (this.questionInfo.questionType === '单选题' || this.questionInfo.questionType === '判断题') {
-        return this.selectedIdxList.filter((item) => {
-          return !!item
-        }).length > 0
-      } else if (this.questionInfo.questionType === '多选题') {
-        return this.selectedIdxList.filter((item) => {
-          return !!item
-        }).length > 1
+      if (this.selectedIdxList.length) {
+        return true
       } else {
         return false
       }
     },
     isCorrect() {
-      if (this.questionInfo.rightOptionIdx.length !== this.selectedIdxList.filter((item) => {
-        return !!item
-      }).length) {
+      if (JSON.stringify(this.selectedIdxList) === JSON.stringify(this.questionInfo.answerOptions)) {
+        return true
+      } else {
         return false
       }
-      for (const iterator of this.questionInfo.rightOptionIdx) {
-        if (!this.selectedIdxList[iterator]) {
-          return false
-        }
-      }
-      return true
     }
   },
   watch: {
@@ -101,35 +101,15 @@ export default {
     if (this.answerRecord) {
       // this.selectedIdxList = []
       this.selectedIdxList = [...JSON.parse(this.answerRecord.options)]
-    } else {
-      this.selectedIdxList = new Array(this.questionInfo.answerOptions.length)
-      this.selectedIdxList.forEach(element => {
-        return !!element
-      })
     }
   },
   methods: {
-    ...globalMapMutations([
-      'setIsSubmitted',
-    ]),
-    onClickOption(idx) {
-      if (this.questionInfo.questionType === '单选题' || this.questionInfo.questionType === '判断题') {
-        this.selectedIdxList = new Array(this.questionInfo.answerOptions.length)
-        this.selectedIdxList.forEach(element => {
-          return !!element
-        })
-        this.$set(this.selectedIdxList, idx, true)
-        this.$emit('submit')
-      } else if (this.questionInfo.questionType === '多选题') {
-        this.$set(this.selectedIdxList, idx, !this.selectedIdxList[idx])
-      }
-    }
   }
 }
 </script>
 
 <style lang="less" scoped>
-.question-pending {
+.question-inner {
   flex: 1 0 1px;
   width: calc(100% - 150px * 2);
   margin-top: 10px;
@@ -151,6 +131,36 @@ export default {
     font-weight: 400;
     color: #693D2F;
   }
+
+  > .wrapper-1 {
+    position: relative;
+    width: 100%;
+    height: 350px;
+    background: blue;
+    > .left {
+      position: absolute;
+      top: 0;
+      left: 0;
+      width: 30%;
+      height: 100%;
+    }
+    > .svg-wrapper {
+      position: absolute;
+      top: 0;
+      left: 30%;
+      right: 30%;
+      height: 100%;
+      background: red;
+    }
+    > .right {
+      position: absolute;
+      top: 0;
+      right: 0;
+      width: 30%;
+      height: 100%;
+    }
+  }
+
   > button.option {
     margin-top: 6px;
     height: 45px;

+ 30 - 21
src/views/QuestionJudge.vue

@@ -1,12 +1,21 @@
 <template>
   <div
-    class="question-judge"
+    class="question-view"
     :class="{
       isDescInline,
     }"
+    :style="{
+      backgroundImage: questionInfo?.questionType === '连线题' ? `url(${require('@/assets/images/bg-long.png')})` : `url(${require('@/assets/images/bg-short.png')})`,
+      width: questionInfo?.questionType === '连线题' ? '804px' : '800px',
+      height: questionInfo?.questionType === '连线题' ? '793px' : '520px',
+    }"
   >
     <button
       class="close"
+      :style="{
+        top: questionInfo?.questionType === '连线题' ? '43px' : '40px',
+        right: questionInfo?.questionType === '连线题' ? '37px' : '45px',
+      }"
       @click="onClickClose"
     >
       <img
@@ -18,9 +27,9 @@
     <div class="title-wrapper">
       <h1>知识问答</h1>
     </div>
-    <QuestionPending
+    <QuestionInner
       v-show="isDescInline || !isShowDesc"
-      ref="question-pending"
+      ref="question-inner"
       @submit="onSubmit"
     />
     <AnswerDesc
@@ -61,14 +70,14 @@
       >
     </div>
     <button
-      v-show="!isSubmitted && (questionInfo?.questionType === '多选题' || questionInfo.questionType === '连线题')"
+      v-show="!isSubmitted && (questionInfo?.questionType === '多选题' || questionInfo.questionType === '连线题') && $refs['question-inner'].canSubmit"
       class="submit"
       @click="onSubmit"
     >
       提交答案
     </button>
     <div
-      v-show="(!isShowDesc || (isShowDesc && isDescInline)) && isSubmitted && $refs['question-pending']?.isCorrect"
+      v-show="(!isShowDesc || (isShowDesc && isDescInline)) && isSubmitted && $refs['question-inner']?.isCorrect"
       class="button-wrapper-correct"
     >
       <button
@@ -87,7 +96,7 @@
       </button>
     </div>
     <div
-      v-show="(!isShowDesc || (isShowDesc && isDescInline)) && isSubmitted && !$refs['question-pending']?.isCorrect"
+      v-show="(!isShowDesc || (isShowDesc && isDescInline)) && isSubmitted && !$refs['question-inner']?.isCorrect"
       class="button-wrapper-wrong"
     >
       <button
@@ -126,13 +135,13 @@
 
 <script>
 // import browser from "@/utils/browser";
-import QuestionPending from "@/views/QuestionPending.vue"
+import QuestionInner from "@/views/QuestionInner.vue"
 import AnswerDesc from "@/views/AnswerDesc.vue"
 import quizData from "@/quizData.js"
 
 export default {
   components: {
-    QuestionPending,
+    QuestionInner,
     AnswerDesc,
   },
   props: [
@@ -168,12 +177,12 @@ export default {
       window.parent.document.getElementById('closepop').click()
     },
     onSubmit() {
-      if (this.$refs['question-pending'].canSubmit > 0) {
+      if (this.$refs['question-inner'].canSubmit) {
         this.setIsSubmitted(true)
         globalApi.submitAnswer(
-          this.$refs['question-pending']?.isCorrect,
+          this.$refs['question-inner']?.isCorrect,
           this.questionInfo.id,
-          this.$refs['question-pending']?.selectedIdxList,
+          this.$refs['question-inner']?.selectedIdxList,
           this.questionInfo.badgeTypeCode,
         )
         if (this.isDescInline) {
@@ -188,33 +197,31 @@ export default {
       this.setIsSubmitted(false)
       this.setAnswerRecord(null)
       this.isShowDesc = false
-      this.$refs['question-pending'].selectedIdxList = []
+      this.$refs['question-inner'].resetSelectedIdxList()
     },
     onClickNext() {
       this.setIsSubmitted(false)
       this.setAnswerRecord(null)
       this.isShowDesc = false
-      this.$refs['question-pending'].selectedIdxList = []
 
       const newId = globalUtils.getNextQuestionId(this.questionInfo.id)
       const quizInfo = quizData.find((item) => {
         return item.id === newId
       })
       this.setQuestionInfo(quizInfo)
+
+      this.$refs['question-inner'].resetSelectedIdxList()
     },
   }
 }
 </script>
 
 <style lang="less" scoped>
-.question-judge {
+.question-view {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
-  width: 800px;
-  height: 520px;
-  background-image: url(@/assets/images/bg-short.png);
   background-size: contain;
   background-repeat: no-repeat;
   background-position: center center;
@@ -223,8 +230,6 @@ export default {
   align-items: center;
   > button.close {
     position: absolute;
-    top: 40px;
-    right: 45px;
     width: 32px;
     height: 34px;
     > img {
@@ -254,6 +259,7 @@ export default {
     }
   }
   > button.submit {
+    flex: 0 0 auto;
     margin-top: 10px;
     margin-bottom: 70px;
     width: 150px;
@@ -268,6 +274,7 @@ export default {
     color: #FFFFFF;
   }
   > .button-wrapper-correct {
+    flex: 0 0 auto;
     margin-top: 10px;
     margin-bottom: 70px;
     > button {
@@ -289,6 +296,7 @@ export default {
     }
   }
   > .button-wrapper-wrong {
+    flex: 0 0 auto;
     margin-top: 10px;
     margin-bottom: 70px;
     > button.next {
@@ -337,6 +345,7 @@ export default {
     }
   }
   > button.return-question {
+    flex: 0 0 auto;
     margin-top: 10px;
     margin-bottom: 70px;
     display: block;
@@ -354,7 +363,7 @@ export default {
   }
 }
 
-.question-judge.isDescInline {
+.question-view.isDescInline {
   width: 804px;
   height: 793px;
   background-image: url(@/assets/images/bg-long.png);
@@ -369,7 +378,7 @@ export default {
     > h1 {
     }
   }
-  > .question-pending {
+  > .question-inner {
     flex: 0 0 auto;
   }
   > .answer-desc-inline {

+ 279 - 6
yarn.lock

@@ -2336,16 +2336,16 @@ combined-stream@^1.0.8:
   dependencies:
     delayed-stream "~1.0.0"
 
+commander@7, commander@^7.2.0:
+  version "7.2.0"
+  resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
+  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
+
 commander@^2.20.0:
   version "2.20.3"
   resolved "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33"
   integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==
 
-commander@^7.2.0:
-  version "7.2.0"
-  resolved "https://registry.npmmirror.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
-  integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-
 commander@^8.3.0:
   version "8.3.0"
   resolved "https://registry.npmmirror.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66"
@@ -2629,6 +2629,250 @@ csstype@^3.1.0:
   resolved "https://registry.npmmirror.com/csstype/-/csstype-3.1.1.tgz#841b532c45c758ee546a11d5bd7b7b473c8c30b9"
   integrity sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==
 
+"d3-array@2 - 3", "d3-array@2.10.0 - 3", "d3-array@2.5.0 - 3", d3-array@3, d3-array@^3.2.0:
+  version "3.2.3"
+  resolved "https://registry.npmmirror.com/d3-array/-/d3-array-3.2.3.tgz#39f1f4954e4a09ff69ac597c2d61906b04e84740"
+  integrity sha512-JRHwbQQ84XuAESWhvIPaUV4/1UYTBOLiOPGWqgFDHZS1D5QN9c57FbH3QpEnQMYiOXNzKUQyGTZf+EVO7RT5TQ==
+  dependencies:
+    internmap "1 - 2"
+
+d3-axis@3:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/d3-axis/-/d3-axis-3.0.0.tgz#c42a4a13e8131d637b745fc2973824cfeaf93322"
+  integrity sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==
+
+d3-brush@3:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/d3-brush/-/d3-brush-3.0.0.tgz#6f767c4ed8dcb79de7ede3e1c0f89e63ef64d31c"
+  integrity sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-drag "2 - 3"
+    d3-interpolate "1 - 3"
+    d3-selection "3"
+    d3-transition "3"
+
+d3-chord@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-chord/-/d3-chord-3.0.1.tgz#d156d61f485fce8327e6abf339cb41d8cbba6966"
+  integrity sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==
+  dependencies:
+    d3-path "1 - 3"
+
+"d3-color@1 - 3", d3-color@3:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/d3-color/-/d3-color-3.1.0.tgz#395b2833dfac71507f12ac2f7af23bf819de24e2"
+  integrity sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==
+
+d3-contour@4:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/d3-contour/-/d3-contour-4.0.2.tgz#bb92063bc8c5663acb2422f99c73cbb6c6ae3bcc"
+  integrity sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==
+  dependencies:
+    d3-array "^3.2.0"
+
+d3-delaunay@6:
+  version "6.0.4"
+  resolved "https://registry.npmmirror.com/d3-delaunay/-/d3-delaunay-6.0.4.tgz#98169038733a0a5babbeda55054f795bb9e4a58b"
+  integrity sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==
+  dependencies:
+    delaunator "5"
+
+"d3-dispatch@1 - 3", d3-dispatch@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-3.0.1.tgz#5fc75284e9c2375c36c839411a0cf550cbfc4d5e"
+  integrity sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==
+
+"d3-drag@2 - 3", d3-drag@3:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/d3-drag/-/d3-drag-3.0.0.tgz#994aae9cd23c719f53b5e10e3a0a6108c69607ba"
+  integrity sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-selection "3"
+
+"d3-dsv@1 - 3", d3-dsv@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-dsv/-/d3-dsv-3.0.1.tgz#c63af978f4d6a0d084a52a673922be2160789b73"
+  integrity sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==
+  dependencies:
+    commander "7"
+    iconv-lite "0.6"
+    rw "1"
+
+"d3-ease@1 - 3", d3-ease@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-ease/-/d3-ease-3.0.1.tgz#9658ac38a2140d59d346160f1f6c30fda0bd12f4"
+  integrity sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==
+
+d3-fetch@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-fetch/-/d3-fetch-3.0.1.tgz#83141bff9856a0edb5e38de89cdcfe63d0a60a22"
+  integrity sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==
+  dependencies:
+    d3-dsv "1 - 3"
+
+d3-force@3:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/d3-force/-/d3-force-3.0.0.tgz#3e2ba1a61e70888fe3d9194e30d6d14eece155c4"
+  integrity sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-quadtree "1 - 3"
+    d3-timer "1 - 3"
+
+"d3-format@1 - 3", d3-format@3:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/d3-format/-/d3-format-3.1.0.tgz#9260e23a28ea5cb109e93b21a06e24e2ebd55641"
+  integrity sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==
+
+d3-geo@3:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/d3-geo/-/d3-geo-3.1.0.tgz#74fd54e1f4cebd5185ac2039217a98d39b0a4c0e"
+  integrity sha512-JEo5HxXDdDYXCaWdwLRt79y7giK8SbhZJbFWXqbRTolCHFI5jRqteLzCsq51NKbUoX0PjBVSohxrx+NoOUujYA==
+  dependencies:
+    d3-array "2.5.0 - 3"
+
+d3-hierarchy@3:
+  version "3.1.2"
+  resolved "https://registry.npmmirror.com/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz#b01cd42c1eed3d46db77a5966cf726f8c09160c6"
+  integrity sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==
+
+"d3-interpolate@1 - 3", "d3-interpolate@1.2.0 - 3", d3-interpolate@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-3.0.1.tgz#3c47aa5b32c5b3dfb56ef3fd4342078a632b400d"
+  integrity sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==
+  dependencies:
+    d3-color "1 - 3"
+
+"d3-path@1 - 3", d3-path@3, d3-path@^3.1.0:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/d3-path/-/d3-path-3.1.0.tgz#22df939032fb5a71ae8b1800d61ddb7851c42526"
+  integrity sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==
+
+d3-polygon@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-polygon/-/d3-polygon-3.0.1.tgz#0b45d3dd1c48a29c8e057e6135693ec80bf16398"
+  integrity sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==
+
+"d3-quadtree@1 - 3", d3-quadtree@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-3.0.1.tgz#6dca3e8be2b393c9a9d514dabbd80a92deef1a4f"
+  integrity sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==
+
+d3-random@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-random/-/d3-random-3.0.1.tgz#d4926378d333d9c0bfd1e6fa0194d30aebaa20f4"
+  integrity sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==
+
+d3-scale-chromatic@3:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/d3-scale-chromatic/-/d3-scale-chromatic-3.0.0.tgz#15b4ceb8ca2bb0dcb6d1a641ee03d59c3b62376a"
+  integrity sha512-Lx9thtxAKrO2Pq6OO2Ua474opeziKr279P/TKZsMAhYyNDD3EnCffdbgeSYN5O7m2ByQsxtuP2CSDczNUIZ22g==
+  dependencies:
+    d3-color "1 - 3"
+    d3-interpolate "1 - 3"
+
+d3-scale@4:
+  version "4.0.2"
+  resolved "https://registry.npmmirror.com/d3-scale/-/d3-scale-4.0.2.tgz#82b38e8e8ff7080764f8dcec77bd4be393689396"
+  integrity sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==
+  dependencies:
+    d3-array "2.10.0 - 3"
+    d3-format "1 - 3"
+    d3-interpolate "1.2.0 - 3"
+    d3-time "2.1.1 - 3"
+    d3-time-format "2 - 4"
+
+"d3-selection@2 - 3", d3-selection@3:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/d3-selection/-/d3-selection-3.0.0.tgz#c25338207efa72cc5b9bd1458a1a41901f1e1b31"
+  integrity sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==
+
+d3-shape@3:
+  version "3.2.0"
+  resolved "https://registry.npmmirror.com/d3-shape/-/d3-shape-3.2.0.tgz#a1a839cbd9ba45f28674c69d7f855bcf91dfc6a5"
+  integrity sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==
+  dependencies:
+    d3-path "^3.1.0"
+
+"d3-time-format@2 - 4", d3-time-format@4:
+  version "4.1.0"
+  resolved "https://registry.npmmirror.com/d3-time-format/-/d3-time-format-4.1.0.tgz#7ab5257a5041d11ecb4fe70a5c7d16a195bb408a"
+  integrity sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==
+  dependencies:
+    d3-time "1 - 3"
+
+"d3-time@1 - 3", "d3-time@2.1.1 - 3", d3-time@3:
+  version "3.1.0"
+  resolved "https://registry.npmmirror.com/d3-time/-/d3-time-3.1.0.tgz#9310db56e992e3c0175e1ef385e545e48a9bb5c7"
+  integrity sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==
+  dependencies:
+    d3-array "2 - 3"
+
+"d3-timer@1 - 3", d3-timer@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-timer/-/d3-timer-3.0.1.tgz#6284d2a2708285b1abb7e201eda4380af35e63b0"
+  integrity sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==
+
+"d3-transition@2 - 3", d3-transition@3:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/d3-transition/-/d3-transition-3.0.1.tgz#6869fdde1448868077fdd5989200cb61b2a1645f"
+  integrity sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==
+  dependencies:
+    d3-color "1 - 3"
+    d3-dispatch "1 - 3"
+    d3-ease "1 - 3"
+    d3-interpolate "1 - 3"
+    d3-timer "1 - 3"
+
+d3-zoom@3:
+  version "3.0.0"
+  resolved "https://registry.npmmirror.com/d3-zoom/-/d3-zoom-3.0.0.tgz#d13f4165c73217ffeaa54295cd6969b3e7aee8f3"
+  integrity sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==
+  dependencies:
+    d3-dispatch "1 - 3"
+    d3-drag "2 - 3"
+    d3-interpolate "1 - 3"
+    d3-selection "2 - 3"
+    d3-transition "2 - 3"
+
+d3@^7.8.0:
+  version "7.8.4"
+  resolved "https://registry.npmmirror.com/d3/-/d3-7.8.4.tgz#e35d45800e4068cab07e59e5d883a4bb42ab217f"
+  integrity sha512-q2WHStdhiBtD8DMmhDPyJmXUxr6VWRngKyiJ5EfXMxPw+tqT6BhNjhJZ4w3BHsNm3QoVfZLY8Orq/qPFczwKRA==
+  dependencies:
+    d3-array "3"
+    d3-axis "3"
+    d3-brush "3"
+    d3-chord "3"
+    d3-color "3"
+    d3-contour "4"
+    d3-delaunay "6"
+    d3-dispatch "3"
+    d3-drag "3"
+    d3-dsv "3"
+    d3-ease "3"
+    d3-fetch "3"
+    d3-force "3"
+    d3-format "3"
+    d3-geo "3"
+    d3-hierarchy "3"
+    d3-interpolate "3"
+    d3-path "3"
+    d3-polygon "3"
+    d3-quadtree "3"
+    d3-random "3"
+    d3-scale "4"
+    d3-scale-chromatic "3"
+    d3-selection "3"
+    d3-shape "3"
+    d3-time "3"
+    d3-time-format "4"
+    d3-timer "3"
+    d3-transition "3"
+    d3-zoom "3"
+
 de-indent@^1.0.2:
   version "1.0.2"
   resolved "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d"
@@ -2692,6 +2936,13 @@ define-properties@^1.1.4:
     has-property-descriptors "^1.0.0"
     object-keys "^1.1.1"
 
+delaunator@5:
+  version "5.0.0"
+  resolved "https://registry.npmmirror.com/delaunator/-/delaunator-5.0.0.tgz#60f052b28bd91c9b4566850ebf7756efe821d81b"
+  integrity sha512-AyLvtyJdbv/U1GkiS6gUUzclRoAY4Gs75qkMygJJhU75LW4DNuSF2RMzpxs9jw9Oz1BobHjTdkG3zdP55VxAqw==
+  dependencies:
+    robust-predicates "^3.0.0"
+
 delayed-stream@~1.0.0:
   version "1.0.0"
   resolved "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
@@ -3642,6 +3893,13 @@ iconv-lite@0.4.24:
   dependencies:
     safer-buffer ">= 2.1.2 < 3"
 
+iconv-lite@0.6:
+  version "0.6.3"
+  resolved "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
+  integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
+  dependencies:
+    safer-buffer ">= 2.1.2 < 3.0.0"
+
 icss-utils@^5.0.0, icss-utils@^5.1.0:
   version "5.1.0"
   resolved "https://registry.npmmirror.com/icss-utils/-/icss-utils-5.1.0.tgz#c6be6858abd013d768e98366ae47e25d5887b1ae"
@@ -3703,6 +3961,11 @@ install@^0.13.0:
   resolved "https://registry.npmmirror.com/install/-/install-0.13.0.tgz#6af6e9da9dd0987de2ab420f78e60d9c17260776"
   integrity sha512-zDml/jzr2PKU9I8J/xyZBQn8rPCAY//UOYNmR01XwNwyfhEWObo2SWfSl1+0tm1u6PhxLwDnfsT/6jB7OUxqFA==
 
+"internmap@1 - 2":
+  version "2.0.3"
+  resolved "https://registry.npmmirror.com/internmap/-/internmap-2.0.3.tgz#6685f23755e43c524e251d29cbc97248e3061009"
+  integrity sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==
+
 ipaddr.js@1.9.1:
   version "1.9.1"
   resolved "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
@@ -5236,6 +5499,11 @@ rimraf@^3.0.2:
   dependencies:
     glob "^7.1.3"
 
+robust-predicates@^3.0.0:
+  version "3.0.1"
+  resolved "https://registry.npmmirror.com/robust-predicates/-/robust-predicates-3.0.1.tgz#ecde075044f7f30118682bd9fb3f123109577f9a"
+  integrity sha512-ndEIpszUHiG4HtDsQLeIuMvRsDnn8c8rYStabochtUeCvfuvNptb5TUbVD68LRAILPX7p9nqQGh4xJgn3EHS/g==
+
 run-parallel@^1.1.9:
   version "1.2.0"
   resolved "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
@@ -5243,6 +5511,11 @@ run-parallel@^1.1.9:
   dependencies:
     queue-microtask "^1.2.2"
 
+rw@1:
+  version "1.3.3"
+  resolved "https://registry.npmmirror.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4"
+  integrity sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==
+
 safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
   version "5.1.2"
   resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
@@ -5253,7 +5526,7 @@ safe-buffer@5.2.1, safe-buffer@>=5.1.0, safe-buffer@^5.1.0, safe-buffer@~5.2.0:
   resolved "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
   integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
 
-"safer-buffer@>= 2.1.2 < 3":
+"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0":
   version "2.1.2"
   resolved "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
   integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==