|
|
|
|
// app.js
|
|
|
|
|
const api = require('./utils/api');
|
|
|
|
|
|
|
|
|
|
App({
|
|
|
|
|
globalData: {
|
|
|
|
|
userInfo: null,
|
|
|
|
|
currentTab: 'index',
|
|
|
|
|
sessionStartTime: null
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 事件总线,用于页面间通信
|
|
|
|
|
eventBus: {
|
|
|
|
|
on(event, callback) {
|
|
|
|
|
if (!this.handlers) this.handlers = {};
|
|
|
|
|
if (!this.handlers[event]) this.handlers[event] = [];
|
|
|
|
|
this.handlers[event].push(callback);
|
|
|
|
|
},
|
|
|
|
|
off(event, callback) {
|
|
|
|
|
if (!this.handlers || !this.handlers[event]) return;
|
|
|
|
|
this.handlers[event] = this.handlers[event].filter(handler => handler !== callback);
|
|
|
|
|
},
|
|
|
|
|
emit(event, data) {
|
|
|
|
|
if (!this.handlers || !this.handlers[event]) return;
|
|
|
|
|
this.handlers[event].forEach(handler => {
|
|
|
|
|
try {
|
|
|
|
|
handler(data);
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error('事件处理函数执行错误:', error);
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 更新当前选中的tab
|
|
|
|
|
updateCurrentTab(tabName) {
|
|
|
|
|
this.globalData.currentTab = tabName;
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// 记录用户踪迹
|
|
|
|
|
recordUserTrace(action, additionalData = {}) {
|
|
|
|
|
const traceData = {
|
|
|
|
|
action: action,
|
|
|
|
|
timestamp: new Date().toISOString(),
|
|
|
|
|
...additionalData
|
|
|
|
|
};
|
|
|
|
|
api.addUserTrace(traceData);
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onLaunch() {
|
|
|
|
|
console.log('App launched');
|
|
|
|
|
// 记录用户进入小程序
|
|
|
|
|
this.recordUserTrace('app_launch');
|
|
|
|
|
this.globalData.sessionStartTime = new Date().toISOString();
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onShow() {
|
|
|
|
|
console.log('App shown');
|
|
|
|
|
// 记录用户显示小程序
|
|
|
|
|
this.recordUserTrace('app_show');
|
|
|
|
|
if (!this.globalData.sessionStartTime) {
|
|
|
|
|
this.globalData.sessionStartTime = new Date().toISOString();
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
onHide() {
|
|
|
|
|
console.log('App hidden');
|
|
|
|
|
// 记录用户隐藏小程序,包含会话时长
|
|
|
|
|
const sessionEndTime = new Date().toISOString();
|
|
|
|
|
this.recordUserTrace('app_hide', {
|
|
|
|
|
sessionStartTime: this.globalData.sessionStartTime,
|
|
|
|
|
sessionEndTime: sessionEndTime,
|
|
|
|
|
sessionDuration: new Date(sessionEndTime) - new Date(this.globalData.sessionStartTime)
|
|
|
|
|
});
|
|
|
|
|
this.globalData.sessionStartTime = null;
|
|
|
|
|
}
|
|
|
|
|
});
|