|
|
@@ -5,6 +5,60 @@ import {ref} from "vue";
|
|
|
|
|
|
export let isModified = ref(false)
|
|
|
|
|
|
+// ---- 窗口切换统计 ----
|
|
|
+export interface WindowSwitchEvent {
|
|
|
+ eventType: 'hidden' | 'visible';
|
|
|
+ timestamp: string;
|
|
|
+}
|
|
|
+
|
|
|
+export interface WindowSwitchData {
|
|
|
+ studentId: number;
|
|
|
+ assignmentId: number;
|
|
|
+ switchCount: number;
|
|
|
+ switchEvents: WindowSwitchEvent[];
|
|
|
+}
|
|
|
+
|
|
|
+// 离开窗口的总次数(visibilityState 变为 hidden 的次数)
|
|
|
+export const windowSwitchCount = ref(0)
|
|
|
+// 每次切换的详细记录
|
|
|
+export const windowSwitchEvents = ref<WindowSwitchEvent[]>([])
|
|
|
+
|
|
|
+let visibilityChangeHandler: (() => void) | null = null
|
|
|
+
|
|
|
+export const setupWindowSwitchListener = () => {
|
|
|
+ visibilityChangeHandler = () => {
|
|
|
+ const eventType = document.visibilityState === 'hidden' ? 'hidden' : 'visible'
|
|
|
+ if (eventType === 'hidden') {
|
|
|
+ windowSwitchCount.value++
|
|
|
+ }
|
|
|
+ windowSwitchEvents.value.push({
|
|
|
+ eventType,
|
|
|
+ timestamp: new Date().toISOString()
|
|
|
+ })
|
|
|
+ }
|
|
|
+ document.addEventListener('visibilitychange', visibilityChangeHandler)
|
|
|
+}
|
|
|
+
|
|
|
+export const removeWindowSwitchListener = () => {
|
|
|
+ if (visibilityChangeHandler) {
|
|
|
+ document.removeEventListener('visibilitychange', visibilityChangeHandler)
|
|
|
+ visibilityChangeHandler = null
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+export const resetWindowSwitchData = () => {
|
|
|
+ windowSwitchCount.value = 0
|
|
|
+ windowSwitchEvents.value = []
|
|
|
+}
|
|
|
+
|
|
|
+export const getWindowSwitchData = (studentId: number, assignmentId: number): WindowSwitchData => ({
|
|
|
+ studentId,
|
|
|
+ assignmentId,
|
|
|
+ switchCount: windowSwitchCount.value,
|
|
|
+ switchEvents: [...windowSwitchEvents.value]
|
|
|
+})
|
|
|
+// ---- 窗口切换统计结束 ----
|
|
|
+
|
|
|
// 处理word区鼠标移动的记录
|
|
|
// export const setupWordMouseMoveListener = (indexedDB: IndexedDB) => {
|
|
|
// emitter.on("word-mouse-move", (event: any) => {
|
|
|
@@ -33,6 +87,7 @@ export const registerAllEventListeners = (indexedDB: IndexedDB) => {
|
|
|
// 后续若有其他事件监听,在此处添加调用对应的设置函数即可
|
|
|
setupClickAISendButtonListener(indexedDB);
|
|
|
setupIsModifiedListener();
|
|
|
+ setupWindowSwitchListener();
|
|
|
// setupWordMouseMoveListener(indexedDB)
|
|
|
};
|
|
|
|
|
|
@@ -41,5 +96,6 @@ export const removeAllEventListeners = () => {
|
|
|
// 后续如有更多事件监听,在此处添加移除对应事件的代码
|
|
|
emitter.off("click-ai-send-button");
|
|
|
emitter.off("is-modified");
|
|
|
+ removeWindowSwitchListener();
|
|
|
// emitter.off("word-mouse-move");
|
|
|
};
|