Browse Source

Merge branch 'beta'

SanHQin 20 hours ago
parent
commit
e0b7d566a1

+ 1 - 1
dist/index.html

@@ -32,7 +32,7 @@
     html,
     body{
       font-family: '黑体';
-    }</style><link href=./static/css/app.6cee8f40538a7851c60e7cecf98f1f02.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.becc9317549795ada446.js></script><script type=text/javascript src=./static/js/app.fdd5c87a488ae0d6054d.js></script></body></html><script>function stopSafari() {
+    }</style><link href=./static/css/app.2c466d06caba6d8776e8bf82282bb49a.css rel=stylesheet></head><body><div id=app></div><script type=text/javascript src=./static/js/manifest.3ad1d5771e9b13dbdad2.js></script><script type=text/javascript src=./static/js/vendor.becc9317549795ada446.js></script><script type=text/javascript src=./static/js/app.9619376fb75e883693bf.js></script></body></html><script>function stopSafari() {
     //阻止safari浏览器双击放大功能
     let lastTouchEnd = 0  //更新手指弹起的时间
     document.documentElement.addEventListener("touchstart", function (event) {

File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.6cee8f40538a7851c60e7cecf98f1f02.css


File diff suppressed because it is too large
+ 0 - 0
dist/static/css/app.6cee8f40538a7851c60e7cecf98f1f02.css.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.fdd5c87a488ae0d6054d.js


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/app.fdd5c87a488ae0d6054d.js.map


File diff suppressed because it is too large
+ 0 - 0
dist/static/js/manifest.3ad1d5771e9b13dbdad2.js.map


+ 34 - 0
src/App.vue

@@ -483,4 +483,38 @@ html::-webkit-scrollbar-thumb {
   height: 100%;
   overflow: hidden;
 }
+
+.el-message-box__btns>.pptEasyClassConfirmButtonText {
+  background: #FCCF00 !important;
+  color: #ffffffe0 !important;
+  border-color: #FCCF00 !important;
+}
+
+.el-message-box__btns>.pptEasyClassConfirmButtonText:hover{
+  background: #e9be02 !important;
+  color: #ffffffe0 !important;
+  border-color: #e9be02 !important;
+}
+
+.el-message-box__btns>.pptEasyClassCancelButtonText {
+  background: #FFFFFF  !important;
+  color: #00000090 !important;
+  border-color: #DDDDDD !important;
+}
+
+.el-message-box__btns>.pptEasyClassCancelButtonText:hover {
+  background: #d8d8d8  !important;
+  color: #00000090 !important;
+  border-color: #d8d8d8 !important;
+}
+
+.pptEasyClassMessage{
+  background: #fff !important;
+  box-shadow: 0px 4px 5px -2px rgba(0,0,0,0.08), 0px 8px 12px 1px rgba(0,0,0,0.04), 0px 3px 15px 3px rgba(0,0,0,0.05) !important;
+  min-width: auto !important;
+}
+
+.pptEasyClassMessage>.el-message__icon{
+  color: #FCCF00;
+}
 </style>

+ 24 - 18
src/components/easy2/studyStudent.vue

@@ -21969,6 +21969,7 @@ export default {
       }, 600000);
     },
     setoTime(time) {
+      this.doSyncClassData();
       let params = [
         {
           uid: this.userid,
@@ -25727,7 +25728,25 @@ export default {
         .catch(err => {
           console.error(err);
         });
-    }
+    },
+    doSyncClassData(){
+      if(this.courseDetail.userid == this.userid && this.org == '16ace517-b5c7-4168-a9bb-a9e0035df840'){
+        let endTime = new Date().toLocaleString("zh-CN", { 
+            hour12: false, 
+            timeZone: "Asia/Shanghai" 
+          }).replace(/\//g, "-")
+        let courseTime = Math.floor((new Date(endTime) - new Date(this.startTime)) / (1000 * 60))
+        this.syncClassData({
+          courseId: this.id,
+          title: this.courseDetail.title,
+          courseGrade: this.tcid2 ? this.tcid2 : '',
+          courseTime: courseTime,
+          startTime: this.startTime,
+          endTime: endTime,
+        })
+        console.log('同步数据')
+      }
+    },
   },
   directives: {
     // 使用局部注册指令的方式
@@ -25776,22 +25795,7 @@ export default {
     clearInterval(this.opertimer);
     this.opertimer = null;
     this.updateSplitScreenData(1);
-    if(this.courseDetail.userid == this.userid && this.org == '16ace517-b5c7-4168-a9bb-a9e0035df840'){
-      let endTime = new Date().toLocaleString("zh-CN", { 
-          hour12: false, 
-          timeZone: "Asia/Shanghai" 
-        }).replace(/\//g, "-")
-      let courseTime = Math.floor((new Date(endTime) - new Date(this.startTime)) / (1000 * 60))
-      this.syncClassData({
-        courseId: this.id,
-        title: this.courseDetail.title,
-        courseGrade: this.tcid2 ? this.tcid2 : '',
-        courseTime: courseTime,
-        startTime: this.startTime,
-        endTime: endTime,
-      })
-      console.log('同步数据')
-    }
+    this.doSyncClassData();
   },
   computed: {
     renderedFormula2() {
@@ -26027,7 +26031,9 @@ export default {
     } catch (error) {
       console.log(error)
     }
-
+    setTimeout(() => {
+      this.doSyncClassData();
+    }, 1000);
     this.getCode2()
     this.setOperationTime();
     this.selectEva();

+ 24 - 17
src/components/easy3/studyStudent.vue

@@ -17381,6 +17381,7 @@ export default {
       }, 600000);
     },
     setoTime(time) {
+      this.doSyncClassData();
       let params = [
         {
           uid: this.userid,
@@ -21052,7 +21053,25 @@ export default {
     StulookMode(flag) {
       this.IsStulook = flag;
       this.updateIsStulook();
-    }
+    },
+    doSyncClassData(){
+      if(this.courseDetail.userid == this.userid && this.org == '16ace517-b5c7-4168-a9bb-a9e0035df840'){
+        let endTime = new Date().toLocaleString("zh-CN", { 
+            hour12: false, 
+            timeZone: "Asia/Shanghai" 
+          }).replace(/\//g, "-")
+        let courseTime = Math.floor((new Date(endTime) - new Date(this.startTime)) / (1000 * 60))
+        this.syncClassData({
+          courseId: this.id,
+          title: this.courseDetail.title,
+          courseGrade: this.tcid2 ? this.tcid2 : '',
+          courseTime: courseTime,
+          startTime: this.startTime,
+          endTime: endTime,
+        })
+        console.log('同步数据')
+      }
+    },
   },
   directives: {
     // 使用局部注册指令的方式
@@ -21099,22 +21118,7 @@ export default {
     clearInterval(this.opertimer);
     this.opertimer = null;
 		this.updateSplitScreenData(1);
-    if(this.courseDetail.userid == this.userid && this.org == '16ace517-b5c7-4168-a9bb-a9e0035df840'){
-      let endTime = new Date().toLocaleString("zh-CN", { 
-          hour12: false, 
-          timeZone: "Asia/Shanghai" 
-        }).replace(/\//g, "-")
-      let courseTime = Math.floor((new Date(endTime) - new Date(this.startTime)) / (1000 * 60))
-      this.syncClassData({
-        courseId: this.id,
-        title: this.courseDetail.title,
-        courseGrade: this.tcid2 ? this.tcid2 : '',
-        courseTime: courseTime,
-        startTime: this.startTime,
-        endTime: endTime,
-      })
-      console.log('同步数据')
-    }
+    this.doSyncClassData();
   },
   computed: {
     renderedFormula2() {
@@ -21348,6 +21352,9 @@ export default {
     } catch (error) {
       console.log(error)
     }
+    setTimeout(() => {
+      this.doSyncClassData();
+    }, 1000);
     this.getCode2()
     this.setOperationTime();
     this.selectEva();

+ 87 - 38
src/components/pptEasyClass/index.vue

@@ -14,15 +14,19 @@
             <img src="../../assets/icon/newIcon/return.svg" alt="" />
           </div>
           <div v-if="tcid" class="class-info-group">
-            <span class="class-label">班级</span>
+            <span class="class-label">{{ lang.ssClass }}</span>
             <span class="class-value">{{ className }}</span>
           </div>
           <div v-if="tcid" class="class-info-group">
-            <span class="class-label" v-if="inviteCode">识别码</span>
+            <span class="class-label" v-if="inviteCode">{{ lang.ssInviteCode }}</span>
             <span class="class-value" v-if="inviteCode">{{ inviteCode }}</span>
           </div>
         </div>
         <div class="pec_h_center">
+          <div class="pec_h_r_btn_refresh" :class="{ 'recording': recordedForm.status == 1 }" @click="toggleRecording" v-show="(jArray.includes(oid) || jArray.includes(org)) && courseDetail.userid == userid && tcid">
+            <svg t="1772588344140"  viewBox="0 0 1024 1024" p-id="1693" width="200" height="200"><path d="M512 1024a512.568889 512.568889 0 0 1-512-512 512.625778 512.625778 0 0 1 512-512 512.568889 512.568889 0 0 1 512 512 512.568889 512.568889 0 0 1-512 512zM512 73.329778c-241.948444 0-438.670222 196.835556-438.670222 438.670222S270.051556 950.670222 512 950.670222s438.670222-196.835556 438.670222-438.670222S753.948444 73.329778 512 73.329778z m0 686.592a245.191111 245.191111 0 1 1 0-490.382222 245.191111 245.191111 0 0 1 0 490.382222z" p-id="1694"></path></svg>
+              <span>{{ recordedForm.status == 1 ? lang.ssStopRecording2 : lang.ssRecord }}</span>
+          </div>
           <el-tooltip effect="dark" :content="courseDetail.title" placement="bottom">
             <div class="pec_h_l_title">
               <span>{{ courseDetail.title }}</span>
@@ -38,12 +42,12 @@
               inactive-color="#d8d8d8"
               @change="onFreeBrowseChange"
             ></el-switch>
-            <span class="switch-label" :class="{ active: freeBrowse }">{{ freeBrowse ? '自由浏览' : '跟随模式' }}</span>
+            <span class="switch-label" :class="{ active: freeBrowse }">{{ freeBrowse ? lang.ssFreeBrowse : lang.ssFollowMode }}</span>
           </div>
           <div class="free-browse-switch" v-if="tType == 2">
-            <span class="switch-label" :class="{ active: freeBrowse }">{{ freeBrowse ? '自由浏览' : '跟随模式' }}</span>
+            <span class="switch-label" :class="{ active: freeBrowse }">{{ freeBrowse ? lang.ssFreeBrowse : lang.ssFollowMode }}</span>
           </div>
-          <el-tooltip effect="dark" content="刷新" placement="bottom">
+          <el-tooltip effect="dark" :content="lang.ssRefresh" placement="bottom">
             <div class="refresh_icon" @click="refreshCourse">
                 <img src="../../assets/icon/course/refresh-2.svg" />
             </div>
@@ -53,12 +57,9 @@
           <div class="pec_h_r_btnArea">
             <!-- openObserveDialog -->
             <!-- toggleRecording -->
-            <div class="pec_h_r_btn_refresh" :class="{ 'recording': recordedForm.status == 1 }" @click="toggleRecording" v-show="(jArray.includes(oid) || jArray.includes(org)) && courseDetail.userid == userid && tcid">
-              <span>{{ recordedForm.status == 1 ? '结束录音' : '开始录音' }}</span>
-            </div>
             <div class="pec_h_r_btn_afterClass" @click="afterClass" v-if="courseDetail.userid == userid">
               <img src="../../assets/icon/newIcon/afterClass.svg" alt="" />
-              <span>下课</span>
+              <span>{{ lang.ssEndClass }}</span>
             </div>
             <div class="name_box" v-if="tType == 2">
               {{ userJson.username }}
@@ -168,10 +169,26 @@ export default {
         const now = new Date();
         const duration = (now - new Date(this.recordingStartTime)) / 1000;
         if (duration < 5) {
-          this.$message.warning('录音时间至少需要5秒');
+          this.$message.warning(this.lang.ssRecordingTimeAtLeast5Seconds);
           return;
         }
-        this.onFinishRecordWithMicrosoft();
+        this.$confirm(this.lang.ssStopRecordingNotice, this.lang.ssStopRecordingConfirm, {
+          confirmButtonText: this.lang.ssConfirm,
+          cancelButtonText: this.lang.ssCancel,
+          confirmButtonClass:"pptEasyClassConfirmButtonText",
+          cancelButtonClass:"pptEasyClassCancelButtonText"
+        }).then(() => {
+          console.log("确定")
+          // this.$message({
+          //   dangerouslyUseHTMLString: true,
+          //   customClass:"pptEasyClassMessage",
+          //   message: '已停止录制 <p style="color:#3AB855;text-decoration: underline;cursor: pointer;float:right;margin-left:10px" target="_blank">查看结果</p>'
+          // });
+          this.onFinishRecordWithMicrosoft();
+        }).catch(() => {
+          console.log("取消")
+        });
+
       } else {
         const now = new Date();
         const duration = (now - new Date(this.recordingEndTime)) / 1000;
@@ -258,7 +275,12 @@ export default {
           this.recordedForm.status = 0;
           this.controlsStatus = 2;
           this.showGetTextLoading = false;
-          this.$message.success("已结束录音");
+          // this.$message.success("已结束录音");
+          this.$message({
+            dangerouslyUseHTMLString: true,
+            customClass:"pptEasyClassMessage",
+            message: `${this.lang.ssStoppedRecording} <p style="color:#3AB855;text-decoration: underline;cursor: pointer;float:right;margin-left:10px" target="_blank">${this.lang.ssViewRecordingResult}</p>`
+          });
           console.log("结束录音👇");
           console.log("结束录音", e);
           this.recordedForm.audioBlob.push(e.preaudio);
@@ -385,7 +407,7 @@ export default {
         })
         .catch(err => {
           console.log(err);
-          this.$message.error("获取课程数据失败");
+          this.$message.error(this.lang.ssGetCourseDataFail);
           this.pageLoading = false;
         });
     },
@@ -465,9 +487,9 @@ export default {
       }
     },
     afterClass() {
-      this.$confirm('此操作将使当前课程内所有学生退出登录,是否继续?', '提示', {
-        confirmButtonText: '确定',
-        cancelButtonText: '取消',
+      this.$confirm(this.lang.ssEndClassConfirm, this.lang.ssPrompt, {
+        confirmButtonText: this.lang.ssConfirm,
+        cancelButtonText: this.lang.ssCancel,
         type: 'warning'
       }).then(() => {
         this.$refs.ppt.contentWindow.PPTistStudent.forceLogout();
@@ -489,6 +511,7 @@ export default {
       }, 600000);
     },
     setoTime(time) {
+      this.doSyncClassData();
       let params = [
         {
           uid: this.userid,
@@ -513,26 +536,29 @@ export default {
 				this.jArray = Array;
 			})
 		},
+    doSyncClassData(){
+      if (this.courseDetail.userid == this.userid && this.org == '16ace517-b5c7-4168-a9bb-a9e0035df840') {
+        let endTime = new Date().toLocaleString("zh-CN", {
+          hour12: false,
+          timeZone: "Asia/Shanghai"
+        }).replace(/\//g, "-")
+        let courseTime = Math.floor((new Date(endTime) - new Date(this.startTime)) / (1000 * 60))
+        this.syncClassData({
+          courseId: this.id,
+          title: this.courseDetail.title,
+          courseGrade: this.tcid2 ? this.tcid2 : '',
+          courseTime: courseTime,
+          startTime: this.startTime,
+          endTime: endTime,
+        })
+        console.log('同步数据')
+      }
+    },
   },
   destroyed() {
     clearInterval(this.opertimer);
     this.opertimer = null;
-    if (this.courseDetail.userid == this.userid && this.org == '16ace517-b5c7-4168-a9bb-a9e0035df840') {
-      let endTime = new Date().toLocaleString("zh-CN", {
-        hour12: false,
-        timeZone: "Asia/Shanghai"
-      }).replace(/\//g, "-")
-      let courseTime = Math.floor((new Date(endTime) - new Date(this.startTime)) / (1000 * 60))
-      this.syncClassData({
-        courseId: this.id,
-        title: this.courseDetail.title,
-        courseGrade: this.tcid2 ? this.tcid2 : '',
-        courseTime: courseTime,
-        startTime: this.startTime,
-        endTime: endTime,
-      })
-      console.log('同步数据')
-    }
+    this.doSyncClassData();
   },
   async mounted() {
     this.setoTime("1");
@@ -554,6 +580,9 @@ export default {
         });
         this.userJson = res.data[0][0]
     }
+    setTimeout(() => {
+      this.doSyncClassData();
+    }, 1000);
   }
 };
 </script>
@@ -659,15 +688,35 @@ export default {
   margin-right: 5px;
 }
 
-.pec_h_r_btnArea>.pec_h_r_btn_refresh {
+.pec_h_center>.pec_h_r_btn_refresh {
   color: #fff;
-  background-color: #0061ff;
-  border-color: #0061ff;
+  /* background-color: #0061ff;
+  border-color: #0061ff; */
+  padding: 9px 10px;
+  margin-right: 15px;
+  border-radius: 26px;
+  display: flex;
+  align-items: center;
+  justify-content: center;
+  gap: 5px;
+  background: #FFF7F5;
+  color: #000000;
+  font-weight: 400;
+  cursor: pointer;
+  fill: #666666;
+}
+
+.pec_h_center>.pec_h_r_btn_refresh>svg{
+
+  width: 1rem;
+  height: 1rem;
 }
 
-.pec_h_r_btnArea>.pec_h_r_btn_refresh.recording {
-  background-color: #F53F3F;
-  border-color: #F53F3F;
+.pec_h_center>.pec_h_r_btn_refresh.recording {
+  /* background-color: #F53F3F;
+  border-color: #F53F3F; */
+  background: #FFF7E8;
+  fill: #FF9300;
   animation: pulse 1.5s infinite;
 }
 

+ 23 - 16
src/components/studyStudent.vue

@@ -17315,6 +17315,7 @@ export default {
       }, 600000);
     },
     setoTime(time) {
+      this.doSyncClassData();
       let params = [
         {
           uid: this.userid,
@@ -21004,6 +21005,24 @@ export default {
       this.IsStulook = flag;
       this.updateIsStulook();
     },
+    doSyncClassData(){
+      if(this.courseDetail.userid == this.userid && this.org == '16ace517-b5c7-4168-a9bb-a9e0035df840'){
+        let endTime = new Date().toLocaleString("zh-CN", { 
+            hour12: false, 
+            timeZone: "Asia/Shanghai" 
+          }).replace(/\//g, "-")
+        let courseTime = Math.floor((new Date(endTime) - new Date(this.startTime)) / (1000 * 60))
+        this.syncClassData({
+          courseId: this.id,
+          title: this.courseDetail.title,
+          courseGrade: this.tcid2 ? this.tcid2 : '',
+          courseTime: courseTime,
+          startTime: this.startTime,
+          endTime: endTime,
+        })
+        console.log('同步数据')
+      }
+    },
   },
   directives: {
     // 使用局部注册指令的方式
@@ -21050,22 +21069,7 @@ export default {
     clearInterval(this.opertimer);
     this.opertimer = null;
 		this.updateSplitScreenData(1);
-    if(this.courseDetail.userid == this.userid && this.org == '16ace517-b5c7-4168-a9bb-a9e0035df840'){
-      let endTime = new Date().toLocaleString("zh-CN", { 
-          hour12: false, 
-          timeZone: "Asia/Shanghai" 
-        }).replace(/\//g, "-")
-      let courseTime = Math.floor((new Date(endTime) - new Date(this.startTime)) / (1000 * 60))
-      this.syncClassData({
-        courseId: this.id,
-        title: this.courseDetail.title,
-        courseGrade: this.tcid2 ? this.tcid2 : '',
-        courseTime: courseTime,
-        startTime: this.startTime,
-        endTime: endTime,
-      })
-      console.log('同步数据')
-    }
+    this.doSyncClassData();
   },
   computed: {
     renderedFormula2() {
@@ -21285,6 +21289,9 @@ export default {
         this.updateToolDetail(this.toolDetailIndex);
       }
     });
+    setTimeout(() => {
+      this.doSyncClassData();
+    }, 1000);
     this.getCode2()
     this.setOperationTime();
     this.selectEva();

+ 13 - 2
src/lang/cn.json

@@ -45,6 +45,11 @@
   "ssAiExperience": "AI体验",
   "ssAppCenter": "应用中心",
   "ssRefresh": "刷新",
+  "ssFreeBrowse": "自由浏览",
+  "ssFollowMode": "跟随模式",
+  "ssEndClass": "下课",
+  "ssGetCourseDataFail": "获取课程数据失败",
+  "ssEndClassConfirm": "此操作将使当前课程内所有学生退出登录,是否继续?",
   "ssComment": "评论",
   "ssRecord": "录制",
   "ssDownload": "下载",
@@ -884,5 +889,11 @@
   "ssWordCloudFail": "生成词云图失败",
   "ssSubmitWork": "提交作业",
   "ssLikeL":"点赞",
-  "ssCorrectOrder": "正确排序"
-}
+  "ssCorrectOrder": "正确排序",
+  "ssStopRecording2": "停止录制",
+  "ssRecordingTimeAtLeast5Seconds": "录音时间至少需要5秒",
+  "ssStopRecordingNotice": "停止录制后,录音文件将发送至课堂分析应用。",
+  "ssStopRecordingConfirm": "确定停止课堂录制?",
+  "ssStoppedRecording": "已停止录制",
+  "ssViewRecordingResult": "查看结果"
+}

+ 12 - 1
src/lang/en.json

@@ -45,6 +45,11 @@
   "ssAiExperience": "AI Experience",
   "ssAppCenter": "App Center",
   "ssRefresh": "Refresh",
+  "ssFreeBrowse": "Free Browse",
+  "ssFollowMode": "Follow Mode",
+  "ssEndClass": "End Class",
+  "ssGetCourseDataFail": "Failed to get course data",
+  "ssEndClassConfirm": "This will log out all students in the current course. Continue?",
   "ssComment": "Comment",
   "ssRecord": "Record",
   "ssDownload": "Download",
@@ -882,5 +887,11 @@
   "ssWordCloudFail": "Failed to generate word cloud",
   "ssSubmitWork": "Submit Work",
   "ssLikeL":"Like",
-  "ssCorrectOrder": "Correct Order"
+  "ssCorrectOrder": "Correct Order",
+  "ssStopRecording2": "Stop Recording",
+  "ssRecordingTimeAtLeast5Seconds": "The recording time must be at least 5 seconds",
+  "ssStopRecordingNotice": "After stopping the recording, the file will be sent to the classroom analysis application.",
+  "ssStopRecordingConfirm": "Are you sure you want to stop classroom recording?",
+  "ssStoppedRecording": "Recording stopped",
+  "ssViewRecordingResult": "View result"
 }

+ 12 - 1
src/lang/hk.json

@@ -45,6 +45,11 @@
   "ssAiExperience": "AI體驗",
   "ssAppCenter": "應用中心",
   "ssRefresh": "刷新",
+  "ssFreeBrowse": "自由瀏覽",
+  "ssFollowMode": "跟隨模式",
+  "ssEndClass": "下課",
+  "ssGetCourseDataFail": "獲取課程數據失敗",
+  "ssEndClassConfirm": "此操作將使當前課程內所有學生退出登錄,是否繼續?",
   "ssComment": "評論",
   "ssRecord": "錄製",
   "ssDownload": "下載",
@@ -882,5 +887,11 @@
   "ssWordCloudFail": "生成詞雲圖失敗",
   "ssSubmitWork": "提交作業",
   "ssLikeL":"點贊",
-  "ssCorrectOrder": "正確排序"
+  "ssCorrectOrder": "正確排序",
+  "ssStopRecording2": "停止錄製",
+  "ssRecordingTimeAtLeast5Seconds": "錄音時間至少需要5秒",
+  "ssStopRecordingNotice": "停止錄製後,錄音檔案將發送至課堂分析應用。",
+  "ssStopRecordingConfirm": "確定停止課堂錄製?",
+  "ssStoppedRecording": "已停止錄製",
+  "ssViewRecordingResult": "查看結果"
 }

Some files were not shown because too many files changed in this diff