// pages/main/journal-date/index.ts import config from "../../../config/index"; import { Journal, JournalPageType } from "../../../types/Journal"; import Time from "../../../utils/Time"; interface JournalDateData { // 存储每个日期的日记 id 列表 isLoading: boolean; journalMap: Record; popupIds: number[]; popupVisible: boolean; } Page({ data: { isLoading: true, journalMap: {}, popupIds: [], popupVisible: false, }, async onLoad() { await this.loadJournals(); }, /** 加载所有日记 */ async loadJournals() { this.setData({ isLoading: true }); try { const list: Journal[] = await new Promise((resolve, reject) => { wx.request({ url: `${config.url}/journal/list`, method: "POST", header: { Key: wx.getStorageSync("key") }, data: { page: 0, size: 9007199254740992, type: JournalPageType.PREVIEW }, success: (resp: any) => { if (resp.data.code === 20000) { resolve(resp.data.data.list); } else { reject(new Error(resp.data.message || "加载失败")); } }, fail: reject }); }) || []; // 按日期分组,只存储 id const journalMap: Record = {}; list.forEach((journal: any) => { const dateKey = Time.toDate(journal.createdAt); if (!journalMap[dateKey]) { journalMap[dateKey] = []; } journalMap[dateKey].push(journal.id); }); // 按 id 倒序排序每天的日记 Object.keys(journalMap).forEach(dateKey => { journalMap[dateKey].sort((a, b) => b - a); }); this.setData({ journalMap, isLoading: false }); } catch (err: any) { wx.showToast({ title: err.message || "加载失败", icon: "error" }); this.setData({ isLoading: false }); } }, /** 日期选择事件(来自 calendar 组件) */ onDateSelect(e: WechatMiniprogram.CustomEvent) { const { date } = e.detail; const journalIds = this.data.journalMap[date]; if (!journalIds || journalIds.length === 0) { wx.showToast({ title: "该日期无日记", icon: "none" }); return; } // 调用接口获取详情 this.loadJournalsByIds(journalIds); }, /** 根据 id 列表加载日记详情 */ async loadJournalsByIds(ids: number[]) { this.setData({ popupIds: ids, popupVisible: true }); wx.hideLoading(); }, /** 关闭详情 */ closeDetail() { this.setData({ popupVisible: false, popupIds: [] }); } });