|
|
@@ -549,6 +549,7 @@ const studentArray = ref<any>([])
|
|
|
// 跟随模式相关状态
|
|
|
const isCreator = ref(false) // 是否为创建人
|
|
|
const isFollowModeActive = ref(false) // 跟随模式是否开启
|
|
|
+const isFirstEnter = ref(true) // 是否首次进入
|
|
|
|
|
|
// 计算未提交作业的学生
|
|
|
const unsubmittedStudents = computed(() => {
|
|
|
@@ -2444,44 +2445,48 @@ const checkIsCreator = () => {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 初始化消息监听
|
|
|
*/
|
|
|
const messageInit = () => {
|
|
|
- // 如果是创建者,清空所有同步状态
|
|
|
- if (isCreator.value && docSocket.value) {
|
|
|
- console.log('🧹 创建者进入,清空所有同步状态')
|
|
|
- docSocket.value.transact(() => {
|
|
|
- // 清空消息
|
|
|
- const messageArray = docSocket.value?.getArray?.('message')
|
|
|
- if (messageArray) {
|
|
|
- messageArray.delete(0, messageArray.length)
|
|
|
- }
|
|
|
- // 清空计时器状态
|
|
|
- const timerStateMap = docSocket.value?.getMap?.('timerState')
|
|
|
- if (timerStateMap) {
|
|
|
- timerStateMap.clear()
|
|
|
- }
|
|
|
- // 清空激光笔状态
|
|
|
- const laserStateMap = docSocket.value?.getMap?.('laserState')
|
|
|
- if (laserStateMap) {
|
|
|
- laserStateMap.clear()
|
|
|
- }
|
|
|
- // 清空画图状态
|
|
|
- const writingBoardStateMap = docSocket.value?.getMap?.('writingBoardState')
|
|
|
- if (writingBoardStateMap) {
|
|
|
- writingBoardStateMap.clear()
|
|
|
- }
|
|
|
- })
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
if (docSocket.value && !yMessage.value) {
|
|
|
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 (isFirstEnter.value && isCreator.value && docSocket.value) {
|
|
|
+ console.log('🧹 首次进入且为创建者,清空所有同步状态')
|
|
|
+ docSocket.value.transact(() => {
|
|
|
+ // 清空消息
|
|
|
+ const messageArray = docSocket.value?.getArray?.('message')
|
|
|
+ if (messageArray) {
|
|
|
+ messageArray.delete(0, messageArray.length)
|
|
|
+ }
|
|
|
+ // 清空计时器状态
|
|
|
+ const timerStateMap = docSocket.value?.getMap?.('timerState')
|
|
|
+ if (timerStateMap) {
|
|
|
+ timerStateMap.clear()
|
|
|
+ }
|
|
|
+ // 清空激光笔状态
|
|
|
+ const laserStateMap = docSocket.value?.getMap?.('laserState')
|
|
|
+ if (laserStateMap) {
|
|
|
+ laserStateMap.clear()
|
|
|
+ }
|
|
|
+ // 清空画图状态
|
|
|
+ const writingBoardStateMap = docSocket.value?.getMap?.('writingBoardState')
|
|
|
+ if (writingBoardStateMap) {
|
|
|
+ writingBoardStateMap.clear()
|
|
|
+ }
|
|
|
+ })
|
|
|
+ // 标记已不再是首次进入
|
|
|
+ isFirstEnter.value = false
|
|
|
+ }
|
|
|
if (messages.length > 0) {
|
|
|
const now = Date.now()
|
|
|
const messagesToKeep: any[] = []
|