From cfa38c9b363b0b5b923533f02b6b526d3a5c9894 Mon Sep 17 00:00:00 2001 From: Your Name Date: Fri, 2 Jan 2026 16:08:44 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E4=B8=89=E4=B8=AA=E9=97=AE?= =?UTF-8?q?=E9=A2=98=EF=BC=9A1.=E9=92=89=E9=92=89=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E6=97=B6=E4=BF=9D=E7=95=99=E7=AE=A1=E7=90=86=E5=91=98=E8=A7=92?= =?UTF-8?q?=E8=89=B2=202.=E7=94=A8=E6=88=B7=E7=AE=A1=E7=90=86=E5=B7=B2?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E8=AE=BE=E7=BD=AE=E7=AE=A1=E7=90=86=E5=91=98?= =?UTF-8?q?=E8=A7=92=E8=89=B2=203.=E7=BD=91=E7=AB=99=E8=AE=BE=E7=BD=AE?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B3=A8=E5=86=8C=E5=8A=9F=E8=83=BD=E5=BC=80?= =?UTF-8?q?=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/designhub/service/UserService.java | 25 ++++++++-- frontend/src/views/Login.vue | 23 ++++++++- frontend/src/views/Settings.vue | 49 ++++++++++++++++++- 3 files changed, 92 insertions(+), 5 deletions(-) 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)