修复: 添加自动同步用户配置功能,解决管理员修改权限后用户不自动更新的问题
- 添加profileCheckInterval属性用于存储定时器ID - 修改loadUserProfile()函数,检测存储配置变更并通知用户 - 新增startProfileSync()方法,每30秒自动检查配置更新 - 新增stopProfileSync()方法,停止定期检查 - 在登录和页面加载时启动定期检查 - 在登出时停止定期检查 - 当管理员修改用户存储权限或类型时,用户会收到Toast通知并自动刷新文件列表 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user