feat: 更新心情记录功能和界面
- 调整启动画面中的图片宽度,提升视觉效果 - 移除引导页面相关组件,简化应用结构 - 新增心情统计页面,支持用户查看和分析心情数据 - 优化心情卡片组件,增强用户交互体验 - 更新登录页面标题,提升品牌一致性 - 新增心情日历和编辑功能,支持用户记录和管理心情
This commit is contained in:
167
hooks/useMoodData.ts
Normal file
167
hooks/useMoodData.ts
Normal file
@@ -0,0 +1,167 @@
|
||||
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);
|
||||
}
|
||||
Reference in New Issue
Block a user