From 3d1e19030af8182617382d6ac7c1ab6f632274f2 Mon Sep 17 00:00:00 2001 From: wangys <3401275564@qq.com> Date: Wed, 24 Dec 2025 12:06:59 +0800 Subject: [PATCH] =?UTF-8?q?web=E7=99=BB=E5=BD=95=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../.bin/mysql/sql/initConfigData.sql | 38 ++-- .../admin/src/main/resources/application.yml | 1 + .../api/system/config/SysConfigService.java | 6 + .../system/controller/ConfigController.java | 9 + .../config/impl/SysConfigServiceImpl.java | 28 +++ schoolNewsWeb/src/apis/system/config.ts | 10 + .../src/components/base/UserDropdown.vue | 13 +- schoolNewsWeb/src/layouts/SidebarLayout.vue | 184 +++--------------- schoolNewsWeb/src/main.ts | 8 + schoolNewsWeb/src/store/index.ts | 4 +- schoolNewsWeb/src/store/modules/system.ts | 93 +++++++++ schoolNewsWeb/src/types/system/baseinfo.ts | 16 ++ .../admin/manage/system/SystemConfigView.vue | 79 +++++++- .../public/login/ForgotPassword.mobile.vue | 83 +++++++- .../src/views/public/login/ForgotPassword.vue | 107 ++++++++-- .../src/views/public/login/Login.mobile.vue | 43 +++- .../src/views/public/login/Login.vue | 52 +++-- .../views/public/login/Register.mobile.vue | 19 +- .../src/views/public/login/Register.vue | 20 +- .../views/user/resource-center/SearchView.vue | 101 ++++++---- 20 files changed, 662 insertions(+), 252 deletions(-) create mode 100644 schoolNewsWeb/src/store/modules/system.ts create mode 100644 schoolNewsWeb/src/types/system/baseinfo.ts diff --git a/schoolNewsServ/.bin/mysql/sql/initConfigData.sql b/schoolNewsServ/.bin/mysql/sql/initConfigData.sql index c006d7c..7ec3313 100644 --- a/schoolNewsServ/.bin/mysql/sql/initConfigData.sql +++ b/schoolNewsServ/.bin/mysql/sql/initConfigData.sql @@ -21,20 +21,30 @@ INSERT INTO `tb_sys_config` (`id`, `config_key`, `config_name`, `config_value`, ('30', 'dify.dataset.defaultIndexingTechnique', '默认索引方式', 'high_quality', 'string', 'select', 'Dify配置', '默认索引方式', NULL, '知识库文档的默认索引方式', NULL, NULL, NULL, NULL, 'high_quality,economy', 30, 1, '1', now()), ('31', 'dify.dataset.defaultEmbeddingModel', '默认Embedding模型', 'text-embedding-ada-002', 'string', 'input', 'Dify配置', '默认Embedding模型', '请输入Embedding模型名称', '知识库使用的默认Embedding模型', NULL, NULL, NULL, NULL, NULL, 31, 1, '1', now()), +-- 基础配置(Logo、系统信息) +('100', 'system.name', '系统名称', '红色思政学习平台', 'string', 'input', '基础配置', '系统显示名称', '请输入系统名称', '系统对外显示的名称', NULL, NULL, NULL, NULL, NULL, 100, 1, '1', now()), +('101', 'system.shortName', '系统简称', '思政平台', 'string', 'input', '基础配置', '系统简称', '请输入系统简称', '系统的简短名称', NULL, NULL, NULL, NULL, NULL, 101, 1, '1', now()), +('102', 'system.logo.login', '登录页Logo', '', 'string', 'imgupload', '基础配置', '登录页Logo', NULL, '存储文件ID,建议尺寸:120x120px', NULL, NULL, NULL, NULL, NULL, 102, 1, '1', now()), +('103', 'system.logo.home', '首页Logo', '', 'string', 'imgupload', '基础配置', '首页Logo', NULL, '存储文件ID,建议尺寸:120x40px', NULL, NULL, NULL, NULL, NULL, 103, 1, '1', now()), +('104', 'system.logo.admin', '管理后台Logo', '', 'string', 'imgupload', '基础配置', '管理后台Logo', NULL, '存储文件ID,建议尺寸:40x40px', NULL, NULL, NULL, NULL, NULL, 104, 1, '1', now()), +('105', 'system.favicon', '网站图标', '', 'string', 'imgupload', '基础配置', '网站图标', NULL, '存储文件ID,建议格式:ico/png,尺寸:32x32px', NULL, NULL, NULL, NULL, NULL, 105, 1, '1', now()), + -- 邮件配置 -('40', 'email.host', 'SMTP服务器地址', 'smtp.qq.com', 'string', 'input', '邮件配置', 'SMTP服务器地址', '请输入SMTP服务器地址', '邮件发送服务器地址', NULL, NULL, NULL, NULL, NULL, 40, 1, '1', now()), -('41', 'email.port', 'SMTP端口', '587', 'integer', 'input', '邮件配置', 'SMTP服务器端口', '请输入SMTP端口', '邮件发送服务器端口', NULL, 25, 587, NULL, NULL, 41, 1, '1', now()), -('42', 'email.username', '发件人邮箱', '3223905473@qq.com', 'string', 'input', '邮件配置', '发件人邮箱地址', '请输入发件人邮箱', '用于发送邮件的邮箱账号', NULL, NULL, NULL, NULL, NULL, 42, 1, '1', now()), -('43', 'email.password', '邮箱授权码', 'xmdmxvtjumxocicc', 'string', 'password', '邮件配置', '邮箱授权码/密码', '请输入邮箱授权码', '邮箱的授权码或密码', NULL, NULL, NULL, NULL, NULL, 43, 1, '1', now()), -('44', 'email.fromName', '发件人名称', '校园新闻系统', 'string', 'input', '邮件配置', '发件人显示名称', '请输入发件人名称', '邮件中显示的发件人名称', NULL, NULL, NULL, NULL, NULL, 44, 1, '1', now()), -('45', 'email.ssl.enable', '启用SSL', 'true', 'boolean', 'switch', '邮件配置', '是否启用SSL', NULL, 'SSL加密连接', NULL, NULL, NULL, NULL, NULL, 45, 1, '1', now()), -('46', 'email.timeout', '连接超时时间', '30000', 'integer', 'input', '邮件配置', '连接超时时间(毫秒)', '请输入超时时间', 'SMTP连接超时时间', NULL, 5000, 60000, '毫秒', NULL, 46, 1, '1', now()), +('40', 'email.login.enabled', '启用邮箱登录', 'false', 'boolean', 'switch', '邮件配置', '是否启用邮箱登录', NULL, '关闭后登录页将不显示邮箱登录选项', NULL, NULL, NULL, NULL, NULL, 40, 1, '1', now()), +('41', 'email.host', 'SMTP服务器地址', 'smtp.qq.com', 'string', 'input', '邮件配置', 'SMTP服务器地址', '请输入SMTP服务器地址', '邮件发送服务器地址', NULL, NULL, NULL, NULL, NULL, 41, 1, '1', now()), +('42', 'email.port', 'SMTP端口', '587', 'integer', 'input', '邮件配置', 'SMTP服务器端口', '请输入SMTP端口', '邮件发送服务器端口', NULL, 25, 587, NULL, NULL, 42, 1, '1', now()), +('43', 'email.username', '发件人邮箱', '3223905473@qq.com', 'string', 'input', '邮件配置', '发件人邮箱地址', '请输入发件人邮箱', '用于发送邮件的邮箱账号', NULL, NULL, NULL, NULL, NULL, 43, 1, '1', now()), +('44', 'email.password', '邮箱授权码', 'xmdmxvtjumxocicc', 'string', 'password', '邮件配置', '邮箱授权码/密码', '请输入邮箱授权码', '邮箱的授权码或密码', NULL, NULL, NULL, NULL, NULL, 44, 1, '1', now()), +('45', 'email.fromName', '发件人名称', '校园新闻系统', 'string', 'input', '邮件配置', '发件人显示名称', '请输入发件人名称', '邮件中显示的发件人名称', NULL, NULL, NULL, NULL, NULL, 45, 1, '1', now()), +('46', 'email.ssl.enable', '启用SSL', 'true', 'boolean', 'switch', '邮件配置', '是否启用SSL', NULL, 'SSL加密连接', NULL, NULL, NULL, NULL, NULL, 46, 1, '1', now()), +('47', 'email.timeout', '连接超时时间', '30000', 'integer', 'input', '邮件配置', '连接超时时间(毫秒)', '请输入超时时间', 'SMTP连接超时时间', NULL, 5000, 60000, '毫秒', NULL, 47, 1, '1', now()), -- 短信配置 -('50', 'sms.provider', '短信服务商', 'aliyun', 'string', 'select', '短信配置', '短信服务提供商', NULL, '短信服务提供商类型', NULL, NULL, NULL, NULL, 'aliyun', 50, 1, '1', now()), -('51', 'sms.accessKeyId', 'AccessKey ID', 'LTAI5t68do3qVXx5Rufugt3X', 'string', 'input', '短信配置', '短信服务AccessKey ID', '请输入AccessKey ID', '云服务商的AccessKey ID', NULL, NULL, NULL, NULL, NULL, 51, 1, '1', now()), -('52', 'sms.accessKeySecret', 'AccessKey Secret', '2vD9ToIff49Vph4JQXsn0Cy8nXQfzA', 'string', 'password', '短信配置', '短信服务AccessKey Secret', '请输入AccessKey Secret', '云服务商的AccessKey Secret', NULL, NULL, NULL, NULL, NULL, 52, 1, '1', now()), -('53', 'sms.signName', '短信签名', '星洋智慧', 'string', 'input', '短信配置', '短信签名', '请输入短信签名', '发送短信使用的签名', NULL, NULL, NULL, NULL, NULL, 53, 1, '1', now()), -('54', 'sms.templateCode.login', '登录验证码模板', 'SMS_491985030', 'string', 'input', '短信配置', '登录验证码模板编码', '请输入模板编码', '登录验证码短信模板', NULL, NULL, NULL, NULL, NULL, 54, 1, '1', now()), -('55', 'sms.templateCode.register', '注册验证码模板', 'SMS_491985030', 'string', 'input', '短信配置', '注册验证码模板编码', '请输入模板编码', '注册验证码短信模板', NULL, NULL, NULL, NULL, NULL, 55, 1, '1', now()), -('56', 'sms.timeout', '请求超时时间', '30000', 'integer', 'input', '短信配置', '请求超时时间(毫秒)', '请输入超时时间', 'API请求超时时间', NULL, 5000, 60000, '毫秒', NULL, 56, 1, '1', now()); +('50', 'sms.login.enabled', '启用短信登录', 'false', 'boolean', 'switch', '短信配置', '是否启用短信登录', NULL, '关闭后登录页将不显示短信登录选项', NULL, NULL, NULL, NULL, NULL, 50, 1, '1', now()), +('51', 'sms.provider', '短信服务商', 'aliyun', 'string', 'select', '短信配置', '短信服务提供商', NULL, '短信服务提供商类型', NULL, NULL, NULL, NULL, 'aliyun', 51, 1, '1', now()), +('52', 'sms.accessKeyId', 'AccessKey ID', 'LTAI5t68do3qVXx5Rufugt3X', 'string', 'input', '短信配置', '短信服务AccessKey ID', '请输入AccessKey ID', '云服务商的AccessKey ID', NULL, NULL, NULL, NULL, NULL, 52, 1, '1', now()), +('53', 'sms.accessKeySecret', 'AccessKey Secret', '2vD9ToIff49Vph4JQXsn0Cy8nXQfzA', 'string', 'password', '短信配置', '短信服务AccessKey Secret', '请输入AccessKey Secret', '云服务商的AccessKey Secret', NULL, NULL, NULL, NULL, NULL, 53, 1, '1', now()), +('54', 'sms.signName', '短信签名', '星洋智慧', 'string', 'input', '短信配置', '短信签名', '请输入短信签名', '发送短信使用的签名', NULL, NULL, NULL, NULL, NULL, 54, 1, '1', now()), +('55', 'sms.templateCode.login', '登录验证码模板', 'SMS_491985030', 'string', 'input', '短信配置', '登录验证码模板编码', '请输入模板编码', '登录验证码短信模板', NULL, NULL, NULL, NULL, NULL, 55, 1, '1', now()), +('56', 'sms.templateCode.register', '注册验证码模板', 'SMS_491985030', 'string', 'input', '短信配置', '注册验证码模板编码', '请输入模板编码', '注册验证码短信模板', NULL, NULL, NULL, NULL, NULL, 56, 1, '1', now()), +('57', 'sms.timeout', '请求超时时间', '30000', 'integer', 'input', '短信配置', '请求超时时间(毫秒)', '请输入超时时间', 'API请求超时时间', NULL, 5000, 60000, '毫秒', NULL, 57, 1, '1', now()); diff --git a/schoolNewsServ/admin/src/main/resources/application.yml b/schoolNewsServ/admin/src/main/resources/application.yml index 7e9b726..c6eb266 100644 --- a/schoolNewsServ/admin/src/main/resources/application.yml +++ b/schoolNewsServ/admin/src/main/resources/application.yml @@ -119,6 +119,7 @@ school-news: - "/static/**" - "/file/download/**" - "/ai/chat/stream/**" + - "/system/config/baseinfo" crawler: diff --git a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/config/SysConfigService.java b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/config/SysConfigService.java index 2b8ee82..4fcd4ae 100644 --- a/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/config/SysConfigService.java +++ b/schoolNewsServ/api/api-system/src/main/java/org/xyzh/api/system/config/SysConfigService.java @@ -112,4 +112,10 @@ public interface SysConfigService { * @return 配置项详情 */ ResultDomain getConfigById(String id); + + /** + * 获取系统基础信息(公开接口,用于前端) + * @return 基础配置信息Map + */ + ResultDomain> getBaseInfo(); } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/ConfigController.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/ConfigController.java index 90ec2f3..5e38492 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/ConfigController.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/controller/ConfigController.java @@ -104,4 +104,13 @@ public class ConfigController { public ResultDomain getConfigById(@PathVariable String id) { return sysConfigService.getConfigById(id); } + + /** + * @description 获取系统基础信息(公开接口,无需登录) + * @return ResultDomain 基础配置信息 + */ + @GetMapping("/baseinfo") + public ResultDomain> getBaseInfo() { + return sysConfigService.getBaseInfo(); + } } diff --git a/schoolNewsServ/system/src/main/java/org/xyzh/system/service/config/impl/SysConfigServiceImpl.java b/schoolNewsServ/system/src/main/java/org/xyzh/system/service/config/impl/SysConfigServiceImpl.java index ad797ce..b144122 100644 --- a/schoolNewsServ/system/src/main/java/org/xyzh/system/service/config/impl/SysConfigServiceImpl.java +++ b/schoolNewsServ/system/src/main/java/org/xyzh/system/service/config/impl/SysConfigServiceImpl.java @@ -11,6 +11,7 @@ import org.xyzh.common.core.page.PageParam; import org.xyzh.common.dto.system.TbSysConfig; import org.xyzh.system.mapper.SysConfigMapper; +import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.UUID; @@ -371,4 +372,31 @@ public class SysConfigServiceImpl implements SysConfigService { return resultDomain; } } + + @Override + public ResultDomain> getBaseInfo() { + ResultDomain> resultDomain = new ResultDomain<>(); + try { + Map baseInfo = new HashMap<>(); + + // 基础信息配置 + baseInfo.put("systemName", getStringConfig("system.name")); + baseInfo.put("systemShortName", getStringConfig("system.shortName")); + baseInfo.put("loginLogo", getStringConfig("system.logo.login")); + baseInfo.put("homeLogo", getStringConfig("system.logo.home")); + baseInfo.put("adminLogo", getStringConfig("system.logo.admin")); + baseInfo.put("favicon", getStringConfig("system.favicon")); + + // 登录相关开关(从各自分组获取) + baseInfo.put("smsLoginEnabled", getBooleanConfig("sms.login.enabled")); + baseInfo.put("emailLoginEnabled", getBooleanConfig("email.login.enabled")); + + resultDomain.success("获取成功", baseInfo); + return resultDomain; + } catch (Exception e) { + logger.error("获取系统基础信息失败", e); + resultDomain.fail("获取系统基础信息失败: " + e.getMessage()); + return resultDomain; + } + } } diff --git a/schoolNewsWeb/src/apis/system/config.ts b/schoolNewsWeb/src/apis/system/config.ts index a47661f..0db5cff 100644 --- a/schoolNewsWeb/src/apis/system/config.ts +++ b/schoolNewsWeb/src/apis/system/config.ts @@ -7,6 +7,7 @@ import { api } from '@/apis/index'; import type { ResultDomain } from '@/types'; import type { ConfigItem, SaveConfigParam } from '@/types/system/config'; +import type { SystemBaseInfo } from '@/types/system/baseinfo'; /** * 系统配置API服务 */ @@ -58,5 +59,14 @@ export const configApi = { async deleteConfig(configKey: string): Promise> { const response = await api.delete(`/system/config/${configKey}`); return response.data; + }, + + /** + * 获取系统基础信息(公开接口) + * @returns Promise> + */ + async getBaseInfo(): Promise> { + const response = await api.get('/system/config/baseinfo'); + return response.data; } }; diff --git a/schoolNewsWeb/src/components/base/UserDropdown.vue b/schoolNewsWeb/src/components/base/UserDropdown.vue index bf10a14..90dc91e 100644 --- a/schoolNewsWeb/src/components/base/UserDropdown.vue +++ b/schoolNewsWeb/src/components/base/UserDropdown.vue @@ -19,11 +19,11 @@ @@ -103,7 +103,9 @@ interface Props { } const props = defineProps(); -const user = computed(() => store.getters['auth/user']); + +// 使用传入的 userinfo 或从 store 获取 +const currentUser = computed(() => props.userinfo || store.getters['auth/user']); // Emits const emit = defineEmits<{ @@ -125,11 +127,12 @@ const isLoggedIn = computed(() => { }); const userAvatar = computed(() => { - return props.userinfo?.avatar && props.userinfo?.avatar!='default' ? FILE_DOWNLOAD_URL + props.userinfo?.avatar : defaultAvatarImg; + const avatar = currentUser.value?.avatar; + return avatar && avatar !== 'default' ? FILE_DOWNLOAD_URL + avatar : defaultAvatarImg; }); const avatarText = computed(() => { - const name = props.userinfo?.fullName || props.userinfo?.username || ''; + const name = currentUser.value?.fullName || currentUser.value?.username || ''; return name.charAt(0).toUpperCase(); }); diff --git a/schoolNewsWeb/src/layouts/SidebarLayout.vue b/schoolNewsWeb/src/layouts/SidebarLayout.vue index ad6faf3..77b584a 100644 --- a/schoolNewsWeb/src/layouts/SidebarLayout.vue +++ b/schoolNewsWeb/src/layouts/SidebarLayout.vue @@ -21,37 +21,16 @@ - -
- +
+ +
+ +
@@ -66,14 +45,12 @@ diff --git a/schoolNewsWeb/src/views/public/login/Login.mobile.vue b/schoolNewsWeb/src/views/public/login/Login.mobile.vue index d90d224..16ce8d7 100644 --- a/schoolNewsWeb/src/views/public/login/Login.mobile.vue +++ b/schoolNewsWeb/src/views/public/login/Login.mobile.vue @@ -35,6 +35,7 @@ 密码登录
@@ -74,14 +75,16 @@