kindergarten_java/reading-platform-frontend/src/api/auth.ts

76 lines
2.0 KiB
TypeScript
Raw Normal View History

import { readingApi } from './client'
import type {
LoginRequest,
LoginResponse as ApiLoginResponse,
ResultLoginResponse,
ResultUserInfoResponse,
UserInfoResponse,
} from './generated/model'
export type LoginParams = LoginRequest
// Java 后端返回的平铺结构(保持与现有业务使用一致)
export interface LoginResponse extends Required<Omit<ApiLoginResponse, 'tenantId' | 'role'>> {
role: 'admin' | 'school' | 'teacher' | 'parent'
tenantId?: number
}
export interface UserProfile {
id: number;
name: string;
role: 'admin' | 'school' | 'teacher';
tenantId?: number;
tenantName?: string;
email?: string;
phone?: string;
avatar?: string;
}
// 登录
export function login(params: LoginParams): Promise<LoginResponse> {
return readingApi.login(params).then((res) => {
const wrapped = res as ResultLoginResponse
const data = (wrapped.data ?? {}) as ApiLoginResponse
return {
token: data.token ?? '',
userId: data.userId ?? 0,
username: data.username ?? '',
name: data.name ?? '',
role: (data.role as LoginResponse['role']) ?? 'teacher',
tenantId: data.tenantId,
}
})
}
// 登出
export function logout(): Promise<void> {
return readingApi.logout().then(() => undefined)
}
// 刷新Token
export function refreshToken(): Promise<{ token: string }> {
// OpenAPI 目前未定义 refresh 接口,暂时保留原有调用路径以兼容后端
const { http } = require('./index')
return http.post('/auth/refresh')
}
// 获取当前用户信息
export function getProfile(): Promise<UserProfile> {
return readingApi.getCurrentUser().then((res) => {
const wrapped = res as ResultUserInfoResponse
const data = (wrapped.data ?? {}) as UserInfoResponse
return {
id: data.id ?? 0,
name: data.name ?? '',
role: (data.role as UserProfile['role']) ?? 'teacher',
tenantId: data.tenantId,
tenantName: undefined,
email: data.email,
phone: data.phone,
avatar: data.avatarUrl,
}
})
}