From 3c74b6ffe9e246c66d44f2c6be463a630328d30a Mon Sep 17 00:00:00 2001
From: vincentlu <t1341870251@gmail.com>
Date: 星期一, 19 一月 2026 10:43:56 +0800
Subject: [PATCH] #

---
 zy-acs-flow/public/login_bg.jpg                                                            |    0 
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConfigProperties.java        |   63 ++++++
 zy-acs-flow/src/App.jsx                                                                    |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java        |    2 
 zy-acs-common/src/main/java/com/zy/acs/common/enums/SystemModeType.java                    |    9 
 zy-acs-flow/src/i18n/zh.js                                                                 |   19 +
 zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/BusinessRes.java             |   20 ++
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java      |   28 +-
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/result/SystemInfoVo.java |   18 +
 /dev/null                                                                                  |    0 
 zy-acs-flow/src/config/setting.js                                                          |    2 
 zy-acs-manager/src/main/java/com/zy/acs/manager/system/entity/Tenant.java                  |   18 -
 zy-acs-manager/src/main/resources/application.yml                                          |    3 
 zy-acs-flow/src/i18n/en.js                                                                 |   19 +
 zy-acs-flow/src/page/login/Login.jsx                                                       |  243 +++++++++++-------------
 zy-acs-flow/public/login_bg.mp4                                                            |    0 
 zy-acs-flow/src/page/login/index.jsx                                                       |   99 +++++++++
 zy-acs-flow/src/map/MapPage.jsx                                                            |    7 
 zy-acs-flow/src/api/auth/index.js                                                          |   26 ++
 19 files changed, 413 insertions(+), 165 deletions(-)

diff --git a/zy-acs-common/src/main/java/com/zy/acs/common/enums/SystemModeType.java b/zy-acs-common/src/main/java/com/zy/acs/common/enums/SystemModeType.java
new file mode 100644
index 0000000..9372472
--- /dev/null
+++ b/zy-acs-common/src/main/java/com/zy/acs/common/enums/SystemModeType.java
@@ -0,0 +1,9 @@
+package com.zy.acs.common.enums;
+
+public enum SystemModeType {
+
+    ONLINE,
+    OFFLINE,
+    ;
+
+}
diff --git a/zy-acs-flow/public/login_bg2.jpg b/zy-acs-flow/public/login_bg.jpg
similarity index 100%
rename from zy-acs-flow/public/login_bg2.jpg
rename to zy-acs-flow/public/login_bg.jpg
Binary files differ
diff --git a/zy-acs-flow/public/login_bg1.mp4 b/zy-acs-flow/public/login_bg.mp4
similarity index 100%
rename from zy-acs-flow/public/login_bg1.mp4
rename to zy-acs-flow/public/login_bg.mp4
Binary files differ
diff --git a/zy-acs-flow/public/login_bg3.jpg b/zy-acs-flow/public/login_bg3.jpg
deleted file mode 100644
index 7a5e114..0000000
--- a/zy-acs-flow/public/login_bg3.jpg
+++ /dev/null
Binary files differ
diff --git a/zy-acs-flow/public/login_bg4.jpg b/zy-acs-flow/public/login_bg4.jpg
deleted file mode 100644
index 1671796..0000000
--- a/zy-acs-flow/public/login_bg4.jpg
+++ /dev/null
Binary files differ
diff --git a/zy-acs-flow/src/App.jsx b/zy-acs-flow/src/App.jsx
index 9b38f36..00924d9 100644
--- a/zy-acs-flow/src/App.jsx
+++ b/zy-acs-flow/src/App.jsx
@@ -16,7 +16,7 @@
 import DataProvider from "./config/dataProvider";
 import Dashboard from "./page/dashboard/Dashboard";
 import Settings from "./page/settings/Settings";
-import Login from "./page/login/Login";
+import Login from "./page/login";
 import * as Common from './utils/common'
 import { themes } from './themes/themes';
 import { SPA_NAME, SPA_VERSION, DEFAULT_THEME_NAME, DEFAULT_THEME_MODE, DATA_PROVIDER_SPRING } from "./config/setting";
diff --git a/zy-acs-flow/src/api/auth/index.js b/zy-acs-flow/src/api/auth/index.js
index 64f5767..8030bdf 100644
--- a/zy-acs-flow/src/api/auth/index.js
+++ b/zy-acs-flow/src/api/auth/index.js
@@ -1,5 +1,21 @@
 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: _params });
+    if (res.data.code === 200) {
+        return res.data.data;
+    }
+    return Promise.reject(new Error(res.data.msg));
+}
+
 export async function login(_params) {
     const res = await request.post('/login', _params);
     if (res.data.code === 200) {
@@ -8,10 +24,20 @@
     return Promise.reject(new Error(res.data.msg));
 }
 
+export async function register(_params) {
+    const res = await request.post('/register', _params);
+    return res.data;
+}
+
 export async function menus(_params) {
     return await request.get('/auth/menu', _params);
     if (res.data.code === 200) {
         return res.data.data;
     }
     return Promise.reject(new Error(res.data.msg));
+}
+
+export async function sendEmailCode(_params) {
+    const res = await request.get('/email/code', { params: _params });
+    return res.data;
 }
\ No newline at end of file
diff --git a/zy-acs-flow/src/config/setting.js b/zy-acs-flow/src/config/setting.js
index a741148..0e4c2f6 100644
--- a/zy-acs-flow/src/config/setting.js
+++ b/zy-acs-flow/src/config/setting.js
@@ -37,6 +37,6 @@
 
 export const EDIT_MODE = 'pessimistic'; // pessimistic | undoable
 
-export const LOGIN_BACKGROUND = 'image';  // image | media
+export const LOGIN_BACKGROUND = 'media';  // image | media
 
 export const CUSTOM_PAGES_DATA_INTERVAL = 1000;
\ No newline at end of file
diff --git a/zy-acs-flow/src/i18n/en.js b/zy-acs-flow/src/i18n/en.js
index 3589f6a..0fae43f 100644
--- a/zy-acs-flow/src/i18n/en.js
+++ b/zy-acs-flow/src/i18n/en.js
@@ -599,6 +599,25 @@
         }
     },
     page: {
+        login: {
+            title: 'Welcome to',
+            footer: '',
+            tenant: 'Company',
+            email: 'Email Address',
+            username: 'Username',
+            password: 'Password',
+            confirmPwd: 'Confirm Password',
+            code: 'Verification Code',
+            tab: {
+                login: 'SIGN IN',
+                register: 'SIGN UP',
+            },
+            button: {
+                login: 'SIGN IN',
+                register: 'SIGN UP',
+                code: 'Send Code',
+            },
+        },
         code: {
             dirRule: {
                 helper: 'Select one direction to disable; other directions remain available.',
diff --git a/zy-acs-flow/src/i18n/zh.js b/zy-acs-flow/src/i18n/zh.js
index ffe3417..9da98d5 100644
--- a/zy-acs-flow/src/i18n/zh.js
+++ b/zy-acs-flow/src/i18n/zh.js
@@ -599,6 +599,25 @@
         }
     },
     page: {
+        login: {
+            title: '娆㈣繋浣跨敤',
+            footer: '',
+            tenant: '鍏徃',
+            email: '閭鍦板潃',
+            username: '鐧诲綍璐﹀彿',
+            password: '瀵嗙爜',
+            confirmPwd: '纭瀵嗙爜',
+            code: '楠岃瘉鐮�',
+            tab: {
+                login: '鐧诲綍',
+                register: '娉ㄥ唽',
+            },
+            button: {
+                login: '鐧诲綍',
+                register: '娉ㄥ唽',
+                code: '鑾峰彇楠岃瘉鐮�',
+            },
+        },
         code: {
             dirRule: {
                 helper: '閫夋嫨涓�涓柟鍚戠鐢紝鍏朵綑鏂瑰悜淇濇寔鍙敤',
diff --git a/zy-acs-flow/src/map/MapPage.jsx b/zy-acs-flow/src/map/MapPage.jsx
index de4e424..8b229e2 100644
--- a/zy-acs-flow/src/map/MapPage.jsx
+++ b/zy-acs-flow/src/map/MapPage.jsx
@@ -68,7 +68,9 @@
     });
 
     const handleResize = () => {
-        if (!contentRef) { return; }
+        if (!contentRef.current || !player) {
+            return;
+        }
         const width = contentRef.current.offsetWidth;
         const height = contentRef.current.offsetHeight;
         player.resize(width, height);
@@ -125,6 +127,9 @@
     }, [sidebarOpen]);
 
     useEffect(() => {
+        if (!player) {
+            return;
+        }
         player.setTheme(themeMode);
         Tool.setThemeMode(themeMode);
     }, [themeMode])
diff --git a/zy-acs-flow/src/page/login/Login.jsx b/zy-acs-flow/src/page/login/Login.jsx
index 689d819..345f692 100644
--- a/zy-acs-flow/src/page/login/Login.jsx
+++ b/zy-acs-flow/src/page/login/Login.jsx
@@ -1,164 +1,143 @@
-import * as React from 'react';
-import { useState } from 'react';
+import React, { useState, useRef, useEffect, useMemo } from "react";
 import { useLocation } from 'react-router-dom';
 import {
-    Avatar,
     Box,
-    Button,
-    Card,
-    CardActions,
     CircularProgress,
+    Typography,
+    Button,
+    TextField,
+    Stack,
+    Autocomplete,
+    InputAdornment,
+    IconButton,
 } from '@mui/material';
-import LockIcon from '@mui/icons-material/Lock';
 import {
-    Form,
-    required,
-    TextInput,
     useTranslate,
     useLogin,
     useNotify,
 } from 'react-admin';
-import { LOGIN_BACKGROUND } from '@/config/setting';
+import { useForm, Controller, useWatch, FormProvider, useFormContext } from "react-hook-form";
+import Visibility from '@mui/icons-material/Visibility';
+import VisibilityOff from '@mui/icons-material/VisibilityOff';
 
-const Login = () => {
-    const [loading, setLoading] = useState(false);
+const Login = (props) => {
     const translate = useTranslate();
-
     const notify = useNotify();
     const login = useLogin();
     const location = useLocation();
 
-    const handleSubmit = (auth) => {
+    const { control, handleSubmit, watch, setValue, getValues, setError, clearErrors } = useForm();
+
+    const [loading, setLoading] = useState(false);
+    const [showPassword, setShowPassword] = useState(false);
+
+    const username = watch('username');
+    const password = watch('password');
+
+    const onSubmit = (data) => {
         setLoading(true);
-        // js native confirm && root
         login(
-            auth,
+            data,
             location.state ? (location.state).nextPathname : '/'
-        ).catch((error) => {
+        ).catch((res) => {
             setLoading(false);
-            notify(
-                typeof error === 'string'
-                    ? error
-                    : typeof error === 'undefined' || !error.message
-                        ? 'ra.auth.sign_in_error'
-                        : error.message,
-                {
-                    type: 'error',
-                    messageArgs: {
-                        _:
-                            typeof error === 'string'
-                                ? error
-                                : error && error.message
-                                    ? error.message
-                                    : undefined,
-                    },
-                }
-            );
+            const { code, msg, data } = res;
+            if (code === 10003) {
+                setError('username', {
+                    message: msg
+                })
+            } else if (code === 10004) {
+                setError('username', {
+                    message: msg
+                })
+            } else if (code === 10001) {
+                setError('password', {
+                    message: msg
+                })
+            } else {
+                notify(msg, { type: 'error', messageArgs: { _: msg } });
+            }
         });
     };
 
     return (
-        <Form onSubmit={handleSubmit} noValidate>
-            {/* https://unsplash.com/ */}
+        <>
             <Box
-                sx={{
-                    display: 'flex',
-                    flexDirection: 'column',
-                    minHeight: '100vh',
-                    alignItems: 'center',
-                    justifyContent: 'flex-start',
-                    // justifyContent: 'center',
-                    background: `url(/login_bg2.jpg)`,
-                    backgroundRepeat: 'no-repeat',
-                    backgroundSize: 'cover',
-                }}
+                p={2}
+                display="flex"
+                flexDirection='column'
+                component="form"
+                onSubmit={handleSubmit(onSubmit)}
+                noValidate
             >
-                <video
-                    autoPlay
-                    loop
-                    muted
-                    style={{
-                        position: 'fixed',
-                        top: 0,
-                        left: 0,
-                        width: '100%',
-                        height: '100%',
-                        // objectFit: 'cover',
-                        // objectFit: 'contain',
-                        objectFit: 'fill',
-                        // objectFit: 'scale-down',
-                        zIndex: 0,
-                    }}
-                >
-                    {LOGIN_BACKGROUND === 'media' && (
-                        <source src="/login_bg1.mp4" type="video/mp4" />
-                    )}
-                </video>
-
-                <Card sx={{
-                    minWidth: 300,
-                    marginTop: '6em',
-                    zIndex: 1
-                }}>
-                    <Box
-                        sx={{
-                            margin: '1em',
-                            display: 'flex',
-                            justifyContent: 'center',
-                        }}
-                    >
-                        <Avatar sx={{ bgcolor: 'secondary.main' }}>
-                            <LockIcon />
-                        </Avatar>
-                    </Box>
-                    <Box
-                        sx={{
-                            marginTop: '1em',
-                            display: 'flex',
-                            justifyContent: 'center',
-                            color: theme => theme.palette.grey[500],
-                        }}
-                    >
-                        Hint: root / 123456
-                    </Box>
-                    <Box sx={{ padding: '0 1em 1em 1em' }}>
-                        <Box sx={{ marginTop: '1em' }}>
-                            <TextInput
+                <Stack spacing={2}>
+                    <Controller
+                        name="username"
+                        control={control}
+                        defaultValue=""
+                        rules={{ required: true }}
+                        render={({ field, fieldState: { error } }) => (
+                            <TextField
+                                {...field}
+                                label={translate("page.login.username")}
+                                variant="standard"
+                                disabled={loading}
                                 autoFocus
-                                source="username"
-                                label={translate('ra.auth.username')}
-                                disabled={loading}
-                                validate={required()}
+                                autoComplete="off"
+                                error={!!error}
+                                helperText={error?.message || ""}
                             />
-                        </Box>
-                        <Box sx={{ marginTop: '1em' }}>
-                            <TextInput
-                                source="password"
-                                label={translate('ra.auth.password')}
-                                type="password"
+                        )}
+                    />
+
+                    <Controller
+                        name="password"
+                        control={control}
+                        defaultValue=""
+                        rules={{ required: true }}
+                        render={({ field, fieldState: { error } }) => (
+                            <TextField
+                                {...field}
+                                label={translate("page.login.password")}
+                                type={showPassword ? 'text' : 'password'}
+                                variant="standard"
                                 disabled={loading}
-                                validate={required()}
+                                autoComplete="off"
+                                error={!!error}
+                                helperText={error?.message || ""}
+                                InputProps={{
+                                    endAdornment: (
+                                        <InputAdornment position="end">
+                                            <IconButton
+                                                aria-label="toggle password visibility"
+                                                onClick={() => setShowPassword((show) => !show)}
+                                                onMouseDown={(event) => { event.preventDefault() }}
+                                                edge="end"
+                                            >
+                                                {showPassword ? <VisibilityOff /> : <Visibility />}
+                                            </IconButton>
+                                        </InputAdornment>
+                                    ),
+                                }}
                             />
-                        </Box>
-                    </Box>
-                    <CardActions sx={{ padding: '0 1em 1em 1em' }}>
-                        <Button
-                            variant="contained"
-                            type="submit"
-                            color="primary"
-                            disabled={loading}
-                            fullWidth
-                        >
-                            {loading && (
-                                <CircularProgress size={25} thickness={2} />
-                            )}
-                            {translate('ra.auth.sign_in')}
-                        </Button>
-                    </CardActions>
-                </Card>
-            </Box>
-        </Form>
-    );
-};
+                        )}
+                    />
+
+                    <Box />
+
+                    <Button
+                        type="submit"
+                        variant="contained"
+                        disabled={loading || !username || !password}
+                    >
+                        {loading && <CircularProgress size={25} thickness={2} />}
+                        {translate('page.login.button.login')}
+                    </Button>
+
+                </Stack>
+            </Box >
+        </>
+    )
+}
 
 export default Login;
diff --git a/zy-acs-flow/src/page/login/index.jsx b/zy-acs-flow/src/page/login/index.jsx
new file mode 100644
index 0000000..91ae0c9
--- /dev/null
+++ b/zy-acs-flow/src/page/login/index.jsx
@@ -0,0 +1,99 @@
+import React, { useState, useRef, useEffect, useMemo } from "react";
+import {
+    Box,
+    AppBar,
+    Card,
+    Toolbar,
+    CircularProgress,
+    Typography,
+    Tabs,
+    Tab,
+    useTheme,
+    useMediaQuery,
+    Button,
+} from '@mui/material';
+import {
+    useTranslate,
+    useLogin,
+    useNotify,
+} from 'react-admin';
+import { LOGIN_BACKGROUND, DEFAULT_THEME_MODE } from '@/config/setting';
+import Login from "./Login";
+
+const Index = () => {
+    const translate = useTranslate();
+    const theme = useTheme();
+    const isSmallScreen = useMediaQuery(theme.breakpoints.down('md'));
+
+    const [tab, setTab] = useState(0)
+
+    const formPosition = isSmallScreen ? 'middle' : 'right'
+
+
+    return (
+        <Box
+            sx={{
+                display: 'flex',
+                flexDirection: 'column',
+                minHeight: '100vh',
+                alignItems: formPosition === 'middle' ? 'center' : 'flex-end',
+                paddingRight: formPosition === 'middle' ? 0 : '6em',
+                justifyContent: formPosition === 'middle' ? 'flex-start' : 'center',
+                background: `url(/login_bg.jpg)`, // https://unsplash.com/
+                backgroundRepeat: 'no-repeat',
+                backgroundSize: 'cover',
+            }}
+        >
+            <video
+                autoPlay
+                loop
+                muted
+                style={{
+                    position: 'fixed',
+                    top: 0,
+                    left: 0,
+                    width: '100%',
+                    height: '100%',
+                    // objectFit: 'cover',
+                    // objectFit: 'contain',
+                    objectFit: 'fill',
+                    // objectFit: 'scale-down',
+                    zIndex: 0,
+                }}
+            >
+                {LOGIN_BACKGROUND === 'media' && (
+                    <source src="/login_bg.mp4" type="video/mp4" />
+                )}
+            </video>
+
+            <Card sx={{
+                width: 400,
+                marginTop: formPosition === 'middle' ? '6em' : 0,
+                zIndex: 1,
+                bgcolor: DEFAULT_THEME_MODE === 'light' ? '#fff' : '#121212',
+                border: 'inherit'
+            }}>
+                <div>
+                    <AppBar position="static" sx={{
+                        backgroundColor: '#3D4BA7',
+                        border: 'inherit',
+                    }}>
+                        <Toolbar sx={{
+                            display: 'flex',
+                            justifyContent: 'space-between'
+                        }}>
+                            <Typography variant="h6" color="inherit">{translate("page.login.title")} {"RMS"}</Typography>
+                        </Toolbar>
+                    </AppBar>
+                </div>
+
+                <Login />
+                <Box mb={1} sx={{ textAlign: 'center' }}>
+                    <Typography variant="caption" align="center">{translate("page.login.footer")}</Typography>
+                </Box>
+            </Card>
+        </Box >
+    );
+};
+
+export default Index;
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConfigProperties.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConfigProperties.java
index c97f6b3..f75739a 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConfigProperties.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/config/ConfigProperties.java
@@ -1,8 +1,13 @@
 package com.zy.acs.manager.common.config;
 
+import com.zy.acs.common.enums.SystemModeType;
 import lombok.Data;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.Configuration;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 绯荤粺閰嶇疆灞炴��
@@ -30,4 +35,62 @@
      */
     private String tokenKey;
 
+    /**
+     * 绯荤粺鍚嶇О
+     */
+    private String systemName;
+
+    /**
+     * 绯荤粺鐗堟湰
+     */
+    private String systemVersion;
+
+    /**
+     * 绯荤粺妯″紡锛� ONLINE / OFFLINE )
+     */
+    private String systemMode;
+
+    /**
+     * 瓒呯骇绠$悊鍛�
+     */
+    private String superUsername;
+
+    /**
+     * 楠岃瘉鐮侀暱搴�
+     */
+    private Integer codeLength = 4;
+
+    /**
+     * 楠岃瘉鐮佹湁鏁堟湡 锛� 绉� 锛�
+     */
+    private Integer codeTime = 300;
+
+    /**
+     * 瓒呯骇楠岃瘉鐮�
+     */
+    private String securityCode;
+
+    /**
+     * 鏂囦欢淇濆瓨璺緞
+     */
+    private String fileSavePath;
+
+    /**
+     * 鏂囦欢鏈嶅姟鍣╱rl鍓嶇紑
+     */
+    private String fileDomainPrefix;
+
+    /**
+     * 鍥剧墖鏈�澶т綋绉�
+     */
+    private Integer imageMaxSize;
+
+    public List<String> getSuperUserList() {
+        return Arrays.stream(superUsername.split(",")).collect(Collectors.toList());
+    }
+
+    public SystemModeType getSystemMode() {
+        return SystemModeType.valueOf(systemMode);
+    }
+
 }
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/BusinessRes.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/BusinessRes.java
new file mode 100644
index 0000000..a2ee420
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/domain/BusinessRes.java
@@ -0,0 +1,20 @@
+package com.zy.acs.manager.common.domain;
+
+
+import com.zy.acs.framework.common.BaseRes;
+
+public class BusinessRes implements BaseRes {
+
+    public final static String INVALID_PASSWORD = "10001 - The current password was incorrect";
+
+    public final static String USERNAME_EXIST = "10002 - Username already exist";
+
+    public final static String USERNAME_NOT_EXIST = "10003 - Username doesn't exist";
+
+    public final static String USERNAME_FROZEN = "10004 - Account frozen";
+
+    public final static String INVALID_EMAIL = "10005 - Invalid email address";
+
+    public final static String EMAIL_EXIT = "10006 - Email address already exist";
+
+}
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java
index 3f5a9d6..e7fd667 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/common/security/SecurityConfig.java
@@ -34,6 +34,8 @@
 public class SecurityConfig extends WebSecurityConfigurerAdapter {
 
     public static final String[] FILTER_PATH = new String[]{
+            "/api/system/info",
+            "/api/tenant/list",
             "/api/open/**",
             "/demo/**",
             "/test/**",
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java
index 6f2ce54..6b79bab 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/AuthController.java
@@ -5,12 +5,15 @@
 import com.zy.acs.framework.common.R;
 import com.zy.acs.manager.common.annotation.OperationLog;
 import com.zy.acs.manager.common.config.ConfigProperties;
+import com.zy.acs.manager.common.domain.BusinessRes;
 import com.zy.acs.manager.common.security.JwtSubject;
 import com.zy.acs.manager.common.utils.JwtUtil;
+import com.zy.acs.manager.manager.enums.StatusType;
 import com.zy.acs.manager.system.controller.param.LoginParam;
 import com.zy.acs.manager.system.controller.param.UpdatePasswordParam;
 import com.zy.acs.manager.system.controller.result.LoginResult;
 import com.zy.acs.manager.system.controller.result.MenuVo;
+import com.zy.acs.manager.system.controller.result.SystemInfoVo;
 import com.zy.acs.manager.system.entity.Menu;
 import com.zy.acs.manager.system.entity.User;
 import com.zy.acs.manager.system.entity.UserLogin;
@@ -53,18 +56,18 @@
         Long tenantId = param.getTenantId();
         User user = userService.getByUsername(username, tenantId);
         if (user == null) {
-            return R.error("Username Does Not Exist");
+            return R.parse(BusinessRes.USERNAME_NOT_EXIST);
         }
-        if (!user.getStatus().equals(1)) {
-            return R.error("Account Frozen");
+        if (!user.getStatus().equals(StatusType.ENABLE.val)) {
+            return R.parse(BusinessRes.USERNAME_FROZEN);
         }
         if (!userService.comparePassword(user.getPassword(), param.getPassword())) {
-            return R.error("Wrong Password");
+            return R.parse(BusinessRes.INVALID_PASSWORD);
         }
         String accessToken = JwtUtil.buildToken(new JwtSubject(username, user.getTenantId()),
                 configProperties.getTokenExpireTime(), configProperties.getTokenKey());
         userLoginService.saveAsync(user.getId(), accessToken, UserLogin.TYPE_LOGIN, tenantId, null, request);
-        return R.ok("Login Success").add(new LoginResult(accessToken, user));
+        return R.ok("Sign In Success").add(new LoginResult(accessToken, user));
     }
 
     @GetMapping("/auth/user")
@@ -78,13 +81,6 @@
 //        return R.ok().add(Utils.toTreeData(menus, 0L, Menu::getParentId, Menu::getId, Menu::setChildren));
         List<MenuVo> voList = menus.stream().map(this::convertToVo).collect(Collectors.toList());
         return R.ok().add(Utils.toTreeData(voList, 0L, MenuVo::getParentId, MenuVo::getId, MenuVo::setChildren));
-    }
-
-
-
-    @GetMapping("/auth/tenant")
-    public R authHost() {
-        return R.ok().add(tenantService.list());
     }
 
     @PreAuthorize("hasAuthority('sys:auth:user')")
@@ -127,6 +123,14 @@
         return R.error("Update Fail");
     }
 
+    @GetMapping("/system/info")
+    public R systemInfo() {
+        SystemInfoVo infoVo = new SystemInfoVo();
+        infoVo.setName(configProperties.getSystemName());
+        infoVo.setVersion(configProperties.getSystemVersion());
+        infoVo.setMode(configProperties.getSystemMode().toString());
+        return R.ok(infoVo);
+    }
 
     // ----------------------------------------------------
 
diff --git a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/result/SystemInfoVo.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/result/SystemInfoVo.java
new file mode 100644
index 0000000..5bfd492
--- /dev/null
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/controller/result/SystemInfoVo.java
@@ -0,0 +1,18 @@
+package com.zy.acs.manager.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/zy-acs-manager/src/main/java/com/zy/acs/manager/system/entity/Tenant.java b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/entity/Tenant.java
index 62a526c..ab836e0 100644
--- a/zy-acs-manager/src/main/java/com/zy/acs/manager/system/entity/Tenant.java
+++ b/zy-acs-manager/src/main/java/com/zy/acs/manager/system/entity/Tenant.java
@@ -4,12 +4,10 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import com.zy.acs.framework.common.Cools;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.io.Serializable;
-import java.text.SimpleDateFormat;
 import java.util.Date;
 
 @Data
@@ -72,22 +70,6 @@
             default:
                 return null;
         }
-    }
-
-
-
-    public String getCreateTime$(){
-        if (Cools.isEmpty(this.createTime)){
-            return "";
-        }
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime);
-    }
-
-    public String getUpdateTime$(){
-        if (Cools.isEmpty(this.updateTime)){
-            return "";
-        }
-        return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime);
     }
 
 }
diff --git a/zy-acs-manager/src/main/resources/application.yml b/zy-acs-manager/src/main/resources/application.yml
index 99a4643..2af0b1c 100644
--- a/zy-acs-manager/src/main/resources/application.yml
+++ b/zy-acs-manager/src/main/resources/application.yml
@@ -83,6 +83,9 @@
     path: stock/out/rcs-manager/logs
 
 config:
+  system-name: @pom.artifactId@
+  system-version: @pom.version@
+  system-mode: ONLINE
   open-office-home: C
   swagger-base-package: com.zy.acs
   swagger-title: ACS API鏂囨。

--
Gitblit v1.9.1