175 lines
4.4 KiB
JavaScript
175 lines
4.4 KiB
JavaScript
/**
|
|
* 用户管理器 - 管理用户登录和状态
|
|
*/
|
|
class UserManager {
|
|
constructor() {
|
|
this.currentUser = null;
|
|
this.isLoggedIn = false;
|
|
}
|
|
|
|
/**
|
|
* 初始化用户管理器
|
|
*/
|
|
async init() {
|
|
// 检查本地存储的用户信息
|
|
const userStr = localStorage.getItem('currentUser');
|
|
if (userStr) {
|
|
try {
|
|
this.currentUser = JSON.parse(userStr);
|
|
this.isLoggedIn = true;
|
|
console.log('用户已登录:', this.currentUser);
|
|
} catch (error) {
|
|
console.error('解析用户信息失败:', error);
|
|
this.clearUser();
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 用户登录
|
|
*/
|
|
async login(username, password) {
|
|
try {
|
|
const result = await window.apiService.login(username, password);
|
|
if (result.data) {
|
|
this.currentUser = result.data;
|
|
this.isLoggedIn = true;
|
|
console.log('登录成功:', this.currentUser);
|
|
return { success: true, user: this.currentUser };
|
|
}
|
|
} catch (error) {
|
|
console.error('登录失败:', error);
|
|
return { success: false, error: error.message };
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 用户登出
|
|
*/
|
|
logout() {
|
|
this.clearUser();
|
|
console.log('用户已登出');
|
|
}
|
|
|
|
/**
|
|
* 清除用户信息
|
|
*/
|
|
clearUser() {
|
|
this.currentUser = null;
|
|
this.isLoggedIn = false;
|
|
localStorage.removeItem('currentUser');
|
|
window.apiService.clearCurrentUser();
|
|
}
|
|
|
|
/**
|
|
* 获取当前用户
|
|
*/
|
|
getCurrentUser() {
|
|
return this.currentUser;
|
|
}
|
|
|
|
/**
|
|
* 检查是否已登录
|
|
*/
|
|
isUserLoggedIn() {
|
|
return this.isLoggedIn && this.currentUser !== null;
|
|
}
|
|
|
|
/**
|
|
* 获取用户ID
|
|
*/
|
|
getUserId() {
|
|
return this.currentUser ? this.currentUser.id : null;
|
|
}
|
|
|
|
/**
|
|
* 获取用户名
|
|
*/
|
|
getUsername() {
|
|
return this.currentUser ? this.currentUser.username : null;
|
|
}
|
|
|
|
/**
|
|
* 获取用户真实姓名
|
|
*/
|
|
getRealName() {
|
|
return this.currentUser ? this.currentUser.realName : null;
|
|
}
|
|
|
|
/**
|
|
* 获取班级名称
|
|
*/
|
|
getClassName() {
|
|
return this.currentUser ? this.currentUser.className : null;
|
|
}
|
|
|
|
/**
|
|
* 获取年级
|
|
*/
|
|
getGradeLevel() {
|
|
return this.currentUser ? this.currentUser.gradeLevel : null;
|
|
}
|
|
|
|
/**
|
|
* 显示登录对话框
|
|
*/
|
|
showLoginDialog() {
|
|
const username = prompt('请输入用户名:');
|
|
if (username) {
|
|
const password = prompt('请输入密码:');
|
|
if (password) {
|
|
this.login(username, password).then(result => {
|
|
if (result.success) {
|
|
alert('登录成功!');
|
|
this.updateUserDisplay();
|
|
} else {
|
|
alert('登录失败: ' + result.error);
|
|
}
|
|
});
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 更新用户显示
|
|
*/
|
|
updateUserDisplay() {
|
|
const userDisplay = document.getElementById('userDisplay');
|
|
if (userDisplay) {
|
|
if (this.isUserLoggedIn()) {
|
|
const displayName = this.getRealName() || this.getUsername();
|
|
userDisplay.innerHTML = `
|
|
<div class="user-info">
|
|
<span>欢迎, ${displayName}</span>
|
|
<button onclick="userManager.logout()" class="logout-btn">登出</button>
|
|
</div>
|
|
`;
|
|
} else {
|
|
userDisplay.innerHTML = `
|
|
<button onclick="userManager.showLoginDialog()" class="login-btn">登录</button>
|
|
`;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* 创建用户显示元素
|
|
*/
|
|
createUserDisplay() {
|
|
const userDisplay = document.createElement('div');
|
|
userDisplay.id = 'userDisplay';
|
|
userDisplay.className = 'user-display';
|
|
|
|
// 添加到页面
|
|
const header = document.querySelector('header') || document.body;
|
|
if (header) {
|
|
header.appendChild(userDisplay);
|
|
}
|
|
|
|
this.updateUserDisplay();
|
|
}
|
|
}
|
|
|
|
// 创建全局用户管理器实例
|
|
window.userManager = new UserManager();
|