Files
digital-pilates/services/moodCheckins.ts
richarjiang 72e75b602e feat: 更新心情记录功能和界面
- 调整启动画面中的图片宽度,提升视觉效果
- 移除引导页面相关组件,简化应用结构
- 新增心情统计页面,支持用户查看和分析心情数据
- 优化心情卡片组件,增强用户交互体验
- 更新登录页面标题,提升品牌一致性
- 新增心情日历和编辑功能,支持用户记录和管理心情
2025-08-21 17:59:22 +08:00

142 lines
4.0 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
}));
}