Gate record features and storage entry points with invitation guidance; enforce record access in the backend. Add homepage greetings, right-swipe profile dismissal, and move the smoking switch to settings. Simplify API base configuration and remove the unused legacy tab bar component.
131 lines
4.6 KiB
JavaScript
131 lines
4.6 KiB
JavaScript
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"]})));
|