// pages/main/journal-date/index.ts import { Journal, JournalPageType } from "../../../types/Journal"; import Time from "../../../utils/Time"; import { JournalApi } from "../../../api/JournalApi"; 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 pageResult = await JournalApi.getList({ index: 0, size: 9007199254740992, type: JournalPageType.PREVIEW }); const list: Journal[] = pageResult.list || []; // 按日期分组,只存储 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: [] }); } });