diff --git a/frontend/app.js b/frontend/app.js index 68a1b19..4cc7c24 100644 --- a/frontend/app.js +++ b/frontend/app.js @@ -168,7 +168,10 @@ createApp({ totalUserQuotas: 0, totalUserUsed: 0, totalUsers: 0 - } + }, + + // 定期检查用户配置更新的定时器 + profileCheckInterval: null }; }, @@ -292,6 +295,8 @@ handleDragLeave(e) { console.log('[登录] 存储权限:', this.storagePermission, '存储类型:', this.storageType); + // 启动定期检查用户配置 + this.startProfileSync(); // 管理员直接跳转到管理后台 if (this.user.is_admin) { this.currentView = 'admin'; @@ -597,6 +602,9 @@ handleDragLeave(e) { this.token = null; localStorage.removeItem('token'); localStorage.removeItem('user'); + + // 停止定期检查 + this.stopProfileSync(); }, // 检查本地存储的登录状态 @@ -620,6 +628,8 @@ handleDragLeave(e) { // 加载最新的用户信息(异步更新) this.loadUserProfile(); + // 启动定期检查用户配置 + this.startProfileSync(); // 管理员跳转到管理后台 if (this.user.is_admin) { this.currentView = 'admin'; @@ -1471,17 +1481,64 @@ handleDragLeave(e) { if (response.data.success && response.data.user) { const user = response.data.user; + + // 检测存储配置是否被管理员更改 + const oldStorageType = this.storageType; + const oldStoragePermission = this.storagePermission; + const newStorageType = user.current_storage_type || 'sftp'; + const newStoragePermission = user.storage_permission || 'sftp_only'; + + // 更新本地数据 this.localQuota = user.local_storage_quota || 0; this.localUsed = user.local_storage_used || 0; - this.storagePermission = user.storage_permission || 'sftp_only'; - this.storageType = user.current_storage_type || 'sftp'; + this.storagePermission = newStoragePermission; + this.storageType = newStorageType; + + // 如果存储类型被管理员更改,通知用户并重新加载文件 + if (oldStorageType !== newStorageType || oldStoragePermission !== newStoragePermission) { + console.log('[存储配置更新] 旧类型:', oldStorageType, '新类型:', newStorageType); + console.log('[存储配置更新] 旧权限:', oldStoragePermission, '新权限:', newStoragePermission); + + this.showToast('info', '存储配置已更新', `管理员已将您的存储方式更改为${newStorageType === 'local' ? '本地存储' : 'SFTP存储'}`); + + // 如果当前在文件页面,重新加载文件列表 + if (this.currentView === 'files') { + await this.loadFiles(this.currentPath); + } + } } } catch (error) { console.error('加载用户资料失败:', error); } }, - // 用户切换存储方式 + // 启动定期检查用户配置 + startProfileSync() { + // 清除已有的定时器 + if (this.profileCheckInterval) { + clearInterval(this.profileCheckInterval); + } + + // 每30秒检查一次用户配置是否有更新 + this.profileCheckInterval = setInterval(() => { + if (this.isLoggedIn && this.token) { + this.loadUserProfile(); + } + }, 30000); // 30秒 + + console.log('[配置同步] 已启动定期检查(30秒间隔)'); + }, + + // 停止定期检查 + stopProfileSync() { + if (this.profileCheckInterval) { + clearInterval(this.profileCheckInterval); + this.profileCheckInterval = null; + console.log('[配置同步] 已停止定期检查'); + } + }, + + // 用户切换存储方式 async switchStorage(type) { // 检查是否尝试切换到SFTP但未配置 if (type === 'sftp' && !this.user.has_ftp_config) {