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 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) { 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(); 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(); 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> 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, 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); } } 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/**", 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()); rsf-server/src/main/java/com/vincent/rsf/server/system/controller/result/SystemInfoVo.java
New file @@ -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; } 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