feat: 更新心情记录功能和界面

- 调整启动画面中的图片宽度,提升视觉效果
- 移除引导页面相关组件,简化应用结构
- 新增心情统计页面,支持用户查看和分析心情数据
- 优化心情卡片组件,增强用户交互体验
- 更新登录页面标题,提升品牌一致性
- 新增心情日历和编辑功能,支持用户记录和管理心情
This commit is contained in:
richarjiang
2025-08-21 17:59:22 +08:00
parent a7607e0f74
commit 72e75b602e
24 changed files with 2964 additions and 1238 deletions

141
services/moodCheckins.ts Normal file
View File

@@ -0,0 +1,141 @@
import { api } from './api';
// 心情类型定义
export type MoodType =
| 'happy' // 开心
| 'excited' // 心动
| 'thrilled' // 兴奋
| 'calm' // 平静
| 'anxious' // 焦虑
| 'sad' // 难过
| 'lonely' // 孤独
| 'wronged' // 委屈
| 'angry' // 生气
| 'tired'; // 心累
// 心情打卡记录类型
export type MoodCheckin = {
id: string;
userId: string;
moodType: MoodType;
intensity: number; // 1-10
description?: string;
checkinDate: string; // YYYY-MM-DD
createdAt: string; // ISO
updatedAt: string; // ISO
metadata?: Record<string, any>;
};
// 创建心情打卡请求
export type CreateMoodCheckinDto = {
moodType: MoodType;
intensity: number; // 1-10
description?: string;
checkinDate?: string; // YYYY-MM-DD默认今天
metadata?: Record<string, any>;
};
// 更新心情打卡请求
export type UpdateMoodCheckinDto = {
id: string;
moodType?: MoodType;
intensity?: number;
description?: string;
metadata?: Record<string, any>;
};
// 删除心情打卡请求
export type DeleteMoodCheckinDto = {
id: string;
};
// 心情统计数据
export type MoodStatistics = {
totalCheckins: number;
averageIntensity: number;
moodDistribution: Record<MoodType, number>;
mostFrequentMood: MoodType;
};
// 创建心情打卡
export async function createMoodCheckin(dto: CreateMoodCheckinDto): Promise<MoodCheckin> {
return await api.post('/api/mood-checkins', dto);
}
// 更新心情打卡
export async function updateMoodCheckin(dto: UpdateMoodCheckinDto): Promise<MoodCheckin> {
return await api.put('/api/mood-checkins', dto);
}
// 删除心情打卡
export async function deleteMoodCheckin(dto: DeleteMoodCheckinDto): Promise<boolean> {
return await api.delete('/api/mood-checkins', { body: dto });
}
// 获取每日心情记录
export async function getDailyMoodCheckins(date?: string): Promise<MoodCheckin[]> {
const path = date ? `/api/mood-checkins/daily?date=${encodeURIComponent(date)}` : '/api/mood-checkins/daily';
const data = await api.get<MoodCheckin[]>(path);
return Array.isArray(data) ? data : [];
}
// 获取心情历史记录
export async function getMoodCheckinsHistory(params: {
startDate: string;
endDate: string;
moodType?: MoodType;
}): Promise<MoodCheckin[]> {
const queryParams = new URLSearchParams({
startDate: params.startDate,
endDate: params.endDate,
});
if (params.moodType) {
queryParams.append('moodType', params.moodType);
}
const path = `/api/mood-checkins/history?${queryParams.toString()}`;
const data = await api.get<MoodCheckin[]>(path);
return Array.isArray(data) ? data : [];
}
// 获取心情统计数据
export async function getMoodStatistics(params: {
startDate: string;
endDate: string;
}): Promise<MoodStatistics> {
const queryParams = new URLSearchParams({
startDate: params.startDate,
endDate: params.endDate,
});
const path = `/api/mood-checkins/statistics?${queryParams.toString()}`;
return await api.get<MoodStatistics>(path);
}
// 心情类型配置
export const MOOD_CONFIG = {
happy: { emoji: '😊', label: '开心', color: '#4CAF50' },
excited: { emoji: '💓', label: '心动', color: '#E91E63' },
thrilled: { emoji: '🤩', label: '兴奋', color: '#FF9800' },
calm: { emoji: '😌', label: '平静', color: '#2196F3' },
anxious: { emoji: '😰', label: '焦虑', color: '#FF9800' },
sad: { emoji: '😢', label: '难过', color: '#2196F3' },
lonely: { emoji: '🥺', label: '孤独', color: '#9C27B0' },
wronged: { emoji: '😔', label: '委屈', color: '#607D8B' },
angry: { emoji: '😡', label: '生气', color: '#F44336' },
tired: { emoji: '😴', label: '心累', color: '#9C27B0' },
} as const;
// 获取心情配置
export function getMoodConfig(moodType: MoodType) {
return MOOD_CONFIG[moodType];
}
// 获取所有心情选项
export function getMoodOptions() {
return Object.entries(MOOD_CONFIG).map(([type, config]) => ({
type: type as MoodType,
...config,
}));
}