const { withRecordAccess } = require('../../utils/record-access'); const { tryLoginRenewal } = require('../../utils/subscribe'); const { itemsOf, startList, applyList, failList, finishList, withListPagination } = require('../../utils/list-pagination'); const { withDataCache } = require('../../utils/page-cache'); const { getLayout } = require('../../utils/layout'); // pages/lovewords/lovewords.js - 一起听过的歌 const { api } = require('../../utils/request'); Page(withRecordAccess(withDataCache(withListPagination({ onLoginSubscribeTap: function() { return tryLoginRenewal(); }, onResize: function() { this.setData(getLayout()); }, data: { loading: true, loadError: false, list: [], showModal: false, isEdit: false, editId: '', form: { song_name: '', artist: '', note: '' } }, onLoad: function() { this.setData(getLayout()); this.loadData(); }, onShow: function() { this.loadData(); }, onPullDownRefresh: async function() { await this.loadData(); wx.stopPullDownRefresh(); }, onShareAppMessage: function() { return { title: '让所有的爱有迹可循', path: '/pages/lovewords/lovewords', imageUrl: '/images/share.png' }; }, onShareTimeline: function() { return { title: '让所有的爱有迹可循', imageUrl: '/images/share.png' }; }, loadData: async function(page) { const ticket = startList(this, page); if (!ticket) return; try { const list = await api.songsList({page:ticket.page,page_size:20}); const items = itemsOf(list).map(function(item) { if (item.created_at) { var d = new Date(item.created_at); item.date_month = String(d.getMonth() + 1).padStart(2, '0'); item.date_day = String(d.getDate()).padStart(2, '0'); } return item; }); applyList(this, ticket, list, items, 'list'); } catch (e) { failList(this,ticket); console.error(e); wx.showToast({ title: '加载失败', icon: 'none' }); } finally { finishList(this,ticket); } }, noop: function() {}, onSongMenu: function(e) { wx.showActionSheet({ itemList:['编辑歌曲', '删除歌曲'], success:(res) => { if (res.tapIndex === 0) this.editSong(e); else if (res.tapIndex === 1) this.deleteSong(e); }}); }, deleteSong: function(e) { var id = e.currentTarget.dataset.id; wx.showModal({ title: '确认删除', content: '确定要删除这首歌吗?', success: async (res) => { if (res.confirm) { try { await api.songsDelete({ id: id }); wx.showToast({ title: '已删除', icon: 'success' }); this.loadData(); } catch (err) { wx.showToast({ title: err.error || '删除失败', icon: 'none' }); } } } }); }, // 编辑歌曲:打开弹窗并带入原数据 editSong: function(e) { var ds = e.currentTarget.dataset; this.setData({ showModal: true, isEdit: true, editId: ds.id, form: { song_name: ds.name || '', artist: ds.artist || '', note: ds.note || '' } }); }, // ===== 添加/编辑弹窗 ===== showModal: function() { this.setData({ showModal: true, isEdit: false, editId: '', form: { song_name: '', artist: '', note: '' } }); }, hideModal: function() { this.setData({ showModal: false, isEdit: false, editId: '' }); }, onSongNameInput: function(e) { this.setData({ 'form.song_name': e.detail.value }); }, onArtistInput: function(e) { this.setData({ 'form.artist': e.detail.value }); }, onNoteInput: function(e) { this.setData({ 'form.note': e.detail.value }); }, submit: async function() { var form = this.data.form; if (!form.song_name || !form.artist) { wx.showToast({ title: '请填写歌曲名和歌手名', icon: 'none' }); return; } try { if (this.data.isEdit && this.data.editId) { await api.songsUpdate({ id: this.data.editId, song_name: form.song_name, artist: form.artist, note: form.note || '' }); wx.showToast({ title: '已修改 ✏️', icon: 'success' }); } else { await api.songsAdd(form); wx.showToast({ title: '收藏成功 🎵', icon: 'success' }); } this.hideModal(); this.loadData(); } catch (e) { wx.showToast({ title: e.error || '保存失败', icon: 'none' }); } }, goToPublish: function() { this.showModal(); }, goBack: function() { wx.navigateBack(); }, goHome: function() { wx.switchTab({ url: '/pages/index/index' }); }, goProfile: function() { wx.switchTab({ url: '/pages/profile/profile' }); } }, 'loadData'), {"loadData": ["songsList"]})));