// User Authentication Functions
let currentUser = null;
// Check if user is logged in
async function isLoggedIn() {
try {
const response = await window.DAELAPI.auth.checkAuth();
if (response.authenticated) {
currentUser = response.user;
return true;
}
return false;
} catch (error) {
return false;
}
}
// Get current user
function getCurrentUser() {
return currentUser;
}
// Login function
async function login(username, password, remember = false) {
try {
const response = await window.DAELAPI.auth.login(username, password, remember);
currentUser = response.user;
return true;
} catch (error) {
console.error('Login failed:', error);
return false;
}
}
// Logout function
async function logout() {
try {
await window.DAELAPI.auth.logout();
currentUser = null;
window.location.href = 'website.html';
} catch (error) {
console.error('Logout failed:', error);
// 即使API失败也清除本地状态
currentUser = null;
window.location.href = 'website.html';
}
}
// Check protected content access
async function checkProtectedContent() {
const loggedIn = await isLoggedIn();
const protectedElements = document.querySelectorAll('.protected-content');
if (loggedIn) {
protectedElements.forEach(el => {
el.classList.remove('protected-content');
});
// 加载受保护内容
try {
const response = await window.DAELAPI.api.getProtectedContent();
displayProtectedContent(response);
} catch (error) {
console.error('Failed to load protected content:', error);
}
} else {
protectedElements.forEach(el => {
el.classList.add('protected-content');
});
}
}
// 显示受保护内容
async function displayProtectedContent(data) {
// 更新受保护的文章
const protectedArticlesContainer = document.getElementById('protected-articles');
if (protectedArticlesContainer && data.articles && data.articles.length > 0) {
protectedArticlesContainer.innerHTML = data.articles.map(article => `
${article.title}
${article.summary || article.content.substring(0, 100) + '...'}
${new Date(article.created_at).toLocaleDateString()}
`).join('');
protectedArticlesContainer.classList.remove('hidden');
}
// 更新受保护的资源
const protectedResourcesContainer = document.getElementById('protected-resources');
if (protectedResourcesContainer && data.resources && data.resources.length > 0) {
protectedResourcesContainer.innerHTML = data.resources.map(resource => `
${resource.name}
${resource.description || ''}
大小: ${(resource.file_size / 1024 / 1024).toFixed(2)} MB
`).join('');
protectedResourcesContainer.classList.remove('hidden');
}
// 更新统计信息
try {
const statsResponse = await window.DAELAPI.api.getStats();
const stats = statsResponse.stats;
const statsContainer = document.getElementById('protected-stats');
if (statsContainer) {
const statElements = statsContainer.querySelectorAll('.text-3xl');
if (statElements.length >= 4) {
statElements[0].textContent = stats.articles || '0';
statElements[1].textContent = stats.resources || '0';
statElements[2].textContent = stats.team_members || '0';
statElements[3].textContent = stats.total_downloads || '0';
}
}
} catch (error) {
console.error('Failed to load stats:', error);
}
}
// Initialize auth on page load
document.addEventListener('DOMContentLoaded', async () => {
// 等待API加载
if (typeof window.DAELAPI === 'undefined') {
console.warn('API not loaded, using fallback authentication');
// 使用本地存储作为后备
const localAuth = localStorage.getItem('dael_user_logged_in') === 'true';
updateUI(localAuth);
return;
}
await checkProtectedContent();
await updateAuthUI();
// Logout button handler
const logoutBtn = document.getElementById('logout-btn');
if (logoutBtn) {
logoutBtn.addEventListener('click', async (e) => {
e.preventDefault();
if (confirm('确定要退出登录吗?')) {
await logout();
}
});
}
});
// 更新认证UI
async function updateAuthUI() {
const loggedIn = await isLoggedIn();
const loginBtn = document.getElementById('login-btn');
const logoutBtn = document.getElementById('logout-btn');
const adminBtn = document.getElementById('admin-btn');
const meetingsLink = document.getElementById('meetings-link');
const researchLink = document.getElementById('research-link');
const userInfo = document.getElementById('user-info');
if (loggedIn) {
const user = getCurrentUser();
if (loginBtn) loginBtn.classList.add('hidden');
if (logoutBtn) logoutBtn.classList.remove('hidden');
if (adminBtn && user && user.is_admin) {
adminBtn.classList.remove('hidden');
} else if (adminBtn) {
adminBtn.classList.add('hidden');
}
// 显示组会和研究管理链接(所有登录用户)
if (meetingsLink) meetingsLink.classList.remove('hidden');
if (researchLink) researchLink.classList.remove('hidden');
const mobileMeetingsLink = document.getElementById('mobile-meetings-link');
const mobileResearchLink = document.getElementById('mobile-research-link');
if (mobileMeetingsLink) mobileMeetingsLink.classList.remove('hidden');
if (mobileResearchLink) mobileResearchLink.classList.remove('hidden');
if (userInfo && user) {
userInfo.textContent = user.username;
userInfo.classList.remove('hidden');
}
} else {
if (loginBtn) loginBtn.classList.remove('hidden');
if (logoutBtn) logoutBtn.classList.add('hidden');
if (adminBtn) adminBtn.classList.add('hidden');
if (meetingsLink) meetingsLink.classList.add('hidden');
if (researchLink) researchLink.classList.add('hidden');
const mobileMeetingsLink = document.getElementById('mobile-meetings-link');
const mobileResearchLink = document.getElementById('mobile-research-link');
if (mobileMeetingsLink) mobileMeetingsLink.classList.add('hidden');
if (mobileResearchLink) mobileResearchLink.classList.add('hidden');
if (userInfo) userInfo.classList.add('hidden');
}
}
// 后备UI更新函数
function updateUI(loggedIn) {
const loginBtn = document.getElementById('login-btn');
const logoutBtn = document.getElementById('logout-btn');
if (loggedIn) {
if (loginBtn) loginBtn.classList.add('hidden');
if (logoutBtn) logoutBtn.classList.remove('hidden');
} else {
if (loginBtn) loginBtn.classList.remove('hidden');
if (logoutBtn) logoutBtn.classList.add('hidden');
}
}