lsc пре 4 недеља
родитељ
комит
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 connectionStatus = ref<'disconnected' | 'connecting' | 'connected'>('disconnected')
 
+// 同步数据最大保留时间(40分钟)
+const SYNC_DATA_MAX_AGE = 40 * 60 * 1000 // 40分钟 = 40 * 60 * 1000毫秒
+
 //  切换选择题题目
 const changeWorkIndex = (type:number) => {
   if (answerTheResultRef.value && answerTheResultRef.value.changeWorkIndex) {
@@ -2156,7 +2159,7 @@ const checkPPTFile = async (jsonObj: any) => {
   const data3 = res[2]
   console.log(data1, data2, data3)
   if (res[0].length) {
-    pptJsonFileid.value = data1[0][0].fileid
+    pptJsonFileid.value = data1[0].fileid
   }
   else {
     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)
     yMessage.value = docSocket.value.getArray('message')
     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) => {
         const message = i.content.getContent()[0]
         console.log('yMessage', message)