diff --git a/backend/src/main/java/com/designhub/service/UserService.java b/backend/src/main/java/com/designhub/service/UserService.java index 777be04..2ec61a9 100644 --- a/backend/src/main/java/com/designhub/service/UserService.java +++ b/backend/src/main/java/com/designhub/service/UserService.java @@ -508,8 +508,17 @@ public class UserService { if (primaryDept != null) { user.setDeptId(primaryDeptId); user.setDeptName(primaryDept.getDeptName()); - // 根据主部门类型设置角色 - user.setRoleIds("receiving".equals(primaryDept.getDeptType()) ? "5" : "6"); + // 根据主部门类型设置角色(但如果用户已经是管理员,保留管理员角色) + String currentRoleIds = user.getRoleIds(); + boolean isAdmin = currentRoleIds != null && + (currentRoleIds.contains("1") || currentRoleIds.contains("2")); + if (!isAdmin) { + // 只有非管理员用户才根据部门类型设置角色 + user.setRoleIds("receiving".equals(primaryDept.getDeptType()) ? "5" : "6"); + } else { + log.info("用户已是管理员,保留管理员角色: userId={}, roleIds={}", + user.getId(), currentRoleIds); + } user.setStatus(1); // 启用用户 needUpdate = true; log.info("同步用户多个部门: userId={}, 部门数量={}, 主部门={}", @@ -530,7 +539,17 @@ public class UserService { setUserDepartments(user.getId(), List.of(defaultDept.getId()), defaultDept.getId()); user.setDeptId(defaultDept.getId()); user.setDeptName(defaultDept.getDeptName()); - user.setRoleIds("receiving".equals(defaultDept.getDeptType()) ? "5" : "6"); + // 根据部门类型设置角色(但如果用户已经是管理员,保留管理员角色) + String currentRoleIds = user.getRoleIds(); + boolean isAdmin = currentRoleIds != null && + (currentRoleIds.contains("1") || currentRoleIds.contains("2")); + if (!isAdmin) { + // 只有非管理员用户才根据部门类型设置角色 + user.setRoleIds("receiving".equals(defaultDept.getDeptType()) ? "5" : "6"); + } else { + log.info("用户已是管理员,保留管理员角色: userId={}, roleIds={}", + user.getId(), currentRoleIds); + } user.setStatus(1); // 启用用户 needUpdate = true; log.warn("已有用户无法匹配,使用默认部门: userId={}, deptId={}, deptName={}, 钉钉部门: {}", diff --git a/frontend/src/views/Login.vue b/frontend/src/views/Login.vue index 49106a2..9bd51f3 100644 --- a/frontend/src/views/Login.vue +++ b/frontend/src/views/Login.vue @@ -74,7 +74,7 @@ -
+
还没有账号?
+ 功能开关 + + +
+ 控制登录页面是否显示注册功能 +
+
+ @@ -1384,8 +1396,10 @@ const router = useRouter() const siteSettings = reactive({ siteName: 'DesignHub', logoUrl: '', + registerEnabled: true, siteNameConfigId: null as number | null, - logoConfigId: null as number | null + logoConfigId: null as number | null, + registerEnabledConfigId: null as number | null }) const loading = reactive({ @@ -2519,11 +2533,21 @@ const loadSiteSettings = async () => { } else { siteSettings.logoUrl = siteSettingsStore.logoUrl } + + // 查找注册功能开关配置 + const registerConfig = configs.find((c: any) => c.configKey === 'site.register.enabled') + if (registerConfig) { + siteSettings.registerEnabled = registerConfig.configValue === 'true' || registerConfig.configValue === '1' + siteSettings.registerEnabledConfigId = registerConfig.id + } else { + siteSettings.registerEnabled = true // 默认开启 + } } catch (error) { console.error('加载网站设置失败:', error) // 如果API失败,尝试从store读取 siteSettings.siteName = siteSettingsStore.siteName siteSettings.logoUrl = siteSettingsStore.logoUrl + siteSettings.registerEnabled = true // 默认开启 } finally { loadingSiteSettings.value = false } @@ -2599,6 +2623,29 @@ const handleSaveSiteSettings = async () => { } } + // 保存注册功能开关 + if (siteSettings.registerEnabledConfigId) { + // 如果配置已存在,更新 + await updateSystemConfig(siteSettings.registerEnabledConfigId, { + configValue: siteSettings.registerEnabled ? 'true' : 'false' + }) + } else { + // 如果配置不存在,创建 + const response = await createSystemConfig({ + configKey: 'site.register.enabled', + configValue: siteSettings.registerEnabled ? 'true' : 'false', + configGroup: 'site', + configName: '注册功能开关', + description: '控制登录页面是否显示注册功能', + valueType: 'boolean', + builtIn: 0, + sortOrder: 3 + }) + if (response.data && response.data.id) { + siteSettings.registerEnabledConfigId = response.data.id + } + } + // 更新全局store(这会自动更新所有使用store的组件) siteSettingsStore.updateSiteSettings(siteSettings.siteName, siteSettings.logoUrl)