dedsudiyu 14 hours ago
parent
commit
bc7655e22b

+ 56 - 1
src/api/safetyEducationExaminationNew/index.js

@@ -593,5 +593,60 @@ export function examUserCertificateList(data) {
     data: data
   })
 }
-
+//查询考试剩余时间
+export function examUserExamGetExamSurplusTime(data) {
+  return request({
+    url: '/exam/user/exam/getExamSurplusTime',
+    method: 'post',
+    data: data
+  })
+}
+//开始考试-生成id
+export function examUserExamStart(data) {
+  return request({
+    url: '/exam/user/exam/start',
+    method: 'post',
+    data: data
+  })
+}
+//保存单题答案
+export function examUserExamAnswerSave(data) {
+  return request({
+    url: '/exam/user/exam/answer/save',
+    method: 'post',
+    data: data
+  })
+}
+//交卷
+export function examUserExamSubmit(data) {
+  return request({
+    url: '/exam/user/exam/submit',
+    method: 'post',
+    data: data
+  })
+}
+//刷题提交
+export function examUserPracticeSubmit(data) {
+  return request({
+    url: '/exam/user/practice/submit',
+    method: 'post',
+    data: data
+  })
+}
+//刷题获取左侧数据
+export function examUserPracticePanel(query) {
+  return request({
+    url: '/exam/user/practice/panel',
+    method: 'get',
+    params: query
+  })
+}
+//刷题获取右侧数据
+export function examUserPracticeQuestionDetail(query) {
+  return request({
+    url: '/exam/user/practice/questionDetail',
+    method: 'get',
+    params: query
+  })
+}
 

+ 6 - 0
src/router/index.js

@@ -83,6 +83,12 @@ export const constantRoutes = [
     component: (resolve) => require(['@/views/safetyEducationExaminationNew/featurePage/startPracticing/index.vue'], resolve),
     hidden: true
   },
+  {
+    name:'startTraining',
+    path: '/startTraining',//开始训练
+    component: (resolve) => require(['@/views/safetyEducationExaminationNew/featurePage/startTraining/index.vue'], resolve),
+    hidden: true
+  },
 ]
 
 export default new Router({

+ 7 - 4
src/views/safetyEducationExaminationNew/components/examDetails.vue

@@ -75,7 +75,7 @@
             <span v-else class="status-wrong">❌ 未作答</span>
           </div>
           <div class="answer-detail">
-            <div class="answer-row"><span class="answer-label">回答选项:</span>{{ arrayToString(currentQuestion.answerTags) }}</div>
+            <div class="answer-row"><span class="answer-label">答案:</span>{{ arrayToString(currentQuestion.answerTags) }}</div>
             <div class="analysis-title">试题解析</div>
             <div class="analysis-content" v-html="currentQuestion.analysis"></div>
           </div>
@@ -178,10 +178,13 @@
       },
       //返回用户选择答案
       arrayToString(list) {
-        // 防御性编程:如果传入的不是数组,返回空字符串防止报错
         if (!Array.isArray(list)) return '';
-
-        return list.join(',');
+        const mappedList = list.map(item => {
+          if (item === 'Y') return '对';
+          if (item === 'N') return '错';
+          return item;
+        });
+        return mappedList.join(',');
       },
     }
   }

+ 19 - 1
src/views/safetyEducationExaminationNew/components/historyOfIncorrectQuestions.vue

@@ -8,7 +8,7 @@
     <div class="page-form-title-box">
       <el-form :model="queryParams" class="form-box" ref="queryForm"
                :inline="true" style="width:100%;">
-        <el-form-item label="" prop="knowledgePointId">
+        <el-form-item label="" prop="knowledgePointId" v-if="historyOfIncorrectQuestionsPropsData.type!=3">
           <el-cascader
             v-model="queryParams.knowledgePointId"
             :options="optionListA"
@@ -171,6 +171,18 @@
       tableButton(type,row){
         if(type == '1'){
           //开始训练
+          let obj = {};
+          if(this.historyOfIncorrectQuestionsPropsData.type == 1){
+            obj.id = this.historyOfIncorrectQuestionsPropsData.examId;
+          }else if(this.historyOfIncorrectQuestionsPropsData.type == 2){
+            obj.id = this.historyOfIncorrectQuestionsPropsData.attemptId;
+          }else if(this.historyOfIncorrectQuestionsPropsData.type == 3){
+            obj.id = this.historyOfIncorrectQuestionsPropsData.knowledgePointId;
+          }
+          this.$router.push({
+            name: 'startTraining',
+            params: obj
+          })
         }else if(type == 2){
           //查看答案
           this.$set(this, 'drawerTitle', '查看试题答案')
@@ -217,6 +229,12 @@
             this.$set(this,'dataList',response.data.records);
             this.$set(this,'total',response.data.total);
           });
+        }else if(this.historyOfIncorrectQuestionsPropsData.type == 3){
+          obj.attemptId = this.historyOfIncorrectQuestionsPropsData.knowledgePointId;
+          examElExamAttemptAnswerAttemptAnswer(obj).then(response => {
+            this.$set(this,'dataList',response.data.records);
+            this.$set(this,'total',response.data.total);
+          });
         }
       },
       examElKnowledgePointTreeList(){

+ 0 - 2
src/views/safetyEducationExaminationNew/courseManagement/courseManagement/addPage.vue

@@ -181,8 +181,6 @@
               obj.coursewareIds.push(studyData[i].minList[o].id)
             }
           }
-          console.log('self.newData',self.newData)
-          console.log('self.newData.id',self.newData.id)
           if(self.newData.id){
             self.examElCourseEdit(obj);
           }else{

+ 22 - 0
src/views/safetyEducationExaminationNew/courseManagement/courseManagement/studyCourses.vue

@@ -182,6 +182,28 @@
       //弹窗确定
       drawerConfirmButton(data){
         let self = this;
+        // --- 核心修改:计算当前 dataList 下所有 minList 的总数 ---
+        let currentTotalMin = 0;
+        self.dataList.forEach(item => {
+          if (item.minList && item.minList.length) {
+            currentTotalMin += item.minList.length;
+          }
+        });
+        // 计算本次操作即将新增的 minList 数量
+        let addMinCount = 0;
+        if (!data.knowledgePointId) {
+          // 大项添加时,新增数量取决于 data.data.minList
+          addMinCount = data.data.minList ? data.data.minList.length : 0;
+        } else {
+          // 子项添加时,新增数量取决于 data.list
+          addMinCount = data.list ? data.list.length : 0;
+        }
+
+        // 判断是否超过 100 个限制
+        if (currentTotalMin + addMinCount > 100) {
+          self.msgError(`最多只能添加 100 个子项!当前已有 ${currentTotalMin} 个,本次尝试添加 ${addMinCount} 个。`);
+          return; // 超过限制,直接终止后续操作
+        }
         if (!data.knowledgePointId){
           //大项添加
           let num = 0;

File diff suppressed because it is too large
+ 1062 - 4
src/views/safetyEducationExaminationNew/featurePage/mockExam/index.vue


File diff suppressed because it is too large
+ 983 - 5
src/views/safetyEducationExaminationNew/featurePage/startPracticing/index.vue


File diff suppressed because it is too large
+ 662 - 146
src/views/safetyEducationExaminationNew/featurePage/startTheExam/index.vue


File diff suppressed because it is too large
+ 1029 - 0
src/views/safetyEducationExaminationNew/featurePage/startTraining/index.vue


+ 36 - 35
src/views/safetyEducationExaminationNew/safetyTest/mockExam/index.vue

@@ -16,7 +16,7 @@
               <p :class="examStatus === ''?'check-table-button':''" @click="tableTypeButton('')">全部</p>
               <p :class="examStatus === 0?'check-table-button':''" @click="tableTypeButton(0)">未开始</p>
               <p :class="examStatus === 1?'check-table-button':''" @click="tableTypeButton(1)">进行中</p>
-              <p :class="examStatus === 2?'check-table-button':''" @click="tableTypeButton(2)">已完成</p>
+              <!--<p :class="examStatus === 2?'check-table-button':''" @click="tableTypeButton(2)">已完成</p>-->
             </div>
           </div>
           <el-form-item label="" prop="searchValue">
@@ -57,8 +57,8 @@
               <p class="text-p">{{parseTime(item.startTime,"{y}-{m}-{d} {h}:{i}")}} 至 {{parseTime(item.endTime,"{y}-{m}-{d} {h}:{i}")}}</p>
               <p class="time-p">时长:{{item.answerDuration}}分钟 丨 总分:{{item.totalScore}}分 丨 及格分:{{item.passScore}}分 丨 可考试次数:{{item.attemptLimit==0?'无限':item.attemptLimit}}次</p>
             </div>
-            <p class="position-p-1" @click="tableButton(1)">{{item.conditionType!=4?'完成模拟考试练习后解锁':'开始模拟考试'}}</p>
-            <p class="position-p-2" v-if="item.data10" @click="tableButton(2)">历史错题</p>
+            <p class="position-p-1" @click="tableButton(1,item)">{{item.conditionType!=4?'完成模拟考试练习后解锁':'开始模拟考试'}}</p>
+            <!--<p class="position-p-2" @click="tableButton(2)">历史错题</p>-->
           </div>
         </div>
         <pagination :page-sizes="[20, 30, 40, 50]"
@@ -80,7 +80,7 @@
   //import { getInfo } from "@/api/basicsModules/index";
   //import addPage from "./addPage.vue";
   import historyOfIncorrectQuestions from "@/views/safetyEducationExaminationNew/components/historyOfIncorrectQuestions.vue";
-  import { examUserExamMockList,examUserExamTypeSelectExamType, } from "@/api/safetyEducationExaminationNew/index";
+  import { examUserExamMockList,examUserExamTypeSelectExamType,examUserExamStart, } from "@/api/safetyEducationExaminationNew/index";
   export default {
     name: 'index',
     components: {
@@ -104,29 +104,7 @@
         //时间数据
         dateRange: [],
         //列表数据
-        dataList: [
-          { examTypeName:'新生入学考试', examName:'模拟考试名称考试名称考试',
-            startTime:'2026-09-01', endTime:'2026-09-30', data5:true,
-            answerDuration:'30',totalScore:'100',passScore:'60',attemptLimit:'10',data10:true,},
-          { examTypeName:'新生入学考试', examName:'模拟考试名称考试名称考试',
-            startTime:'2026-09-01', endTime:'2026-09-30', data5:false,
-            answerDuration:'30',totalScore:'100',passScore:'60',attemptLimit:'10',data10:true,},
-          { examTypeName:'新生入学考试', examName:'模拟考试名称考试名称考试',
-            startTime:'2026-09-01', endTime:'2026-09-30', data5:true,
-            answerDuration:'30',totalScore:'100',passScore:'60',attemptLimit:'10',data10:false,},
-          { examTypeName:'新生入学考试', examName:'模拟考试名称考试名称考试',
-            startTime:'2026-09-01', endTime:'2026-09-30', data5:true,
-            answerDuration:'30',totalScore:'100',passScore:'60',attemptLimit:'10',data10:true,},
-          { examTypeName:'新生入学考试', examName:'模拟考试名称考试名称考试',
-            startTime:'2026-09-01', endTime:'2026-09-30', data5:true,
-            answerDuration:'30',totalScore:'100',passScore:'60',attemptLimit:'10',data10:false,},
-          { examTypeName:'新生入学考试', examName:'模拟考试名称考试名称考试',
-            startTime:'2026-09-01', endTime:'2026-09-30', data5:false,
-            answerDuration:'30',totalScore:'100',passScore:'60',attemptLimit:'10',data10:true,},
-          { examTypeName:'新生入学考试', examName:'模拟考试名称考试名称考试',
-            startTime:'2026-09-01', endTime:'2026-09-30', data5:true,
-            answerDuration:'30',totalScore:'100',passScore:'60',attemptLimit:'10',data10:false,},
-        ],
+        dataList: [],
         //数据数量
         total: 0,
         //组件传参
@@ -186,15 +164,38 @@
         })
       },
       //操作按钮
-      tableButton(type, row) {
+      tableButton(type, item) {
         let self = this
         if (type == 1) {
           //模拟练习
-
-        } else if (type == 2) {
-          //历史错题
-          this.$set(this, 'pageType', 2)
-          this.$set(this, 'propsData', {})
+          if(item.conditionType!=4){
+            return
+          }
+          //模拟考试
+          if(item.attemptId){
+            this.$router.push({
+              name: 'startTheExam',
+              params: {
+                attemptId: item.attemptId,
+                type: '1'
+              }
+            })
+          }else{
+            examUserExamStart({examId:item.examId,examScene:2,}).then(response => {
+              if(response.data.attemptId){
+                this.$router.push({
+                  name: 'mockExam',
+                  params: {
+                    examId: item.examId,
+                    attemptId: response.data.attemptId,
+                    type: '1'
+                  }
+                })
+              }else{
+                this.msgError(response.message)
+              }
+            })
+          }
         } else if (type == 6) {
           //返回并刷新
           this.$set(this, 'pageType', 1)
@@ -285,8 +286,8 @@
             border-left:none;
           }
           p:nth-child(3){
-            border-left:none;
-            border-right:none;
+            border-top-right-radius:4px;
+            border-bottom-right-radius:4px;
           }
           p:nth-child(4){
             border-top-right-radius:4px;

+ 12 - 34
src/views/safetyEducationExaminationNew/safetyTest/myGrades/index.vue

@@ -2,7 +2,7 @@
 <template>
   <div class="app-container myGrades">
     <div class="page-container myGradesPage" v-if="pageType === 1">
-      <p class="pageTitle">模拟考试</p>
+      <p class="pageTitle">我的成绩</p>
       <div class="top-max-button-box scrollbar-x-box">
         <p :class="examTypeId == item.examTypeId?'check-button':''"
            @click="topCheckButton(item.examTypeId)"
@@ -18,6 +18,12 @@
               <p :class="resultStatus === 3?'check-table-button':''" @click="tableTypeButton(3)">未通过</p>
             </div>
           </div>
+          <el-form-item label="" prop="examScene">
+            <el-select v-model="queryParams.examScene" placeholder="考试类型" style="width: 180px">
+              <el-option label="在线考试" :value="1"/>
+              <el-option label="模拟考试" :value="2"/>
+            </el-select>
+          </el-form-item>
           <el-form-item label="" prop="state">
             <el-date-picker
               :clearable="false"
@@ -48,7 +54,7 @@
               <p>获得积分:{{item.myScore}}</p>
               <p>考试结果:<span :class="item.resultStatus==2?'colorA':(item.resultStatus==3?'colorB':'')">{{item.resultStatus==1?'考试中':(item.resultStatus==2?'通过':(item.resultStatus==3?'未通过':(item.resultStatus==4?'缺考':'')))}}</span></p>
             </div>
-            <p class="position-p-1" v-if="item.resultStatus==2||item.resultStatus==3" @click="tableButton(1,item)">考试记录</p>
+            <p class="position-p-1" v-if="item.attemptCount>0" @click="tableButton(1,item)">考试记录</p>
             <p class="position-p-2" @click="tableButton(2,item)">历史错题</p>
           </div>
         </div>
@@ -86,48 +92,19 @@
         //页面状态
         pageType: 1,
         //横向列表
-        topDataList:[
-          {label:'全部',id:'1',num:'10'},{label:'全部',id:'2',num:'10'},{label:'全部',id:'3',num:'10'},
-          {label:'全部',id:'4',num:'10'},{label:'全部',id:'5',num:'10'},{label:'全部',id:'6',num:'10'},
-          {label:'全部',id:'1',num:'10'},{label:'全部',id:'2',num:'10'},{label:'全部',id:'3',num:'10'},
-          {label:'全部',id:'4',num:'10'},{label:'全部',id:'5',num:'10'},{label:'全部',id:'6',num:'10'},
-        ],
+        topDataList:[],
         //查询条件
         examTypeId:'',
         resultStatus:'',
         queryParams: {
           page: 1,
           pageSize: 20,
+          examScene:null,
         },
         //时间数据
         dateRange: [],
         //列表数据
-        dataList: [
-          { examTypeName:'分级分类考试', examName:'考试名称考试名称考试名称',
-            data3:'2026-09-01  9:30 ~ 2026-09-01 10:00',
-            data4:'30',data5:'100',data6:'60',data7:'6',data8:'10',
-            data9:'20分16秒',data10:'90',data11:'6',data12:true, },
-          { examTypeName:'分级分类考试', examName:'考试名称考试名称考试名称',
-            data3:'2026-09-01  9:30 ~ 2026-09-01 10:00',
-            data4:'30',data5:'100',data6:'60',data7:'6',data8:'10',
-            data9:'20分16秒',data10:'90',data11:'6',data12:false, },
-          { examTypeName:'分级分类考试', examName:'考试名称考试名称考试名称',
-            data3:'2026-09-01  9:30 ~ 2026-09-01 10:00',
-            data4:'30',data5:'100',data6:'60',data7:'6',data8:'10',
-            data9:'20分16秒',data10:'90',data11:'6',data12:true, },
-          { examTypeName:'分级分类考试', examName:'考试名称考试名称考试名称',
-            data3:'2026-09-01  9:30 ~ 2026-09-01 10:00',
-            data4:'30',data5:'100',data6:'60',data7:'6',data8:'10',
-            data9:'20分16秒',data10:'90',data11:'6',data12:false, },
-          { examTypeName:'分级分类考试', examName:'考试名称考试名称考试名称',
-            data3:'2026-09-01  9:30 ~ 2026-09-01 10:00',
-            data4:'30',data5:'100',data6:'60',data7:'6',data8:'10',
-            data9:'20分16秒',data10:'90',data11:'6',data12:true, },
-          { examTypeName:'分级分类考试', examName:'考试名称考试名称考试名称',
-            data3:'2026-09-01  9:30 ~ 2026-09-01 10:00',
-            data4:'30',data5:'100',data6:'60',data7:'6',data8:'10',
-            data9:'20分16秒',data10:'90',data11:'6',data12:false, },
-        ],
+        dataList: [],
         //数据数量
         total: 0,
         //组件传参
@@ -166,6 +143,7 @@
         this.$set(this, 'queryParams', {
           page: 1,
           pageSize: 20,
+          examScene:null,
         })
         this.getList()
       },

+ 64 - 23
src/views/safetyEducationExaminationNew/safetyTest/onlineExam/index.vue

@@ -13,16 +13,16 @@
                  :inline="true" style="width:100%;">
           <div class="table-top-button-box">
             <div>
-              <p :class="practiceStatus === ''?'check-table-button':''" @click="tableTypeButton('')">全部</p>
-              <p :class="practiceStatus === 0?'check-table-button':''" @click="tableTypeButton(0)">未开始</p>
-              <p :class="practiceStatus === 1?'check-table-button':''" @click="tableTypeButton(1)">进行中</p>
-              <p :class="practiceStatus === 2?'check-table-button':''" @click="tableTypeButton(2)">已完成</p>
+              <p :class="examStatus === ''?'check-table-button':''" @click="tableTypeButton('')">全部</p>
+              <p :class="examStatus === 1?'check-table-button':''" @click="tableTypeButton(1)">未开始</p>
+              <p :class="examStatus === 2?'check-table-button':''" @click="tableTypeButton(2)">进行中</p>
+              <!--<p :class="examStatus === 3?'check-table-button':''" @click="tableTypeButton(3)">已完成</p>-->
             </div>
           </div>
-          <el-form-item label="" prop="queryParamsData1">
+          <el-form-item label="" prop="searchValue">
             <el-input
               maxLength="30"
-              v-model="queryParams.queryParamsData1"
+              v-model="queryParams.searchValue"
               placeholder="搜索名称"
               style="width: 200px"
             />
@@ -81,7 +81,7 @@
   //import { getInfo } from "@/api/basicsModules/index";
   //import addPage from "./addPage.vue";
   import historyOfIncorrectQuestions from "@/views/safetyEducationExaminationNew/components/historyOfIncorrectQuestions.vue";
-  import { examUserExamList,examUserExamTypeSelectExamType, } from "@/api/safetyEducationExaminationNew/index";
+  import { examUserExamList,examUserExamTypeSelectExamType,examUserExamStart, } from "@/api/safetyEducationExaminationNew/index";
   export default {
     name: 'index',
     components: {
@@ -96,11 +96,11 @@
         topDataList:[],
         //查询条件
         examTypeId:'',
-        practiceStatus:'',
+        examStatus:'',
         queryParams: {
           page: 1,
           pageSize: 20,
-          queryParamsData1: '',
+          searchValue: '',
         },
         //时间数据
         dateRange: [],
@@ -127,8 +127,8 @@
       },
       //切换按钮
       tableTypeButton(val){
-        if(this.practiceStatus !== val){
-          this.$set(this,'practiceStatus',val);
+        if(this.examStatus !== val){
+          this.$set(this,'examStatus',val);
           this.handleQuery();
         }
       },
@@ -143,7 +143,7 @@
         this.$set(this, 'queryParams', {
           page: 1,
           pageSize: 20,
-          queryParamsData1: '',
+          searchValue: '',
         })
         this.getList()
       },
@@ -151,7 +151,7 @@
       getList() {
         let obj = JSON.parse(JSON.stringify(this.queryParams))
         obj.examTypeId = this.examTypeId;
-        obj.practiceStatus = this.practiceStatus;
+        obj.examStatus = this.examStatus;
         if (this.dateRange[0]) {
           obj.startTime = this.dateRange[0] + 'T00:00:00'
           obj.endTime = this.dateRange[1] + 'T23:59:59'
@@ -168,21 +168,62 @@
       tableButton(type, item) {
         let self = this
         if (type == 1) {
-          this.$router.push({
-            name: 'startTheExam',
-            params: {
-              attemptId: '2081995162915893249',
-              type: '1'
-            }
-          })
           if(item.conditionType == 1){
 
           }else if(item.conditionType == 2){
 
           }else if(item.conditionType == 3){
-
+            //模拟考试
+            if(item.attemptId){
+              this.$router.push({
+                name: 'startTheExam',
+                params: {
+                  attemptId: item.attemptId,
+                  type: '1'
+                }
+              })
+            }else{
+              examUserExamStart({examId:item.examId,examScene:2,}).then(response => {
+                if(response.data.attemptId){
+                  this.$router.push({
+                    name: 'mockExam',
+                    params: {
+                      examId: item.examId,
+                      attemptId: response.data.attemptId,
+                      type: '1'
+                    }
+                  })
+                }else{
+                  this.msgError(response.message)
+                }
+              })
+            }
           }else if(item.conditionType == 4){
             //开始考试
+            if(item.attemptId){
+              this.$router.push({
+                name: 'startTheExam',
+                params: {
+                  attemptId: item.attemptId,
+                  type: '1'
+                }
+              })
+            }else{
+              examUserExamStart({examId:item.examId,examScene:1,}).then(response => {
+                if(response.data.attemptId){
+                  this.$router.push({
+                    name: 'startTheExam',
+                    params: {
+                      examId: item.examId,
+                      attemptId: response.data.attemptId,
+                      type: '1'
+                    }
+                  })
+                }else{
+                  this.msgError(response.message)
+                }
+              })
+            }
           }
 
         } else if (type == 6) {
@@ -275,8 +316,8 @@
             border-left:none;
           }
           p:nth-child(3){
-            border-left:none;
-            border-right:none;
+            border-top-right-radius:4px;
+            border-bottom-right-radius:4px;
           }
           p:nth-child(4){
             border-top-right-radius:4px;

+ 12 - 3
src/views/safetyEducationExaminationNew/safetyTest/practiceQuestions/index.vue

@@ -54,7 +54,7 @@
           </div>
           <div class="page-content-box">
             <div class="for-max-big-box scrollbar-box">
-              <div class="for-big-box" v-for="(item,index) in dataList" :key="index">
+              <div class="for-big-box" v-for="(item,index) in dataList" :key="index" @click="tableButton(1,item)">
                 <p class="title-p">{{item.knowledgePointName}}</p>
                 <div class="text-box">
                   <div class="text-min-box">
@@ -64,7 +64,7 @@
                   <p class="text-p">练习进度:{{item.answeredCount}} / {{item.totalCount}}</p>
                   <p class="text-p">正确数:{{item.correctCount}} 丨 错题数:{{item.wrongCount}} 丨 正确率:{{item.correctRate}}%</p>
                 </div>
-                <p class="position-p" v-if="item.hasWrongQuestion" @click="tableButton(1,item)">历史错题</p>
+                <p class="position-p" v-if="item.hasWrongQuestion" @click="tableButton(2,item)">历史错题</p>
                 <el-progress
                   class="num-p" type="circle"
                   :stroke-width="4"
@@ -173,9 +173,18 @@
         })
       },
       //操作按钮
-      tableButton(type, row) {
+      tableButton(type, item) {
         let self = this
         if (type == 1) {
+          //刷题练习
+          this.$router.push({
+            name: 'startPracticing',
+            params: {
+              knowledgePointId: item.knowledgePointId,
+              type: '1'
+            }
+          })
+        } else if (type == 2) {
           //历史错题
           this.$set(this, 'pageType', 2)
           this.$set(this, 'propsData', {})