115 lines
2.8 KiB
JavaScript
115 lines
2.8 KiB
JavaScript
/**
|
|
* 访问跟踪器 - 记录用户访问行为
|
|
*/
|
|
class AccessTracker {
|
|
constructor() {
|
|
this.currentCourseId = null;
|
|
this.currentGameId = null;
|
|
this.accessStartTime = null;
|
|
this.accessType = null;
|
|
}
|
|
|
|
/**
|
|
* 开始跟踪课程访问
|
|
*/
|
|
startCourseAccess(courseId) {
|
|
this.currentCourseId = courseId;
|
|
this.accessType = 'course';
|
|
this.accessStartTime = Date.now();
|
|
|
|
console.log('开始跟踪课程访问:', courseId);
|
|
|
|
// 立即记录访问开始
|
|
this.recordAccess(courseId, null, 'course', 0);
|
|
}
|
|
|
|
/**
|
|
* 开始跟踪游戏访问
|
|
*/
|
|
startGameAccess(gameId) {
|
|
this.currentGameId = gameId;
|
|
this.accessType = 'game';
|
|
this.accessStartTime = Date.now();
|
|
|
|
console.log('开始跟踪游戏访问:', gameId);
|
|
|
|
// 立即记录访问开始
|
|
this.recordAccess(null, gameId, 'game', 0);
|
|
}
|
|
|
|
/**
|
|
* 开始跟踪视频访问
|
|
*/
|
|
startVideoAccess(courseId, videoId) {
|
|
this.currentCourseId = courseId;
|
|
this.accessType = 'video';
|
|
this.accessStartTime = Date.now();
|
|
|
|
console.log('开始跟踪视频访问:', courseId, videoId);
|
|
|
|
// 立即记录访问开始
|
|
this.recordAccess(courseId, null, 'video', 0);
|
|
}
|
|
|
|
/**
|
|
* 结束访问跟踪
|
|
*/
|
|
endAccess() {
|
|
if (!this.accessStartTime) return;
|
|
|
|
const duration = Math.floor((Date.now() - this.accessStartTime) / 1000);
|
|
|
|
console.log('结束访问跟踪:', {
|
|
type: this.accessType,
|
|
courseId: this.currentCourseId,
|
|
gameId: this.currentGameId,
|
|
duration: duration
|
|
});
|
|
|
|
// 记录访问结束
|
|
this.recordAccess(this.currentCourseId, this.currentGameId, this.accessType, duration);
|
|
|
|
// 重置状态
|
|
this.reset();
|
|
}
|
|
|
|
/**
|
|
* 记录访问
|
|
*/
|
|
async recordAccess(courseId, gameId, accessType, durationSeconds) {
|
|
try {
|
|
await window.apiService.recordAccess(courseId, gameId, accessType, durationSeconds);
|
|
} catch (error) {
|
|
console.error('记录访问失败:', error);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 重置跟踪状态
|
|
*/
|
|
reset() {
|
|
this.currentCourseId = null;
|
|
this.currentGameId = null;
|
|
this.accessStartTime = null;
|
|
this.accessType = null;
|
|
}
|
|
|
|
/**
|
|
* 获取当前访问时长
|
|
*/
|
|
getCurrentDuration() {
|
|
if (!this.accessStartTime) return 0;
|
|
return Math.floor((Date.now() - this.accessStartTime) / 1000);
|
|
}
|
|
|
|
/**
|
|
* 检查是否正在跟踪
|
|
*/
|
|
isTracking() {
|
|
return this.accessStartTime !== null;
|
|
}
|
|
}
|
|
|
|
// 创建全局访问跟踪器实例
|
|
window.accessTracker = new AccessTracker();
|