Quellcode durchsuchen

apply new format rules

Michael Wang vor 6 Jahren
Ursprung
Commit
465413ee52
38 geänderte Dateien mit 583 neuen und 573 gelöschten Zeilen
  1. 0 1
      src/App.vue
  2. 4 3
      src/components/FaceRecognition/FaceRecognition.vue
  3. 35 58
      src/components/MainLayout/MainLayout.vue
  4. 34 44
      src/features/Login/Login.vue
  5. 4 2
      src/features/OfflineExam/OfflineExamHome.vue
  6. 30 24
      src/features/OfflineExam/OfflineExamList.vue
  7. 14 6
      src/features/OfflineExam/OfflineExamUpload.vue
  8. 17 8
      src/features/OnlineExam/Examing/ArrowNavView.vue
  9. 13 13
      src/features/OnlineExam/Examing/BooleanQuestionView.vue
  10. 40 25
      src/features/OnlineExam/Examing/ExamPaper.vue
  11. 31 42
      src/features/OnlineExam/Examing/ExamingEnd.vue
  12. 12 30
      src/features/OnlineExam/Examing/ExamingHome.vue
  13. 7 12
      src/features/OnlineExam/Examing/FaceId.vue
  14. 11 16
      src/features/OnlineExam/Examing/FillBlankQuestionView.vue
  15. 12 14
      src/features/OnlineExam/Examing/MultipleQuestionView.vue
  16. 1 1
      src/features/OnlineExam/Examing/OverallProgress.vue
  17. 11 15
      src/features/OnlineExam/Examing/QuestionBody.vue
  18. 12 4
      src/features/OnlineExam/Examing/QuestionFilters.vue
  19. 4 1
      src/features/OnlineExam/Examing/QuestionIndex.vue
  20. 12 3
      src/features/OnlineExam/Examing/QuestionNavView.vue
  21. 40 17
      src/features/OnlineExam/Examing/QuestionView.vue
  22. 1 1
      src/features/OnlineExam/Examing/RemainTime.vue
  23. 17 15
      src/features/OnlineExam/Examing/SingleQuestionView.vue
  24. 35 47
      src/features/OnlineExam/Examing/TextQuestionView.vue
  25. 15 14
      src/features/OnlineExam/OnlineExamFaceCheckModal.vue
  26. 4 2
      src/features/OnlineExam/OnlineExamHome.vue
  27. 20 15
      src/features/OnlineExam/OnlineExamList.vue
  28. 18 26
      src/features/OnlineExam/OnlineExamOverview.vue
  29. 1 5
      src/features/OnlineExam/OnlineExamResultList.vue
  30. 17 9
      src/features/OnlineExam/PhoneVerifyForDD.vue
  31. 7 9
      src/features/OnlinePractice/OnlinePracticeHome.vue
  32. 16 10
      src/features/OnlinePractice/OnlinePracticeList.vue
  33. 34 21
      src/features/OnlinePractice/OnlinePracticeRecordDetail.vue
  34. 26 17
      src/features/OnlinePractice/OnlinePracticeRecordList.vue
  35. 11 25
      src/features/Password/Password.vue
  36. 6 6
      src/views/NotFoundComponent.vue
  37. 3 3
      tests/vue/child.vue
  38. 8 9
      tests/vue/event.vue

+ 0 - 1
src/App.vue

@@ -39,7 +39,6 @@ export default {
 };
 </script>
 
-
 <style>
 #app {
   font-family: "Helvetica Neue", Helvetica, "PingFang SC", "Hiragino Sans GB",

+ 4 - 3
src/components/FaceRecognition/FaceRecognition.vue

@@ -6,8 +6,7 @@
       :width="width"
       :height="height"
       autoplay
-    >
-    </video>
+    ></video>
     <div
       v-if="showRecognizeButton"
       style="position: absolute; width: 400px; text-align: center; margin-top: -50px; color: #232323;"
@@ -16,7 +15,9 @@
         :class="['verify-button', disableSnap && 'disable-verify-button']"
         @click="snap"
         :disabled="disableSnap"
-      >{{msg}}</button>
+      >
+        {{ msg }}
+      </button>
     </div>
   </div>
 </template>

+ 35 - 58
src/components/MainLayout/MainLayout.vue

@@ -3,31 +3,18 @@
     <header class="header qm-primary-text">
       <!-- <a style="float: left; padding-left: 20px" @click="goBack">
         <Icon type="ios-arrow-back" />返回</a> -->
-      <Poptip
-        v-if="ifShowQr"
-        trigger="hover"
-        width="240"
-      >
-        <span class="name-arrow">手机端登录(Android)
-        </span>
+      <Poptip v-if="ifShowQr" trigger="hover" width="240">
+        <span class="name-arrow">手机端登录(Android) </span>
         <div slot="content">
           <div class="qm-primary-text">
-            <qrcode
-              :value="qrValue"
-              :options="{ width: 200 }"
-            ></qrcode>
+            <qrcode :value="qrValue" :options="{ width: 200 }"></qrcode>
           </div>
         </div>
       </Poptip>
-      <span
-        v-if="ifShowQr"
-        style="margin: auto 20px"
-      >|</span>
-      <Poptip
-        trigger="hover"
-        width="300"
-      >
-        <span class="name-arrow">{{user.displayName}} &nbsp;
+      <span v-if="ifShowQr" style="margin: auto 20px">|</span>
+      <Poptip trigger="hover" width="300">
+        <span class="name-arrow"
+          >{{ user.displayName }} &nbsp;
           <i
             class="ivu-icon ivu-icon-md-arrow-dropdown"
             style="vertical-align: middle;"
@@ -37,30 +24,28 @@
           <div class="info qm-primary-text">
             <div class="hr info-row">
               <div>底照</div>
-              <div><img
-                  class="user-avatar"
-                  :src="user.photoPath"
-                  alt="无底照"
-                /></div>
+              <div>
+                <img class="user-avatar" :src="user.photoPath" alt="无底照" />
+              </div>
             </div>
             <div class="hr info-row">
               <div>学号</div>
-              <div>{{user.studentCode}}</div>
+              <div>{{ user.studentCode }}</div>
             </div>
             <div class="hr info-row">
               <div>身份证号</div>
-              <div>{{user.identityNumber}}</div>
+              <div>{{ user.identityNumber }}</div>
             </div>
             <div class="hr info-row">
               <div>学习中心</div>
-              <div>{{user.orgName}}</div>
+              <div>{{ user.orgName }}</div>
             </div>
-            <div style="grid-column: span 2; place-self: center; width: 100%; padding-top: 10px">
-              <i-button
-                class="qm-primary-button"
-                long
-                @click="goChangePwd"
-              >修改密码</i-button>
+            <div
+              style="grid-column: span 2; place-self: center; width: 100%; padding-top: 10px"
+            >
+              <i-button class="qm-primary-button" long @click="goChangePwd"
+                >修改密码</i-button
+              >
             </div>
           </div>
         </div>
@@ -70,40 +55,32 @@
         @click="logout"
         class="qm-primary-text"
         style="display: inline-block; margin-right: 20px; text-align: center;"
-      >退出登录</a>
+        >退出登录</a
+      >
     </header>
-    <main class="content">
-      <slot></slot>
-    </main>
+    <main class="content"><slot></slot></main>
     <nav class="nav">
-      <img
-        src="./qm-logo.png"
-        class="qm-logo"
-      />
+      <img src="./qm-logo.png" class="qm-logo" />
       <ul>
         <li>
-          <router-link
-            class="link"
-            to="/online-exam"
-          >在线考试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</router-link>
+          <router-link class="link" to="/online-exam"
+            >在线考试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</router-link
+          >
         </li>
         <li>
-          <router-link
-            class="link"
-            to="/online-practice"
-          >在线练习&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</router-link>
+          <router-link class="link" to="/online-practice"
+            >在线练习&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</router-link
+          >
         </li>
         <li>
-          <router-link
-            class="link"
-            to="/offline-exam"
-          >离线考试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</router-link>
+          <router-link class="link" to="/offline-exam"
+            >离线考试&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</router-link
+          >
         </li>
         <li>
-          <router-link
-            class="link"
-            to="/password"
-          >修改密码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</router-link>
+          <router-link class="link" to="/password"
+            >修改密码&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</router-link
+          >
         </li>
       </ul>
     </nav>

+ 34 - 44
src/features/Login/Login.vue

@@ -1,53 +1,55 @@
 <template>
   <div class="home">
-
     <header class="header">
-      <div class="school-logo"><img
-          class="logo-size"
-          :src="this.logoPath"
-          alt="school logo"
-        />
+      <div class="school-logo">
+        <img class="logo-size" :src="this.logoPath" alt="school logo" />
       </div>
       <a
         class="close"
         style="border-bottom-left-radius: 6px;"
         @click="closeApp"
-      >关闭</a>
+      >
+        关闭
+      </a>
     </header>
 
     <div class="center">
-
       <div class="content">
         <div style="display:flex;">
           <a
             v-if="!LOGIN_ID_DOMAINS.includes(this.$route.params.domain)"
-            :class="['qm-big-text', 'login-type', loginType === 'STUDENT_CODE' && 'active-type']"
-            @click="loginType='STUDENT_CODE'"
+            :class="[
+              'qm-big-text',
+              'login-type',
+              loginType === 'STUDENT_CODE' && 'active-type'
+            ]"
+            @click="loginType = 'STUDENT_CODE'"
             style="border-top-left-radius: 6px"
-          >学号登录</a>
+          >
+            学号登录
+          </a>
           <a
-            :class="['qm-big-text', 'login-type', loginType !== 'STUDENT_CODE' && 'active-type']"
-            @click="loginType='STUDENT_IDENTITY_NUMBER'"
+            :class="[
+              'qm-big-text',
+              'login-type',
+              loginType !== 'STUDENT_CODE' && 'active-type'
+            ]"
+            @click="loginType = 'STUDENT_IDENTITY_NUMBER'"
             style="border-top-right-radius: 6px"
-          >身份证号登录</a>
+          >
+            身份证号登录
+          </a>
         </div>
 
-        <div
-          class="qm-title-text"
-          style="margin: 40px 0 20px 0"
-        >
-          {{productName}}
+        <div class="qm-title-text" style="margin: 40px 0 20px 0">
+          {{ productName }}
         </div>
 
         <div style="margin: 0 40px 40px 40px">
-          <i-form
-            ref="loginForm"
-            :model="loginForm"
-            :rules="loginFormRule"
-          >
+          <i-form ref="loginForm" :model="loginForm" :rules="loginFormRule">
             <i-form-item
               prop="accountValue"
-              style='margin-bottom:35px;height:42px'
+              style="margin-bottom:35px;height:42px"
             >
               <i-input
                 type="text"
@@ -55,16 +57,10 @@
                 v-model="loginForm.accountValue"
                 :placeholder="usernameInputPlaceholder"
               >
-                <i-icon
-                  type="ios-person"
-                  slot="prepend"
-                ></i-icon>
+                <i-icon type="ios-person" slot="prepend"></i-icon>
               </i-input>
             </i-form-item>
-            <i-form-item
-              prop="password"
-              style='margin-bottom:35px;height:42px'
-            >
+            <i-form-item prop="password" style="margin-bottom:35px;height:42px">
               <i-input
                 type="password"
                 size="large"
@@ -72,10 +68,7 @@
                 :placeholder="passwordInputPlaceholder"
                 @on-enter="login('loginForm')"
               >
-                <i-icon
-                  type="ios-lock"
-                  slot="prepend"
-                ></i-icon>
+                <i-icon type="ios-lock" slot="prepend"></i-icon>
               </i-input>
             </i-form-item>
             <i-form-item style="position: relative">
@@ -83,10 +76,7 @@
                 v-if="errorInfo !== ''"
                 style="position: absolute; top: -37px; width: 100%"
               >
-                <i-alert
-                  type="error"
-                  show-icon
-                >{{errorInfo}}</i-alert>
+                <i-alert type="error" show-icon>{{ errorInfo }}</i-alert>
               </div>
               <i-button
                 size="large"
@@ -94,7 +84,9 @@
                 long
                 :disabled="disableLoginBtn"
                 @click="login('loginForm')"
-              >登录</i-button>
+              >
+                登录
+              </i-button>
             </i-form-item>
           </i-form>
         </div>
@@ -102,7 +94,6 @@
     </div>
 
     <footer class="footer"></footer>
-
   </div>
 </template>
 
@@ -449,7 +440,6 @@ export default {
 }
 </style>
 
-
 <style>
 .ivu-message-notice-content-text {
   font-size: 32px;

+ 4 - 2
src/features/OfflineExam/OfflineExamHome.vue

@@ -1,7 +1,9 @@
 <template>
   <main-layout>
-    <Breadcrumb style="text-align: left; padding-left: 20px; height: 40px; 
-                       line-height: 40px; background-color: #fafafa;">
+    <Breadcrumb
+      style="text-align: left; padding-left: 20px; height: 40px; 
+                       line-height: 40px; background-color: #fafafa;"
+    >
       当前所在位置:
       <BreadcrumbItem>离线考试</BreadcrumbItem>
     </Breadcrumb>

+ 30 - 24
src/features/OfflineExam/OfflineExamList.vue

@@ -1,7 +1,6 @@
 <template>
   <div class="list">
     <table>
-
       <tbody class="list-row">
         <tr class="list-header qm-primary-strong-text">
           <td>课程</td>
@@ -11,13 +10,14 @@
           <td style="max-width: 200px">操作</td>
         </tr>
 
-        <tr
-          v-for="(course) in courses"
-          :key="course.examId"
-        >
+        <tr v-for="course in courses" :key="course.examId">
           <td>{{ course.courseName }}</td>
           <td>{{ course.specialtyName }}</td>
-          <td>{{ course.startTime }} <br> ~ <br> {{ course.endTime }}</td>
+          <td>
+            {{ course.startTime }} <br />
+            ~ <br />
+            {{ course.endTime }}
+          </td>
           <td>
             <div v-if="course.offlineFileUrl">
               <a
@@ -28,31 +28,31 @@
                 <i-icon type="ios-cloud-download"></i-icon>下载作答
               </a>
             </div>
-            <div v-else>
-              未上传
-            </div>
+            <div v-else>未上传</div>
           </td>
           <td style="min-width: 180px">
             <template v-if="!course.isvalid">
-              <div
-                v-if="course.paperId"
-                style="display: grid; grid-gap: 10px"
-              >
+              <div v-if="course.paperId" style="display: grid; grid-gap: 10px">
                 <i-button
                   class="qm-primary-button"
                   @click="previewPaper(course)"
-                >查看试卷</i-button>
+                  >查看试卷</i-button
+                >
                 <a
                   class="qm-primary-button"
                   v-show="!disableDownloadPaperBtn"
                   @click="() => tempDisableBtn(course)"
                   href="#"
                   download
-                >下载试卷</a>
+                >
+                  下载试卷
+                </a>
                 <i-button
                   v-if="disableDownloadPaperBtn"
                   class="qm-primary-button"
-                >下载中</i-button>
+                >
+                  下载中
+                </i-button>
                 <!-- <i-button class="qm-primary-button">
                   <a
                     class="qm-primary-button"
@@ -66,25 +66,31 @@
                 ></ecs-offline-exam-upload>
               </div>
 
-              <div
-                v-else
-                style="display: grid; grid-gap: 10px"
-              >
-                <div v-if="new Date(course.startTime) - Date.now() > timeDifference">
+              <div v-else style="display: grid; grid-gap: 10px">
+                <div
+                  v-if="
+                    new Date(course.startTime) - Date.now() > timeDifference
+                  "
+                >
                   未开始
                 </div>
-                <div v-else-if="new Date(course.endTime) - Date.now() < timeDifference">
+                <div
+                  v-else-if="
+                    new Date(course.endTime) - Date.now() < timeDifference
+                  "
+                >
                   已结束
                 </div>
                 <div v-else>
                   <i-button
                     class="qm-primary-button"
                     @click="enterExam(course)"
-                  >抽取试卷</i-button>
+                  >
+                    抽取试卷
+                  </i-button>
                 </div>
               </div>
             </template>
-
           </td>
         </tr>
       </tbody>

+ 14 - 6
src/features/OfflineExam/OfflineExamUpload.vue

@@ -3,10 +3,13 @@
     <Upload
       ref="uploadComp"
       :headers="headers"
-      :data="{fileType: fileType}"
+      :data="{ fileType: fileType }"
       :before-upload="handleBeforeUpload"
-      :action="'/api/ecs_oe_student/offlineExam/submitPaper?examRecordDataId='+course.examRecordDataId"
-      :max-size="1024*30"
+      :action="
+        '/api/ecs_oe_student/offlineExam/submitPaper?examRecordDataId=' +
+          course.examRecordDataId
+      "
+      :max-size="1024 * 30"
       :format="uploadFileFormat"
       :accept="uploadFileAccept"
       :on-format-error="handleFormatError"
@@ -19,10 +22,15 @@
         icon="ios-cloud-upload-outline"
         class="qm-primary-button"
         style="width: 100%;"
-      >上传作答</Button>
+      >
+        上传作答
+      </Button>
     </Upload>
-    <div v-if="file !== null && loadingStatus">待上传文件: {{ file.name }}
-      <Button :loading="loadingStatus">{{ loadingStatus ? '上传中...' : '上传' }}</Button>
+    <div v-if="file !== null && loadingStatus">
+      待上传文件: {{ file.name }}
+      <Button :loading="loadingStatus">{{
+        loadingStatus ? "上传中..." : "上传"
+      }}</Button>
     </div>
   </div>
 </template>

+ 17 - 8
src/features/OnlineExam/Examing/ArrowNavView.vue

@@ -4,30 +4,39 @@
       <template v-if="previousQuestionOrder">
         <router-link
           class="qm-primary-button"
-          :to="{ path: `/online-exam/exam/${$route.params.examId}/examRecordData/${$route.params.examRecordDataId}/order/${previousQuestionOrder}`}"
-        >上一题</router-link>
+          :to="{
+            path: `/online-exam/exam/${$route.params.examId}/examRecordData/${
+              $route.params.examRecordDataId
+            }/order/${previousQuestionOrder}`
+          }"
+        >
+          上一题
+        </router-link>
       </template>
 
       <template v-else>
         <div>上一题</div>
       </template>
     </div>
-    <div class="tips">
-      A、B、C、D来勾选选项。Y、N来勾选判断题。
-    </div>
+    <div class="tips">A、B、C、D来勾选选项。Y、N来勾选判断题。</div>
     <div class="next">
       <template v-if="nextQuestionOrder">
         <router-link
           class="qm-primary-button"
-          :to="{ path: `/online-exam/exam/${$route.params.examId}/examRecordData/${$route.params.examRecordDataId}/order/${nextQuestionOrder}`}"
-        >下一题</router-link>
+          :to="{
+            path: `/online-exam/exam/${$route.params.examId}/examRecordData/${
+              $route.params.examRecordDataId
+            }/order/${nextQuestionOrder}`
+          }"
+        >
+          下一题
+        </router-link>
       </template>
 
       <template v-else>
         <div>下一题</div>
       </template>
     </div>
-
   </div>
 </template>
 

+ 13 - 13
src/features/OnlineExam/Examing/BooleanQuestionView.vue

@@ -1,15 +1,14 @@
 <template>
-  <div
-    v-if="isSyncState"
-    class="question-view"
-  >
+  <div v-if="isSyncState" class="question-view">
     <question-body
       :questionBody="question.body"
       :examQuestion="examQuestion"
     ></question-body>
     <div class="ops">
-      <div class="stu-answer">{{{'true': '正确', 'false' : '错误'}[studentAnswer]}}</div>
-      <div class="score">({{examQuestion.questionScore}}分)</div>
+      <div class="stu-answer">
+        {{ { true: "正确", false: "错误" }[studentAnswer] }}
+      </div>
+      <div class="score">({{ examQuestion.questionScore }}分)</div>
     </div>
     <div
       @click="() => answerQuestion('true')"
@@ -38,20 +37,21 @@
       <span class="question-options">错误</span>
     </div>
     <div class="reset">
-      <i-button
-        type="warning"
-        size="large"
-        @click="() => answerQuestion(null)"
-      >重置答案</i-button>
+      <i-button type="warning" size="large" @click="() => answerQuestion(null)">
+        重置答案
+      </i-button>
       <span v-if="examShouldShowAnswer()">
         &nbsp;&nbsp;&nbsp;<i-button
           type="info"
           size="large"
           @click="showAnswer"
-        >显示答案</i-button>
+        >
+          显示答案
+        </i-button>
       </span>
       <div v-if="examShouldShowAnswer() && isShowAnswer">
-        正确答案:<div>{{{'true': '正确', 'false' : '错误'}[question.rightAnswer]}}</div>
+        正确答案:
+        <div>{{ { true: "正确", false: "错误" }[question.rightAnswer] }}</div>
       </div>
     </div>
   </div>

+ 40 - 25
src/features/OnlineExam/Examing/ExamPaper.vue

@@ -1,17 +1,14 @@
 <template>
-  <div
-    v-if="exam"
-    class="container"
-    :key="exam.id"
-  >
+  <div v-if="exam" class="container" :key="exam.id">
     <div class="main">
-      <div
-        v-for="(qG, index) in questionGroupList"
-        :key="index"
-      >
-        <div>{{toChineseNumber(index+1)}}、{{qG.groupName}} ({{qG.groupScore}}分)</div>
+      <div v-for="(qG, index) in questionGroupList" :key="index">
+        <div>
+          {{ toChineseNumber(index + 1) }}、{{ qG.groupName }} ({{
+            qG.groupScore
+          }}分)
+        </div>
         <div
-          v-for="(questionWrapper) in qG.questionWrapperList"
+          v-for="questionWrapper in qG.questionWrapperList"
           :key="questionWrapper.questionId"
           class="question-wrapper"
         >
@@ -21,39 +18,57 @@
             :key="index"
           >
             <div class="flex">
-              <div>{{questionWrapper.eqs[index].order}}、
-              </div>
+              <div>{{ questionWrapper.eqs[index].order }}、</div>
               <div v-html="restoreAudio(questionUnit.body)"></div>
             </div>
             <div
-              v-for="(optionOrder, index) in questionWrapper.eqs[index].optionPermutation"
+              v-for="(optionOrder, index) in questionWrapper.eqs[index]
+                .optionPermutation"
               :key="index"
             >
               <div class="flex">
-                <div>{{indexToABCD(index)}}、</div>
-                <div v-html="restoreAudio(questionUnit.questionOptionList[optionOrder-0].body)"></div>
+                <div>{{ indexToABCD(index) }}、</div>
+                <div
+                  v-html="
+                    restoreAudio(
+                      questionUnit.questionOptionList[optionOrder - 0].body
+                    )
+                  "
+                ></div>
               </div>
             </div>
 
-            <div
-              class="flex"
-              v-if="practiceType !== 'NO_ANSWER'"
-            >
+            <div class="flex" v-if="practiceType !== 'NO_ANSWER'">
               正确答案:
-              <div v-html="rightAnswerToABCD(questionUnit.questionType, questionUnit.rightAnswer, questionWrapper.eqs[index].optionPermutation)"></div>
+              <div
+                v-html="
+                  rightAnswerToABCD(
+                    questionUnit.questionType,
+                    questionUnit.rightAnswer,
+                    questionWrapper.eqs[index].optionPermutation
+                  )
+                "
+              ></div>
             </div>
             <div class="flex">
               学生答案:
-              <div v-html="rightAnswerToABCD(questionUnit.questionType, questionWrapper.eqs[index].studentAnswer, questionWrapper.eqs[index].optionPermutation, questionUnit.rightAnswer)"></div>
+              <div
+                v-html="
+                  rightAnswerToABCD(
+                    questionUnit.questionType,
+                    questionWrapper.eqs[index].studentAnswer,
+                    questionWrapper.eqs[index].optionPermutation,
+                    questionUnit.rightAnswer
+                  )
+                "
+              ></div>
             </div>
           </div>
         </div>
       </div>
     </div>
   </div>
-  <div v-else>
-    正在等待数据返回...
-  </div>
+  <div v-else>正在等待数据返回...</div>
 </template>
 
 <script>

+ 31 - 42
src/features/OnlineExam/Examing/ExamingEnd.vue

@@ -1,42 +1,40 @@
 <template>
-
-  <div
-    class="container"
-    id="exam-end"
-    v-if="afterExamRemark !== null"
-  >
+  <div class="container" id="exam-end" v-if="afterExamRemark !== null">
     <div class="instructions">
       <h1 class="">考试已结束</h1>
-      <div><img
-          class="user-avatar"
-          :src="user.photoPath"
-          alt="无底照"
-        /></div>
-      <div
-        class="qm-big-text score-text"
-        v-if="!examResult"
-      >考试结果计算中...</div>
+      <div><img class="user-avatar" :src="user.photoPath" alt="无底照" /></div>
+      <div class="qm-big-text score-text" v-if="!examResult">
+        考试结果计算中...
+      </div>
       <div
         class="qm-big-text score-text"
         v-if="!examResult && getResultTimes > 10"
-      >后台繁忙,请稍后在待考列表中查看客观题得分。</div>
+      >
+        后台繁忙,请稍后在待考列表中查看客观题得分。
+      </div>
       <div
         class="qm-big-text score-text"
         v-if="showObjectScore && !examResult.isWarn"
-      >客观题得分: <span style="color: red">{{examResult.objectiveScore}}</span></div>
-      <div
-        class="qm-big-text score-text"
-        v-if="exam && exam.examType !== 'ONLINE' && showObjectScore && !examResult.isWarn"
-      >客观题正确率: <span style="color: red">{{examResult.objectiveAccuracy}}%</span></div>
+      >
+        客观题得分:
+        <span style="color: red">{{ examResult.objectiveScore }}</span>
+      </div>
       <div
         class="qm-big-text score-text"
-        v-if="examResult.isWarn"
-      >客观题得分: 成绩待审核</div>
-      <h1
-        v-if="examResult.isWarn"
-        class=""
-        style="text-align: left;"
-      >违纪提示: </h1>
+        v-if="
+          exam &&
+            exam.examType !== 'ONLINE' &&
+            showObjectScore &&
+            !examResult.isWarn
+        "
+      >
+        客观题正确率:
+        <span style="color: red">{{ examResult.objectiveAccuracy }}%</span>
+      </div>
+      <div class="qm-big-text score-text" v-if="examResult.isWarn">
+        客观题得分: 成绩待审核
+      </div>
+      <h1 v-if="examResult.isWarn" style="text-align: left;">违纪提示:</h1>
       <div
         v-if="examResult.isWarn"
         class=""
@@ -44,14 +42,8 @@
       >
         <p v-html="cheatingRemark"></p>
       </div>
-      <h1
-        class=""
-        style="text-align: left;"
-      >考后说明: </h1>
-      <div
-        class=""
-        style="text-align: left;  padding-bottom: 20px"
-      >
+      <h1 style="text-align: left;">考后说明:</h1>
+      <div style="text-align: left;  padding-bottom: 20px">
         <p v-html="afterExamRemark"></p>
       </div>
 
@@ -60,15 +52,12 @@
         to="/online-exam"
         style="display: inline-block; width: 100%;"
       >
-        返回主页</router-link>
-
+        返回主页</router-link
+      >
     </div>
-
   </div>
 
-  <div v-else>
-    正在等待数据返回...
-  </div>
+  <div v-else>正在等待数据返回...</div>
 </template>
 
 <script>

+ 12 - 30
src/features/OnlineExam/Examing/ExamingHome.vue

@@ -1,22 +1,12 @@
 <template>
-  <div
-    v-if="exam && examQuestion()"
-    class="container"
-    :key="exam.id"
-  >
+  <div v-if="exam && examQuestion()" class="container" :key="exam.id">
     <div class="header">
       <RemainTime></RemainTime>
       <OverallProgress :exam-question-list="examQuestionList"></OverallProgress>
       <QuestionFilters :exam-question-list="examQuestionList"></QuestionFilters>
-      <Button
-        class="qm-primary-button"
-        @click="submitPaper"
-      >交卷</Button>
+      <Button class="qm-primary-button" @click="submitPaper">交卷</Button>
     </div>
-    <div
-      class="main"
-      id="examing-home-question"
-    >
+    <div class="main" id="examing-home-question">
       <QuestionView :exam-question="examQuestion()"></QuestionView>
       <ArrowNavView
         :previousQuestionOrder="previousQuestionOrder"
@@ -27,10 +17,7 @@
       <div :class="['question-nav', !faceEnable && 'question-nav-long']">
         <QuestionNavView :paperStruct="paperStruct" />
       </div>
-      <div
-        v-if="faceEnable"
-        class="camera"
-      >
+      <div v-if="faceEnable" class="camera">
         <FaceRecognition
           v-if="faceEnable"
           width="100%"
@@ -43,24 +30,19 @@
       v-model="showFaceId"
       :mask-closable="false"
       :closable="false"
-      width=800
-      :styles="{top: '20px'}"
+      width="800"
+      :styles="{ top: '20px' }"
     >
-      <FaceId
-        v-if="showFaceId"
-        @closeFaceId="closeFaceId"
-      />
-      <p slot="footer">
-      </p>
+      <FaceId v-if="showFaceId" @closeFaceId="closeFaceId" />
+      <p slot="footer"></p>
     </Modal>
     <FaceTracking v-if="faceEnable && PRODUCTION" />
   </div>
   <div v-else>
-    正在等待数据返回... <i-button
-      class="qm-primary-button"
-      v-if="timeouted"
-      @click="reloadPage"
-    >重试</i-button>
+    正在等待数据返回...
+    <i-button class="qm-primary-button" v-if="timeouted" @click="reloadPage">
+      重试
+    </i-button>
   </div>
 </template>
 

+ 7 - 12
src/features/OnlineExam/Examing/FaceId.vue

@@ -1,15 +1,8 @@
 <template>
-  <div
-    class="row"
-    style="margin: 0;"
-  >
-    <div
-      class="col-md-12 text-center"
-      style="padding:8px;"
-    >
+  <div class="row" style="margin: 0;">
+    <div class="col-md-12 text-center" style="padding:8px;">
       <div style="font-size: 30px;">
-        <span>人脸检测</span>
-        <span v-if="showIframe">({{timeCount}})</span>
+        <span>人脸检测</span> <span v-if="showIframe">({{ timeCount }})</span>
       </div>
       <div
         v-if="showIframe"
@@ -32,7 +25,7 @@
         style="text-align: center;line-height:100px;margin-top:5px;"
       >
         <div style="color:white;font-weight: bold;font-size:20px;">
-          {{redoBtnMsg}}
+          {{ redoBtnMsg }}
         </div>
         <button
           v-if="redoBtnShow"
@@ -40,7 +33,9 @@
           class="qm-primary-button"
           :disabled="redoBtnDisabled"
           @click="startFaceVerify"
-        >重试</button>
+        >
+          重试
+        </button>
       </div>
       <iframe
         v-show="showIframe"

+ 11 - 16
src/features/OnlineExam/Examing/FillBlankQuestionView.vue

@@ -1,21 +1,18 @@
 <template>
-  <div
-    v-if="isSyncState"
-    class="question-view"
-  >
+  <div v-if="isSyncState" class="question-view">
     <question-body
       :questionBody="questionBody"
       :examQuestion="examQuestion"
     ></question-body>
     <div class="ops">
-      <div class="score">({{examQuestion.questionScore}}分)</div>
+      <div class="score">({{ examQuestion.questionScore }}分)</div>
     </div>
     <div
       v-for="(option, index) in studentAnswer.split('##')"
       :key="examQuestion.id + index"
       class="option"
     >
-      <span class="question-options">{{index+1}}. </span>
+      <span class="question-options">{{ index + 1 }}. </span>
       <input
         type="text"
         maxlength="5000"
@@ -26,23 +23,21 @@
       />
     </div>
     <div class="reset">
-      <i-button
-        type="warning"
-        size="large"
-        @click="resetAnswer"
-      >重置答案</i-button>
+      <i-button type="warning" size="large" @click="resetAnswer">
+        重置答案
+      </i-button>
       <span v-if="examShouldShowAnswer()">
         &nbsp;&nbsp;&nbsp;<i-button
           type="info"
           size="large"
           @click="showAnswer"
-        >显示答案</i-button>
+        >
+          显示答案
+        </i-button>
       </span>
       <div v-if="examShouldShowAnswer() && isShowAnswer">
-        正确答案:<div
-          v-html="rightAnswerTransform"
-          class="right-answer-section"
-        ></div>
+        正确答案:
+        <div v-html="rightAnswerTransform" class="right-answer-section"></div>
       </div>
     </div>
   </div>

+ 12 - 14
src/features/OnlineExam/Examing/MultipleQuestionView.vue

@@ -8,8 +8,8 @@
       :examQuestion="examQuestion"
     ></question-body>
     <div class="ops">
-      <div class="stu-answer"> {{oldIndexToABCD}}</div>
-      <div class="score">({{examQuestion.questionScore}}分)</div>
+      <div class="stu-answer">{{ oldIndexToABCD }}</div>
+      <div class="score">({{ examQuestion.questionScore }}分)</div>
     </div>
     <div
       v-for="(option, index) in newQuestionOptions"
@@ -28,11 +28,8 @@
           :checked="studentAnswer && studentAnswer.includes(option.oldIndex)"
           style="margin-top: 4px"
         />
-        <span style="padding: 0 10px;">{{optionName[index]}}: </span>
-        <div
-          class="question-options"
-          v-if="option.value"
-        >
+        <span style="padding: 0 10px;">{{ optionName[index] }}: </span>
+        <div class="question-options" v-if="option.value">
           <question-body
             :questionBody="option.value.body"
             :examQuestion="examQuestion"
@@ -41,20 +38,21 @@
       </div>
     </div>
     <div class="reset">
-      <i-button
-        type="warning"
-        size="large"
-        @click="() => answerQuestion(null)"
-      >重置答案</i-button>
+      <i-button type="warning" size="large" @click="() => answerQuestion(null)">
+        重置答案
+      </i-button>
       <span v-if="examShouldShowAnswer()">
         &nbsp;&nbsp;&nbsp;<i-button
           type="info"
           size="large"
           @click="showAnswer"
-        >显示答案</i-button>
+        >
+          显示答案
+        </i-button>
       </span>
       <div v-if="examShouldShowAnswer() && isShowAnswer">
-        正确答案:<div>{{rightAnswerTransform}}</div>
+        正确答案:
+        <div>{{ rightAnswerTransform }}</div>
       </div>
     </div>
   </div>

+ 1 - 1
src/features/OnlineExam/Examing/OverallProgress.vue

@@ -8,7 +8,7 @@
       style="color: black"
     >
     </i-progress>
-    <span>{{progress}}</span>
+    <span>{{ progress }}</span>
   </div>
 </template>
 

+ 11 - 15
src/features/OnlineExam/Examing/QuestionBody.vue

@@ -7,38 +7,34 @@
     <div v-html="questionDetail.text"></div>
     <!-- <div v-html="questionDetail.audio"></div> -->
     <div
-      v-for="({src, name}, index) in questionDetail.audio"
+      v-for="({ src, name }, index) in questionDetail.audio"
       :key="name"
       class="audio-div"
     >
-      <div
-        style="position: relative;"
-        class="audio-div"
-      >
+      <div style="position: relative;" class="audio-div">
         <audio
           controls
           preload="auto"
-          controlsList='nodownload'
+          controlsList="nodownload"
           :key="src"
           :name="name"
           :src="src"
-          @play="($event) => played(index, $event)"
+          @play="$event => played(index, $event)"
           @ended="() => audioEnded(name)"
-          @click="($event) => audioClicked(index, $event)"
+          @click="$event => audioClicked(index, $event)"
         ></audio>
-        <span v-if="examQuestion.limitedPlayTimes">(剩余播放次数:{{getAudioPlayedTimes(name)}})</span><br />
+        <span v-if="examQuestion.limitedPlayTimes"
+          >(剩余播放次数:{{ getAudioPlayedTimes(name) }})</span
+        ><br />
         <div
           v-if="audioInPlay.has(name)"
           style="position: absolute;top: 0;right: 0;bottom: 0;left: 0;"
-        >
-        </div>
+        ></div>
       </div>
     </div>
   </div>
 
-  <div v-else>
-    获取试题中...
-  </div>
+  <div v-else>获取试题中...</div>
 </template>
 
 <script>
@@ -240,7 +236,7 @@ export default {
 };
 </script>
 
-<style >
+<style>
 .audio-div {
   display: flex;
   align-items: center;

+ 12 - 4
src/features/OnlineExam/Examing/QuestionFilters.vue

@@ -3,19 +3,27 @@
     <div
       :class="questionFilterType == 'ALL' && 'selected-type'"
       @click="updateQuestionFilter('ALL')"
-    >全部<span class="all-type">{{all}}</span></div>
+    >
+      全部 <span class="all-type">{{ all }}</span>
+    </div>
     <div
       :class="questionFilterType == 'ANSWERED' && 'selected-type'"
       @click="updateQuestionFilter('ANSWERED')"
-    >已答 <span class="answered-type">{{answered}}</span></div>
+    >
+      已答 <span class="answered-type">{{ answered }}</span>
+    </div>
     <div
       :class="questionFilterType == 'SIGNED' && 'selected-type'"
       @click="updateQuestionFilter('SIGNED')"
-    >标记<span class="signed-type">{{signed}}</span></div>
+    >
+      标记 <span class="signed-type">{{ signed }}</span>
+    </div>
     <div
       :class="questionFilterType == 'UNANSWERED' && 'selected-type'"
       @click="updateQuestionFilter('UNANSWERED')"
-    >未答<span class="unanswered-type">{{unanswered}}</span></div>
+    >
+      未答 <span class="unanswered-type">{{ unanswered }}</span>
+    </div>
   </div>
 </template>
 

+ 4 - 1
src/features/OnlineExam/Examing/QuestionIndex.vue

@@ -1,6 +1,9 @@
 <template>
   <div class="container">
-    {{sectionChinese}}、{{examQuestion.groupName}}({{examQuestion.groupOrder}} / {{examQuestion.groupTotal}})
+    {{ sectionChinese }}、{{ examQuestion.groupName }}({{
+      examQuestion.groupOrder
+    }}
+    / {{ examQuestion.groupTotal }})
   </div>
 </template>
 

+ 12 - 3
src/features/OnlineExam/Examing/QuestionNavView.vue

@@ -6,15 +6,24 @@
         :key="section"
         class="section"
       >
-        <div class="title">{{struct.groupName}} ({{struct.groupScore}}分)</div>
+        <div class="title">
+          {{ struct.groupName }} ({{ struct.groupScore }}分)
+        </div>
         <div class="list">
           <template v-for="(_, index2) in sectionQuestions(section)">
             <template v-if="isSelectedQuestion(section, index2)">
               <router-link
                 :key="index2"
                 :class="itemClass(section, index2)"
-                :to="{ path: `/online-exam/exam/${$route.params.examId}/examRecordData/${$route.params.examRecordDataId}/order/${getQuestionNum(section, index2).order}`}"
-              >{{index2+1}}</router-link>
+                :to="{
+                  path: `/online-exam/exam/${
+                    $route.params.examId
+                  }/examRecordData/${$route.params.examRecordDataId}/order/${
+                    getQuestionNum(section, index2).order
+                  }`
+                }"
+                >{{ index2 + 1 }}</router-link
+              >
             </template>
           </template>
         </div>

+ 40 - 17
src/features/OnlineExam/Examing/QuestionView.vue

@@ -1,10 +1,9 @@
 <template>
-
   <div style="overflow: auto">
     <div class="question-header">
       <Icon
-        :type="examQuestion.isSign ? 'ios-star':'ios-star-outline'"
-        :style="{color: '#ffcc00'}"
+        :type="examQuestion.isSign ? 'ios-star' : 'ios-star-outline'"
+        :style="{ color: '#ffcc00' }"
         class="star"
         @click="toggleSign"
       />
@@ -13,10 +12,7 @@
         :examQuestion="examQuestion"
       />
     </div>
-    <div
-      v-if="parentQuestionBody"
-      class="question-view"
-    >
+    <div v-if="parentQuestionBody" class="question-view">
       <question-body
         :questionBody="parentQuestionBody"
         :examQuestion="examQuestion"
@@ -25,47 +21,74 @@
       ></question-body>
       <div class="hr" />
     </div>
-    <div v-if="!examQuestion.getQuestionContent">
-      试题获取中...
-    </div>
+    <div v-if="!examQuestion.getQuestionContent">试题获取中...</div>
 
     <transition name="fade">
-
       <div
         v-show="question && examQuestion && examQuestion.getQuestionContent"
         class="question-view"
         :key="examQuestion.order"
       >
-        <div style="margin-bottom: -45px;">{{examQuestion.groupOrder}}、</div>
-        <template v-if="question && question.questionType === 'SINGLE_CHOICE' && examQuestion.questionType === 'SINGLE_CHOICE'">
+        <div style="margin-bottom: -45px;">{{ examQuestion.groupOrder }}、</div>
+        <template
+          v-if="
+            question &&
+              question.questionType === 'SINGLE_CHOICE' &&
+              examQuestion.questionType === 'SINGLE_CHOICE'
+          "
+        >
           <single-question-view
             :question="question"
             :examQuestion="examQuestion"
             :key="examQuestion.order"
           />
         </template>
-        <template v-if="question && question.questionType === 'MULTIPLE_CHOICE' && examQuestion.questionType === 'MULTIPLE_CHOICE'">
+        <template
+          v-if="
+            question &&
+              question.questionType === 'MULTIPLE_CHOICE' &&
+              examQuestion.questionType === 'MULTIPLE_CHOICE'
+          "
+        >
           <multiple-question-view
             :question="question"
             :examQuestion="examQuestion"
             :key="examQuestion.order"
           />
         </template>
-        <template v-if="question && question.questionType === 'TRUE_OR_FALSE' && examQuestion.questionType === 'TRUE_OR_FALSE'">
+        <template
+          v-if="
+            question &&
+              question.questionType === 'TRUE_OR_FALSE' &&
+              examQuestion.questionType === 'TRUE_OR_FALSE'
+          "
+        >
           <boolean-question-view
             :question="question"
             :examQuestion="examQuestion"
             :key="examQuestion.order"
           />
         </template>
-        <template v-if="question && question.questionType === 'FILL_UP' && examQuestion.questionType === 'FILL_UP'">
+        <template
+          v-if="
+            question &&
+              question.questionType === 'FILL_UP' &&
+              examQuestion.questionType === 'FILL_UP'
+          "
+        >
           <fill-blank-question-view
             :question="question"
             :examQuestion="examQuestion"
             :key="examQuestion.order"
           />
         </template>
-        <template v-if="question && question.questionType === 'ESSAY' && examQuestion.questionType === 'ESSAY'">
+        <template
+          v-if="
+            question &&
+              question.questionType === 'ESSAY' &&
+              examQuestion.questionType === 'ESSAY'
+          "
+        >
           <text-question-view
             :question="question"
             :examQuestion="examQuestion"

+ 1 - 1
src/features/OnlineExam/Examing/RemainTime.vue

@@ -1,5 +1,5 @@
 <template>
-  <div class="remain-time">剩余时间 {{remainTimeFormatted}}</div>
+  <div class="remain-time">剩余时间 {{ remainTimeFormatted }}</div>
 </template>
 
 <script>

+ 17 - 15
src/features/OnlineExam/Examing/SingleQuestionView.vue

@@ -8,14 +8,18 @@
       :examQuestion="examQuestion"
     ></question-body>
     <div class="ops">
-      <div class="stu-answer">{{oldIndexToABCD}}</div>
-      <div class="score">({{examQuestion.questionScore}}分)</div>
+      <div class="stu-answer">{{ oldIndexToABCD }}</div>
+      <div class="score">({{ examQuestion.questionScore }}分)</div>
     </div>
     <div
       v-for="(option, index) in newQuestionOptions"
       :key="index"
       class="option"
-      @click="() => {answerQuestion(option.oldIndex);}"
+      @click="
+        () => {
+          answerQuestion(option.oldIndex);
+        }
+      "
     >
       <div
         :class="studentAnswer === option.oldIndex && 'row-selected'"
@@ -30,11 +34,8 @@
             style="margin-top:3px;display:block"
           />
         </div>
-        <span style="padding: 0 10px;">{{optionName[index]}}: </span>
-        <div
-          class="question-options"
-          v-if="option.value"
-        >
+        <span style="padding: 0 10px;">{{ optionName[index] }}: </span>
+        <div class="question-options" v-if="option.value">
           <question-body
             :questionBody="option.value.body"
             :examQuestion="examQuestion"
@@ -43,20 +44,21 @@
       </div>
     </div>
     <div class="reset">
-      <i-button
-        type="warning"
-        size="large"
-        @click="() => answerQuestion(null)"
-      >重置答案</i-button>
+      <i-button type="warning" size="large" @click="() => answerQuestion(null)">
+        重置答案
+      </i-button>
       <span v-if="examShouldShowAnswer()">
         &nbsp;&nbsp;&nbsp;<i-button
           type="info"
           size="large"
           @click="showAnswer"
-        >显示答案</i-button>
+        >
+          显示答案
+        </i-button>
       </span>
       <div v-if="examShouldShowAnswer() && isShowAnswer">
-        正确答案:<div>{{rightAnswerTransform}}</div>
+        正确答案:
+        <div>{{ rightAnswerTransform }}</div>
       </div>
     </div>
   </div>

+ 35 - 47
src/features/OnlineExam/Examing/TextQuestionView.vue

@@ -1,62 +1,53 @@
 <template>
-  <div
-    v-if="isSyncState"
-    class="question-view"
-  >
+  <div v-if="isSyncState" class="question-view">
     <question-body
       :questionBody="question.body"
       :examQuestion="examQuestion"
     ></question-body>
     <div class="ops">
-      <div class="score">({{examQuestion.questionScore}}分)</div>
+      <div class="score">({{ examQuestion.questionScore }}分)</div>
     </div>
     <div class="option">
       <!-- <textarea v-model="studentAnswer" maxlength="5000" type="text" /> -->
 
       <div>
         <div class="menu">
-          <i-button
-            type="info"
-            class="text-ops"
-            size="small"
-            @click="textCopy"
-          >复制</i-button>
-          <i-button
-            type="info"
-            class="text-ops"
-            size="small"
-            @click="textCut"
-          >剪切</i-button>
+          <i-button type="info" class="text-ops" size="small" @click="textCopy">
+            复制
+          </i-button>
+          <i-button type="info" class="text-ops" size="small" @click="textCut">
+            剪切
+          </i-button>
           <i-button
             type="info"
             class="text-ops"
             size="small"
             @click="textPaste"
-          >粘贴</i-button>
-          <i-button
-            type="info"
-            class="text-ops"
-            size="small"
-            @click="textSup"
-          >上标</i-button>
+          >
+            粘贴
+          </i-button>
+          <i-button type="info" class="text-ops" size="small" @click="textSup">
+            上标
+          </i-button>
           <i-button
             type="info"
             class="text-ops"
             size="small"
             @click="undoTextSup"
-          >取消上标</i-button>
-          <i-button
-            type="info"
-            class="text-ops"
-            size="small"
-            @click="textSub"
-          >下标</i-button>
+          >
+            取消上标
+          </i-button>
+          <i-button type="info" class="text-ops" size="small" @click="textSub">
+            下标
+          </i-button>
           <i-button
             type="info"
             class="text-ops"
             size="small"
             @click="undoTextSup"
-          >取消下标</i-button>
+          >
+            取消下标
+          </i-button>
         </div>
         <div
           ref="answerDiv"
@@ -64,30 +55,27 @@
           :contenteditable="true"
           v-html="studentAnswer"
           v-once
-          @input="($event) => textInput($event)"
-          @blur="($event) => textInput($event)"
+          @input="$event => textInput($event)"
+          @blur="$event => textInput($event)"
           class="stu-answer"
-        >
-        </div>
+        ></div>
       </div>
-      <div
-        class="reset"
-        style="padding-top: 20px"
-      >
-        <i-button
-          type="warning"
-          size="large"
-          @click="studentAnswer=null"
-        >重置答案</i-button>
+      <div class="reset" style="padding-top: 20px">
+        <i-button type="warning" size="large" @click="studentAnswer = null">
+          重置答案
+        </i-button>
         <span v-if="examShouldShowAnswer()">
           &nbsp;&nbsp;&nbsp;<i-button
             type="info"
             size="large"
             @click="showAnswer"
-          >显示答案</i-button>
+          >
+            显示答案
+          </i-button>
         </span>
         <div v-if="examShouldShowAnswer() && isShowAnswer">
-          正确答案:<div v-html="rightAnswerTransform"></div>
+          正确答案:
+          <div v-html="rightAnswerTransform"></div>
         </div>
       </div>
     </div>

+ 15 - 14
src/features/OnlineExam/OnlineExamFaceCheckModal.vue

@@ -18,7 +18,9 @@
         @click="closeModal"
       />
     </div>
-    <div style="display: grid; grid-template-columns: 200px 400px 1fr; grid-gap: 5px; position: relative">
+    <div
+      style="display: grid; grid-template-columns: 200px 400px 1fr; grid-gap: 5px; position: relative"
+    >
       <!-- TODO: 显示子组件的message -->
       <!-- <div style="position: absolute; top: -16px; left: 0; width: 100%; height: 50px; 
                   background-color: #eee; opacity: 0.8; display: grid; ">
@@ -27,17 +29,18 @@
           style="width: 100%; text-algin: center; "
         >msg</div>
       </div> -->
-      <div
-        class="avatar"
-        :style="{ backgroundImage: `url('${userPhoto}')` }"
-      >
+      <div class="avatar" :style="{ backgroundImage: `url('${userPhoto}')` }">
         <!-- <img :src="userPhoto" width="200px" height="300px" alt="底照" /> -->
         <div
           class="avatar-info"
           style="text-align: center; margin-top: 260px; color: white;"
         >
-          <span style="background-color: rgba(0, 0, 0, 0.5); display: inline-block;
-                       padding: 6px 16px; border-radius: 6px;">我的底照</span>
+          <span
+            style="background-color: rgba(0, 0, 0, 0.5); display: inline-block;
+                       padding: 6px 16px; border-radius: 6px;"
+          >
+            我的底照
+          </span>
         </div>
       </div>
       <div class="camera">
@@ -52,18 +55,16 @@
         </FaceRecognition>
       </div>
       <div class="verify-desc qm-primary-text">
-        <h4
-          class="qm-big-text"
-          style="font-weight: bold"
-        >操作提示:</h4>
+        <h4 class="qm-big-text" style="font-weight: bold">操作提示:</h4>
         <p>1.请先确保摄像头设备已连接并能正常工作;</p>
         <p>2.请保持光源充足,不要逆光操作;</p>
-        <p>3.请保证脸部正面面向摄像头,并适当调整姿势保证整个脸部能够进入左侧识别画面;</p>
+        <p>
+          3.请保证脸部正面面向摄像头,并适当调整姿势保证整个脸部能够进入左侧识别画面;
+        </p>
         <p>4.系统识别通过后,将自动跳转进入考试界面;</p>
       </div>
     </div>
-    <div slot="footer">
-    </div>
+    <div slot="footer"></div>
   </Modal>
 </template>
 

+ 4 - 2
src/features/OnlineExam/OnlineExamHome.vue

@@ -1,7 +1,9 @@
 <template>
   <main-layout>
-    <Breadcrumb style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px; 
-                       background-color: #fafafa;">
+    <Breadcrumb
+      style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px; 
+                       background-color: #fafafa;"
+    >
       当前所在位置:
       <BreadcrumbItem>在线考试</BreadcrumbItem>
     </Breadcrumb>

+ 20 - 15
src/features/OnlineExam/OnlineExamList.vue

@@ -11,23 +11,30 @@
           <td style="max-width: 200px">操作</td>
         </tr>
 
-        <tr
-          v-for="course in courses"
-          :key="course.id"
-        >
+        <tr v-for="course in courses" :key="course.id">
           <td>{{ course.courseName }}</td>
           <td>{{ course.courseLevel }}</td>
           <td>{{ course.specialtyName }}</td>
-          <td>{{ course.startTime }} <br> ~ <br> {{ course.endTime }}</td>
+          <td>
+            {{ course.startTime }} <br />
+            ~ <br />
+            {{ course.endTime }}
+          </td>
           <td>{{ course.allowExamCount }}</td>
           <td style="min-width: 180px">
-            <div style="display: grid; grid-template-columns: repeat( auto-fit, minmax(100px, 1fr) ); 
-                        grid-gap: 10px">
+            <div
+              style="display: grid; grid-template-columns: repeat( auto-fit, minmax(100px, 1fr) ); 
+                        grid-gap: 10px"
+            >
               <i-button
                 class="qm-primary-button"
-                :disabled="!courseInBetween(course) || course.allowExamCount < 1"
+                :disabled="
+                  !courseInBetween(course) || course.allowExamCount < 1
+                "
                 @click="enterExam(course)"
-              >进入考试</i-button>
+              >
+                进入考试
+              </i-button>
               <i-poptip
                 :trigger="course.isObjScoreView ? 'hover' : 'click'"
                 placement="left"
@@ -37,7 +44,9 @@
                   class="qm-primary-button"
                   style="width: 100%"
                   :disabled="!course.isObjScoreView"
-                >客观分</i-button>
+                >
+                  客观分
+                </i-button>
                 <ecs-online-exam-result-list
                   slot="content"
                   :examStudentId="course.examStudentId"
@@ -49,11 +58,7 @@
       </tbody>
     </table>
 
-    <Spin
-      size="large"
-      fix
-      v-if="spinShow"
-    >{{processingMessage}}</Spin>
+    <Spin size="large" fix v-if="spinShow">{{ processingMessage }}</Spin>
     <OnlineExamFaceCheckModal
       :open="faceCheckModalOpen"
       :course="selectedCourse"

+ 18 - 26
src/features/OnlineExam/OnlineExamOverview.vue

@@ -1,16 +1,8 @@
 <template>
-
-  <div
-    class="container"
-    id="exam-overview"
-    v-if="startInfo && paperStruct"
-  >
+  <div class="container" id="exam-overview" v-if="startInfo && paperStruct">
     <div class="instructions">
       <h1 class="">考试说明</h1>
-      <div
-        class=""
-        style="text-align: left;  padding-bottom: 20px"
-      >
+      <div style="text-align: left;  padding-bottom: 20px">
         <p v-html="beforeExamRemark"></p>
         <!-- <p>{{"测试".repeat(500)}}</p> -->
       </div>
@@ -20,39 +12,39 @@
         @click="goToPaper"
         style="display: inline-block; width: 100%;"
       >
-        {{ isForceRead ? '强制阅读' : '开始答题'}}(倒计时:{{remainTimeFormatted}})</Button>
+        {{ isForceRead ? "强制阅读" : "开始答题" }}(倒计时:{{
+          remainTimeFormatted
+        }})</Button
+      >
     </div>
 
     <div class="exam-detail">
-      <h3 class="">科目:{{startInfo.courseName}}</h3>
-      <br>
-      <h4 class="">试卷概览(总分:{{paperTotalScore}})</h4>
-      <br>
+      <h3 class="">科目:{{ startInfo.courseName }}</h3>
+      <br />
+      <h4 class="">试卷概览(总分:{{ paperTotalScore }})</h4>
+      <br />
       <ul class="list-group">
         <li
           class="list-group-item"
-          v-for="(questionsGroup, index) in paperStruct.defaultPaper.questionGroupList"
+          v-for="(questionsGroup, index) in paperStruct.defaultPaper
+            .questionGroupList"
           :key="questionsGroup.gruopName"
         >
-          {{index+1}}、{{questionsGroup.groupName}}
+          {{ index + 1 }}、{{ questionsGroup.groupName }}
           <small class="pull-right">
-            (共{{questionsGroup.questionWrapperList.length}}题,共{{questionsGroup.groupScore}}分)
+            (共{{ questionsGroup.questionWrapperList.length }}题,共{{
+              questionsGroup.groupScore
+            }}分)
           </small>
         </li>
       </ul>
       <div>
-        <img
-          style="width:100%; padding-top: 40px;"
-          src="./good-wish.png"
-        />
+        <img style="width:100%; padding-top: 40px;" src="./good-wish.png" />
       </div>
     </div>
-
   </div>
 
-  <div v-else>
-    正在等待数据返回...
-  </div>
+  <div v-else>正在等待数据返回...</div>
 </template>
 
 <script>

+ 1 - 5
src/features/OnlineExam/OnlineExamResultList.vue

@@ -1,7 +1,6 @@
 <template>
   <div class="list">
     <table>
-
       <tbody class="list-row">
         <tr class="list-header qm-primary-strong-text">
           <td>次数</td>
@@ -10,10 +9,7 @@
           <td>客观分</td>
         </tr>
 
-        <tr
-          v-for="(result, index) in results"
-          :key="index"
-        >
+        <tr v-for="(result, index) in results" :key="index">
           <td>{{ result.examOrder }}</td>
           <td>{{ result.startTime }}</td>
           <td>{{ result.endTime }}</td>

+ 17 - 9
src/features/OnlineExam/PhoneVerifyForDD.vue

@@ -1,5 +1,4 @@
 <template>
-
   <Modal
     v-model="phoneModal"
     :closable="false"
@@ -7,15 +6,18 @@
     title="请验证预留手机号"
     :footer-hide="true"
   >
-    <div style="display: grid; grid-template-rows: 40px 40px 40px; font-size: 20px">
-
-      <p>预留手机号: &nbsp;&nbsp;{{user.phoneNumber}}</p>
-      <p>输入验证码: &nbsp;&nbsp;<input
+    <div
+      style="display: grid; grid-template-rows: 40px 40px 40px; font-size: 20px"
+    >
+      <p>预留手机号: &nbsp;&nbsp;{{ user.phoneNumber }}</p>
+      <p>
+        输入验证码: &nbsp;&nbsp;<input
           size="6"
           v-model="code"
           placeholder="验证码"
           type="number"
-        /> &nbsp;&nbsp;
+        />
+        &nbsp;&nbsp;
       </p>
       <div>
         <i-button
@@ -23,18 +25,24 @@
           class="qm-primary-button"
           :disabled="remainTime > 0"
           @click="getCode"
-        >{{btnText}} {{remainTime > 0 ? "("+remainTime + "秒)" : ""}}</i-button>&nbsp;&nbsp;
+          >{{ btnText }}
+          {{ remainTime > 0 ? "(" + remainTime + "秒)" : "" }}</i-button
+        >&nbsp;&nbsp;
         <i-button
           style="margin: 0"
           class="qm-primary-button"
           :disabled="!code"
           @click="verify"
-        >验证</i-button>&nbsp;&nbsp;
+        >
+          验证 </i-button
+        >&nbsp;&nbsp;
         <i-button
           style="margin: 0"
           class="qm-primary-button"
           @click="() => this.logout()"
-        >退出系统</i-button>&nbsp;&nbsp;
+        >
+          退出系统 </i-button
+        >&nbsp;&nbsp;
       </div>
     </div>
   </Modal>

+ 7 - 9
src/features/OnlinePractice/OnlinePracticeHome.vue

@@ -1,13 +1,14 @@
 <template>
   <main-layout>
-    <Breadcrumb style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px; 
-                       background-color: #fafafa;">
+    <Breadcrumb
+      style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px; 
+                       background-color: #fafafa;"
+    >
       当前所在位置:
       <BreadcrumbItem>在线练习</BreadcrumbItem>
     </Breadcrumb>
 
     <div class="home">
-
       <div style="text-align: left; margin-bottom: 20px;">
         选择考试批次:
         <Select
@@ -16,11 +17,9 @@
           @on-change="fetchList"
           filterable
         >
-          <Option
-            v-for="item in examList"
-            :value="item.id"
-            :key="item.id"
-          >{{ item.name }}</Option>
+          <Option v-for="item in examList" :value="item.id" :key="item.id">
+            {{ item.name }}
+          </Option>
         </Select>
       </div>
 
@@ -28,7 +27,6 @@
         :courses="courses"
         :examList="examList"
       ></OnlinePracticeList>
-
     </div>
   </main-layout>
 </template>

+ 16 - 10
src/features/OnlinePractice/OnlinePracticeList.vue

@@ -12,34 +12,40 @@
           <td style="max-width: 200px">操作</td>
         </tr>
 
-        <tr
-          v-for="course in courses"
-          :key="course.courseId"
-        >
+        <tr v-for="course in courses" :key="course.courseId">
           <td>{{ course.courseName }}</td>
-          <td>{{ course.startTime }} <br> ~ <br> {{ course.endTime }}</td>
+          <td>
+            {{ course.startTime }} <br />
+            ~ <br />
+            {{ course.endTime }}
+          </td>
           <td>{{ course.practiceCount }}</td>
           <td>{{ course.recentObjectiveAccuracy }}%</td>
           <td>{{ course.aveObjectiveAccuracy }}%</td>
           <td>{{ course.maxObjectiveAccuracy }}%</td>
           <td style="min-width: 180px">
-            <div style="display: grid; grid-template-columns: repeat( auto-fit, minmax(100px, 1fr) ); 
-                        grid-gap: 10px">
+            <div
+              style="display: grid; grid-template-columns: repeat( auto-fit, minmax(100px, 1fr) ); 
+                        grid-gap: 10px"
+            >
               <i-button
                 class="qm-primary-button"
                 :disabled="!courseInBetween(course)"
                 @click="enterPractice(course)"
-              >进入练习</i-button>
+              >
+                进入练习
+              </i-button>
               <i-button
                 class="qm-primary-button"
                 @click="enterPracticeList(course)"
-              >查看详情</i-button>
+              >
+                查看详情
+              </i-button>
             </div>
           </td>
         </tr>
       </tbody>
     </table>
-
   </div>
 </template>
 

+ 34 - 21
src/features/OnlinePractice/OnlinePracticeRecordDetail.vue

@@ -1,19 +1,29 @@
 <template>
   <main-layout>
-    <Breadcrumb style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px;
-                       background-color: #fafafa;">
+    <Breadcrumb
+      style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px;
+                       background-color: #fafafa;"
+    >
       当前所在位置:
-      <BreadcrumbItem :to="{name: 'OnlinePracticeHome'}">在线练习</BreadcrumbItem>
+      <BreadcrumbItem :to="{ name: 'OnlinePracticeHome' }">
+        在线练习
+      </BreadcrumbItem>
       <!-- 不是很容易返回练习详情,需要examStudentId, courseName等等 -->
       <BreadcrumbItem>练习详情</BreadcrumbItem>
       <BreadcrumbItem>成绩报告</BreadcrumbItem>
     </Breadcrumb>
 
     <div class="home">
-      <div class="qm-title-text">练习情况概率(科目:{{examRecordResult.courseName}})</div>
+      <div class="qm-title-text">
+        练习情况概率(科目:{{ examRecordResult.courseName }})
+      </div>
 
-      <div style="display: grid; grid-template-columns: repeat(4, 1fr); margin-bottom: 20px; text-align: left">
-        <div>答题正确率: <span>{{examRecordResult.objectiveAccuracy}}%</span></div>
+      <div
+        style="display: grid; grid-template-columns: repeat(4, 1fr); margin-bottom: 20px; text-align: left"
+      >
+        <div>
+          答题正确率: <span>{{ examRecordResult.objectiveAccuracy }}%</span>
+        </div>
       </div>
 
       <div class="list">
@@ -42,28 +52,31 @@
 
         <div class="info-text">
           <h4 class="font-thin text-primary-lt m-t">报告提示:</h4>
-          <div
-            class="scroll-y wrapper-sm"
-            style="min-height: 80px;"
-          >
-            <p class="m-b-sm">1、若本练习卷中包含部分主观题型,则报告统计数据仅供参考,因为部分题型需考生根据参考答案判断正确和错误,报告仅对可统计的题型进行统计。</p>
-            <p class="m-b-sm">2、若单题存在多处作答,只要有一处出错,该题就判为错题。</p>
+          <div class="scroll-y wrapper-sm" style="min-height: 80px;">
+            <p class="m-b-sm">
+              1、若本练习卷中包含部分主观题型,则报告统计数据仅供参考,因为部分题型需考生根据参考答案判断正确和错误,报告仅对可统计的题型进行统计。
+            </p>
+            <p class="m-b-sm">
+              2、若单题存在多处作答,只要有一处出错,该题就判为错题。
+            </p>
           </div>
         </div>
       </div>
     </div>
 
-    <div style="margin: 20px; display: grid; grid-template-columns: repeat( auto-fit, minmax(100px, 1fr) ); 
-                grid-gap: 20px">
-      <i-button
-        class="qm-primary-button"
-        @click="shouldShowPaper= !shouldShowPaper"
-      >展开试卷</i-button>
+    <div
+      style="margin: 20px; display: grid; grid-template-columns: repeat( auto-fit, minmax(100px, 1fr) ); 
+                grid-gap: 20px"
+    >
       <i-button
-        v-if="!disableGoBack"
         class="qm-primary-button"
-        @click="goBack"
-      >返回</i-button>
+        @click="shouldShowPaper = !shouldShowPaper"
+      >
+        展开试卷
+      </i-button>
+      <i-button v-if="!disableGoBack" class="qm-primary-button" @click="goBack">
+        返回
+      </i-button>
     </div>
 
     <ExamPaper

+ 26 - 17
src/features/OnlinePractice/OnlinePracticeRecordList.vue

@@ -1,19 +1,32 @@
 <template>
   <main-layout>
-    <Breadcrumb style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px;
-                       background-color: #fafafa;">
+    <Breadcrumb
+      style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px;
+                       background-color: #fafafa;"
+    >
       当前所在位置:
-      <BreadcrumbItem :to="{name: 'OnlinePracticeHome'}">在线练习</BreadcrumbItem>
+      <BreadcrumbItem :to="{ name: 'OnlinePracticeHome' }">
+        在线练习
+      </BreadcrumbItem>
       <BreadcrumbItem>练习详情</BreadcrumbItem>
     </Breadcrumb>
 
     <div class="home">
-
-      <div style="display: grid; grid-template-columns: repeat(4, 1fr); margin-bottom: 20px; text-align: left">
-        <div>批次: <span>{{examName}}</span></div>
-        <div>科目: <span>{{courseName}}</span></div>
-        <div>平均正确率: <span>{{aveAccuracy}}%</span></div>
-        <div>最高正确率: <span>{{maxAccuracy}}%</span></div>
+      <div
+        style="display: grid; grid-template-columns: repeat(4, 1fr); margin-bottom: 20px; text-align: left"
+      >
+        <div>
+          批次: <span>{{ examName }}</span>
+        </div>
+        <div>
+          科目: <span>{{ courseName }}</span>
+        </div>
+        <div>
+          平均正确率: <span>{{ aveAccuracy }}%</span>
+        </div>
+        <div>
+          最高正确率: <span>{{ maxAccuracy }}%</span>
+        </div>
       </div>
 
       <div class="list">
@@ -32,10 +45,7 @@
               <td style="max-width: 200px">操作</td>
             </tr>
 
-            <tr
-              v-for="record in recordList"
-              :key="record.examId"
-            >
+            <tr v-for="record in recordList" :key="record.examId">
               <td>{{ record.id }}</td>
               <td>{{ record.startTime }}</td>
               <td>{{ record.endTime }}</td>
@@ -49,17 +59,16 @@
                 <i-button
                   class="qm-primary-button"
                   @click="() => enterPracticeRecordDetail(record)"
-                >查看成绩报告</i-button>
+                >
+                  查看成绩报告
+                </i-button>
               </td>
             </tr>
           </tbody>
         </table>
-
       </div>
-
     </div>
   </main-layout>
-
 </template>
 
 <script>

+ 11 - 25
src/features/Password/Password.vue

@@ -1,42 +1,30 @@
 <template>
   <main-layout>
-    <i-breadcrumb style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px;
-                         background-color: #fafafa;">
+    <i-breadcrumb
+      style="text-align: left; padding-left: 20px; height: 40px; line-height: 40px;
+                         background-color: #fafafa;"
+    >
       当前所在位置:
       <i-breadcrumb-item>修改密码</i-breadcrumb-item>
     </i-breadcrumb>
 
     <div class="password-container">
-      <i-form
-        ref="form"
-        :model="form"
-        :rules="rules"
-        style="width: 320px"
-      >
-        <i-form-item
-          label=""
-          prop="oldPassword"
-        >
+      <i-form ref="form" :model="form" :rules="rules" style="width: 320px">
+        <i-form-item label="" prop="oldPassword">
           <i-input
             type="password"
             placeholder="请输入旧密码"
             v-model="form.oldPassword"
           ></i-input>
         </i-form-item>
-        <i-form-item
-          label=""
-          prop="newPassword"
-        >
+        <i-form-item label="" prop="newPassword">
           <i-input
             type="password"
             placeholder="请输入新密码(6到18位的数字或字母)"
             v-model="form.newPassword"
           ></i-input>
         </i-form-item>
-        <i-form-item
-          label=""
-          prop="newPasswordAgain"
-        >
+        <i-form-item label="" prop="newPasswordAgain">
           <i-input
             type="password"
             placeholder="请再次输入新密码"
@@ -44,11 +32,9 @@
           ></i-input>
         </i-form-item>
         <i-form-item style="text-align: left">
-          <i-button
-            size="large"
-            class="qm-primary-button"
-            @click="changePwd"
-          >保存</i-button>
+          <i-button size="large" class="qm-primary-button" @click="changePwd">
+            保存
+          </i-button>
         </i-form-item>
       </i-form>
     </div>

+ 6 - 6
src/views/NotFoundComponent.vue

@@ -2,15 +2,15 @@
   <div class="page-404">
     <h1>页面不存在!</h1>
 
-    <br>
-    <br>
+    <br />
+    <br />
     <div v-if="domain">
-      <i-button size="large" class="qm-primary-button" long @click="goLogin">返回登录页</i-button>
+      <i-button size="large" class="qm-primary-button" long @click="goLogin">
+        返回登录页
+      </i-button>
     </div>
 
-    <div v-else>
-      请关闭页面,重新登录!
-    </div>
+    <div v-else>请关闭页面,重新登录!</div>
   </div>
 </template>
 

+ 3 - 3
tests/vue/child.vue

@@ -1,9 +1,9 @@
 <template>
   <div>
     <button @click="$emit('countChange', counte++)">emit value</button>
-    <div>from parent: {{passToChild}} </div>
-    <div>from parent to computed: {{computedFromProps}} </div>
-    <div>from parent to data: {{dataFromProps}} </div>
+    <div>from parent: {{ passToChild }}</div>
+    <div>from parent to computed: {{ computedFromProps }}</div>
+    <div>from parent to data: {{ dataFromProps }}</div>
   </div>
 </template>
 

+ 8 - 9
tests/vue/event.vue

@@ -1,26 +1,25 @@
 <template>
   <div>
-    test - {{name}}
+    test - {{ name }}
 
     <div>
       <Child @countChange="childListener" />
-      <div>
-        {{globalCount}}
-      </div>
+      <div>{{ globalCount }}</div>
     </div>
 
     <div>
       选择你的理想:(use v-model, :model doesn't work)
-      <input type="checkbox" v-model="dreams" value="sleep"> sleeep
-      <input type="checkbox" v-model="dreams" value="eat"> eeat
+      <input type="checkbox" v-model="dreams" value="sleep" /> sleeep
+      <input type="checkbox" v-model="dreams" value="eat" /> eeat
     </div>
 
     <div>
       你有多高?
-      <input type="radio" name="height" v-model="height" value="-1.7cm"> 低于一米七
-      <input type="radio" name="height" v-model="height" value="+1.7cm"> 高于一米七
+      <input type="radio" name="height" v-model="height" value="-1.7cm" />
+      低于一米七
+      <input type="radio" name="height" v-model="height" value="+1.7cm" />
+      高于一米七
     </div>
-
   </div>
 </template>