Explorar o código

sub-question mode apply to topic center

hehaitao hai 1 ano
pai
achega
3b7ac0c935

+ 1 - 1
src/components/MxPaper/mx-question-content.vue

@@ -1,6 +1,6 @@
 <template>
   <div class="fx-column" :id="'question_'+question.questionId">
-    <div v-html="questionWithSeq" class="answer"></div>
+    <div v-html="questionWithSeq" class="answer fx-row"></div>
     <div class="fx-column mt30 pl20 pr20">
       <!-- 递归,支持子题 -->
       <template v-if="question['subQuestions']">

+ 3 - 1
src/components/MxQuestionReadonly/MxQuestionReadonly.vue

@@ -9,6 +9,7 @@
         <span>难度: {{ diffText }}</span>
       </div>
       <div class="fx-row ai-cen gap20">
+        <slot name="prefix" />
         <mx-collect-button :value="question.collect" />
         <el-button type="text" @click="$emit('correct')">
           <i class="el-icon-info f-red"></i>
@@ -16,8 +17,9 @@
         </el-button>
         <el-button type="text" @click="toggleParse">
           <i class="el-icon-search f-warning"></i>
-          <span class="f-666">查看详情</span>
+          <span class="f-666">查看解析</span>
         </el-button>
+        <slot name="suffix" />
       </div>
     </div>
     <div :id="parseEleId" v-if="showParse" class="mt20">

+ 4 - 11
src/views/questioncenter/PaperPreview.vue

@@ -5,28 +5,21 @@
       <div class="fx-row fx-bet-cen gap20 mb20">
         <div class="f18 bold f-333">{{ paperName }}</div>
         <div class="fx-row fx-bet-cen gap20">
-          <mx-collect-button :value="collectFlag" />
+          <mx-collect-button :value="collectFlag"/>
           <el-button type="primary" @click="paperDownLoad(paperId)">下载试卷</el-button>
         </div>
       </div>
       <!-- 题目 -->
       <div class="fx-column gap10" id="question_list">
-        <mx-question-readonly v-for="(q,i) in opticList" :seq="i+1" :question="q" @correct="$refs.correct.open(q.id)"/>
+        <mx-question-readonly v-for="(q,i) in opticList" :key="i" :seq="i+1" :question="q"
+                              @correct="$refs.correct.open(q.id)"/>
       </div>
     </el-card>
     <correct-question ref="correct"></correct-question>
   </div>
 </template>
 <script>
-import {
-  downloadRealPaper,
-  isCollected,
-  papersCancelCollect,
-  papersCollect,
-  preview,
-  queCancelCollect,
-  queCollect
-} from '@/api/webApi/webQue.js'
+import {downloadRealPaper, isCollected, papersCancelCollect, papersCollect, preview} from '@/api/webApi/webQue.js'
 import {mapGetters} from 'vuex'
 import correctQuestion from '../../components/MxPaper/plus/correct-question-dialog.vue'
 import MxCollectButton from "@/components/MxCollectButton/MxCollectButton.vue";

+ 39 - 112
src/views/questioncenter/components/collect.vue

@@ -1,78 +1,15 @@
 <template>
   <div>
-    <mx-condition ref="condition" :query-params="queryParams" :require-fields="requireFields" @query="handleQuery"
-                  @invalid="handleInvalidQuery"
-    ></mx-condition>
+    <mx-condition ref="condition" :query-params="queryParams" :require-fields="requireFields" @query="handleQuery"/>
     <!-- 试题收藏 -->
     <div class="mt20">
       <div class="topic" v-show="queryParams.favCollectType == 'question'">
         <!-- 题目 -->
-        <div class="paper_questions" id="collect-question">
-          <div
-            class="que_item"
-            v-for="(item, index) in collectQue"
-            :key="item.id"
-          >
-            <div class="que_content" style="display: flex">
-              <div>{{ index + 1 }}.</div>
-              <div v-html="item.title"></div>
-            </div>
-            <div class="option" v-if="item.optionA">
-              <div style="margin-right: 5px">A:</div>
-              <div v-html="item.optionA"></div>
-            </div>
-            <div class="option" v-if="item.optionB">
-              <div style="margin-right: 5px">B:</div>
-              <div v-html="item.optionB"></div>
-            </div>
-            <div class="option" v-if="item.optionC">
-              C:
-              <div v-html="item.optionC"></div>
-            </div>
-            <div class="option" v-if="item.optionD">
-              <div style="margin-right: 5px">D:</div>
-              <div v-html="item.optionD"></div>
-            </div>
-            <div class="que_footer">
-              <div class="spans">
-                <span class="id">ID: {{ item.id }}</span>
-                <span>题型: {{ item.qtpye }}</span>
-                <span>难度: 一般</span>
-              </div>
-              <div class="operation">
-                <div class="shoucan">
-                  <div
-                    v-show="item.collect"
-                    @click="toCancelCollectQue(item)"
-                    style="display: flex; align-items: center"
-                  >
-                    <img
-                      src="@/assets/images/icon_shoucang_s.png"
-                      style="margin-right: 8px"
-                    />
-                    <span>已收藏</span>
-                  </div>
-                  <div
-                    v-show="!item.collect"
-                    @click="toCollectQue(item)"
-                    style="display: flex; align-items: center"
-                  >
-                    <img
-                      src="@/assets/images/icon_shoucang_n.png"
-                      style="margin-right: 8px"
-                    />
-                    <span>收藏</span>
-                  </div>
-                </div>
-                <div class="detail" @click="viewDetail(item)">
-                  <img src="@/assets/images/icon_chakan.png" alt=""/>
-                  <span>查看解析>></span>
-                </div>
-              </div>
-            </div>
-            <div class="pd20" v-show="item.expand" v-html="'【解答】'+item.answer2"></div>
-            <div class="pd20" v-show="item.expand" v-html="'【解析】'+item.parse"></div>
-          </div>
+        <div class="fx-column gap10" id="collect-question">
+          <mx-question-readonly v-for="(q, i) in collectQue" :key="i" :question="q"
+                                :seq="(pageForm.pageNum-1)*pageForm.pageSize+i+1"
+                                @correct="$refs.correct.open(q.id)"/>
+          <el-empty v-if="!loading && !collectQue.length" />
         </div>
       </div>
       <!-- 试卷收藏 -->
@@ -119,16 +56,21 @@
       @pagination="onChangePage"
     />
 
+    <correct-question-dialog ref="correct"/>
   </div>
 </template>
 <script>
 import MxCondition from '@/components/MxCondition/mx-condition'
-import { favPapers, favQuestions, favQueTypes, favSubjects } from '@/api/webApi/webQue.js'
+import {favPapers, favQuestions, favSubjects} from '@/api/webApi/webQue.js'
 import PaperActionsMixin from "@/views/questioncenter/components/paper-actions-mixin";
+import MxQuestionReadonly from "@/components/MxQuestionReadonly/MxQuestionReadonly.vue";
+import CorrectQuestionDialog from "@/components/MxPaper/plus/correct-question-dialog.vue";
 
 export default {
   mixins: [PaperActionsMixin],
   components: {
+    CorrectQuestionDialog,
+    MxQuestionReadonly,
     MxCondition,
   },
   created() {
@@ -136,25 +78,26 @@ export default {
   },
   data() {
     return {
+      loading: false,
       form: {
         type: 'question',
         subjectName: '',
         wrongType: ''
       },
-      queryParams:{
-        favCollectType:'',
-        favSubject:'',
-        favQueType:''
+      queryParams: {
+        favCollectType: '',
+        favSubject: '',
+        favQueType: ''
       },
-      requireFields:['favCollectType','favSubject','favQueType'],
+      requireFields: ['favCollectType', 'favSubject', 'favQueType'],
       pageForm: {
         total: 0,
         pageSize: 10,
         pageNum: 1
       },
       types: [
-        { type: 'question', name: '试题收藏' },
-        { type: 'paper', name: '试卷收藏' }
+        {type: 'question', name: '试题收藏'},
+        {type: 'paper', name: '试卷收藏'}
       ],
       subjects: [],
       queTypes: [],
@@ -162,17 +105,16 @@ export default {
       collectPaper: []
     }
   },
-  watch:{
-    'queryParams.favCollectType':{
-      immediate:false,
-      handler(data){
-        console.log(data)
-        if(data == 'question') {
+  watch: {
+    'queryParams.favCollectType': {
+      immediate: false,
+      handler(data) {
+        if (data == 'question') {
           this.queryParams['favQueType'] = ''
-          if(!this.requireFields.find(item => item == 'favQueType')){
+          if (!this.requireFields.find(item => item == 'favQueType')) {
             this.requireFields.push('favQueType')
           }
-        }else {
+        } else {
           delete this.queryParams['favQueType']
           this.requireFields.remove('favQueType')
         }
@@ -180,22 +122,20 @@ export default {
     }
   },
   methods: {
-    handleQuery(){
-      if(this.queryParams.favCollectType == 'question') {
+    handleQuery() {
+      if (this.queryParams.favCollectType == 'question') {
         this.getFavQuestions()
-      }else {
+      } else {
         this.getFavPapers()
       }
 
-    },
-    handleInvalidQuery(){
-
     },
     onChangePage() {
       this.getFavQuestions()
     },
     // 收藏的问题列表
     getFavQuestions() {
+      this.loading = true
       favQuestions({
         subjectName: this.queryParams.favSubject,
         qtype: this.queryParams.favQueType,
@@ -203,34 +143,16 @@ export default {
         pageSize: this.pageForm.pageSize
       }).then((res) => {
         this.pageForm.total = res.total
-        this.collectQue = res.rows.map(item => {
-          item.expand = false
-          return item
-        })
+        this.collectQue = res.rows
         this.$nextTick(_ => this.mxGlobal.MathQueue('collect-question'))
-        console.log(res)
-      })
-    },
-    toCollectQue(item) {
-      queCollect({ questionId: item.id }).then((res) => {
-        item.collect = !item.collect
-        this.msgSuccess('收藏成功')
-        console.log(res)
-      })
-    },
-    toCancelCollectQue(item) {
-      queCancelCollect({ questionId: item.id }).then((res) => {
-        item.collect = !item.collect
-        this.msgSuccess('取消收藏成功')
-        console.log(res)
-      })
+      }).finally(() => this.loading = false)
     },
     viewDetail(item) {
       item.expand = !item.expand
     },
     // 收藏涉及的学科
     getSubjects() {
-      favSubjects({ type: this.form.type }).then((res) => {
+      favSubjects({type: this.form.type}).then((res) => {
         console.log(res)
         this.form.subjectName = res.data[0]
         this.subjects = res.data
@@ -261,20 +183,25 @@ export default {
   .el-dialog__header .el-dialog__title {
     color: #47c6a2;
   }
+
   .radio_contianer .el-radio-button__inner {
     border-left: 1px solid #dcdfe6;
   }
+
   .radio_contianer .el-radio-button .el-radio-button__inner {
     border-radius: 16px;
     margin-bottom: 5px;
   }
+
   .radio_contianer .el-radio-button:first-child:last-child .el-radio-button__inner {
     border-radius: 16px;
   }
+
   .radio_contianer .el-radio-button {
     margin-right: 8px;
   }
 }
+
 .radio_contianer > div {
   margin-bottom: 16px;
   display: flex;

+ 9 - 63
src/views/questioncenter/components/generate-tabs/paper-by-hand.vue

@@ -29,68 +29,13 @@
         <!-- 主题内容 -->
         <div class="main_con">
           <!-- 题目 -->
-          <div class="paper_questions" :id="mathId">
-            <div class="que_item" v-for="(item, index) in queList" :key="item.id">
-              <div class="que_content">
-                <div class="que-content-title">
-                  <div class="index">{{ (pageSize * (pageNum - 1) + index + 1) }}.</div>
-                  <div v-html="item.title"></div>
-                </div>
-                <div class="que-option">
-                  <div v-if="item.optionA">
-                    <span>A</span>
-                    <span v-html="item.optionA"></span>
-                  </div>
-                  <div v-if="item.optionB">
-                    <span>B</span>
-                    <span v-html="item.optionB"></span>
-                  </div>
-                  <div v-if="item.optionC">
-                    <span>C</span>
-                    <span v-html="item.optionC"></span>
-                  </div>
-                  <div v-if="item.optionD">
-                    <span>D</span>
-                    <span v-html="item.optionD"></span>
-                  </div>
-                </div>
-              </div>
-              <div class="que_footer pd20 fx-row ai-center jc-between">
-                <div class="spans">
-                  <span class="id">ID: {{ item.id }}</span>
-                  <span>题型: {{ item.qtpye }}</span>
-                  <span>难度: 一般</span>
-                </div>
-                <div class="operation">
-                  <div class="shoucan">
-                    <div v-show="item.collect" @click="toCancelCollectQue(item)"
-                         style="display: flex; align-items: center">
-                      <img src="@/assets/images/icon_shoucang_s.png" alt="" style="margin-right: 8px"/>
-                      <span>已收藏</span>
-                    </div>
-                    <div v-show="!item.collect" @click="toCollectQue(item)" style="display: flex; align-items: center">
-                      <img src="@/assets/images/icon_shoucang_n.png" style="margin-right: 8px" alt=""/>
-                      <span>收藏</span>
-                    </div>
-                  </div>
-                  <div class="jiucuo" @click="$refs.correct.open(item.id)">
-                    <img src="@/assets/images/icon_jiucuo.png" alt=""/>
-                    <span>纠错</span>
-                  </div>
-                  <div class="detail" @click="viewDetail(item)">
-                    <img src="@/assets/images/icon_chakan.png" alt=""/>
-                    <span>查看详情>></span>
-                  </div>
-                  <div class="addQue">
-                    <el-button @click="addQueCard(item)" icon="el-icon-shopping-cart-2" type="success" plain
-                               :disabled="queCardForm.queList.some((q) => q.id == item.id)">加入选题
-                    </el-button>
-                  </div>
-                </div>
-              </div>
-              <div class="pd20" v-show="item.expand" v-html="'【解答】'+item.answer2"></div>
-              <div class="pd20" v-show="item.expand" v-html="'【解析】'+item.parse"></div>
-            </div>
+          <div class="fx-column gap10" :id="mathId">
+            <mx-question-readonly v-for="(q, i) in queList" :key="i" :question="q" :seq="pageSize*(pageNum-1)+i+1"
+                                  @correct="$refs.correct.open(q.id)">
+              <el-button slot="suffix" @click="addQueCard(q)" icon="el-icon-shopping-cart-2" type="success" plain
+                         :disabled="queCardForm.queList.some((item) => item.id == q.id)">加入选题
+              </el-button>
+            </mx-question-readonly>
             <div v-if="queList.length == 0" class="empty-text">
               暂时没有内容
             </div>
@@ -161,11 +106,12 @@ import CorrectQuestionDialog from '@/components/MxPaper/plus/correct-question-di
 import LeftTreeSide from '@/views/questioncenter/components/generate-tabs/plugins/left-tree-side'
 import PaperWorkIdentifierMixin from './paper-work-identifier-mixin'
 import EventBus from '@/components/EventBus'
+import MxQuestionReadonly from "@/components/MxQuestionReadonly/MxQuestionReadonly.vue";
 
 export default {
   mixins: [PaperWorkIdentifierMixin],
   name: 'paper-by-hand',
-  components: { LeftTreeSide, CorrectQuestionDialog, MxCondition },
+  components: {MxQuestionReadonly, LeftTreeSide, CorrectQuestionDialog, MxCondition },
   data() {
     return {
       queryParams: null,

+ 1 - 1
src/views/questioncenter/components/learn-record.vue

@@ -119,7 +119,7 @@
           </p>
         </el-col>
       </el-row>
-      <evaluation-empty v-else shadow title="暂无数据"></evaluation-empty>
+      <el-empty v-else />
     </div>
     <div class="record_contian">
       <div class="tit">知识点诊断记录</div>

+ 21 - 66
src/views/questioncenter/components/mistake.vue

@@ -1,62 +1,18 @@
 <template>
   <div class="mistake">
-    <mx-condition ref="condition" :query-params="queryParams" :requireFields="requireFields"  @query="handleQuery"
-                  @invalid="handleInvalidQuery"></mx-condition>
+    <mx-condition ref="condition" :query-params="queryParams" :requireFields="requireFields"  @query="handleQuery" />
     <div class="topic">
       <!-- 题目 -->
-      <div class="paper_questions" id="wrong-question">
-        <div
-          class="que_item"
-          v-for="(item, index) in wrongList"
-          :key="item.id"
-        >
-          <div class="que_content" style="display: flex">
-            <div>{{ index + 1 }}.</div>
-            <div v-html="item.title"></div>
-          </div>
-          <div class="option" v-if="item.optionA">
-            <div style="margin-right: 5px">A:</div>
-            <div v-html="item.optionA"></div>
-          </div>
-          <div class="option" v-if="item.optionB">
-            <div style="margin-right: 5px">B:</div>
-            <div v-html="item.optionB"></div>
-          </div>
-          <div class="option" v-if="item.optionC">
-            C:
-            <div v-html="item.optionC"></div>
-          </div>
-          <div class="option" v-if="item.optionD">
-            <div style="margin-right: 5px">D:</div>
-            <div v-html="item.optionD"></div>
-          </div>
-          <div class="que_footer">
-            <div class="spans">
-              <span>题型: {{ item.qtpye }}</span>
-              <span>难度: 一般</span>
-            </div>
-            <div class="operation">
-              <div class="delete" style="display: flex; align-items: center">
-                <div
-                  style="margin-right: 24px; cursor: pointer; display: flex;align-items: center;"
-                  @click="toDeleteWrongQue(item.id, index)"
-                >
-                  <img
-                    src="@/assets/images/icon_wrong.png"
-                    style="margin-right: 8px"
-                  />
-                  <span>删除错题</span>
-                </div>
-              </div>
-              <div class="detail" @click="viewWrongDetail(item)">
-                <img src="@/assets/images/icon_chakan.png" alt="" />
-                <span>查看解析>></span>
-              </div>
-            </div>
-          </div>
-          <div class="pd20" v-show="item.expand" v-html="'【解答】'+item.answer2"></div>
-          <div class="pd20" v-show="item.expand" v-html="'【解析】'+item.parse"></div>
-        </div>
+      <div class="fx-column gap10" id="wrong-question">
+        <mx-question-readonly v-for="(q,i) in wrongList" :key="i" :question="q"
+                              :seq="(pageForm.pageNum-1)*pageForm.pageSize+i+1"
+                              @correct="$refs.correct.open(q.id)">
+          <el-button slot="prefix" type="text" @click="toDeleteWrongQue(q.id, i)">
+            <i class="el-icon-delete f-danger"></i>
+            <span class="f-666">删除错题</span>
+          </el-button>
+        </mx-question-readonly>
+        <el-empty v-if="!loading && !wrongList.length" />
       </div>
     </div>
     <!-- 错题分页 -->
@@ -68,18 +24,25 @@
       :page-size="10"
       @pagination="onChangePage"
     />
+
+    <correct-question-dialog ref="correct" />
   </div>
 </template>
 <script>
 import { deleteWrongQuestion, wrongQuestions } from '@/api/webApi/webQue'
 import MxCondition from '@/components/MxCondition/mx-condition'
+import CorrectQuestionDialog from "@/components/MxPaper/plus/correct-question-dialog.vue";
+import MxQuestionReadonly from "@/components/MxQuestionReadonly/MxQuestionReadonly.vue";
 
 export  default {
   components:{
+    MxQuestionReadonly,
+    CorrectQuestionDialog,
     MxCondition
   },
   data() {
     return {
+      loading: false,
       pageForm:{
         pageSize:10,
         pageNum:1
@@ -94,9 +57,6 @@ export  default {
     }
   },
   methods:{
-    viewWrongDetail(item) {
-      item.expand = !item.expand
-    },
     onChangePage(page) {
       this.pageForm.pageSize = page.limit
       this.pageForm.pageNum = page.page
@@ -113,22 +73,17 @@ export  default {
       });
     },
     getWrongQuestions() {
+      this.loading = true
       wrongQuestions({
         subjectName: this.queryParams.wrongSubject,
         qtype: this.queryParams.wrongType,
         pageSize: this.pageForm.pageSize,
         pageNum: this.pageForm.pageNum,
       }).then((res) => {
-        this.wrongList = res.rows.map(item => {
-          item.expand = false
-          return item
-        });
+        this.wrongList = res.rows
         this.total = res.total;
         this.$nextTick(_=>this.mxGlobal.MathQueue('wrong-question'))
-      });
-    },
-    handleInvalidQuery() {
-
+      }).finally(() => this.loading = false);
     }
   }
 }

+ 1 - 1
src/views/questioncenter/paper.vue

@@ -31,7 +31,7 @@
               {{ index2 + 1 }}.
               <span style="color: #1890ff">题号:{{ questionInfo.id }}({{ questionInfo.score }}分)</span><span v-html="questionInfo.title"></span>
             </div>
-            <!--<div v-for="child in questionInfo.subquestions" v-html="child.title"></div>-->
+            <div v-for="child in questionInfo.subquestions" v-html="child.title"></div>
           </div>
         </div>
       </el-card>