- 将应用版本更新至 1.0.3,修改相关配置文件 - 强制全局使用浅色主题,确保一致的用户体验 - 在训练计划功能中新增激活计划的 API 接口,支持用户激活训练计划 - 优化打卡功能,支持自动同步打卡记录至服务器 - 更新样式以适应新功能的展示和交互
75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
import { api } from './api';
|
|
|
|
export interface CreateTrainingPlanDto {
|
|
startDate: string;
|
|
name?: string;
|
|
mode: 'daysOfWeek' | 'sessionsPerWeek';
|
|
daysOfWeek: number[];
|
|
sessionsPerWeek: number;
|
|
goal: string;
|
|
startWeightKg?: number;
|
|
preferredTimeOfDay?: 'morning' | 'noon' | 'evening' | '';
|
|
}
|
|
|
|
export interface TrainingPlanResponse {
|
|
id: string;
|
|
userId: string;
|
|
name: string;
|
|
createdAt: string;
|
|
startDate: string;
|
|
mode: 'daysOfWeek' | 'sessionsPerWeek';
|
|
daysOfWeek: number[];
|
|
sessionsPerWeek: number;
|
|
goal: string;
|
|
startWeightKg: number | null;
|
|
preferredTimeOfDay: 'morning' | 'noon' | 'evening' | '';
|
|
updatedAt: string;
|
|
deleted: boolean;
|
|
}
|
|
|
|
export interface TrainingPlanSummary {
|
|
id: string;
|
|
createdAt: string;
|
|
startDate: string;
|
|
goal: string;
|
|
mode: 'daysOfWeek' | 'sessionsPerWeek';
|
|
daysOfWeek: number[];
|
|
sessionsPerWeek: number;
|
|
preferredTimeOfDay: 'morning' | 'noon' | 'evening' | '';
|
|
startWeightKg: number | null;
|
|
}
|
|
|
|
export interface TrainingPlanListResponse {
|
|
list: TrainingPlanSummary[];
|
|
total: number;
|
|
page: number;
|
|
limit: number;
|
|
}
|
|
|
|
class TrainingPlanApi {
|
|
async create(dto: CreateTrainingPlanDto): Promise<TrainingPlanResponse> {
|
|
return api.post<TrainingPlanResponse>('/training-plans', dto);
|
|
}
|
|
|
|
async list(page: number = 1, limit: number = 10): Promise<TrainingPlanListResponse> {
|
|
return api.get<TrainingPlanListResponse>(`/training-plans?page=${page}&limit=${limit}`);
|
|
}
|
|
|
|
async detail(id: string): Promise<TrainingPlanResponse> {
|
|
return api.get<TrainingPlanResponse>(`/training-plans/${id}`);
|
|
}
|
|
|
|
async update(id: string, dto: CreateTrainingPlanDto): Promise<TrainingPlanResponse> {
|
|
return api.post<TrainingPlanResponse>(`/training-plans/${id}/update`, dto);
|
|
}
|
|
|
|
async delete(id: string): Promise<{ success: boolean }> {
|
|
return api.delete<{ success: boolean }>(`/training-plans/${id}`);
|
|
}
|
|
|
|
async activate(id: string): Promise<{ success: boolean }> {
|
|
return api.post<{ success: boolean }>(`/training-plans/${id}/activate`);
|
|
}
|
|
}
|
|
|
|
export const trainingPlanApi = new TrainingPlanApi(); |