Browse Source

对话答题-判断完成

gcj 2 years ago
parent
commit
2dada1cb83

+ 16 - 14
src/components/Adult/Preview.vue

@@ -676,10 +676,8 @@
       </div>
     </div>
     <div v-if="isShowSave || isShowTitle" class="NNPE-title NNPE-title-gray">
-      <!-- 页眉 -->
-      <a v-if="isShowSave" class="submitAnswer" @click="submitUserAnswerNPC"
-        >提交</a
-      >
+      <!-- 页眉 v-if="isShowSave"-->
+      <a class="submitAnswer" @click="submitUserAnswerNPC">提交</a>
       <div v-if="isShowTitle" class="NNPE-operate">
         <a
           class="btn-prev"
@@ -1006,18 +1004,22 @@ export default {
               let Bookanswer = this.bookAnswerContent;
               // if (_this.TaskModel == "lookAnswer" && _this.bookAnswerContent) {
               if (Bookanswer) {
-                let token = getToken();
-                let roleAnswer = "studentAnswer";
-                if (token) {
-                  let userInfor = JSON.parse(token);
-                  let user_type = userInfor.user_type;
-                  if (user_type == "TEACHER") {
-                    roleAnswer = "studentAnswer";
-                  } else {
-                    roleAnswer = "userAnswer";
+                if (this.TaskModel == "ANSWER") {
+                  let token = getToken();
+                  let roleAnswer = "studentAnswer";
+                  if (token) {
+                    let userInfor = JSON.parse(token);
+                    let user_type = userInfor.user_type;
+                    if (user_type == "TEACHER") {
+                      roleAnswer = "studentAnswer";
+                    } else {
+                      roleAnswer = "userAnswer";
+                    }
                   }
+                  _this.judgeAnswersList = [roleAnswer, "standardAnswer"];
+                } else {
+                  _this.judgeAnswersList = [""];
                 }
-                _this.judgeAnswersList = [roleAnswer, "standardAnswer"];
 
                 let answerData = JSON.parse(Bookanswer);
                 if (answerData && itemss.data) {

+ 97 - 27
src/components/Adult/preview/DialogueArticleViewChs/AnswerModel.vue

@@ -415,24 +415,20 @@
                     <a
                       :class="[
                         'right-btn',
-                        Bookanswer.judge[index] == 'right' ? 'active' : '',
+                        TaskModel != 'ANSWER' ? 'right-btn-hover' : '',
+                        judgeAnswerClass('right', index),
                       ]"
                       @click="handleSelectJudge('right', index)"
                     >
-                      <img
-                        src="../../../../assets/newImage/common/right-btn.png"
-                      />
                     </a>
                     <a
                       :class="[
                         'error-btn',
-                        Bookanswer.judge[index] == 'error' ? 'active' : '',
+                        TaskModel != 'ANSWER' ? 'error-btn-hover' : '',
+                        judgeAnswerClass('error', index),
                       ]"
                       @click="handleSelectJudge('error', index)"
                     >
-                      <img
-                        src="../../../../assets/newImage/common/error-btn.png"
-                      />
                     </a>
                   </div>
                 </template>
@@ -562,24 +558,20 @@
                     <a
                       :class="[
                         'right-btn',
-                        Bookanswer.judge[index] == 'right' ? 'active' : '',
+                        TaskModel != 'ANSWER' ? 'right-btn-hover' : '',
+                        judgeAnswerClass('right', index),
                       ]"
                       @click="handleSelectJudge('right', index)"
                     >
-                      <img
-                        src="../../../../assets/newImage/common/right-btn.png"
-                      />
                     </a>
                     <a
                       :class="[
                         'error-btn',
-                        Bookanswer.judge[index] == 'error' ? 'active' : '',
+                        TaskModel != 'ANSWER' ? 'error-btn-hover' : '',
+                        judgeAnswerClass('error', index),
                       ]"
                       @click="handleSelectJudge('error', index)"
                     >
-                      <img
-                        src="../../../../assets/newImage/common/error-btn.png"
-                      />
                     </a>
                   </div>
                 </template>
@@ -680,14 +672,66 @@ export default {
       hengIndex: 0,
     };
   },
-  computed: {},
+  computed: {
+    judgeAnswerClass() {
+      return function (type, index) {
+        let _this = this;
+        let classname = "";
+        let answer = _this.Bookanswer.judge[index].value;
+        let correct = _this.curQue.judge[index].judge;
+        if (_this.judgeAnswer == "standardAnswer") {
+          if (correct == type) {
+            classname = "userRight_" + type;
+          }
+        } else if (
+          _this.judgeAnswer == "studentAnswer" ||
+          _this.judgeAnswer == "userAnswer"
+        ) {
+          if (answer == type) {
+            if (correct) {
+              if (answer == correct) {
+                classname = "userRight_" + type;
+              } else {
+                classname = "userError_" + type;
+              }
+            } else {
+              classname = "active";
+            }
+          }
+        } else {
+          if (answer == type) {
+            classname = "active";
+          }
+        }
+        return classname;
+      };
+    },
+  },
   watch: {},
   //方法集合
   methods: {
     // 判断题选择
     handleSelectJudge(obj, index) {
       let _this = this;
-      _this.$set(_this.Bookanswer.judge, index, obj);
+      if (_this.TaskModel != "ANSWER" || !judgeAnswer) {
+        _this.$set(_this.Bookanswer.judge[index], "value", obj);
+        let correct = _this.curQue.judge[index].judge;
+        if (correct) {
+          if (correct == obj) {
+            _this.$set(
+              _this.Bookanswer.judge[index],
+              "userAnswerJudge",
+              "[JUDGE##T##JUDGE]"
+            );
+          } else {
+            _this.$set(
+              _this.Bookanswer.judge[index],
+              "userAnswerJudge",
+              "[JUDGE##F##JUDGE]"
+            );
+          }
+        }
+      }
       _this.$forceUpdate();
     },
     handleWav(list, tmIndex) {
@@ -798,7 +842,7 @@ export default {
         }
       });
       this.resArr = resArr;
-
+      console.log(resArr);
       // 循环文章图片
       if (curQue.img_list) {
         curQue.img_list.forEach((item) => {
@@ -1228,6 +1272,9 @@ export default {
   a {
     width: 32px;
     height: 32px;
+    background: #fff url("../../../../assets/newImage/common/right-btn.png")
+      center no-repeat;
+    background-size: 24px;
     border-radius: 8px;
     border: 1px solid rgba(0, 0, 0, 0.1);
     display: flex;
@@ -1237,18 +1284,41 @@ export default {
       width: 24px;
       height: 24px;
     }
-    &:hover,
+    &.right-btn-hover:hover,
     &.active {
       background-color: #e5fff0;
       border-color: #00c850;
     }
-  }
-  a.error-btn {
-    margin-left: 4px;
-    &:hover,
-    &.active {
-      background-color: #ffe5e5;
-      border-color: #de4444;
+    &.error-btn {
+      background: #fff url("../../../../assets/newImage/common/error-btn.png")
+        center no-repeat;
+      background-size: 24px;
+      margin-left: 4px;
+      &.error-btn-hover:hover,
+      &.active {
+        background-color: #ffe5e5;
+        border-color: #de4444;
+      }
+    }
+    &.userRight_right {
+      background-color: rgba(44, 167, 103, 0.1);
+      border: 1px solid #2ca767;
+    }
+    &.userError_right {
+      border: 1px solid #ed342d;
+      background: rgba(237, 52, 45, 0.1)
+        url("../../../../assets/newImage/common/judge-dui.png") center no-repeat;
+      background-size: 24px;
+    }
+    &.userRight_error {
+      border: 1px solid #2ca767;
+      background: rgba(44, 167, 103, 0.1)
+        url("../../../../assets/newImage/common/judge-cuo.png") center no-repeat;
+      background-size: 24px;
+    }
+    &.userError_error {
+      background-color: rgba(237, 52, 45, 0.1);
+      border: 1px solid #ed342d;
     }
   }
 }

+ 75 - 23
src/components/Adult/preview/DialogueArticleViewChs/DialogueAnswerViewChs.vue

@@ -1,19 +1,7 @@
 <!--  -->
 <template>
-  <div
-    class="dialogue-answer-view NPC-zhedie"
-    v-if="curQue && curQue.Bookanswer"
-  >
-    <h6
-      v-if="judgeAnswer == 'userAnswer' || judgeAnswer == 'studentAnswer'"
-      class="standardTitle"
-      style="margin: 0 0 8px 24px"
-    >
-      {{ judgeAnswer == "userAnswer" ? "Your answer" : "Student answers" }}
-    </h6>
-    <h6 v-else class="standardTitle" style="margin: 0 0 8px 24px">
-      Standard answer
-    </h6>
+  <div class="dialogue-answer-view NPC-zhedie" v-if="isShowTemp">
+    <AnswerTitle :judgeAnswer="judgeAnswer" />
     <!-- 标题 -->
 
     <template v-if="curQue.title">
@@ -64,7 +52,7 @@
                 fit="scale-down"
               ></el-image>
             </div>
-
+            1====
             <div class="dialogue-answer-model">
               <AnswerModel
                 :curQue="item"
@@ -99,7 +87,7 @@
           v-for="(item, index) in curQue.list"
           :key="'list' + index"
         >
-          <template>
+          <template v-if="isShowQue(index)">
             <span class="number" v-if="item.number">{{ item.number }}</span>
             <div
               class="dialogue-img"
@@ -111,7 +99,6 @@
                 fit="scale-down"
               ></el-image>
             </div>
-
             <div class="dialogue-answer-model">
               <AnswerModel
                 :curQue="item"
@@ -162,6 +149,7 @@ import Soundrecord from "../Soundrecord.vue";
 import AnswerModel from "./AnswerModel.vue";
 import OptionModel from "./OptionModel.vue";
 import WordcardModel from "./WordcardModel.vue";
+import AnswerTitle from "../../preview/components/AnswerTitle.vue";
 
 export default {
   name: "DialogueAnswerViewChs",
@@ -173,6 +161,7 @@ export default {
     AnswerModel,
     OptionModel,
     WordcardModel,
+    AnswerTitle,
   },
   props: ["curQue", "colorBox", "TaskModel", "judgeAnswer"],
   data() {
@@ -185,9 +174,49 @@ export default {
         judge: [],
       },
       judgeAnswersList: [],
+      userErrorNumberTotal: 0,
     };
   },
-  computed: {},
+  computed: {
+    isShowTemp() {
+      let _this = this;
+      let bool = false;
+      if (_this.curQue && _this.curQue.Bookanswer) {
+        if (_this.judgeAnswer == "standardAnswer") {
+          if (_this.userErrorNumberTotal > 0) {
+            bool = true;
+          } else {
+            bool = false;
+          }
+        } else {
+          bool = true;
+        }
+      }
+      return bool;
+    },
+    isShowQue() {
+      return function (index) {
+        let _this = this;
+        let bool = false;
+        let userErrorNumberTotal = 0;
+        let Bookanswer = _this.curQue.Bookanswer;
+        console.log(Bookanswer);
+        if (Bookanswer && Bookanswer.length > 0) {
+          userErrorNumberTotal = _this.countUserErrorNumber(Bookanswer[index]);
+          if (_this.judgeAnswer == "standardAnswer") {
+            if (userErrorNumberTotal > 0) {
+              bool = true;
+            } else {
+              bool = false;
+            }
+          } else {
+            bool = true;
+          }
+        }
+        return bool;
+      };
+    },
+  },
   watch: {},
   //方法集合
   methods: {
@@ -242,22 +271,45 @@ export default {
 
         if (item.checkList && item.checkList.indexOf("judge") > -1) {
           for (let i = 0; i < paraLeg; i++) {
-            userAnswer.judge.push("");
+            let judge_obj = {
+              value: "",
+              userAnswerJudge:
+                item.judge[i].isJudge && item.judge[i].judge
+                  ? "[JUDGE##F##JUDGE]"
+                  : "",
+            };
+            userAnswer.judge.push(JSON.parse(JSON.stringify(judge_obj)));
           }
         }
         BookAnswer.push(userAnswer);
       });
       this.$set(this.curQue, "Bookanswer", BookAnswer);
     },
+    countUserErrorNumber(data) {
+      let BookanswerStr = JSON.stringify(data);
+      let userErrorNumberTotal = 0;
+      let errReg = /\[JUDGE##F##JUDGE\]/g;
+      if (errReg.test(BookanswerStr)) {
+        let errorArr = BookanswerStr.match(/\[JUDGE##F##JUDGE\]/g);
+        userErrorNumberTotal = errorArr.length;
+      }
+      return userErrorNumberTotal;
+    },
   },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
-    if (this.curQue) {
-      this.handleData();
-      if (!this.curQue.Bookanswer) {
-        this.initAnswer();
+    let _this = this;
+    _this.userErrorNumberTotal = 0;
+    if (_this.curQue) {
+      _this.handleData();
+      if (!_this.curQue.Bookanswer) {
+        _this.initAnswer();
+      } else {
+        _this.userErrorNumberTotal = _this.countUserErrorNumber(
+          _this.curQue.Bookanswer
+        );
       }
     }
   },

+ 10 - 12
src/components/Adult/preview/Picture.vue

@@ -416,8 +416,9 @@ export default {
         let _this = this;
         let classname = "";
         let answer = _this.curQue.Bookanswer[0].judge[0].value;
+        let correct = _this.curQue.correct[0].judge[0];
         if (_this.judgeAnswer == "standardAnswer") {
-          if (answer == type) {
+          if (correct == type) {
             classname = "userRight_" + type;
           }
         } else if (
@@ -425,13 +426,14 @@ export default {
           _this.judgeAnswer == "userAnswer"
         ) {
           if (answer == type) {
-            let correct = _this.curQue.correct[0].judge[0];
             if (correct) {
               if (answer == correct) {
                 classname = "userRight_" + type;
               } else {
                 classname = "userError_" + type;
               }
+            } else {
+              classname = "active";
             }
           }
         } else {
@@ -458,20 +460,20 @@ export default {
           let answer = _this.curQue.Bookanswer[0].single[0].value;
           let correct = _this.curQue.correct[0].single[0];
           if (_this.judgeAnswer == "standardAnswer") {
-            if ((correct || correct == 0) && index == correct) {
+            if ((correct || correct === 0) && index === correct) {
               classname = "userRight";
             }
           } else if (
             _this.judgeAnswer == "studentAnswer" ||
             _this.judgeAnswer == "userAnswer"
           ) {
-            if (correct || correct == 0) {
-              if (answer == correct) {
-                if (answer == index) {
+            if (correct || correct === 0) {
+              if (answer === correct) {
+                if (correct === index) {
                   classname = "userRight";
                 }
               } else {
-                if (answer == index) {
+                if (answer === index) {
                   classname = "userError";
                 }
               }
@@ -592,7 +594,6 @@ export default {
         this.curQue.Bookanswer.push(
           JSON.parse(JSON.stringify(this.userAnswer))
         );
-        console.log(_this.curQue.Bookanswer);
       } else {
         let BookanswerStr = JSON.stringify(_this.curQue.Bookanswer);
         let errReg = /\[JUDGE##F##JUDGE\]/g;
@@ -612,7 +613,6 @@ export default {
     // 修改正确选项中得某一个为正确答案
     changAnswer(index, type) {
       if (type == "single") {
-        console.log(this.answer);
       } else if (type == "checkBox") {
         let correct = [];
         this.curQue.option.forEach((item, i) => {
@@ -621,9 +621,8 @@ export default {
           }
         });
         this.answer[0].checkBox = correct;
-        console.log(this.answer);
       } else if (type == "judge") {
-        console.log(this.answer);
+        //console.log(this.answer);
       }
     },
     // 去掉前后空格
@@ -756,7 +755,6 @@ export default {
             );
           }
         }
-        console.log(_this.curQue.Bookanswer[0].judge[0]);
       }
     },
     handleWav(list, tmIndex) {

+ 725 - 8
src/components/Adult/preview/SentenceModule.vue

@@ -9,6 +9,7 @@
     ]"
     v-if="curQue && curQue.Bookanswer"
   >
+    <AnswerTitle :judgeAnswer="judgeAnswer" />
     <div
       class="out-audioLine-box"
       v-if="
@@ -54,7 +55,384 @@
           :style="{ width: curQue.img_size + 'px' }"
         ></el-image>
       </div>
-      <div :class="['container', curQue.sortType == 'row' ? 'ul-flex' : '']">
+      {{ curQue.sortType }}
+      <div
+        v-if="judgeAnswer == 'standardAnswer'"
+        :class="['container', curQue.sortType == 'row' ? 'ul-flex' : '']"
+      >
+        <div :class="['sent-option li-flex sent-option-standardAnswer']">
+          {{ curQue.option.length }}
+          <div
+            :class="[
+              'sent-option-items',
+              itemsWidth == 748 ? 'sent-option-items-0' : 'sent-option-items-8',
+            ]"
+            v-for="(items, indexs) in userErrorList"
+            :key="'sent-option-items' + judgeAnswer + indexs"
+            :style="{
+              width:
+                curQue.sortType == 'col'
+                  ? itemsWidth + 'px'
+                  : Math.floor(748 / curQue.option.length) - 24 + 'px',
+            }"
+          >
+            <div
+              :class="[
+                'horn-24',
+                items.pyNumber &&
+                items.pyNumber[0] > 0 &&
+                curQue.pyPosition == 'top'
+                  ? 'horn-hasPY'
+                  : '',
+              ]"
+              v-if="
+                curQue.mp3_list &&
+                curQue.mp3_list.length > 0 &&
+                curQue.mp3_list[0].id &&
+                items.bg &&
+                items.ed
+              "
+              :style="{
+                height:
+                  items.detail &&
+                  items.detail.length > 0 &&
+                  items.detail[0].maxFontsize
+                    ? (items.detail[0].maxFontsize * 3) / 2 + 'px'
+                    : '40px',
+                marginTop:
+                  items.detail &&
+                  items.detail.length > 0 &&
+                  items.detail[0].maxFontsize
+                    ? ''
+                    : '0px',
+              }"
+            >
+              <AudioItem
+                :itemBg="items.bg"
+                :itemEd="items.ed"
+                :curTime="curTime"
+                :handleChangeTime="handleChangeTime"
+                :stopAudioS="stopAudioS"
+                :themeColor="themeColor"
+              />
+            </div>
+            <div :class="['sent-stem', bgClassName]">
+              <div
+                v-if="curQue.isShowNumber"
+                :class="[
+                  'number-box number-box-hasmp3',
+                  items.pyNumber &&
+                  items.pyNumber[0] > 0 &&
+                  curQue.pyPosition == 'top'
+                    ? 'number-box-hasPY'
+                    : '',
+                  curQue.numberBg ? '' : 'number-box-nobg',
+                ]"
+                :style="{
+                  height:
+                    items.detail &&
+                    items.detail.length > 0 &&
+                    items.detail[0].maxFontsize
+                      ? (items.detail[0].maxFontsize * 3) / 2 + 'px'
+                      : '40px',
+                  marginTop:
+                    items.detail &&
+                    items.detail.length > 0 &&
+                    items.detail[0].maxFontsize
+                      ? ''
+                      : '0px',
+                }"
+              >
+                <NumberStyle
+                  :className="curQue.numberBg ? 'number01' : 'number-nobg'"
+                  :numberBg="curQue.numberBg"
+                  :numberStyle="curQue.numberStyle"
+                  :numberIndex="items.index"
+                />
+              </div>
+              <!-- 题干 -->
+              <div class="stem-content">
+                <!--  items.fn_check_list.judge_check || sdItem.fn_check_list.record_check.indexOf('normal') > -1
+                  ? 'sent-main-138'
+                  : '', -->
+                <div
+                  :class="[
+                    'sent-main',
+                    items.fn_check_list.judge_check.indexOf('col') > -1 ||
+                    items.fn_check_list.short_check ||
+                    sdItem.fn_check_list.record_check.indexOf('normal') > -1
+                      ? 'sent-que-flex'
+                      : '',
+                    items.fn_check_list.radio_check.indexOf('row') > -1 ||
+                    items.fn_check_list.checkbox_check.indexOf('row') > -1
+                      ? 'sent-main-bottom'
+                      : '',
+                  ]"
+                  v-for="(sdItem, sdIndex) in items.detail"
+                  :key="'sent-option-items' + index + indexs + sdIndex"
+                >
+                  <div class="sent-que-box">
+                    <div
+                      class="sent-que"
+                      v-for="(sddItem, sddIndex) in sdItem.detail"
+                      :key="
+                        'sent-option-items' +
+                        index +
+                        indexs +
+                        sdIndex +
+                        sddIndex
+                      "
+                      :style="{
+                        paddingLeft:
+                          sddItem.config.wordPadding.indexOf('left') > -1
+                            ? '4px'
+                            : '0px',
+                        paddingRight:
+                          sddItem.config.wordPadding.indexOf('right') > -1
+                            ? '4px'
+                            : '0px',
+                      }"
+                    >
+                      <!-- 补全句子 -->
+                      <OneSentenceTemp
+                        :detail="sddItem"
+                        :pyPosition="curQue.pyPosition"
+                        :TaskModel="TaskModel"
+                        :pyColor="curQue.pyColor"
+                        :Bookanswer="userBookanswer[indexs]"
+                        :judgeAnswer="judgeAnswer"
+                        :correctAnswer="items.correct.complateArr"
+                        :isInput="
+                          items.fn_check_list.sent_check ==
+                            'sentence_complete_input_chs' ||
+                          items.fn_check_list.sent_check ==
+                            'sentence_long_input_chs'
+                        "
+                        :fn_check_list="items.fn_check_list"
+                        :bgColor="curQue.bgColor"
+                        :pyNumber="items.pyNumber && items.pyNumber[sdIndex]"
+                        :record_check="sdItem.fn_check_list.record_check"
+                        :hengLeg="sdItem.hengLeg"
+                        :maxFontsize="sdItem.maxFontsize"
+                      />
+                      <!-- <div class="en" v-if="sdItem.en">{{ sdItem.en }}</div> -->
+                      <div
+                        class="promax-box-div"
+                        v-if="
+                          sdItem.fn_check_list.record_check.indexOf('promax') >
+                          -1
+                        "
+                      >
+                        <Soundrecord
+                          :type="
+                            sdItem.fn_check_list.record_check
+                              ? typeList[sdItem.fn_check_list.record_check]
+                              : 'normal'
+                          "
+                          class="promax-box"
+                          :TaskModel="TaskModel"
+                          :tmIndex="sdIndex"
+                          :answerRecordList="
+                            curQue.Bookanswer[index][indexs].recordList[sdIndex]
+                          "
+                          :index="index"
+                          :indexs="indexs"
+                          @handleWav="handleWav"
+                        />
+                      </div>
+                    </div>
+                  </div>
+                  <div
+                    ref="answerpart"
+                    v-if="
+                      items.fn_check_list.judge_check ||
+                      sdItem.fn_check_list.record_check ||
+                      items.fn_check_list.short_check ||
+                      items.fn_check_list.radio_check.indexOf('col') > -1 ||
+                      items.fn_check_list.checkbox_check.indexOf('col') > -1
+                    "
+                    :class="[
+                      'answer-part',
+                      items.pyNumber && items.pyNumber[1] > 0
+                        ? 'answer-part-hasPY'
+                        : '',
+                      items.fn_check_list.judge_check ||
+                      sdItem.fn_check_list.record_check
+                        ? 'answer-part-138'
+                        : '',
+                    ]"
+                  >
+                    <!-- 短输入 -->
+                    <div
+                      :class="[
+                        'short-part',
+                        items.pyNumber && items.pyNumber[0] > 0
+                          ? 'short-part-hasPY'
+                          : '',
+                        items.fn_check_list.is_short_auto
+                          ? 'short-part-flex'
+                          : '',
+                      ]"
+                      v-if="sdIndex == 0 && items.fn_check_list.short_check"
+                    >
+                      <ShortInputTemp
+                        :doubleInput="items.correct.doubleInput"
+                        :Bookanswer="userBookanswer[indexs]"
+                        :TaskModel="TaskModel"
+                        :is_short_auto="items.fn_check_list.is_short_auto"
+                        :judgeAnswer="judgeAnswer"
+                      />
+                    </div>
+                    <!-- 判断 -->
+                    <div
+                      :class="[
+                        'judge-part',
+                        items.fn_check_list.judge_check.indexOf('row') > -1
+                          ? 'answer-part-padding-5'
+                          : '',
+                      ]"
+                      v-if="sdIndex == 0 && items.fn_check_list.judge_check"
+                    >
+                      <JudgeTemp
+                        :isRecord="items.fn_check_list.record_check"
+                        :Bookanswer="userBookanswer[indexs]"
+                        :judge_isNo="items.judge_isNo"
+                        :TaskModel="TaskModel"
+                        :Isexample="items.Isexample"
+                        :judgeCorrectAnswer="items.correct.judge"
+                        :judgeAnswer="judgeAnswer"
+                      />
+                    </div>
+                    <!-- 多选题 -->
+                    <div
+                      :class="[
+                        'short-part',
+                        items.pyNumber && items.pyNumber[0] > 0
+                          ? 'short-part-hasPY'
+                          : '',
+                      ]"
+                      v-if="
+                        sdIndex == 0 &&
+                        items.fn_check_list.checkbox_check.indexOf('col') > -1
+                      "
+                    >
+                      <OptionTemp
+                        :option="items.checkbox_option"
+                        :row="
+                          items.fn_check_list.checkbox_check.indexOf('row') > -1
+                        "
+                        :Bookanswer="userBookanswer[indexs]"
+                        :TaskModel="TaskModel"
+                        type="checkbox"
+                        :curQue="curQue"
+                        :items="items"
+                        :judgeAnswer="judgeAnswer"
+                      />
+                    </div>
+                    <!-- 单选题 -->
+                    <div
+                      :class="[
+                        'short-part',
+                        items.pyNumber && items.pyNumber[0] > 0
+                          ? 'short-part-hasPY'
+                          : '',
+                      ]"
+                      v-if="
+                        sdIndex == 0 &&
+                        items.fn_check_list.radio_check.indexOf('col') > -1
+                      "
+                    >
+                      <OptionTemp
+                        :option="items.radio_option"
+                        :row="
+                          items.fn_check_list.radio_check.indexOf('row') > -1
+                        "
+                        :Bookanswer="userBookanswer[indexs]"
+                        :correctAnswer="items.correct"
+                        :TaskModel="TaskModel"
+                        type="radio"
+                        :curQue="curQue"
+                        :items="items"
+                        :judgeAnswer="judgeAnswer"
+                      />
+                    </div>
+                    <!-- 录音 -->
+                    <div
+                      class="judge-part record-part"
+                      v-if="
+                        sdItem.fn_check_list.record_check &&
+                        items.fn_check_list.sent_check !=
+                          'sentence_long_input_chs'
+                      "
+                    >
+                      <Soundrecord
+                        :type="
+                          sdItem.fn_check_list.record_check
+                            ? typeList[sdItem.fn_check_list.record_check]
+                            : 'normal'
+                        "
+                        :class="[
+                          'record_' +
+                            typeList[sdItem.fn_check_list.record_check],
+                          'record-common',
+                          items.fn_check_list.short_check
+                            ? 'record-common-40'
+                            : '',
+                        ]"
+                        :TaskModel="TaskModel"
+                        :tmIndex="sdIndex"
+                        answerRecordList="[]
+                    "
+                      />
+                    </div>
+                  </div>
+                </div>
+                <!-- 多选题 -->
+                <div
+                  class="select-que"
+                  v-if="items.fn_check_list.checkbox_check.indexOf('row') > -1"
+                >
+                  <OptionTemp
+                    :option="items.checkbox_option"
+                    :row="
+                      items.fn_check_list.checkbox_check.indexOf('row') > -1
+                    "
+                    :Bookanswer="userBookanswer[indexs]"
+                    :correctAnswer="items.correct"
+                    :TaskModel="TaskModel"
+                    type="checkbox"
+                    :curQue="curQue"
+                    :items="items"
+                    :judgeAnswer="judgeAnswer"
+                  />
+                </div>
+                <!-- 单选题 -->
+                <div
+                  class="select-que"
+                  v-if="items.fn_check_list.radio_check.indexOf('row') > -1"
+                >
+                  <OptionTemp
+                    :option="items.radio_option"
+                    :row="items.fn_check_list.radio_check.indexOf('row') > -1"
+                    :Bookanswer="userBookanswer[indexs]"
+                    :correctAnswer="items.correct"
+                    :TaskModel="TaskModel"
+                    type="radio"
+                    :curQue="curQue"
+                    :items="items"
+                    :judgeAnswer="judgeAnswer"
+                  />
+                </div>
+              </div>
+            </div>
+            <!-- 题干 -->
+          </div>
+        </div>
+      </div>
+      <div
+        v-else
+        :class="['container', curQue.sortType == 'row' ? 'ul-flex' : '']"
+      >
         <div
           :class="[
             'sent-option',
@@ -203,6 +581,8 @@
                         :TaskModel="TaskModel"
                         :pyColor="curQue.pyColor"
                         :Bookanswer="curQue.Bookanswer[index][indexs]"
+                        :judgeAnswer="judgeAnswer"
+                        :correctAnswer="items.correct.complateArr"
                         :isInput="
                           items.fn_check_list.sent_check ==
                             'sentence_complete_input_chs' ||
@@ -254,7 +634,7 @@
                     "
                     :class="[
                       'answer-part',
-                      items.pyNumber && items.pyNumber[0] > 0
+                      items.pyNumber && items.pyNumber[1] > 0
                         ? 'answer-part-hasPY'
                         : '',
                       items.fn_check_list.judge_check ||
@@ -281,6 +661,7 @@
                         :Bookanswer="curQue.Bookanswer[index][indexs]"
                         :TaskModel="TaskModel"
                         :is_short_auto="items.fn_check_list.is_short_auto"
+                        :judgeAnswer="judgeAnswer"
                       />
                     </div>
                     <!-- 判断 -->
@@ -299,6 +680,8 @@
                         :judge_isNo="items.judge_isNo"
                         :TaskModel="TaskModel"
                         :Isexample="items.Isexample"
+                        :judgeCorrectAnswer="items.correct.judge"
+                        :judgeAnswer="judgeAnswer"
                       />
                     </div>
                     <!-- 多选题 -->
@@ -324,6 +707,7 @@
                         type="checkbox"
                         :curQue="curQue"
                         :items="items"
+                        :judgeAnswer="judgeAnswer"
                       />
                     </div>
                     <!-- 单选题 -->
@@ -345,10 +729,12 @@
                           items.fn_check_list.radio_check.indexOf('row') > -1
                         "
                         :Bookanswer="curQue.Bookanswer[index][indexs]"
+                        :correctAnswer="items.correct"
                         :TaskModel="TaskModel"
                         type="radio"
                         :curQue="curQue"
                         :items="items"
+                        :judgeAnswer="judgeAnswer"
                       />
                     </div>
                     <!-- 录音 -->
@@ -397,10 +783,12 @@
                       items.fn_check_list.checkbox_check.indexOf('row') > -1
                     "
                     :Bookanswer="curQue.Bookanswer[index][indexs]"
+                    :correctAnswer="items.correct"
                     :TaskModel="TaskModel"
                     type="checkbox"
                     :curQue="curQue"
                     :items="items"
+                    :judgeAnswer="judgeAnswer"
                   />
                 </div>
                 <!-- 单选题 -->
@@ -412,10 +800,12 @@
                     :option="items.radio_option"
                     :row="items.fn_check_list.radio_check.indexOf('row') > -1"
                     :Bookanswer="curQue.Bookanswer[index][indexs]"
+                    :correctAnswer="items.correct"
                     :TaskModel="TaskModel"
                     type="radio"
                     :curQue="curQue"
                     :items="items"
+                    :judgeAnswer="judgeAnswer"
                   />
                 </div>
               </div>
@@ -454,6 +844,7 @@ import NumberStyle from "./components/NumberStyle.vue";
 import EditDiv from "../preview/EditDiv.vue";
 import Soundrecord from "../preview/Soundrecord.vue"; // 录音模板
 import OptionTemp from "./components/OptionTemp.vue";
+import AnswerTitle from "../preview/components/AnswerTitle.vue";
 export default {
   components: {
     AudioLine,
@@ -465,8 +856,9 @@ export default {
     JudgeTemp,
     ShortInputTemp,
     OptionTemp,
+    AnswerTitle,
   },
-  props: ["curQue", "themeColor", "TaskModel"],
+  props: ["curQue", "themeColor", "TaskModel", "judgeAnswer"],
   data() {
     return {
       curTime: 0,
@@ -478,10 +870,11 @@ export default {
         shortInput: "",
         longInput: "",
         doubleInput: [],
-        judge: "",
-        checkbox: [],
-        radio: "",
+        judge: {},
+        checkbox: {},
+        radio: {},
         recordList: {},
+        completeImage: [],
       },
       chsFhList: [",", "。", "”", ":", "》", "《", "?", "!", ";"],
       itemsWidth: 0,
@@ -492,6 +885,8 @@ export default {
         sentence_record_promax_chs: "promax",
       },
       answerpart: [],
+      userErrorList: [],
+      userBookanswer: [],
     };
   },
   computed: {
@@ -534,6 +929,319 @@ export default {
     handleData() {
       let Bookanswer = [];
       let itemLeg = 0;
+      this.totalHasPy = false;
+      let option = JSON.parse(JSON.stringify(this.curQue.option));
+      let completeImage = [];
+      option.forEach((item, index) => {
+        Bookanswer.push([]);
+        completeImage = [];
+        itemLeg = item.length > itemLeg ? item.length : itemLeg;
+        item.forEach((items, indexs) => {
+          let userAnswer = JSON.parse(JSON.stringify(this.userAnswer));
+          let correct = JSON.parse(JSON.stringify(items.correct));
+          let complateArr = correct.completeInput.split("\n");
+          complateArr.forEach((itemI, indexI) => {
+            if (itemI == "??" || itemI == "??") {
+              complateArr[indexI] = "";
+            }
+          });
+          items.correct.complateArr = complateArr;
+          this.curQue.option[index][indexs].correct.complateArr = complateArr;
+          if (items.Isexample) {
+            userAnswer.Isexample = true;
+            userAnswer.recordList = {};
+          }
+          Bookanswer[index].push(userAnswer);
+          if (this.curQue.wordTime && this.curQue.wordTime.length > 0) {
+            let time = this.curQue.wordTime[items.index];
+            if (time) {
+              items.ed = time.ed;
+              items.bg = time.bg;
+            }
+          }
+          let hengIndex = 0;
+          items.pyNumber = [];
+
+          items.detail.forEach((sdItem, sdIndex) => {
+            let isHasPY = 0;
+            let maxFontsize = 0;
+            sdItem.detail.forEach((sddItem) => {
+              if (sddItem.wordsList.length > 0) {
+                sddItem.wordsList.forEach((sItem, sIndex) => {
+                  let reg = /_{2,}/g;
+                  if (reg.test(sItem.chs)) {
+                    sItem.index = sIndex;
+                    sItem.isHeng = true;
+                    sItem.hengIndex = hengIndex;
+                    hengIndex++;
+                  }
+                  //补全句子
+                  if (
+                    !this.curQue.Bookanswer &&
+                    (items.fn_check_list.sent_check ==
+                      "sentence_complete_input_chs" ||
+                      items.fn_check_list.sent_check ==
+                        "sentence_long_input_chs")
+                  ) {
+                    let reg = /_{2,}/g;
+                    if (reg.test(sItem.chs)) {
+                      let bool = false;
+                      if (sddItem.hasOwnProperty("input_Isexample")) {
+                        bool = sddItem.input_Isexample;
+                      } else {
+                        bool = items.Isexample;
+                      }
+                      let obj = null;
+                      if (!sddItem.input_tian) {
+                        obj = {
+                          answer:
+                            bool && complateArr[sItem.hengIndex]
+                              ? complateArr[sItem.hengIndex]
+                              : "",
+                          userAnswerJudge:
+                            bool || !complateArr[sItem.hengIndex]
+                              ? ""
+                              : "[JUDGE##F##JUDGE]",
+                          input_Isexample: bool ? true : false,
+                        };
+                        Bookanswer[index][indexs].completeInput.push(
+                          JSON.parse(JSON.stringify(obj))
+                        );
+                      } else {
+                        if (sddItem.hengLeg == "-1") {
+                          completeImage.push(obj);
+                        } else {
+                          for (let i = 0; i < Number(sddItem.hengLeg); i++) {
+                            completeImage.push(obj);
+                          }
+                        }
+                        Bookanswer[index][indexs].completeInput.push(
+                          JSON.parse(JSON.stringify(completeImage))
+                        );
+                      }
+                    }
+                  }
+
+                  this.mergeWordSymbol(sItem);
+                  if (sItem.pinyin) {
+                    isHasPY++;
+                    this.totalHasPy = true;
+                  }
+                  let fontSize = JSON.parse(JSON.stringify(sItem.fontSize));
+                  fontSize = Number(fontSize.replace("px", ""));
+                  maxFontsize = fontSize > maxFontsize ? fontSize : maxFontsize;
+                });
+              } else {
+                if (sddItem.sentence) {
+                  let fontSize = JSON.parse(
+                    JSON.stringify(sddItem.config.fontSize)
+                  );
+                  fontSize = Number(fontSize.replace("px", ""));
+                  maxFontsize = fontSize > maxFontsize ? fontSize : maxFontsize;
+                }
+              }
+            });
+            sdItem.maxFontsize = maxFontsize;
+            items.pyNumber.push(isHasPY);
+          });
+          if (!this.curQue.Bookanswer) {
+            //双输入/短输入
+            if (
+              items.fn_check_list.short_check == "sentence_double_input_chs"
+            ) {
+              items.correct.doubleInput.forEach((cItem) => {
+                let obj = {
+                  correct:
+                    items.Isexample && cItem.correct ? cItem.correct : "",
+                  userAnswerJudge:
+                    !items.Isexample && (cItem.correct || cItem.correct == "0")
+                      ? "[JUDGE##F##JUDGE]"
+                      : "",
+                };
+                Bookanswer[index][indexs].doubleInput.push(
+                  JSON.parse(JSON.stringify(obj))
+                );
+              });
+            }
+            //判断
+            if (items.fn_check_list.judge_check) {
+              let judge_obj = {
+                correct:
+                  items.Isexample && items.correct.judge
+                    ? items.correct.judge
+                    : "",
+                userAnswerJudge:
+                  !items.Isexample && items.correct.judge
+                    ? "[JUDGE##F##JUDGE]"
+                    : "",
+              };
+              Bookanswer[index][indexs].judge = JSON.parse(
+                JSON.stringify(judge_obj)
+              );
+            }
+
+            //单选
+            if (items.fn_check_list.radio_check) {
+              let radio_obj = {
+                correct:
+                  items.Isexample &&
+                  (items.correct.radio || items.correct.radio === 0)
+                    ? items.correct.radio
+                    : "",
+                userAnswerJudge:
+                  !items.Isexample &&
+                  (items.correct.radio || items.correct.radio === 0)
+                    ? "[JUDGE##F##JUDGE]"
+                    : "",
+              };
+              Bookanswer[index][indexs].radio = JSON.parse(
+                JSON.stringify(radio_obj)
+              );
+            }
+
+            //多选
+            if (items.fn_check_list.checkbox_check) {
+              let checkbox_obj = {
+                correct:
+                  items.Isexample &&
+                  items.correct.checkbox &&
+                  items.correct.checkbox.length > 0
+                    ? items.correct.checkbox
+                    : [],
+                userAnswerJudge:
+                  !items.Isexample &&
+                  items.correct.checkbox &&
+                  items.correct.checkbox.length > 0
+                    ? "[JUDGE##F##JUDGE]"
+                    : "",
+              };
+              Bookanswer[index][indexs].checkbox = JSON.parse(
+                JSON.stringify(checkbox_obj)
+              );
+            }
+          }
+
+          items.radio_option.forEach((rItem, rIndex) => {
+            rItem.detail.pyNumber = [];
+            rItem.detail.wordsList.forEach((rpwItem) => {
+              let isHasPY2 = 0;
+              rpwItem.forEach((rpsItem) => {
+                this.mergeWordSymbol(rpsItem);
+                if (rpsItem.pinyin) {
+                  isHasPY2++;
+                }
+              });
+              rItem.detail.pyNumber.push(isHasPY2);
+            });
+          });
+          items.checkbox_option.forEach((cItem, rIndex) => {
+            cItem.detail.pyNumber = [];
+            cItem.detail.wordsList.forEach((cpwItem) => {
+              let isHasPY3 = 0;
+              cpwItem.forEach((cpsItem) => {
+                this.mergeWordSymbol(cpsItem);
+                if (cpsItem.pinyin) {
+                  isHasPY3++;
+                }
+              });
+              cItem.detail.pyNumber.push(isHasPY3);
+            });
+          });
+        });
+      });
+      // console.log(Bookanswer);
+      if (!this.curQue.Bookanswer) {
+        this.$set(
+          this.curQue,
+          "Bookanswer",
+          JSON.parse(JSON.stringify(Bookanswer))
+        );
+      } else {
+        let BookanswerStr = JSON.stringify(this.curQue.Bookanswer);
+        let errReg = /\[JUDGE##F##JUDGE\]/g;
+        if (errReg.test(BookanswerStr)) {
+          let errorArr = BookanswerStr.match(/\[JUDGE##F##JUDGE\]/g);
+          this.userErrorNumberTotal = errorArr.length;
+        }
+      }
+
+      this.$set(this.curQue, "option", option);
+      let contentWidth = 748;
+      if (this.curQue.img_list && this.curQue.img_list.length > 0) {
+        contentWidth = 748 - this.curQue.img_size;
+      }
+      this.itemsWidth = Math.floor(contentWidth / itemLeg) - 24;
+
+      // 把答错的挑出来
+      if (this.judgeAnswer == "standardAnswer") {
+        this.userErrorList = [];
+        this.userBookanswer = [];
+        this.curQue.option.forEach((item, index) => {
+          item.forEach((items, indexs) => {
+            let flag = false;
+            // 多输入或者短输入
+            items.correct.doubleInput.forEach((itemI, indexI) => {
+              if (
+                itemI.correct &&
+                itemI.correct !=
+                  this.curQue.Bookanswer[index][indexs].doubleInput[indexI]
+                    .correct
+              ) {
+                flag = true;
+              }
+            });
+
+            // 句子填空
+            items.correct.complateArr.forEach((itemI, indexI) => {
+              if (
+                itemI &&
+                itemI !=
+                  this.curQue.Bookanswer[index][indexs].completeInput[indexI]
+                    .answer
+              ) {
+                flag = true;
+              }
+            });
+
+            // 句子判断
+            if (
+              items.correct.judge &&
+              items.correct.judge !=
+                this.curQue.Bookanswer[index][indexs].judge.correct
+            ) {
+              flag = true;
+            }
+
+            // 句子单选
+            if (
+              items.correct.radio !== "" &&
+              items.correct.radio !==
+                this.curQue.Bookanswer[index][indexs].radio.correct
+            ) {
+              flag = true;
+            }
+            // 句子多选
+            if (
+              items.correct &&
+              items.correct.checkbox.length > 0 &&
+              items.correct.checkbox.sort().toString() !=
+                this.curQue.Bookanswer[index][indexs].checkbox.correct
+                  .sort()
+                  .toString()
+            ) {
+              flag = true;
+            }
+            if (flag) {
+              this.userErrorList.push(items);
+              this.userBookanswer.push(this.curQue.Bookanswer[index][indexs]);
+            }
+          });
+        });
+      }
+    },
+    handleData2() {
+      let Bookanswer = [];
+      let itemLeg = 0;
       let option = JSON.parse(JSON.stringify(this.curQue.option));
 
       option.forEach((item, index) => {
@@ -543,6 +1251,17 @@ export default {
           let userAnswer = null;
           if (items.Isexample) {
             userAnswer = JSON.parse(JSON.stringify(items.correct));
+            let completeInputArr = userAnswer.completeInput
+              ? userAnswer.completeInput.split("\n")
+              : [];
+            let completeInput = [];
+            for (let i = 0; i < completeInputArr.length; i++) {
+              let cObj = {
+                value: completeInputArr[i],
+                userAnswerJudge: "",
+              };
+              completeInput.push(JSON.parse(JSON.stringify(cObj)));
+            }
             userAnswer.completeInput = userAnswer.completeInput
               ? userAnswer.completeInput.split("\n")
               : [];
@@ -687,14 +1406,12 @@ export default {
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
     let _this = this;
-    console.log(_this.curQue);
     _this.handleData();
     _this.$nextTick(() => {
       if (_this.$refs.answerpart) {
         _this.$refs.answerpart.forEach((item) => {
           _this.answerpart.push(item.offsetWidth);
         });
-        console.log(_this.answerpart);
       }
     });
   },

+ 316 - 44
src/components/Adult/preview/components/OneSentenceTemp.vue

@@ -48,28 +48,138 @@
               </template>
               <template v-else>
                 <template v-if="isInput">
-                  <EditDiv
-                    :class="[
-                      'answer-input',
-                      editDivClassname,
-                      editDivClassname2,
-                      Bookanswer.Isexample ? 'answer-input-example' : '',
-                    ]"
-                    v-model="Bookanswer.completeInput[pItem.hengIndex]"
-                    :canEdit="
-                      Bookanswer.Isexample || TaskModel == 'ANSWER'
-                        ? false
-                        : true
-                    "
-                    :style="{
-                      fontSize: maxFontsize + 'px',
-                      minHeight: (maxFontsize * 3) / 2 + 'px',
-                      lineHeight: (maxFontsize * 3) / 2.1 + 'px',
-                      'min-width': hengLeg ? hengLeg * 60 + 'px' : '',
-                      textAlign: detail.hengList[pIndex] ? 'center' : 'left',
-                      fontFamily: pItem.fontFamily,
-                    }"
-                  />
+                  <template v-if="judgeAnswer == 'standardAnswer'">
+                    <template v-if="correctAnswer">
+                      <EditDiv
+                        :id="
+                          'sentence_' +
+                          Math.random().toString(36).substr(2) +
+                          '_' +
+                          pItem.hengIndex
+                        "
+                        :class="[
+                          'answer-input userRight',
+                          editDivClassname,
+                          editDivClassname2,
+                          Bookanswer.completeInput[pItem.hengIndex]
+                            .input_Isexample
+                            ? 'answer-input-example'
+                            : '',
+                        ]"
+                        v-html="correctAnswer[pItem.hengIndex]"
+                        :canEdit="
+                          Bookanswer.completeInput[pItem.hengIndex]
+                            .input_Isexample || TaskModel == 'ANSWER'
+                            ? false
+                            : true
+                        "
+                        :style="{
+                          fontSize: maxFontsize + 'px',
+                          minHeight: (maxFontsize * 3) / 2 + 'px',
+                          lineHeight: (maxFontsize * 3) / 2.1 + 'px',
+                          'min-width': hengLeg ? hengLeg * 60 + 'px' : '',
+                          textAlign: detail.hengList[pIndex]
+                            ? 'center'
+                            : 'left',
+                          fontFamily: pItem.fontFamily,
+                        }"
+                      />
+                    </template>
+                    <template v-else>
+                      <EditDiv
+                        :id="
+                          'sentence_' +
+                          Math.random().toString(36).substr(2) +
+                          '_' +
+                          pItem.hengIndex
+                        "
+                        :class="[
+                          'answer-input userRight',
+                          editDivClassname,
+                          editDivClassname2,
+                          Bookanswer.completeInput[pItem.hengIndex]
+                            .input_Isexample
+                            ? 'answer-input-example'
+                            : '',
+                        ]"
+                        v-model="
+                          Bookanswer.completeInput[pItem.hengIndex].answer
+                        "
+                        :canEdit="
+                          Bookanswer.completeInput[pItem.hengIndex]
+                            .input_Isexample || TaskModel == 'ANSWER'
+                            ? false
+                            : true
+                        "
+                        :style="{
+                          fontSize: maxFontsize + 'px',
+                          minHeight: (maxFontsize * 3) / 2 + 'px',
+                          lineHeight: (maxFontsize * 3) / 2.1 + 'px',
+                          'min-width': hengLeg ? hengLeg * 60 + 'px' : '',
+                          textAlign: detail.hengList[pIndex]
+                            ? 'center'
+                            : 'left',
+                          fontFamily: pItem.fontFamily,
+                        }"
+                      />
+                    </template>
+                  </template>
+                  <template v-else>
+                    <EditDiv
+                      :id="
+                        'sentence_' +
+                        Math.random().toString(36).substr(2) +
+                        '_' +
+                        pItem.hengIndex
+                      "
+                      :class="[
+                        'answer-input',
+                        editDivClassname,
+                        editDivClassname2,
+                        Bookanswer.completeInput[pItem.hengIndex]
+                          .input_Isexample
+                          ? 'answer-input-example'
+                          : '',
+                        Bookanswer.completeInput[pItem.hengIndex].correct &&
+                        Bookanswer.completeInput[pItem.hengIndex].answer ==
+                          Bookanswer.completeInput[pItem.hengIndex].correct
+                          ? 'userRight'
+                          : Bookanswer.completeInput[pItem.hengIndex].correct &&
+                            Bookanswer.completeInput[pItem.hengIndex].answer !=
+                              Bookanswer.completeInput[pItem.hengIndex].correct
+                          ? 'userError'
+                          : '',
+                        correctAnswer &&
+                        correctAnswer[pItem.hengIndex] &&
+                        correctAnswer[pItem.hengIndex] ==
+                          Bookanswer.completeInput[pItem.hengIndex].answer
+                          ? 'userRight'
+                          : correctAnswer &&
+                            correctAnswer[pItem.hengIndex] &&
+                            correctAnswer[pItem.hengIndex] !=
+                              Bookanswer.completeInput[pItem.hengIndex].answer
+                          ? 'userError'
+                          : '',
+                      ]"
+                      v-model="Bookanswer.completeInput[pItem.hengIndex].answer"
+                      :canEdit="
+                        Bookanswer.completeInput[pItem.hengIndex]
+                          .input_Isexample || TaskModel == 'ANSWER'
+                          ? false
+                          : true
+                      "
+                      :style="{
+                        fontSize: maxFontsize + 'px',
+                        minHeight: (maxFontsize * 3) / 2 + 'px',
+                        lineHeight: (maxFontsize * 3) / 2.1 + 'px',
+                        'min-width': hengLeg ? hengLeg * 60 + 'px' : '',
+                        textAlign: detail.hengList[pIndex] ? 'center' : 'left',
+                        fontFamily: pItem.fontFamily,
+                      }"
+                      @saveBlankTF="saveBlankTF"
+                      :hengIndex="pItem.hengIndex"
+                    />
+                  </template>
                 </template>
                 <template v-else>
                   <span
@@ -224,26 +334,131 @@
             <template v-else>
               <template v-if="isInput">
                 <!-- [optionIndex][optionItemIndex] -->
-                <EditDiv
-                  :class="[
-                    'answer-input',
-                    editDivClassname,
-                    editDivClassname2,
-                    Bookanswer.Isexample ? 'answer-input-example' : '',
-                  ]"
-                  v-model="Bookanswer.completeInput[pItem.hengIndex]"
-                  :canEdit="
-                    Bookanswer.Isexample || TaskModel == 'ANSWER' ? false : true
-                  "
-                  :style="{
-                    fontSize: maxFontsize + 'px',
-                    minHeight: (maxFontsize * 3) / 2 + 'px',
-                    lineHeight: (maxFontsize * 3) / 2.1 + 'px',
-                    'min-width': hengLeg ? hengLeg * 60 + 'px' : '',
-                    textAlign: detail.hengList[pIndex] ? 'center' : 'left',
-                    fontFamily: pItem.fontFamily,
-                  }"
-                />
+                <template v-if="judgeAnswer == 'standardAnswer'">
+                  <template v-if="correctAnswer">
+                    <EditDiv
+                      :id="
+                        'sentence_' +
+                        Math.random().toString(36).substr(2) +
+                        '_' +
+                        pItem.hengIndex
+                      "
+                      :class="[
+                        'answer-input userRight',
+                        editDivClassname,
+                        editDivClassname2,
+                        Bookanswer.completeInput[pItem.hengIndex]
+                          .input_Isexample
+                          ? 'answer-input-example'
+                          : '',
+                      ]"
+                      v-html="correctAnswer[pItem.hengIndex]"
+                      :canEdit="
+                        Bookanswer.completeInput[pItem.hengIndex]
+                          .input_Isexample || TaskModel == 'ANSWER'
+                          ? false
+                          : true
+                      "
+                      :style="{
+                        fontSize: maxFontsize + 'px',
+                        minHeight: (maxFontsize * 3) / 2 + 'px',
+                        lineHeight: (maxFontsize * 3) / 2.1 + 'px',
+                        'min-width': hengLeg ? hengLeg * 60 + 'px' : '',
+                        textAlign: detail.hengList[pIndex] ? 'center' : 'left',
+                        fontFamily: pItem.fontFamily,
+                      }"
+                    />
+                  </template>
+                  <template v-else>
+                    <EditDiv
+                      :id="
+                        'sentence_' +
+                        Math.random().toString(36).substr(2) +
+                        '_' +
+                        pItem.hengIndex
+                      "
+                      :class="[
+                        'answer-input userRight',
+                        editDivClassname,
+                        editDivClassname2,
+                        Bookanswer.completeInput[pItem.hengIndex]
+                          .input_Isexample
+                          ? 'answer-input-example'
+                          : '',
+                      ]"
+                      v-model="Bookanswer.completeInput[pItem.hengIndex].answer"
+                      :canEdit="
+                        Bookanswer.completeInput[pItem.hengIndex]
+                          .input_Isexample || TaskModel == 'ANSWER'
+                          ? false
+                          : true
+                      "
+                      :style="{
+                        fontSize: maxFontsize + 'px',
+                        minHeight: (maxFontsize * 3) / 2 + 'px',
+                        lineHeight: (maxFontsize * 3) / 2.1 + 'px',
+                        'min-width': hengLeg ? hengLeg * 60 + 'px' : '',
+                        textAlign: detail.hengList[pIndex] ? 'center' : 'left',
+                        fontFamily: pItem.fontFamily,
+                      }"
+                    />
+                  </template>
+                </template>
+                <template v-else>
+                  <EditDiv
+                    :id="
+                      'sentence_' +
+                      Math.random().toString(36).substr(2) +
+                      '_' +
+                      pItem.hengIndex
+                    "
+                    :class="[
+                      'answer-input',
+                      editDivClassname,
+                      editDivClassname2,
+                      Bookanswer.completeInput[pItem.hengIndex].input_Isexample
+                        ? 'answer-input-example'
+                        : '',
+                      Bookanswer.completeInput[pItem.hengIndex].correct &&
+                      Bookanswer.completeInput[pItem.hengIndex].answer ==
+                        Bookanswer.completeInput[pItem.hengIndex].correct
+                        ? 'userRight'
+                        : Bookanswer.completeInput[pItem.hengIndex].correct &&
+                          Bookanswer.completeInput[pItem.hengIndex].answer !=
+                            Bookanswer.completeInput[pItem.hengIndex].correct
+                        ? 'userError'
+                        : '',
+                      correctAnswer &&
+                      correctAnswer[pItem.hengIndex] &&
+                      correctAnswer[pItem.hengIndex] ==
+                        Bookanswer.completeInput[pItem.hengIndex].answer
+                        ? 'userRight'
+                        : correctAnswer &&
+                          correctAnswer[pItem.hengIndex] &&
+                          correctAnswer[pItem.hengIndex] !=
+                            Bookanswer.completeInput[pItem.hengIndex].answer
+                        ? 'userError'
+                        : '',
+                    ]"
+                    v-model="Bookanswer.completeInput[pItem.hengIndex].answer"
+                    :canEdit="
+                      Bookanswer.completeInput[pItem.hengIndex]
+                        .input_Isexample || TaskModel == 'ANSWER'
+                        ? false
+                        : true
+                    "
+                    :style="{
+                      fontSize: maxFontsize + 'px',
+                      minHeight: (maxFontsize * 3) / 2 + 'px',
+                      lineHeight: (maxFontsize * 3) / 2.1 + 'px',
+                      'min-width': hengLeg ? hengLeg * 60 + 'px' : '',
+                      textAlign: detail.hengList[pIndex] ? 'center' : 'left',
+                      fontFamily: pItem.fontFamily,
+                    }"
+                    @saveBlankTF="saveBlankTF"
+                    :hengIndex="pItem.hengIndex"
+                  />
+                </template>
               </template>
               <template v-else>
                 <span
@@ -332,6 +547,8 @@ export default {
     "sdIndex",
     "hengLeg",
     "maxFontsize",
+    "judgeAnswer",
+    "correctAnswer",
   ],
   filters: {
     handlePY(pinyin) {
@@ -394,13 +611,68 @@ export default {
   },
   watch: {},
   //方法集合
-  methods: {},
+  methods: {
+    saveBlankTF(value, hengIndex) {
+      let _this = this;
+      if (
+        _this.correctAnswer &&
+        !_this.Bookanswer.completeInput[hengIndex].input_Isexample
+      ) {
+        if (
+          _this.correctAnswer[hengIndex] &&
+          _this.correctAnswer[hengIndex] !=
+            _this.Bookanswer.completeInput[hengIndex].answer
+        ) {
+          _this.$set(
+            _this.Bookanswer.completeInput[hengIndex],
+            "userAnswerJudge",
+            "[JUDGE##F##JUDGE]"
+          );
+        } else if (
+          _this.correctAnswer[hengIndex] &&
+          _this.correctAnswer[hengIndex] ==
+            _this.Bookanswer.completeInput[hengIndex].answer
+        ) {
+          _this.$set(
+            _this.Bookanswer.completeInput[hengIndex],
+            "userAnswerJudge",
+            "[JUDGE##T##JUDGE]"
+          );
+        }
+      } else if (
+        _this.Bookanswer.completeInput[hengIndex].correct &&
+        !_this.Bookanswer.completeInput[hengIndex].input_Isexample
+      ) {
+        if (
+          _this.Bookanswer.completeInput[hengIndex].correct &&
+          _this.Bookanswer.completeInput[hengIndex].correct !=
+            _this.Bookanswer.completeInput[hengIndex].answer
+        ) {
+          _this.$set(
+            _this.Bookanswer.completeInput[hengIndex],
+            "userAnswerJudge",
+            "[JUDGE##F##JUDGE]"
+          );
+        } else if (
+          _this.Bookanswer.completeInput[hengIndex].correct &&
+          _this.Bookanswer.completeInput[hengIndex].correct ==
+            _this.Bookanswer.completeInput[hengIndex].answer
+        ) {
+          _this.$set(
+            _this.Bookanswer.completeInput[hengIndex],
+            "userAnswerJudge",
+            "[JUDGE##T##JUDGE]"
+          );
+        }
+      }
+    },
+  },
   //生命周期 - 创建完成(可以访问当前this实例)
   created() {},
   //生命周期 - 挂载完成(可以访问DOM元素)
   mounted() {
     // console.log(this.detail);
-    // console.log(this.Bookanswer);
+    console.log(this.Bookanswer);
   },
   beforeCreate() {}, //生命周期 - 创建之前
   beforeMount() {}, //生命周期 - 挂载之前

+ 3 - 2
src/views/courseView.vue

@@ -109,8 +109,9 @@ export default {
           ],
         },
       ],
-      bookAnswerContent: ``,
-      TaskModel: "", // TEST 考试模式; PRACTICE 练习模式; ANSWER 查看答案模式; 空 预览模式
+      bookAnswerContent:
+        '[{"table_list":[[{"data":{"Bookanswer":[[{"Isexample":false,"completeInput":[{"answer":"包子","userAnswerJudge":"[JUDGE##T##JUDGE]","input_Isexample":false},{"answer":"版","userAnswerJudge":"[JUDGE##F##JUDGE]","input_Isexample":false}],"shortInput":"","longInput":"","doubleInput":[],"judge":{},"checkbox":{},"radio":{},"recordList":{},"completeImage":[]},{"Isexample":false,"completeInput":[{"answer":"河北","userAnswerJudge":"[JUDGE##F##JUDGE]","input_Isexample":false}],"shortInput":"","longInput":"","doubleInput":[],"judge":{},"checkbox":{},"radio":{},"recordList":{},"completeImage":[]},{"Isexample":false,"completeInput":[{"answer":"大力","userAnswerJudge":"[JUDGE##T##JUDGE]","input_Isexample":false}],"shortInput":"","longInput":"","doubleInput":[],"judge":{},"checkbox":{},"radio":{},"recordList":{},"completeImage":[]},{"Isexample":false,"completeInput":[{"answer":"是的","userAnswerJudge":"","input_Isexample":false}],"shortInput":"","longInput":"","doubleInput":[],"judge":{},"checkbox":{},"radio":{},"recordList":{},"completeImage":[]}]]}}]]}]',
+      TaskModel: "ANSWER", // TEST 考试模式; PRACTICE 练习模式; ANSWER 查看答案模式; 空 预览模式
       category: "",
       FatherTreeData: null,
       themeColor: "",