feat: 1. 添加axios全局路由拦截进行自动添加请求jwt。 2.重新整理路由表。 3. 文档列表新增版本差异对比。 4.菜单路由可访问列表通过对接接口返回,添加全局路由检测。

5. 修改统一认证登录和管理员登录是通过接口形式进行,存储返回的accessToken。    6. 修改交叉评查的部分样式
This commit is contained in:
2025-11-18 11:06:24 +08:00
parent 8a50671c39
commit bfe39e45a9
53 changed files with 9503 additions and 2796 deletions
+154
View File
@@ -0,0 +1,154 @@
/**
* 登录客户端
* 调用后端 /auth/login 接口,传递 OAuth 用户信息,获取 JWT token
*/
import { API_BASE_URL } from "~/config/api-config";
/**
* 登录请求参数(OAuth 方式)
*/
export interface LoginRequest {
userInfo: {
sub: string;
username?: string;
nickname?: string;
email?: string;
phone_number?: string;
ou_id?: string;
ou_name?: string;
is_leader?: boolean;
[key: string]: unknown;
};
expiresIn: number;
area?: string;
}
/**
* 登录响应
*/
export interface LoginResponse {
success: boolean;
data?: {
access_token: string;
token_type: string;
expires_in: number;
user_info: {
user_id: string;
username: string;
nick_name: string;
email?: string;
phone_number?: string;
ou_id: string;
ou_name: string;
is_leader: boolean;
user_role: string;
sub: string;
};
};
error?: string;
message?: string;
}
/**
* 调用后端登录接口(OAuth 方式)
*
* @param loginData 登录数据(OAuth 用户信息)
* @returns 登录响应(包含 JWT token
*/
export async function loginWithOAuth(loginData: LoginRequest): Promise<LoginResponse> {
const loginUrl = `${API_BASE_URL}/auth/login`;
console.log("📝 [Login Client] 调用后端 OAuth 登录接口:", loginUrl);
try {
const response = await fetch(loginUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify(loginData)
});
if (!response.ok) {
const errorData = await response.json().catch(() => ({}));
console.error("❌ [Login Client] OAuth 登录请求失败:", response.status, errorData);
return {
success: false,
error: errorData.error || errorData.message || `登录失败: ${response.status}`
};
}
const data = await response.json();
console.log("✅ [Login Client] OAuth 登录成功");
return data;
} catch (error) {
console.error("❌ [Login Client] OAuth 登录请求异常:", error);
return {
success: false,
error: error instanceof Error ? error.message : "网络请求失败"
};
}
}
/**
* 密码登录请求参数
*/
export interface PasswordLoginRequest {
username: string;
password: string;
}
/**
* 调用后端登录接口(密码方式)
*
* @param username 用户名
* @param password 密码
* @returns 登录响应(包含 JWT token
*/
export async function loginWithPassword(
username: string,
password: string
): Promise<LoginResponse> {
const loginUrl = `${API_BASE_URL}/auth/login`;
console.log("📝 [Login Client] 调用后端密码登录接口:", loginUrl);
try {
const response = await fetch(loginUrl, {
method: "POST",
headers: {
"Content-Type": "application/json",
"Accept": "application/json"
},
body: JSON.stringify({
username,
password
})
});
if (!response.ok) {
const errorData = await response.json().catch(() => ({}));
console.error("❌ [Login Client] 密码登录请求失败:", response.status, errorData);
return {
success: false,
error: errorData.error || errorData.message || `登录失败: ${response.status}`
};
}
const data = await response.json();
console.log("✅ [Login Client] 密码登录成功");
return data;
} catch (error) {
console.error("❌ [Login Client] 密码登录请求异常:", error);
return {
success: false,
error: error instanceof Error ? error.message : "网络请求失败"
};
}
}