66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
import http from "./http";
|
|
|
|
export interface CaptchaResponse {
|
|
captchaId: string;
|
|
imageBase64: string;
|
|
}
|
|
|
|
export interface TenantInfo {
|
|
tenantId: number;
|
|
tenantCode: string;
|
|
tenantName: string;
|
|
}
|
|
|
|
export interface TokenResponse {
|
|
accessToken: string;
|
|
refreshToken: string;
|
|
accessExpiresInMinutes: number;
|
|
refreshExpiresInDays: number;
|
|
availableTenants?: TenantInfo[];
|
|
tenantMode?: "single" | "multi";
|
|
multiTenantEnabled?: boolean;
|
|
currentTenantId?: number;
|
|
}
|
|
|
|
export interface LoginPayload {
|
|
username: string;
|
|
password: string;
|
|
tenantCode?: string;
|
|
captchaId?: string;
|
|
captchaCode?: string;
|
|
deviceCode?: string;
|
|
}
|
|
|
|
export interface DeviceCodePayload {
|
|
username: string;
|
|
password: string;
|
|
captchaId?: string;
|
|
captchaCode?: string;
|
|
deviceName?: string;
|
|
}
|
|
|
|
export async function fetchCaptcha() {
|
|
const resp = await http.get("/sys/auth/captcha");
|
|
return resp.data.data as CaptchaResponse;
|
|
}
|
|
|
|
export async function login(payload: LoginPayload) {
|
|
const resp = await http.post("/sys/auth/login", payload);
|
|
return resp.data.data as TokenResponse;
|
|
}
|
|
|
|
export async function createDeviceCode(payload: DeviceCodePayload) {
|
|
const resp = await http.post("/sys/auth/device-code", payload);
|
|
return resp.data.data as string;
|
|
}
|
|
|
|
export async function refreshToken(refreshToken: string) {
|
|
const resp = await http.post("/sys/auth/refresh", { refreshToken });
|
|
return resp.data.data as TokenResponse;
|
|
}
|
|
|
|
export async function switchTenant(tenantId: number) {
|
|
const resp = await http.post(`/sys/auth/switch-tenant?tenantId=${tenantId}`);
|
|
return resp.data.data as TokenResponse;
|
|
}
|