| | |
| | | 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"; |
| | |
| | | import request from '../../utils/request'; |
| | | |
| | | export async function tenants(_params) { |
| | | const res = await request.get('/tenant/list', _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) { |
| | |
| | | const { accessToken, user } = await login({ |
| | | username: username, |
| | | password: password, |
| | | hostId: 1, |
| | | tenantId: 1, |
| | | }); |
| | | |
| | | if (user && accessToken) { |
| | |
| | | } |
| | | }, |
| | | page: { |
| | | login: { |
| | | tenant: 'Tenant', |
| | | }, |
| | | } |
| | | }; |
| | | |
| | |
| | | } |
| | | }, |
| | | page: { |
| | | login: { |
| | | tenant: '租户', |
| | | }, |
| | | } |
| | | }; |
| | | |
File was renamed from rsf-admin/src/page/login/Login.jsx |
| | |
| | | useTranslate, |
| | | useLogin, |
| | | useNotify, |
| | | SelectInput, |
| | | } from 'react-admin'; |
| | | import { LOGIN_BACKGROUND } from '@/config/setting'; |
| | | import { tenants } from '@/api/auth'; |
| | | |
| | | const Login = () => { |
| | | const [loading, setLoading] = useState(false); |
| | |
| | | const notify = useNotify(); |
| | | const login = useLogin(); |
| | | const location = useLocation(); |
| | | |
| | | const [tenantList, setTenantList] = React.useState([]); |
| | | const [tenantId, setTenantId] = React.useState(null); |
| | | |
| | | React.useEffect(() => { |
| | | tenants().then(data => { |
| | | setTenantList(data); |
| | | if (data.length > 0) { |
| | | setTenantId(data[0].id); |
| | | } |
| | | }) |
| | | }, []); |
| | | |
| | | React.useEffect(() => { |
| | | console.log(tenantId); |
| | | }, [tenantId]); |
| | | |
| | | const handleSubmit = (auth) => { |
| | | setLoading(true); |
| | |
| | | </Box> |
| | | <Box sx={{ padding: '0 1em 1em 1em' }}> |
| | | <Box sx={{ marginTop: '1em' }}> |
| | | <SelectInput |
| | | label="page.login.tenant" |
| | | source="tenantId" |
| | | choices={tenantList.map(item => ({ |
| | | id: item.id, |
| | | name: item.name |
| | | }))} |
| | | validate={required()} |
| | | value={tenantId} |
| | | onChange={e => setTenantId(e.target.value)} |
| | | /> |
| | | </Box> |
| | | <Box sx={{ marginTop: '.1em' }}> |
| | | <TextInput |
| | | autoFocus |
| | | source="username" |
| | |
| | | validate={required()} |
| | | /> |
| | | </Box> |
| | | <Box sx={{ marginTop: '1em' }}> |
| | | <Box sx={{ marginTop: '.1em' }}> |
| | | <TextInput |
| | | source="password" |
| | | label={translate('ra.auth.password')} |
| | |
| | | "sys_host", |
| | | "sys_user_role", |
| | | "sys_role_menu", |
| | | "sys_menu" |
| | | "sys_menu", |
| | | "sys_dept" |
| | | ).contains(tableName); |
| | | } |
| | | }; |
| | |
| | | public static final String[] FILTER_PATH = new String[]{ |
| | | "/demo/**", |
| | | "/test/**", |
| | | "/tenant/list", |
| | | "/login", |
| | | "/druid/**", |
| | | "/swagger-ui.html", |
| | |
| | | return R.ok("Login Success").add(new LoginResult(accessToken, user)); |
| | | } |
| | | |
| | | @GetMapping("/tenant/list") |
| | | public R tenantList() { |
| | | return R.ok().add(tenantService.list()); |
| | | } |
| | | |
| | | @GetMapping("/auth/user") |
| | | public R userInfo() { |
| | | return R.ok(userService.getByIdRel(getLoginUserId())); |
| | |
| | | // 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')") |
| | |
| | | |
| | | public interface UserLoginService extends IService<UserLogin> { |
| | | |
| | | void saveAsync(Long userId, String token, Integer type, Long hostId, String memo, HttpServletRequest request); |
| | | void saveAsync(Long userId, String token, Integer type, Long tenantId, String memo, HttpServletRequest request); |
| | | |
| | | } |
| | |
| | | |
| | | @Async |
| | | @Override |
| | | public void saveAsync(Long userId, String token, Integer type, Long hostId, String memo, HttpServletRequest request) { |
| | | public void saveAsync(Long userId, String token, Integer type, Long tenantId, String memo, HttpServletRequest request) { |
| | | if (userId == null) { |
| | | return; |
| | | } |