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)