kindergarten_java/reading-platform-frontend/src/api/auth.ts
2026-03-11 14:38:43 +08:00

88 lines
2.2 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 { readingApi } from "./client";
import type {
LoginResponse as ApiLoginResponse,
ResultLoginResponse,
ResultUserInfoResponse,
UserInfoResponse,
} from "./generated/model";
// 兼容现有登录页字段命名account
export interface LoginParams {
account: string;
password: string;
role: string;
}
// 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({
username: params.account,
password: params.password,
role: params.role,
})
.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("/api/v1/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,
};
});
}