const app = getApp(); Page({ data: { show: false, BookId: '', ChapterId: '', chapterList: [], book: {} as any, chapter: {} as any, prevAndNext: {} as any, progress: 0, url: 'http://m10.music.126.net/20241126110303/3f2481d2d6d50acd2009359539eadda0/ymusic/5353/0f0f/0358/d99739615f8e5153d77042092f07fd77.mp3', play: false, time: '00:00/00:00', }, innerAudioContext: null as WechatMiniprogram.InnerAudioContext | null, onLoad(options) { this.innerAudioContext = wx.createInnerAudioContext(); this.setData({ BookId: options.id, }); app.waitLogin(false, true).then(() => { this.getChapterList(); this.getDetail(); }); }, onUnload() { if (this.innerAudioContext) { this.innerAudioContext?.stop(); this.innerAudioContext?.destroy(); } }, getChapterList() { wx.ajax({ method: 'GET', url: '?r=shizhong/book/chapter-list', data: { BookId: this.data.BookId, }, }).then((res) => { this.setData({ chapterList: res.list, }); }); }, getDetail() { wx.ajax({ method: 'GET', url: '?r=shizhong/book/detail', data: { BookId: this.data.BookId, ChapterId: this.data.ChapterId, }, }).then((res) => { this.setData({ book: { ...res.book, PublishDate: res.book.PublishTime.split(' ')[0], }, chapter: res.chapter, prevAndNext: { prev: Array.isArray(res.prevAndNext.prev) ? null : res.prevAndNext.prev, next: Array.isArray(res.prevAndNext.next) ? null : res.prevAndNext.next, }, ChapterId: res.chapter.Id, }); if (res.chapter.AudioUrl?.url) { const time = `00:00/${this.formatTime(res.chapter.AudioUrl.duration)}`; this.setData({ time, }); } }); }, handleDirectory() { this.setData({ show: true, }); }, handleSwitchDirectory(e) { const { id } = e.currentTarget.dataset; this.setData({ ChapterId: id, }); this.getDetail(); this.onClose(); this.handlePause(); }, onClose() { this.setData({ show: false, }); }, handleCollect() { const { Id } = this.data.book; wx.ajax({ method: 'POST', url: '?r=shizhong/book/collect', data: { BookId: Id }, }).then(() => { wx.showToast({ title: '收藏成功', icon: 'none', }); this.setData({ [`book.IsCollect`]: 1, }); }); }, handleUnCollect() { const { Id } = this.data.book; wx.ajax({ method: 'POST', url: '?r=shizhong/book/cancel-collect', data: { BookId: Id }, }).then(() => { wx.showToast({ title: '取消收藏', icon: 'none', }); this.setData({ [`book.IsCollect`]: 0, }); }); }, handlePlay() { const { chapter, play } = this.data; if (this.innerAudioContext) { if (play) { this.innerAudioContext.stop(); return; } this.innerAudioContext.stop(); this.innerAudioContext.src = chapter.AudioUrl.url; this.innerAudioContext.play(); this.setData({ play: true, }); const listener = () => { if (this.innerAudioContext) { const { currentTime, duration } = this.innerAudioContext; const time = `${this.formatTime(currentTime)}/${this.formatTime(duration)}`; const progress = (currentTime / duration) * 100; this.setData({ time, progress, }); } }; this.innerAudioContext.onTimeUpdate(listener); this.innerAudioContext.onEnded(() => { this.setData({ play: false, }); }); this.innerAudioContext.onStop(() => { this.setData({ play: false, }); }); } }, handlePause() { if (this.innerAudioContext) { this.innerAudioContext.pause(); this.setData({ play: false, }); } }, formatTime(time: number) { const minutes = Math.floor(time / 60); const seconds = Math.floor(time % 60); return `${minutes < 10 ? `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`; }, }); export {};