Files
digital-pilates/services/users.ts
richarjiang 08adf0f20d feat(i18n): 实现用户语言偏好服务器同步功能
- 添加 UserLanguage 类型定义 ('zh-CN' | 'en-US')
- 在 UpdateUserDto 中新增 language 字段
- 实现语言切换时自动同步到服务器
- 为已登录用户保存语言偏好设置
- 服务器同步失败时降级处理,不影响本地语言切换
2025-11-27 11:17:21 +08:00

58 lines
1.7 KiB
TypeScript
Raw Permalink 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 '@/services/api';
export type Gender = 'male' | 'female';
// 用户语言设置
export type UserLanguage = 'zh-CN' | 'en-US';
export type UpdateUserDto = {
name?: string;
avatar?: string; // base64 字符串
gender?: Gender;
birthDate?: number; // 时间戳(秒)
dailyStepsGoal?: number;
dailyCaloriesGoal?: number;
pilatesPurposes?: string[];
weight?: number;
height?: number;
activityLevel?: number; // 活动水平 1-4
initialWeight?: number; // 初始体重
targetWeight?: number; // 目标体重
chestCircumference?: number; // 胸围
waistCircumference?: number; // 腰围
upperHipCircumference?: number; // 上臀围
armCircumference?: number; // 臂围
thighCircumference?: number; // 大腿围
calfCircumference?: number; // 小腿围
language?: UserLanguage; // 用户语言偏好
};
export async function updateUser(dto: UpdateUserDto): Promise<Record<string, any>> {
// 固定使用后端文档接口PUT /api/users/update
return await api.put('/api/users/update', dto);
}
export async function uploadImage(formData: FormData): Promise<{ fileKey: string; fileUrl: string }> {
return await api.post('/api/users/cos/upload-image', formData, {
unsetContentType: true
});
}
export type BodyMeasurementsDto = {
chestCircumference?: number; // 胸围
waistCircumference?: number; // 腰围
upperHipCircumference?: number; // 上臀围
armCircumference?: number; // 臂围
thighCircumference?: number; // 大腿围
calfCircumference?: number; // 小腿围
};
export async function updateBodyMeasurements(dto: BodyMeasurementsDto): Promise<{
code: number;
message: string;
}> {
return await api.put('/users/body-measurements', dto);
}