// app.js // 引入阅读器插件 const novelPlugin = requirePlugin('novel-plugin') import { userLogin,getChapterUnlockStatus,getNovelDetail,addBrowsingHistory } from './api/api' App({ onLaunch(options) { console.log('场景值:',options.scene); novelPlugin.setLoggerConfig({ info: true, debug: true, log: true, warn: true, error: true, }) // 监听进入插件页事件 novelPlugin.onPageLoad(onNovelPluginLoad) // 展示本地存储能力 const logs = wx.getStorageSync('logs') || [] logs.unshift(Date.now()) wx.setStorageSync('logs', logs) }, // 登录方法 login() { return new Promise((resolve, reject) => { // 检查登录状态 if (this.checkLoginStatus()) { resolve(); return; } wx.login({ success: res => { userLogin({ "appid": "wxa7a33088566e1292", "channel": 1, "srcType": "0", "srcAppId": "", "srcId": "", "cusId": "", "inviter": "", "promotionId": "", "inviterPromotionId": "", "system": "pc", "type": "inner", "inner": 1, code: res.code, }).then(res => { console.log(res); wx.setStorageSync('accessToken', res.accessToken); this.globalData.isLogin = true; resolve(res); }).catch(err => { this.globalData.isLogin = false; reject(err); }) }, fail: err => { this.globalData.isLogin = false; reject(err); } }) }) }, // 检查登录状态 checkLoginStatus() { const token = wx.getStorageSync('accessToken'); return !!token && this.globalData.isLogin; }, globalData: { userInfo: null, isLogin: false, novelManager: {}, uuid: '', isShowDialog: false } }) // 插件初始化回调 async function onNovelPluginLoad(data) { // data.id - 阅读器实例 id,每个插件页对应一个阅读器实例 const novelManager = novelPlugin.getNovelManager(data.id) getApp().globalData.novelManager = novelManager novelManager.setFullScreenComponentStatus({ show: true, }) let pluginInfo = novelManager.getPluginInfo(); let innerBookId = pluginInfo.query?.innerBookId; console.log("innerBookId",innerBookId); let unlockStatus = await getChapterUnlockStatus({ novelId: innerBookId }); let bookDetail = await getNovelDetail(innerBookId); console.log("bookDetail",bookDetail); // 设置目录状态(根据unlockStatus数据设置章节状态) if (unlockStatus && Array.isArray(unlockStatus.status)) { // 将unlockStatus.status数组转换为目录状态格式 const contents = unlockStatus.status.map((lockState, index) => { return { index: index, // 章节索引 status: lockState, }; }); console.log("contents",contents); // 设置目录状态 novelManager.setContents({ contents: contents, }); } function startRead(res) { console.log('开始阅读',res); updateBrowsingHistory(res); } function updateBrowsingHistory(res) { let params = { novelAuthor: bookDetail.author, novelCover: bookDetail.cover, novelId: bookDetail.id, novelTitle: bookDetail.title, status: bookDetail.status } addBrowsingHistory(params); } // 监听用户行为事件 novelManager.onUserTriggerEvent(res => { const { event_id } = res; console.log('用户行为:', event_id, res); // 根据不同的事件类型处理 switch(event_id) { case 'start_read': // 开始阅读 console.log('开始阅读章节:', res.chapter_id); break; case 'click_startread': // 点击开始阅读 startRead(res); break; case 'leave_readpage': // 离开阅读页 console.log('阅读时长:', res.read_time); break; case 'change_chapter': // 切换章节 console.log('切换到章节:', res.chapter_id); break; case 'get_chapter': // 获取章节数据 console.log("get_chapter",res); console.log('章节状态:', res.pay_status); break; default: break; } }) }