Browse Source

完成查看练习结果详情(除非小题渲染外的结果渲染)

lm 16 giờ trước cách đây
mục cha
commit
d56bc44ac0

+ 1 - 6
src/views/targetImprove/components/ImageJumpPreview.vue

@@ -119,13 +119,8 @@ export default {
                     newPage -= 1;
                     break;
             }
-            
-            // 触发 .sync 更新
+            // 触发  父级 :currentNavPage.sync 绑定的变量更新,父组件监听到此事件后会自动更新对应的绑定变量
             this.$emit('update:currentNavPage', newPage);
-            
-            // 等待 DOM 更新后触发业务事件
-            await this.$nextTick();
-            this.$emit('imgNavChange', newPage);
         }
     }
 }

+ 5 - 3
src/views/targetImprove/practice/practiceResults.vue

@@ -58,15 +58,16 @@
             <template v-slot:frontRate="{row}">
                 {{ row.frontRate === '-' ? row.frontRate : row.frontRate + '%' }}
             </template>
+            <!-- exerciseStatus 批阅状态(1未批阅 2批阅中 3已批阅) -->
             <template v-slot:afterRate="{row}">
-                {{ row.afterRate === '-' ? row.afterRate : row.afterRate + '%' }}
+                {{ row.exerciseStatus === 3 ? row.afterRate + '%'  : row.afterRate}}
             </template>
 
             <template v-slot:difference="{row}">
-                <img v-if="row.difference!== '-'" 
+                <img v-if="row.exerciseStatus === 3" 
                     width="16px" height="16px" style="margin-right: 2px;" 
                     :src="Number(row.afterRate) > Number(row.frontRate) ? upIcon : downIcon" alt="" />
-                {{ row.difference }}
+                {{ row.exerciseStatus === 3 ?  row.difference + '%' : 0 }}
             </template>
             <template v-slot:action="{row}">
                 <div class="table_row_operation">
@@ -301,6 +302,7 @@ export default ({
                 frontRate:row.frontRate,   //练前得分率
                 afterRate:row.afterRate,   //练后得分率
                 difference:row.difference,   //提升情况
+                exerciseStatus:row.exerciseStatus,   // 批阅状态(1未批阅 2批阅中 3已批阅)
             }
             sessionStorage.setItem('practice_detail',JSON.stringify(tmpStorage))
             this.$router.push(`/targetImprove/praciceResultDetail?id=${row.exerciseId}`);

+ 24 - 41
src/views/targetImprove/practice/practiceResults/practiceDetail.vue

@@ -9,6 +9,8 @@
 
 
         <div class="main_content">
+
+            <!-- 练习结果概览 -->
             <div class="overview">
                 <div class="page_search">
                     <div class="search_content">
@@ -19,12 +21,15 @@
                 </div>
                 <div class="desc">
                     该知识点练习前您的得分率是<span class="scoring_average bold">{{localPracticeDetail.frontRate === '-' ? localPracticeDetail.frontRate : localPracticeDetail.frontRate + '%'}}</span>
-                    ,练习后您的得分率是<span class="scoring_average bold">{{ localPracticeDetail.afterRate === '-' ? localPracticeDetail.afterRate : localPracticeDetail.afterRate + '%'}}</span>
-                    ,经过专项练习该知识点得分率<span class="up_light bold">提升了16%</span>。请继续保持练习,时常回顾错题。
-                    经过专项练习该知识点得分率<span class="down_light bold">下降了16%</span>。请继续保持练习,时常回顾错题。
+                    ,练习后您的得分率是<span class="scoring_average bold">{{ localPracticeDetail.exerciseStatus === 3 ? localPracticeDetail.afterRate + '%' : '-'}}</span>
+                    <span v-if="localPracticeDetail.exerciseStatus === 3">
+                    ,经过专项练习该知识点得分率<span :class="['bold',Number(localPracticeDetail.afterRate) > Number(localPracticeDetail.frontRate) ? 'up_light' : 'down_light']">{{Number(localPracticeDetail.afterRate) > Number(localPracticeDetail.frontRate) ? '提升了'  : '下降了' }}{{localPracticeDetail.difference}}%</span>
+                    </span>
+                    。请继续保持练习,时常回顾错题。
                 </div>
             </div>
 
+            <!-- 试题列表 -->
             <ul class="question_detail_list">
                 <li v-for="(item,index) in questionList"  :key="item.questionId">
                     <!-- 题目区域 -->
@@ -40,43 +45,9 @@
                             <span v-if="item.markStatus" class="question_score">得分率:{{ item.rate }}%</span>
                         </div>
 
+                        <!-- 问题内容——题干 -->
                         <div class="question_content">
                             <div v-html="item.title"></div>
-                            <!-- 
-                            <p class="question_desc">教材文言知识小题,完成下面1-2小题。</p>
-                            <div class="sub_question_list">
-                                <div class="sub_question">
-                                    <p class="sub_question_title">(1) 下列各项中,不含通假字的一项是( )</p>
-                                    <div class="option_list">
-                                        <div>①“离骚”者,犹离忧也</div>
-                                        <div>②其称文小而其指极大</div>
-                                        <div>③屈平属草稿未定</div>
-                                        <div>④屈平既绌</div>
-                                        <div>⑤厚币委质事楚</div>
-                                        <div>⑥竭忠尽智以事其君</div>
-                                        <div>⑦信义安所见乎</div>
-                                        <div>⑧置币遗单于</div>
-                                        <div>⑨与旃毛并咽之</div>
-                                    </div>
-                                    <div class="choice_list">
-                                        <div>A. ②③⑦</div>
-                                        <div>B. ④⑥⑨</div>
-                                        <div>C. ②⑤⑧</div>
-                                        <div>D. ③⑥⑧</div>
-                                    </div>
-                                </div>
-                                <div class="sub_question">
-                                    <p class="sub_question_title">(2) 下列句子的句式特点不同于其他三项的一项是( )</p>
-                                    <div class="choice_list">
-                                        <div>A. 是时屈平既疏</div>
-                                        <div>B. 是以见放</div>
-                                        <div>C. 自疏濯淖污泥之中,蝉蜕于浊秽</div>
-                                        <div>D. 为天下笑</div>
-                                    </div>
-                                </div>
-                            </div>
-                             -->
-
                         </div>
                     </div>
 
@@ -110,7 +81,7 @@
                         :answerType="item.isObjective ? (item.isJudge ? 'img' : 'online') : 'img'"
                         :answerOptionNum="item.optionsNum"
                         :rightAnswer="item.answer"
-                        :answerImg="{name:item.studentAnswer,url:item.studentAnswer}"
+                        :answerImg="item.studentAnswer.split(',').map(img=>({name:img,url:img}))"
                     />
                 </li>
             </ul>
@@ -120,6 +91,8 @@
 </template>
 
 <script>
+import { mapState } from "vuex";
+
 import TopBackNav from '../../components/TopBackNav.vue';
 
 import aiIcon from '@/assets/knowledgeGraph/aiIcon.png'
@@ -140,14 +113,17 @@ export default ({
         AnswerAnalysis,
         studentAnswerDetail
     },
+    inject: ['openAiRobot'],//注入Ai机器人组件调用方法
     data(){
         return {
+            // 图标数据
             aiIcon:aiIcon,
             answerIcon:answerIcon,
             deteaiIcon:deteaiIcon,
             answerIconLight:answerIconLight,
             deteaiIconLight:deteaiIconLight,
-            questionList:[],
+            
+            questionList:[], // 试题列表
             localPracticeDetail:{}, //本地存储的数据  
         }
     },
@@ -162,6 +138,11 @@ export default ({
             }else{
                 row.operationType = type
             }
+            if(type == 'ai'){
+                console.log("打开AI解读");
+                let content = "科目:"+this.subjectName+",知识点:"+row.knowledgeList.map(kno=>{return '【'+kno.knowName+'】'}).join('');
+                this.openAiRobot(content);
+            }
         },
         GetExersiseDetail(){
             let params = {
@@ -181,7 +162,9 @@ export default ({
             }).catch()
         },
     },
-    computed:{},
+    computed: {
+        ...mapState("target", ["subjectName"]),
+    },
     mounted() {
         this.localPracticeDetail = JSON.parse(sessionStorage.getItem('practice_detail') || '{}')
         console.log('页面加载中')

+ 13 - 17
src/views/targetImprove/practice/practiceResults/studentAnswerDetail.vue

@@ -2,31 +2,28 @@
     <div class="stu_answer_detail">
         <div class="title">【作 答】</div>
         <div class="desc">
-            <!-- v-model="rightAnswerValue"  -->
             <el-radio-group 
                 v-if="answerType == 'online'"
-                @change="rightAnswerValue = defaultRightAnswerValue"
             >
               <el-radio 
                 v-for="radioItem in optionList" 
                     :key="radioItem" 
                     :label="radioItem"
                     :class="{ 
-                         'is-correct-radio is-checked':  rightAnswerValue  === radioItem, 
-                        'is-wrong-radio is-checked': studentAnswer.split('').includes(radioItem) && rightAnswerValue !== studentAnswer
+                         'is-correct-radio is-checked':  rightAnswer.split('').includes(radioItem), 
+                        'is-wrong-radio is-checked': studentAnswer.split('').includes(radioItem) && !(rightAnswer.split('').includes(radioItem))
                     }"
                 >{{ radioItem }}</el-radio>
             </el-radio-group>
 
-
             <ImageJumpPreview 
                 v-if="answerType == 'img'"
-                :fileMessage="answerImg" height="400px"
+                :fileMessage="answerImg[currentNavPage - 1]" height="400px"
                 :filePadding="{padding:`0 ${imgPreviewPadding}`}"
                 :navBarWidth="{width:`calc(100% - ${imgPreviewPadding} + 20px)`}"
                 :navBarLeft="{left: `calc(${imgPreviewPadding} / 2 - 10px)`}"
-                :navTotalPage="5"
-                v-model:currentNavPage="currentNavPage"
+                :navTotalPage="answerImg.length"
+                :currentNavPage.sync="currentNavPage"
             ></ImageJumpPreview>
         </div>
     </div>
@@ -43,29 +40,28 @@ export default ({
         ImageJumpPreview,
     },
     props:{
-        studentAnswer:{   //学生的答案
-            type:String,
-        },
+       
         answerType:{     //答题方式  //线上答题(勾选选项)和上传图片的方式   online \ img
             type:String
         },
 
-        // 勾选选项 答题 用到的参数
+        /** 【勾选选项】 答题用到的参数 */
         answerOptionNum:{   // 选项数量(只有 props.answerType 为 online 的时候才会用到)
             type:Number   
         },
-        rightAnswer:{
+        studentAnswer:{   //学生的答案
+            type:String,
+        },
+        rightAnswer:{  //正确答案
             type:String,
         },
-        // 拍照答题用到的参数
+        /** 【拍照/传图】 答题用到的参数 */
         answerImg:{
-            type:Object
+            type:Array,  //Object[]  name:'',url:''
         }
     },
     data(){
         return {
-            rightAnswerValue:'B',
-            defaultRightAnswerValue:'B',
             imgPreviewPadding:'70px',
             currentNavPage:1,
         }