- 调整启动画面中的图片宽度,提升视觉效果 - 移除引导页面相关组件,简化应用结构 - 新增心情统计页面,支持用户查看和分析心情数据 - 优化心情卡片组件,增强用户交互体验 - 更新登录页面标题,提升品牌一致性 - 新增心情日历和编辑功能,支持用户记录和管理心情
168 lines
3.8 KiB
TypeScript
168 lines
3.8 KiB
TypeScript
import { useAppDispatch, useAppSelector } from '@/hooks/redux';
|
|
import { MoodType } from '@/services/moodCheckins';
|
|
import {
|
|
createMoodRecord,
|
|
deleteMoodRecord,
|
|
fetchDailyMoodCheckins,
|
|
fetchMoodHistory,
|
|
fetchMoodStatistics,
|
|
selectLatestMoodRecordByDate,
|
|
selectMoodLoading,
|
|
selectMoodRecordsByDate,
|
|
selectMoodStatistics,
|
|
updateMoodRecord
|
|
} from '@/store/moodSlice';
|
|
import dayjs from 'dayjs';
|
|
|
|
// 创建心情记录参数
|
|
export interface CreateMoodParams {
|
|
moodType: MoodType;
|
|
intensity: number;
|
|
description?: string;
|
|
checkinDate?: string;
|
|
}
|
|
|
|
// 更新心情记录参数
|
|
export interface UpdateMoodParams {
|
|
id: string;
|
|
moodType?: MoodType;
|
|
intensity?: number;
|
|
description?: string;
|
|
}
|
|
|
|
// 获取心情历史参数
|
|
export interface GetMoodHistoryParams {
|
|
startDate: string;
|
|
endDate: string;
|
|
moodType?: MoodType;
|
|
}
|
|
|
|
// 获取心情统计参数
|
|
export interface GetMoodStatisticsParams {
|
|
startDate: string;
|
|
endDate: string;
|
|
}
|
|
|
|
/**
|
|
* 心情数据管理 Hook
|
|
*/
|
|
export function useMoodData() {
|
|
const dispatch = useAppDispatch();
|
|
const loading = useAppSelector(selectMoodLoading);
|
|
const statistics = useAppSelector(selectMoodStatistics);
|
|
|
|
/**
|
|
* 获取指定日期的心情记录
|
|
*/
|
|
const getMoodRecordsByDate = (date: string) => {
|
|
return useAppSelector(selectMoodRecordsByDate(date));
|
|
};
|
|
|
|
/**
|
|
* 获取指定日期的最新心情记录
|
|
*/
|
|
const getLatestMoodRecordByDate = (date: string) => {
|
|
return useAppSelector(selectLatestMoodRecordByDate(date));
|
|
};
|
|
|
|
/**
|
|
* 获取今天的心情记录
|
|
*/
|
|
const getTodayMoodRecord = () => {
|
|
const today = dayjs().format('YYYY-MM-DD');
|
|
return useAppSelector(selectLatestMoodRecordByDate(today));
|
|
};
|
|
|
|
/**
|
|
* 获取指定日期的心情记录(异步)
|
|
*/
|
|
const fetchMoodRecords = async (date: string) => {
|
|
const result = await dispatch(fetchDailyMoodCheckins(date)).unwrap();
|
|
return result.checkins || [];
|
|
};
|
|
|
|
/**
|
|
* 获取心情历史记录
|
|
*/
|
|
const fetchMoodHistoryRecords = async (params: GetMoodHistoryParams) => {
|
|
const result = await dispatch(fetchMoodHistory(params)).unwrap();
|
|
return result.checkins || [];
|
|
};
|
|
|
|
/**
|
|
* 获取心情统计数据
|
|
*/
|
|
const fetchMoodStatisticsData = async (params: GetMoodStatisticsParams) => {
|
|
return await dispatch(fetchMoodStatistics(params)).unwrap();
|
|
};
|
|
|
|
/**
|
|
* 创建心情记录
|
|
*/
|
|
const createMood = async (params: CreateMoodParams) => {
|
|
return await dispatch(createMoodRecord(params)).unwrap();
|
|
};
|
|
|
|
/**
|
|
* 更新心情记录
|
|
*/
|
|
const updateMood = async (params: UpdateMoodParams) => {
|
|
return await dispatch(updateMoodRecord(params)).unwrap();
|
|
};
|
|
|
|
/**
|
|
* 删除心情记录
|
|
*/
|
|
const deleteMood = async (id: string) => {
|
|
return await dispatch(deleteMoodRecord({ id })).unwrap();
|
|
};
|
|
|
|
return {
|
|
// 状态
|
|
loading,
|
|
statistics,
|
|
|
|
// 选择器
|
|
getMoodRecordsByDate,
|
|
getLatestMoodRecordByDate,
|
|
getTodayMoodRecord,
|
|
|
|
// 异步操作
|
|
fetchMoodRecords,
|
|
fetchMoodHistoryRecords,
|
|
fetchMoodStatisticsData,
|
|
createMood,
|
|
updateMood,
|
|
deleteMood,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 获取指定日期心情记录的 Hook
|
|
*/
|
|
export function useMoodRecords(date: string) {
|
|
const records = useAppSelector(selectMoodRecordsByDate(date));
|
|
const latestRecord = useAppSelector(selectLatestMoodRecordByDate(date));
|
|
const loading = useAppSelector(selectMoodLoading);
|
|
const dispatch = useAppDispatch();
|
|
|
|
const fetchRecords = async () => {
|
|
return await dispatch(fetchDailyMoodCheckins(date)).unwrap();
|
|
};
|
|
|
|
return {
|
|
records,
|
|
latestRecord,
|
|
loading: loading.daily,
|
|
fetchRecords,
|
|
};
|
|
}
|
|
|
|
/**
|
|
* 获取今天心情记录的 Hook
|
|
*/
|
|
export function useTodayMood() {
|
|
const today = dayjs().format('YYYY-MM-DD');
|
|
return useMoodRecords(today);
|
|
}
|