91 lines
2.1 KiB
TypeScript
91 lines
2.1 KiB
TypeScript
// 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<string, number[]>;
|
|
|
|
popupIds: number[];
|
|
popupVisible: boolean;
|
|
}
|
|
|
|
Page({
|
|
data: <JournalDateData>{
|
|
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<string, number[]> = {};
|
|
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: []
|
|
});
|
|
}
|
|
});
|