Files
2026-10-26 17:32:47 +08:00

179 lines
5.6 KiB
JavaScript

const { itemsOf, startList, applyList, failList, finishList, withListPagination } = require('../../utils/list-pagination');
const { withDataCache } = require('../../utils/page-cache');
const { getLayout } = require('../../utils/layout');
// pages/albums/albums.js
const { api, getImageUrl } = require('../../utils/request');
Page(withDataCache(withListPagination({
onResize: function() { this.setData(getLayout()); },
data: {
loading: true, loadError: false,
albums: [], uploadMode:false,
showMoreModal: false,
showEditModal: false,
currentAlbum: null,
editForm: { title: '', desc: '' }
},
onLoad: function(options) {
this.setData(getLayout());
this.setData({uploadMode: !!(options && options.upload === '1')});
},
onShow: function() {
this.loadAlbums();
},
onPullDownRefresh: async function() {
await this.loadAlbums();
wx.stopPullDownRefresh();
},
// 分享到好友
onShareAppMessage: function() {
return {
title: '让所有的爱有迹可循',
path: '/pages/albums/albums',
imageUrl: '/images/share.png'
};
},
// 分享到朋友圈
onShareTimeline: function() {
return {
title: '让所有的爱有迹可循',
imageUrl: '/images/share.png'
};
},
noop: function() {},
loadAlbums: async function(page) {
const ticket = startList(this, page);
if (!ticket) return;
try {
var list = await api.albumList({page:ticket.page,page_size:20});
var result = list;
list = itemsOf(list).map(function(a) {
a.cover = getImageUrl(a.cover);
a.photo_count = a.photo_count || 0;
// 地理位置:优先显示地址名称,其次显示经纬度
a.location_text = a.location || ((a.lat && a.lng) ? (a.lat + ', ' + a.lng) : '');
return a;
});
applyList(this, ticket, result, list, 'albums');
} catch(e) { console.error(e); failList(this,ticket); } finally { finishList(this,ticket); }
},
openAlbum: function(e) {
var id = e.currentTarget.dataset.id;
wx.navigateTo({ url: '/pages/album/album?album_id=' + id + (this.data.uploadMode ? '&upload=1' : '') });
},
// 显示更多菜单
showMoreMenu: function(e) {
var id = e.currentTarget.dataset.id;
var title = e.currentTarget.dataset.title || '默认相册';
var desc = e.currentTarget.dataset.desc || '';
var cover = e.currentTarget.dataset.cover || '';
this.setData({
showMoreModal: true,
currentAlbum: { id: id, title: title, description: desc, cover: cover }
});
},
hideMoreMenu: function() {
this.setData({ showMoreModal: false });
},
// 编辑相册
editAlbum: function() {
var album = this.data.currentAlbum;
if (!album) return;
this.setData({
showMoreModal: false,
showEditModal: true,
editForm: { title: album.title, desc: album.description || '' }
});
},
hideEditModal: function() {
this.setData({ showEditModal: false });
},
onEditTitleInput: function(e) { this.setData({ 'editForm.title': e.detail.value }); },
onEditDescInput: function(e) { this.setData({ 'editForm.desc': e.detail.value }); },
saveAlbumEdit: async function() {
var self = this;
var album = this.data.currentAlbum;
if (!album) return;
var title = this.data.editForm.title;
if (!title) { wx.showToast({ title: '请输入相册标题', icon: 'none' }); return; }
try {
wx.showLoading({ title: '保存中...' });
await api.albumUpdate({
id: album.id,
title: title,
description: this.data.editForm.desc || '',
// 保留原有地理位置
lat: album.lat || 0,
lng: album.lng || 0,
location: album.location || ''
});
wx.hideLoading();
wx.showToast({ title: '已保存 ✨', icon: 'success' });
this.hideEditModal();
this.loadAlbums();
} catch(e) {
wx.hideLoading();
wx.showToast({ title: e.error || '保存失败', icon: 'none' });
}
},
// 删除相册
deleteAlbum: function() {
var self = this;
var album = this.data.currentAlbum;
if (!album) return;
// 从相册列表中查找照片数量
var albums = this.data.albums;
var targetAlbum = albums.find(function(a) { return String(a.id) === String(album.id); });
var count = targetAlbum ? (targetAlbum.photo_count || 0) : 0;
var title = album.title || '该相册';
this.setData({ showMoreModal: false });
if (count > 0) {
wx.showModal({
title: '无法删除',
content: '「' + title + '」中还有 ' + count + ' 张照片,请先删除里面的全部照片后再删除相册',
showCancel: false,
confirmText: '知道了'
});
return;
}
wx.showModal({
title: '确认删除',
content: '确定要删除「' + title + '」吗?',
success: function(res) {
if (res.confirm) {
wx.showLoading({ title: '删除中...' });
api.albumDelete({ id: album.id }).then(function() {
wx.hideLoading();
wx.showToast({ title: '已删除', icon: 'success' });
self.loadAlbums();
}).catch(function(err) {
wx.hideLoading();
wx.showToast({ title: err.error || '删除失败', icon: 'none' });
});
}
}
});
}, goToPublish: function() { wx.navigateTo({ url: '/pages/publish/publish?type=album' }); },
goHome: function() { wx.switchTab({ url: '/pages/index/index' }); },
goBack: function() { wx.navigateBack(); },
goToProfile: function() { wx.switchTab({ url: '/pages/profile/profile' }); }
}, 'loadAlbums'), {"loadAlbums": ["albumList"]}));