lsc 1 月之前
父节点
当前提交
a1e95ad03f
共有 1 个文件被更改,包括 33 次插入1 次删除
  1. 33 1
      src/views/Student/index.vue

+ 33 - 1
src/views/Student/index.vue

@@ -580,6 +580,9 @@ const reconnectTimer = ref<NodeJS.Timeout | null>(null)
 const isConnecting = ref(false)
 const isConnecting = ref(false)
 const connectionStatus = ref<'disconnected' | 'connecting' | 'connected'>('disconnected')
 const connectionStatus = ref<'disconnected' | 'connecting' | 'connected'>('disconnected')
 
 
+// 同步数据最大保留时间(40分钟)
+const SYNC_DATA_MAX_AGE = 40 * 60 * 1000 // 40分钟 = 40 * 60 * 1000毫秒
+
 //  切换选择题题目
 //  切换选择题题目
 const changeWorkIndex = (type:number) => {
 const changeWorkIndex = (type:number) => {
   if (answerTheResultRef.value && answerTheResultRef.value.changeWorkIndex) {
   if (answerTheResultRef.value && answerTheResultRef.value.changeWorkIndex) {
@@ -2156,7 +2159,7 @@ const checkPPTFile = async (jsonObj: any) => {
   const data3 = res[2]
   const data3 = res[2]
   console.log(data1, data2, data3)
   console.log(data1, data2, data3)
   if (res[0].length) {
   if (res[0].length) {
-    pptJsonFileid.value = data1[0][0].fileid
+    pptJsonFileid.value = data1[0].fileid
   }
   }
   else {
   else {
     const pptJsonFile = new File([jsonObj], courseDetail.value.courseName + '.json', { type: 'application/json' })
     const pptJsonFile = new File([jsonObj], courseDetail.value.courseName + '.json', { type: 'application/json' })
@@ -2450,6 +2453,35 @@ const messageInit = () => {
     console.log('获取message', docSocket.value, yMessage.value)
     console.log('获取message', docSocket.value, yMessage.value)
     yMessage.value = docSocket.value.getArray('message')
     yMessage.value = docSocket.value.getArray('message')
     yMessage.value.observe((e: any) => {
     yMessage.value.observe((e: any) => {
+      // 数据同步完成后,清理超过40分钟的消息数据
+      const messages = yMessage.value.toArray()
+      if (messages.length > 0) {
+        const now = Date.now()
+        const messagesToKeep: any[] = []
+
+        for (let i = messages.length - 1; i >= 0; i--) {
+          const message = messages[i]
+          if (message && typeof message === 'object' && message.timestamp) {
+            const messageTime = new Date(message.timestamp).getTime()
+            if (now - messageTime <= SYNC_DATA_MAX_AGE) {
+              messagesToKeep.unshift(message)
+            }
+          }
+        }
+
+        // 如果有需要清理的消息
+        if (messagesToKeep.length < messages.length) {
+          // 修复报错:docSocket.value 可能为 null
+          if (docSocket.value) {
+            docSocket.value.transact(() => {
+              yMessage.value.delete(0, messages.length)
+              messagesToKeep.forEach((msg: any) => yMessage.value.push([msg]))
+            })
+            console.log(`🧹 清理了 ${messages.length - messagesToKeep.length} 条超过40分钟的消息`)
+          }
+        }
+      }
+
       e.changes.added.forEach((i: any) => {
       e.changes.added.forEach((i: any) => {
         const message = i.content.getContent()[0]
         const message = i.content.getContent()[0]
         console.log('yMessage', message)
         console.log('yMessage', message)