Przeglądaj źródła

环境检测:websocket

Michael Wang 5 lat temu
rodzic
commit
c050441b5b

+ 25 - 12
src/features/OnlineExam/CheckComputer.vue

@@ -637,7 +637,6 @@ import PulseLoader from "vue-spinner/src/PulseLoader.vue";
 import {
   openWS,
   closeWsWithoutReconnect,
-  getQRCode,
 } from "@/features/OnlineExam/Examing/ws";
 import { createNamespacedHelpers } from "vuex";
 const { mapState } = createNamespacedHelpers("examingHomeModule");
@@ -735,14 +734,14 @@ export default {
     },
   },
   watch: {
-    questionQrCode(value) {
-      // console.log(this.examQuestion.studentAnswer);
-      // console.log("watch", value);
-      this.wechat.qrValue = value.qrCode;
-      this.wechat.examRecordDataId = decodeURIComponent(value.qrCode).match(
-        /&examRecordDataId=(\d+)&/
-      )[1];
-    },
+    // questionQrCode(value) {
+    //   // console.log(this.examQuestion.studentAnswer);
+    //   // console.log("watch", value);
+    //   this.wechat.qrValue = value.qrCode;
+    //   this.wechat.examRecordDataId = decodeURIComponent(value.qrCode).match(
+    //     /&examRecordDataId=(\d+)&/
+    //   )[1];
+    // },
     questionQrCodeScanned() {
       // console.log(this.examQuestion.studentAnswer);
       // console.log("watch", value);
@@ -794,10 +793,24 @@ export default {
     this.getNowInterval = setInterval(() => {
       this.nowDate = Date.now();
     }, 1000);
-    openWS({ examRecordDataId: this.$store.state.user.id });
-    if (!getQRCode(1, "AUDIO", { testEnv: true })) {
+    openWS({});
+    const fetchQR = async () => {
+      const examRecordDataId = this.$store.state.user.id;
+      const response = await this.$http.post(
+        "/api/ecs_oe_student/examControl/getQrCode",
+        {
+          examRecordDataId,
+          order: 1,
+          transferFileType: "AUDIO",
+          testEnv: true,
+        }
+      );
+      this.wechat.qrValue = response.data;
+      this.wechat.examRecordDataId = examRecordDataId;
+    };
+    if (this.wechat.qrValue) {
       this.getQRCodeTimeout = setTimeout(() => {
-        getQRCode(1, "AUDIO", { testEnv: true });
+        fetchQR();
       }, 3000);
     }
   },

+ 12 - 8
src/features/OnlineExam/Examing/TextQuestionView.vue

@@ -147,7 +147,6 @@
 
 <script>
 import QuestionBody from "./QuestionBody";
-import { getQRCode } from "./ws.js";
 import { createNamespacedHelpers } from "vuex";
 const { mapMutations, mapGetters, mapState } = createNamespacedHelpers(
   "examingHomeModule"
@@ -372,16 +371,21 @@ export default {
       // });
       this.answerDivKey = Math.random();
     },
-    fetchQRCode() {
+    async fetchQRCode() {
       if (this.shouldFetchQrCode) {
         const transferFileType =
           this.examQuestion.answerType === "SINGLE_AUDIO" ? "AUDIO" : "PIC";
-        if (!getQRCode(this.examQuestion.order, transferFileType)) {
-          clearTimeout(this.fetchQRCodeTimeout);
-          this.fetchQRCodeTimeout = setTimeout(() => {
-            this.fetchQRCode();
-          }, 3000);
-        }
+        const examRecordDataId = this.$route.params.examRecordDataId;
+        const response = await this.$http.post(
+          "/api/ecs_oe_student/examControl/getQrCode",
+          {
+            examRecordDataId,
+            order: +this.examQuestion.order,
+            transferFileType,
+            testEnv: false,
+          }
+        );
+        this.qrValue = response.data;
       }
     },
     photoAdded(url) {

+ 30 - 26
src/features/OnlineExam/Examing/ws.js

@@ -113,32 +113,36 @@ export function closeWsWithoutReconnect() {
   }
 }
 
-export function getQRCode(order, transferFileType, testEnv) {
-  if (ws.readyState === ws.OPEN) {
-    ws.send(
-      JSON.stringify({
-        eventType: "GET_QR_CODE",
-        order,
-        transferFileType: transferFileType,
-        ...testEnv,
-      })
-    );
-    return true;
-  } else {
-    return false;
-  }
-}
+// export function getQRCode(order, transferFileType, testEnv) {
+//   if (ws.readyState === ws.OPEN) {
+//     ws.send(
+//       JSON.stringify({
+//         eventType: "GET_QR_CODE",
+//         order,
+//         transferFileType: transferFileType,
+//         ...testEnv,
+//       })
+//     );
+//     return true;
+//   } else {
+//     return false;
+//   }
+// }
 
 function processWSMessage(event) {
-  // console.log("get ws msg: ", event);
+  console.log("get ws msg: ", event);
   let res;
   try {
-    res = JSON.parse(event.data);
+    res = JSON.parse(event.data).content;
   } catch (error) {
     window._hmt.push(["_trackEvent", "websocket", "JSON.parse出错" + error]);
     return;
   }
-  if (res.eventType !== "HEARTBEAT" && !res.isSuccess) {
+  if (!res) {
+    console.log("ws message format error", event);
+    return;
+  }
+  if (res.eventType && res.eventType !== "HEARTBEAT" && !res.isSuccess) {
     Message.error({
       content: res.errorMessage,
       duration: 10,
@@ -150,14 +154,14 @@ function processWSMessage(event) {
     case "HEARTBEAT":
       // console.log("ws heartbeat response from server");
       break;
-    case "GET_QR_CODE":
-      console.log("get qrcode", res);
-      window._hmt.push(["_trackEvent", "websocket", "获得二维码"]);
-      store.commit("examingHomeModule/setQuestionQrCode", {
-        qrCode: res.data.qrCode,
-        order: res.data.order,
-      });
-      break;
+    // case "GET_QR_CODE":
+    //   console.log("get qrcode", res);
+    //   window._hmt.push(["_trackEvent", "websocket", "获得二维码"]);
+    //   store.commit("examingHomeModule/setQuestionQrCode", {
+    //     qrCode: res.data.qrCode,
+    //     order: res.data.order,
+    //   });
+    //   break;
     case "SCAN_QR_CODE":
       console.log("wx scanned qrcode", res);
       window._hmt.push(["_trackEvent", "websocket", "二维码被扫描"]);