This commit is contained in:
张成
2025-09-17 22:55:20 +08:00
parent 46fc702dfd
commit 721d0c10e4
11 changed files with 1078 additions and 3 deletions

View File

@@ -0,0 +1,232 @@
import { API_CONFIG } from '@/config/api';
import httpService, { ApiResponse } from './httpService';
// 球友信息接口
export interface FollowUser {
id: number;
nickname: string;
avatar_url: string;
personal_profile?: string;
gender?: string;
city?: string;
ntrp_level?: number;
// 关注状态mutual_follow=互相关注, following=已关注, follower=粉丝, recommend=推荐
follow_status: 'mutual_follow' | 'following' | 'follower' | 'recommend';
follow_time?: string; // 关注时间
is_mutual?: boolean; // 是否互关
is_following?: boolean; // 是否已关注
common_games_count?: number; // 共同参与球局数量
}
// 关注列表响应接口
export interface FollowListResponse {
list: FollowUser[];
total: number;
current_city?: string; // 当前用户城市(推荐接口返回)
}
// 球友关注服务类
export class FollowService {
// 获取互关用户列表
static async get_mutual_follow_list(
page: number = 1,
page_size: number = 20
): Promise<FollowListResponse> {
try {
const response = await httpService.post<FollowListResponse>(
'/user_follow/mutual_follow_list',
{ page, page_size },
{ showLoading: false }
);
if (response.code === 0) {
// 为数据添加 follow_status 标识
const list = response.data.list.map(user => ({
...user,
follow_status: 'mutual_follow' as const
}));
return { ...response.data, list };
} else {
throw new Error(response.message || '获取互关列表失败');
}
} catch (error) {
console.error('获取互关列表失败:', error);
return { list: [], total: 0 };
}
}
// 获取我的粉丝列表
static async get_fans_list(
page: number = 1,
page_size: number = 20
): Promise<FollowListResponse> {
try {
const response = await httpService.post<FollowListResponse>(
'/user_follow/my_fans_list',
{ page, page_size },
{ showLoading: false }
);
if (response.code === 0) {
// 为数据添加 follow_status 标识
const list = response.data.list.map(user => ({
...user,
follow_status: user.is_mutual ? 'mutual_follow' as const : 'follower' as const
}));
return { ...response.data, list };
} else {
throw new Error(response.message || '获取粉丝列表失败');
}
} catch (error) {
console.error('获取粉丝列表失败:', error);
return { list: [], total: 0 };
}
}
// 获取我的关注列表
static async get_following_list(
page: number = 1,
page_size: number = 20
): Promise<FollowListResponse> {
try {
const response = await httpService.post<FollowListResponse>(
'/user_follow/my_following_list',
{ page, page_size },
{ showLoading: false }
);
if (response.code === 0) {
// 为数据添加 follow_status 标识
const list = response.data.list.map(user => ({
...user,
follow_status: user.is_mutual ? 'mutual_follow' as const : 'following' as const
}));
return { ...response.data, list };
} else {
throw new Error(response.message || '获取关注列表失败');
}
} catch (error) {
console.error('获取关注列表失败:', error);
return { list: [], total: 0 };
}
}
// 获取关注列表(统一入口)
static async get_follow_list(
type: 'mutual_follow' | 'following' | 'follower' | 'recommend',
page: number = 1,
page_size: number = 20
): Promise<FollowListResponse> {
switch (type) {
case 'mutual_follow':
return this.get_mutual_follow_list(page, page_size);
case 'following':
return this.get_following_list(page, page_size);
case 'follower':
return this.get_fans_list(page, page_size);
case 'recommend':
return this.get_recommend_users(page, page_size);
default:
return { list: [], total: 0 };
}
}
// 关注用户
static async follow_user(user_id: number): Promise<boolean> {
try {
const response = await httpService.post<any>(
API_CONFIG.USER.FOLLOW,
{ following_id: user_id },
{
showLoading: true,
loadingText: '关注中...'
}
);
if (response.code === 0) {
return true;
} else {
throw new Error(response.message || '关注失败');
}
} catch (error) {
console.error('关注失败:', error);
throw error;
}
}
// 取消关注用户
static async unfollow_user(user_id: number): Promise<boolean> {
try {
const response = await httpService.post<any>(
API_CONFIG.USER.UNFOLLOW,
{ following_id: user_id },
{
showLoading: true,
loadingText: '取消关注中...'
}
);
if (response.code === 0) {
return true;
} else {
throw new Error(response.message || '取消关注失败');
}
} catch (error) {
console.error('取消关注失败:', error);
throw error;
}
}
// 回关用户(关注粉丝)
static async follow_back(user_id: number): Promise<boolean> {
return this.follow_user(user_id);
}
// 获取同城推荐用户
static async get_recommend_users(page: number = 1, page_size: number = 10): Promise<FollowListResponse> {
try {
const response = await httpService.post<FollowListResponse>(
'/user_follow/recommend_same_city',
{ page, page_size },
{ showLoading: false }
);
if (response.code === 0) {
// 为数据添加 follow_status 标识
const list = response.data.list.map(user => ({
...user,
follow_status: 'recommend' as const
}));
return { ...response.data, list };
} else {
throw new Error(response.message || '获取推荐用户失败');
}
} catch (error) {
console.error('获取推荐用户失败:', error);
return { list: [], total: 0 };
}
}
// 检查关注状态
static async check_follow_status(user_id: number): Promise<'mutual_follow' | 'following' | 'follower' | 'none'> {
try {
const response = await httpService.post<{ status: string }>(
'/wch_users/follow_status',
{ user_id },
{ showLoading: false }
);
if (response.code === 0) {
return response.data.status as 'mutual_follow' | 'following' | 'follower' | 'none';
} else {
return 'none';
}
} catch (error) {
console.error('检查关注状态失败:', error);
return 'none';
}
}
}
export default FollowService;