From 8a2b58138c9f8fafe68e9f5bef0a80348595000a Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期三, 12 二月 2025 13:48:24 +0800
Subject: [PATCH] #

---
 rsf-admin/src/api/auth/index.js                                                            |    8 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java      |   18 +++++++++
 rsf-admin/src/page/login/index.jsx                                                         |   10 +++-
 rsf-server/src/main/java/com/vincent/rsf/server/system/controller/result/SystemInfoVo.java |   18 +++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java        |    1 
 rsf-admin/src/page/login/Register.jsx                                                      |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java        |   17 ++++++++
 rsf-server/src/main/resources/application.yml                                              |    4 +
 rsf-admin/src/page/login/Login.jsx                                                         |    2 
 rsf-common/src/main/java/com/vincent/rsf/common/enums/SystemModeType.java                  |    2 
 rsf-admin/src/App.jsx                                                                      |    7 +++
 11 files changed, 81 insertions(+), 8 deletions(-)

diff --git a/rsf-admin/src/App.jsx b/rsf-admin/src/App.jsx
index f3be5e5..f5034a8 100644
--- a/rsf-admin/src/App.jsx
+++ b/rsf-admin/src/App.jsx
@@ -21,6 +21,7 @@
 import { themes } from './themes/themes';
 import { SPA_NAME, SPA_VERSION, DEFAULT_THEME_NAME, DEFAULT_THEME_MODE, DATA_PROVIDER_SPRING } from "./config/setting";
 import ResourceContent from "./page/ResourceContent";
+import { getSystemInfo } from '@/api/auth';
 
 const i18nProvider = polyglotI18nProvider(
   locale => {
@@ -50,6 +51,12 @@
   const lightTheme = themes.find(theme => theme.name === themeName)?.light;
   const darkTheme = themes.find(theme => theme.name === themeName)?.dark;
 
+  useEffect(() => {
+    getSystemInfo().then(data => {
+      localStorage.setItem("system", JSON.stringify(data));
+    })
+  }, []);
+
   return (
     <>
       <Admin
diff --git a/rsf-admin/src/api/auth/index.js b/rsf-admin/src/api/auth/index.js
index 3c164da..6cd4d6f 100644
--- a/rsf-admin/src/api/auth/index.js
+++ b/rsf-admin/src/api/auth/index.js
@@ -1,5 +1,13 @@
 import request from '../../utils/request';
 
+export async function getSystemInfo() {
+    const res = await request.get('/system/info');
+    if (res.data.code === 200) {
+        return res.data.data;
+    }
+    return Promise.reject(new Error(res.data.msg));
+}
+
 export async function tenants(_params) {
     const res = await request.get('/tenant/list', _params);
     if (res.data.code === 200) {
diff --git a/rsf-admin/src/page/login/Login.jsx b/rsf-admin/src/page/login/Login.jsx
index 0eedaad..b70c721 100644
--- a/rsf-admin/src/page/login/Login.jsx
+++ b/rsf-admin/src/page/login/Login.jsx
@@ -26,7 +26,7 @@
     const notify = useNotify();
     const login = useLogin();
     const location = useLocation();
-    const { tenantList } = props;
+    const { systemInfo, tenantList } = props;
 
     const { control, handleSubmit, watch, setValue, getValues } = useForm();
 
diff --git a/rsf-admin/src/page/login/Register.jsx b/rsf-admin/src/page/login/Register.jsx
index e803ec5..3e19a4f 100644
--- a/rsf-admin/src/page/login/Register.jsx
+++ b/rsf-admin/src/page/login/Register.jsx
@@ -26,7 +26,7 @@
     const notify = useNotify();
     const login = useLogin();
     const location = useLocation();
-    const { tab, tenantList } = props;
+    const { systemInfo, tenantList } = props;
 
     const { control, watch, handleSubmit, setValue } = useForm();
 
diff --git a/rsf-admin/src/page/login/index.jsx b/rsf-admin/src/page/login/index.jsx
index d491959..5fab118 100644
--- a/rsf-admin/src/page/login/index.jsx
+++ b/rsf-admin/src/page/login/index.jsx
@@ -17,7 +17,7 @@
     useNotify,
 } from 'react-admin';
 import { LOGIN_BACKGROUND } from '@/config/setting';
-import { tenants } from '@/api/auth';
+import { getSystemInfo, tenants } from '@/api/auth';
 import Login from "./Login";
 import Register from "./Register";
 
@@ -27,11 +27,15 @@
     const isSmallScreen = useMediaQuery(theme.breakpoints.down('md'));
 
     const [tab, setTab] = useState(0)
+    const [systemInfo, setSystemInfo] = useState({});
     const [tenantList, setTenantList] = useState([]);
 
     const formPosition = isSmallScreen ? 'middle' : 'right'
 
     useEffect(() => {
+        getSystemInfo().then(data => {
+            setSystemInfo(data);
+        })
         tenants().then(data => {
             setTenantList(data);
         })
@@ -100,8 +104,8 @@
                     <Tab label={translate('page.login.tab.register')} sx={{ fontSize: '.8em' }} />
                 </Tabs>
 
-                {tab === 0 && <Login tenantList={tenantList} />}
-                {tab === 1 && <Register tenantList={tenantList} />}
+                {tab === 0 && <Login systemInfo={systemInfo} tenantList={tenantList} />}
+                {tab === 1 && <Register systemInfo={systemInfo} tenantList={tenantList} />}
 
                 <Box mb={1} sx={{ textAlign: 'center' }}>
                     <Typography variant="caption" align="center">{translate("page.login.footer")}</Typography>
diff --git a/rsf-common/src/main/java/com/vincent/rsf/common/enums/SystemModeType.java b/rsf-common/src/main/java/com/vincent/rsf/common/enums/SystemModeType.java
index dba4463..e010fc3 100644
--- a/rsf-common/src/main/java/com/vincent/rsf/common/enums/SystemModeType.java
+++ b/rsf-common/src/main/java/com/vincent/rsf/common/enums/SystemModeType.java
@@ -1,6 +1,6 @@
 package com.vincent.rsf.common.enums;
 
-public enum SystemMode {
+public enum SystemModeType {
 
     ONLINE,
     OFFLINE,
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
index 69f05b4..4a2d3fc 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/config/ConfigProperties.java
@@ -1,5 +1,6 @@
 package com.vincent.rsf.server.common.config;
 
+import com.vincent.rsf.common.enums.SystemModeType;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
@@ -35,9 +36,19 @@
     private String tokenKey;
 
     /**
+     * 绯荤粺鍚嶇О
+     */
+    private String systemName;
+
+    /**
+     * 绯荤粺鐗堟湰
+     */
+    private String systemVersion;
+
+    /**
      * 绯荤粺妯″紡锛� ONLINE / OFFLINE )
      */
-    private String mode;
+    private String systemMode;
 
     /**
      * 瓒呯骇绠$悊鍛�
@@ -48,4 +59,8 @@
         return Arrays.stream(superUsername.split(",")).collect(Collectors.toList());
     }
 
+    public SystemModeType getSystemMode() {
+        return SystemModeType.valueOf(systemMode);
+    }
+
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
index bc22f98..f1e3471 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/security/SecurityConfig.java
@@ -36,6 +36,7 @@
     public static final String[] FILTER_PATH = new String[]{
             "/demo/**",
             "/test/**",
+            "/system/info",
             "/tenant/list",
             "/login",
             "/druid/**",
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
index 9c9f64c..01afd24 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/AuthController.java
@@ -1,16 +1,19 @@
 package com.vincent.rsf.server.system.controller;
 
+import com.vincent.rsf.common.enums.SystemModeType;
 import com.vincent.rsf.common.utils.Utils;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
 import com.vincent.rsf.server.common.annotation.OperationLog;
 import com.vincent.rsf.server.common.config.ConfigProperties;
 import com.vincent.rsf.server.common.security.JwtSubject;
+import com.vincent.rsf.server.common.service.EmailService;
 import com.vincent.rsf.server.common.utils.JwtUtil;
 import com.vincent.rsf.server.system.controller.param.LoginParam;
 import com.vincent.rsf.server.system.controller.param.UpdatePasswordParam;
 import com.vincent.rsf.server.system.controller.result.LoginResult;
 import com.vincent.rsf.server.system.controller.result.MenuVo;
+import com.vincent.rsf.server.system.controller.result.SystemInfoVo;
 import com.vincent.rsf.server.system.entity.Menu;
 import com.vincent.rsf.server.system.entity.Tenant;
 import com.vincent.rsf.server.system.entity.User;
@@ -20,6 +23,7 @@
 import com.vincent.rsf.server.system.service.TenantService;
 import com.vincent.rsf.server.system.service.UserLoginService;
 import com.vincent.rsf.server.system.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -48,10 +52,14 @@
     private RoleMenuService roleMenuService;
     @Resource
     private TenantService tenantService;
+    @Autowired
+    private EmailService emailService;
 
     @PostMapping("/login")
     public R login(@RequestBody LoginParam param, HttpServletRequest request) {
 //        System.out.println(userService.encodePassword("123456"));
+//        emailService.sendVerificationEmail("t1341870251@gmail.com", "123456");
+
         String username = param.getUsername();
         Long tenantId = param.getTenantId();
         User user = userService.getByUsername(username, tenantId);
@@ -71,6 +79,16 @@
         return R.ok("Sign In Success").add(new LoginResult(accessToken, user, tenant.getName()));
     }
 
+    @GetMapping("/system/info")
+    public R systemInfo() {
+        SystemModeType systemMode = configProperties.getSystemMode();
+        SystemInfoVo infoVo = new SystemInfoVo();
+        infoVo.setName(configProperties.getSystemName());
+        infoVo.setVersion(configProperties.getSystemVersion());
+        infoVo.setMode(systemMode.toString());
+        return R.ok(infoVo);
+    }
+
     @GetMapping("/tenant/list")
     public R tenantList() {
         return R.ok().add(tenantService.list());
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/result/SystemInfoVo.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/result/SystemInfoVo.java
new file mode 100644
index 0000000..7643ee8
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/controller/result/SystemInfoVo.java
@@ -0,0 +1,18 @@
+package com.vincent.rsf.server.system.controller.result;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+public class SystemInfoVo {
+
+    private String name;
+
+    private String version;
+
+    private String mode;
+
+}
diff --git a/rsf-server/src/main/resources/application.yml b/rsf-server/src/main/resources/application.yml
index 1c5c099..7008f3e 100644
--- a/rsf-server/src/main/resources/application.yml
+++ b/rsf-server/src/main/resources/application.yml
@@ -28,6 +28,8 @@
     path: logs/@pom.artifactId@
 
 config:
+  system-name: @pom.artifactId@
+  system-version: @pom.version@
+  system-mode: OFFLINE
   token-key: KUHSMcYQ4lePt3r6bckz0P13cBJyoonYqInThvQlUnbsFCIcCcZZAbWZ6UNFztYNYPhGdy6eyb8WdIz8FU2Cz396TyTJk3NI2rtXMHBOehRb4WWJ4MdYVVg2oWPyqRQ2
-  mode: OFFLINE
   super-username: root
\ No newline at end of file

--
Gitblit v1.9.1