Browse Source

完成了单/多选题开放回答答案保存,支持后退前进。

Mask 4 years ago
parent
commit
628e6985ec
1 changed files with 27 additions and 17 deletions
  1. 27 17
      src/components/WebQn.vue

+ 27 - 17
src/components/WebQn.vue

@@ -423,6 +423,7 @@ export default {
     onPreTap() {
       let lastIndex = this.historyStack.pop();
       this.questionHEAD = lastIndex;
+      this.selectedOpenList.length = 0;
       this.onQuestionLoaded(true);
     },
     onListItemTap(event) {
@@ -443,13 +444,13 @@ export default {
         let isUnselect = this.lastCheckList.length > index.length;
 
         if (isUnselect) {
-          // 取消选中,先判断取消选中的是哪个index,然后在判断开放选项中是否有取消选择的,将其删除掉
-          let unselectItem;
-          for (var item in this.lastCheckList) {
-            if (index.indexOf(this.lastCheckList[item]) < 0) {
-              unselectItem = this.lastCheckList[item];
-            }
-          }
+          let selSet = new Set(index)
+          let lastSet = new Set(this.lastCheckList)
+          let unselectSet = new Set(
+            [...lastSet].filter(x => !selSet.has(x))
+          );
+          let unselectItem = Array.from(unselectSet)[0];
+
           for (
             var oIndex = 0;
             oIndex < this.selectedOpenList.length;
@@ -487,6 +488,7 @@ export default {
           console.log(`Dialog value: ${value}, `);
           this.$set(this.selectedOpenList, this.selectedOpenList.length, {
             selectedIndex: selectedOpt.value,
+            selectedId: selectedOpt.id,
             selectedValue: value
           });
           this.answerNote[selectedOpt.id] = value;
@@ -509,6 +511,7 @@ export default {
               // 如果有开放选项内容,再添加内容
               this.$set(this.selectedOpenList, this.selectedOpenList.length, {
                 selectedIndex: i,
+                selectedId: lastAnswer.answer,
                 selectedValue: lastAnswer.answerNote
               });
             }
@@ -530,6 +533,7 @@ export default {
                 // let optNote = lastAnswerNote. optId;
                 this.$set(this.selectedOpenList, this.selectedOpenList.length, {
                   selectedIndex: i,
+                  selectedId: idList[idIndex],
                   selectedValue: lastAnswerNote[optId]
                 });
               }
@@ -541,9 +545,9 @@ export default {
       } else {
         this.answerValue = lastAnswer.answer;
       }
-      if (this.currentQuestion.type == 1 && lastAnswer.answerNote) {
-        this.answerNote[lastAnswer.answer] = lastAnswer.answerNote;
-      }
+      // if (this.currentQuestion.type == 1 && lastAnswer.answerNote) {
+      //   this.answerNote[lastAnswer.answer] = lastAnswer.answerNote;
+      // }
     },
     onQuestionLoaded(isBack) {
       console.log("call onQuestionLoaded");
@@ -636,7 +640,6 @@ export default {
             return;
           }
         }
-        this.selectedOpenList.length = 0;
 
         // 确定答案
         // this.answers[questionId] = selectionIds.join(',');
@@ -647,22 +650,29 @@ export default {
 
         if (
           this.currentQuestion.maxOptions == 1 &&
-          this.answerNote[selectionIds[0]]
+          this.selectedOpenList.length > 0
         ) {
-          this.answers[questionId].answerNote = this.answerNote[
-            selectionIds[0]
-          ];
+          this.answers[
+            questionId
+          ].answerNote = this.selectedOpenList[0].selectedValue;
         } else if (this.currentQuestion.maxOptions > 1) {
           let answerNoteObj = {};
           for (let index in selectionIds) {
             let selectedId = selectionIds[index];
-            if (this.answerNote[selectedId]) {
-              answerNoteObj[selectedId] = this.answerNote[selectedId];
+            for (var sIndex in this.selectedOpenList) {
+              if (this.selectedOpenList[sIndex].selectedId == selectedId) {
+                answerNoteObj[selectedId] = this.selectedOpenList[
+                  sIndex
+                ].selectedValue;
+                break;
+              }
             }
           }
           this.answers[questionId].answerNote = JSON.stringify(answerNoteObj);
         }
 
+        this.selectedOpenList.length = 0;
+
         // 判断是否配额不足
         let isIndicartorOut = indicatorBiz.isIndicartorOut(
           this.currentQuestion,