From 7251c68e8338f7a6cf0e825007003480f113c606 Mon Sep 17 00:00:00 2001 From: none Date: Tue, 11 Apr 2023 10:36:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E7=B3=BB=E7=BB=9F=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E8=BF=94=E5=9B=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../playedu/api/checks/AppConfigCheck.java | 24 +++++++++--- .../xyz/playedu/api/constant/CConfig.java | 21 ++++++++++ .../controller/backend/SystemController.java | 36 +++++++++++++++++- .../controller/frontend/SystemController.java | 11 +++--- .../xyz/playedu/api/util/RequestUtil.java | 18 +++++++++ .../static/images/courses/thumb1.png | Bin 0 -> 17823 bytes .../static/images/courses/thumb2.png | Bin 0 -> 12603 bytes .../static/images/courses/thumb3.png | Bin 0 -> 12504 bytes .../static/images/default_avatar.png | Bin 0 -> 5291 bytes 9 files changed, 99 insertions(+), 11 deletions(-) create mode 100644 src/main/java/xyz/playedu/api/constant/CConfig.java create mode 100644 src/main/resources/static/images/courses/thumb1.png create mode 100644 src/main/resources/static/images/courses/thumb2.png create mode 100644 src/main/resources/static/images/courses/thumb3.png create mode 100644 src/main/resources/static/images/default_avatar.png diff --git a/src/main/java/xyz/playedu/api/checks/AppConfigCheck.java b/src/main/java/xyz/playedu/api/checks/AppConfigCheck.java index 84d2541..f0ba8bf 100644 --- a/src/main/java/xyz/playedu/api/checks/AppConfigCheck.java +++ b/src/main/java/xyz/playedu/api/checks/AppConfigCheck.java @@ -10,6 +10,7 @@ import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; import xyz.playedu.api.constant.BackendConstant; +import xyz.playedu.api.constant.CConfig; import xyz.playedu.api.domain.AppConfig; import xyz.playedu.api.service.AppConfigService; @@ -35,7 +36,7 @@ public class AppConfigCheck implements ApplicationRunner { setName("网站名"); setSort(10); setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_INPUT); - setKeyName("system.name"); + setKeyName(CConfig.SYSTEM_NAME); setKeyValue(""); setHelp("请输入网站名"); } @@ -45,7 +46,7 @@ public class AppConfigCheck implements ApplicationRunner { setName("Logo"); setSort(20); setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_IMAGE); - setKeyName("system.logo"); + setKeyName(CConfig.SYSTEM_LOGO); setKeyValue(""); } }, @@ -54,7 +55,7 @@ public class AppConfigCheck implements ApplicationRunner { setName("API访问地址"); setSort(30); setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_INPUT); - setKeyName("system.api_url"); + setKeyName(CConfig.SYSTEM_API_URL); setKeyValue(""); setHelp("请输入API访问地址"); } @@ -64,7 +65,7 @@ public class AppConfigCheck implements ApplicationRunner { setName("PC端口访问地址"); setSort(40); setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_INPUT); - setKeyName("system.pc_url"); + setKeyName(CConfig.SYSTEM_PC_URL); setKeyValue(""); setHelp("请输入PC端访问地址"); } @@ -74,7 +75,7 @@ public class AppConfigCheck implements ApplicationRunner { setName("H5端口访问地址"); setSort(50); setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_INPUT); - setKeyName("system.h5_url"); + setKeyName(CConfig.SYSTEM_H5_URL); setKeyValue(""); setHelp("请输入H5端访问地址"); } @@ -143,6 +144,19 @@ public class AppConfigCheck implements ApplicationRunner { } }, }); + put( + "学员配置", + new AppConfig[] { + new AppConfig() { + { + setName("默认头像"); + setSort(10); + setFieldType(BackendConstant.APP_CONFIG_FIELD_TYPE_IMAGE); + setKeyName(CConfig.MEMBER_DEFAULT_AVATAR); + setKeyValue(""); + } + }, + }); } }; diff --git a/src/main/java/xyz/playedu/api/constant/CConfig.java b/src/main/java/xyz/playedu/api/constant/CConfig.java new file mode 100644 index 0000000..f3bb250 --- /dev/null +++ b/src/main/java/xyz/playedu/api/constant/CConfig.java @@ -0,0 +1,21 @@ +/** + * This file is part of the PlayEdu. + * (c) 杭州白书科技有限公司 + */ +package xyz.playedu.api.constant; + +/** + * @Author 杭州白书科技有限公司 + * + * @create 2023/4/11 10:12 + */ +public class CConfig { + + public static final String SYSTEM_NAME = "system.name"; + public static final String SYSTEM_LOGO = "system.logo"; + public static final String SYSTEM_API_URL = "system.api_url"; + public static final String SYSTEM_PC_URL = "system.pc_url"; + public static final String SYSTEM_H5_URL = "system.h5_url"; + + public static final String MEMBER_DEFAULT_AVATAR = "member.default_avatar"; +} diff --git a/src/main/java/xyz/playedu/api/controller/backend/SystemController.java b/src/main/java/xyz/playedu/api/controller/backend/SystemController.java index 133171f..0ed73d9 100644 --- a/src/main/java/xyz/playedu/api/controller/backend/SystemController.java +++ b/src/main/java/xyz/playedu/api/controller/backend/SystemController.java @@ -4,22 +4,29 @@ */ package xyz.playedu.api.controller.backend; +import lombok.extern.slf4j.Slf4j; + import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import xyz.playedu.api.BCtx; +import xyz.playedu.api.constant.CConfig; import xyz.playedu.api.service.ImageCaptchaService; import xyz.playedu.api.types.ImageCaptchaResult; import xyz.playedu.api.types.JsonResponse; +import xyz.playedu.api.util.RequestUtil; import java.io.IOException; +import java.util.ArrayList; import java.util.HashMap; +import java.util.List; import java.util.Map; @RestController @RequestMapping("/backend/v1/system") +@Slf4j public class SystemController { @Autowired private ImageCaptchaService imageCaptchaService; @@ -37,7 +44,34 @@ public class SystemController { @GetMapping("/config") public JsonResponse config() { - Map data = BCtx.getConfig(); + Map configData = BCtx.getConfig(); + + String apiUrl = configData.get(CConfig.SYSTEM_API_URL); + if (apiUrl == null || apiUrl.trim().length() == 0) { + apiUrl = RequestUtil.uriWithProtocol(); + } + + HashMap data = new HashMap<>(); + + data.put(CConfig.SYSTEM_NAME, configData.get(CConfig.SYSTEM_NAME)); + data.put(CConfig.SYSTEM_LOGO, configData.get(CConfig.SYSTEM_LOGO)); + data.put(CConfig.SYSTEM_API_URL, apiUrl); + data.put(CConfig.SYSTEM_PC_URL, configData.get(CConfig.SYSTEM_PC_URL)); + data.put(CConfig.SYSTEM_H5_URL, configData.get(CConfig.SYSTEM_H5_URL)); + + // 学员的默认头像 + String memberDefaultAvatar = configData.get(CConfig.MEMBER_DEFAULT_AVATAR); + if (memberDefaultAvatar == null || memberDefaultAvatar.trim().length() == 0) { + data.put(CConfig.MEMBER_DEFAULT_AVATAR, apiUrl + "/images/default_avatar.png"); + } + + // 内置的三个线上课封面 + List defaultCourseThumbs = new ArrayList<>(); + defaultCourseThumbs.add(apiUrl + "/images/courses/thumb1.png"); + defaultCourseThumbs.add(apiUrl + "/images/courses/thumb2.png"); + defaultCourseThumbs.add(apiUrl + "/images/courses/thumb3.png"); + data.put("default_course_thumbs", defaultCourseThumbs); + return JsonResponse.data(data); } } diff --git a/src/main/java/xyz/playedu/api/controller/frontend/SystemController.java b/src/main/java/xyz/playedu/api/controller/frontend/SystemController.java index 3191090..8d0d3e5 100644 --- a/src/main/java/xyz/playedu/api/controller/frontend/SystemController.java +++ b/src/main/java/xyz/playedu/api/controller/frontend/SystemController.java @@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import xyz.playedu.api.constant.CConfig; import xyz.playedu.api.service.AppConfigService; import xyz.playedu.api.service.ImageCaptchaService; import xyz.playedu.api.types.ImageCaptchaResult; @@ -37,11 +38,11 @@ public class SystemController { HashMap data = new HashMap<>(); - data.put("system-name", configs.get("system.name")); - data.put("system-logo", configs.get("system.logo")); - data.put("system-api-url", configs.get("system.api_url")); - data.put("system-pc-url", configs.get("system.pc_url")); - data.put("system-h5-url", configs.get("system.h5_url")); + data.put("system-name", configs.get(CConfig.SYSTEM_NAME)); + data.put("system-logo", configs.get(CConfig.SYSTEM_LOGO)); + data.put("system-api-url", configs.get(CConfig.SYSTEM_API_URL)); + data.put("system-pc-url", configs.get(CConfig.SYSTEM_PC_URL)); + data.put("system-h5-url", configs.get(CConfig.SYSTEM_H5_URL)); data.put("system-pc-index-footer-msg", configs.get("system.pc_index_footer_msg")); data.put("player-poster", configs.get("player.poster")); diff --git a/src/main/java/xyz/playedu/api/util/RequestUtil.java b/src/main/java/xyz/playedu/api/util/RequestUtil.java index d9de370..51e7b8d 100644 --- a/src/main/java/xyz/playedu/api/util/RequestUtil.java +++ b/src/main/java/xyz/playedu/api/util/RequestUtil.java @@ -54,6 +54,13 @@ public class RequestUtil { + (Arrays.asList(443, 80, 0).contains(portNumber) ? "" : ":" + portNumber); } + public static String uriWithProtocol() { + Integer portNumber = port(); + return RequestUtil.protocol() + + RequestUtil.domain() + + (Arrays.asList(443, 80, 0).contains(portNumber) ? "" : ":" + portNumber); + } + public static String pathname() { HttpServletRequest request = RequestUtil.handler(); return request == null ? "" : request.getRequestURI(); @@ -74,4 +81,15 @@ public class RequestUtil { } return null; } + + public static String protocol() { + HttpServletRequest request = RequestUtil.handler(); + if (request != null) { + String requestUrl = request.getRequestURL().toString(); + List urls = Arrays.asList(requestUrl.split("//")); + + return urls.get(0) + "//"; + } + return null; + } } diff --git a/src/main/resources/static/images/courses/thumb1.png b/src/main/resources/static/images/courses/thumb1.png new file mode 100644 index 0000000000000000000000000000000000000000..4ab2fa76eee3617eeae546ee2658e26ad901d122 GIT binary patch literal 17823 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/images/courses/thumb3.png b/src/main/resources/static/images/courses/thumb3.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb0405186ab76e2511ad348204b6170844ba252 GIT binary patch literal 12504 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/static/images/default_avatar.png b/src/main/resources/static/images/default_avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..8d157b7b2d5db1d7201180b59cdb750cde10cd40 GIT binary patch literal 5291 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 literal 0 HcmV?d00001