mirror of https://github.com/longtai-cn/hippo4j
commit
53b430b97e
@ -0,0 +1,101 @@
|
||||
import React from "react";
|
||||
import Layout from "@theme/Layout";
|
||||
import companyData from "@site/static/json/company_logo.json";
|
||||
import useBaseUrl from "@docusaurus/useBaseUrl";
|
||||
import Translate from "@docusaurus/Translate";
|
||||
function CompanyCards({ companies }) {
|
||||
return (
|
||||
<div className="grid sm:grid-cols-2 grid-cols-1 md:px-16 md:grid-cols-3 lg:grid-cols-5 gap-4 mb-16 lg:px-2 px-10">
|
||||
{companies.map((company) => (
|
||||
<div
|
||||
onClick={() => window.open(company.url)}
|
||||
key={company.url}
|
||||
className="bg-white rounded-lg overflow-hidden shadow-sm transform cursor-pointer transition-all duration-500 hover:scale-110"
|
||||
style={{ border: "1px solid #E5E7EB" }}
|
||||
>
|
||||
<div className="flex dark:text-black items-center justify-center h-28">
|
||||
<div
|
||||
className="h-24 w-24 object-contain"
|
||||
style={{ position: "relative" }}
|
||||
>
|
||||
<img
|
||||
src={useBaseUrl(company.logo)}
|
||||
alt={`${company.name}`}
|
||||
className="h-24 w-24 object-contain"
|
||||
onError={(e) => {
|
||||
e.target.style.display = "none"; // Hide the image if it fails to load
|
||||
e.target.nextSibling.style.display = "flex"; // Show the alt text
|
||||
}}
|
||||
/>
|
||||
<div
|
||||
className="flex items-center justify-center absolute inset-0 text-center"
|
||||
style={{
|
||||
display: "none", // Hide the alt text by default
|
||||
}}
|
||||
>
|
||||
{company.name}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
))}
|
||||
</div>
|
||||
);
|
||||
}
|
||||
export default function OurUsers() {
|
||||
return (
|
||||
<Layout title="OurUsers" description="companies using our product">
|
||||
<div className="max-w-screen-lg mx-auto dark:text-white">
|
||||
{/* text description*/}
|
||||
<div className="max-w-screen-sm sm:mx-auto mx-10 text-center my-8 ">
|
||||
<div className="text-center mt-8">
|
||||
<h2 className="text-3xl font-bold mb-4">
|
||||
<Translate
|
||||
id="companyPage.title"
|
||||
description="the title for the company page"
|
||||
>
|
||||
Who is using Hippo4j?
|
||||
</Translate>
|
||||
</h2>
|
||||
<div
|
||||
className="mx-auto h-1 bg-gradient-to-r from-green-400 to-blue-500 mb-4"
|
||||
style={{ width: "30%" }}
|
||||
></div>
|
||||
</div>
|
||||
<div className="flex flex-col items-center mx-auto">
|
||||
<p className="text-lg mb-2 max-w-1/2" style={{ lineHeight: "1.5" }}>
|
||||
<Translate
|
||||
id="companyPage.descriptionText"
|
||||
description="the description for the company page"
|
||||
>
|
||||
Thank you very much for your attention and support to Hippo4j.
|
||||
This is our greatest motivation to move forward.
|
||||
</Translate>{" "}
|
||||
</p>
|
||||
<p className="text-lg mb-4 max-w-1/2" style={{ lineHeight: "1.5" }}>
|
||||
<Translate
|
||||
id="companyPage.questionText"
|
||||
description="the text for the company question"
|
||||
>
|
||||
Are you using Hippo4j?
|
||||
</Translate>{" "}
|
||||
<a
|
||||
href="https://github.com/opengoofy/hippo4j/issues/13"
|
||||
className="text-blue-500 hover:text-blue-700 font-bold"
|
||||
>
|
||||
<Translate
|
||||
id="companyPage.linkText"
|
||||
description="the text for the company page link"
|
||||
>
|
||||
Click to register
|
||||
</Translate>
|
||||
</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
{/* company logo display */}
|
||||
<CompanyCards companies={companyData} className="ml-0" />
|
||||
</div>
|
||||
</Layout>
|
||||
);
|
||||
}
|
Binary file not shown.
@ -1,5 +0,0 @@
|
||||
#!/usr/bin/env sh
|
||||
. "$(dirname -- "$0")/_/husky.sh"
|
||||
|
||||
echo "pre-commit";
|
||||
npm run lint;
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,128 @@
|
||||
import request from "../axios/request"
|
||||
|
||||
export function userLogin(data) {
|
||||
return request('post', '/hippo4j/v1/cs/auth/login', data)
|
||||
}
|
||||
|
||||
export function getInfo() {
|
||||
return request('get', '/hippo4j/v1/cs/user/info')
|
||||
}
|
||||
|
||||
export function logout() {
|
||||
return request('post', '/hippo4j/v1/cs/user/logout')
|
||||
}
|
||||
|
||||
function islogin({commit}, userInfo) {
|
||||
const {username, password} = userInfo
|
||||
return new Promise((resolve, reject) => {
|
||||
let key = genKey()
|
||||
let encodePassword = encrypt(password, key)
|
||||
key = key.split("").reverse().join("")
|
||||
login({username: username.trim(), password: encodePassword, tag: key, rememberMe: 1})
|
||||
.then((response) => {
|
||||
const {data} = response
|
||||
const {roles} = response
|
||||
commit('SET_TOKEN', data)
|
||||
localStorage.setItem('roles', JSON.stringify(roles))
|
||||
localStorage.setItem('USER_ROLE', roles[0])
|
||||
setToken(data)
|
||||
resolve()
|
||||
})
|
||||
.catch((error) => {
|
||||
// alert('登录失败')
|
||||
reject(error)
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
// get user info
|
||||
function getInfo({commit, state}) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const data = {}
|
||||
data.roles = JSON.parse(localStorage.getItem('roles'))
|
||||
commit('SET_ROLES', data.roles)
|
||||
resolve(data)
|
||||
})
|
||||
}
|
||||
|
||||
// user logout
|
||||
function logout({commit, state}) {
|
||||
// return new Promise((resolve, reject) => {
|
||||
// logout(state.token).then(() => {
|
||||
// commit('SET_TOKEN', '')
|
||||
// commit('SET_ROLES', [])
|
||||
// removeToken()
|
||||
// resetRouter()
|
||||
// resolve()
|
||||
// }).catch(error => {
|
||||
// reject(error)
|
||||
// })
|
||||
// })
|
||||
return new Promise((resolve) => {
|
||||
commit('SET_TOKEN', '')
|
||||
commit('SET_ROLES', [])
|
||||
removeToken()
|
||||
resetRouter()
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
// remove token
|
||||
function resetToken({commit}) {
|
||||
return new Promise((resolve) => {
|
||||
commit('SET_TOKEN', '')
|
||||
commit('SET_ROLES', [])
|
||||
removeToken()
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
// dynamically modify permissions
|
||||
function changeRoles({commit, dispatch}, role) {
|
||||
return new Promise(async (resolve) => {
|
||||
const token = role + '-token'
|
||||
|
||||
commit('SET_TOKEN', token)
|
||||
setToken(token)
|
||||
|
||||
const {roles} = await dispatch('getInfo')
|
||||
|
||||
resetRouter()
|
||||
|
||||
// generate accessible routes map based on roles
|
||||
const accessRoutes = await dispatch('permission/generateRoutes', roles, {root: true})
|
||||
|
||||
// dynamically add accessible routes
|
||||
router.addRoutes(accessRoutes)
|
||||
|
||||
// reset visited views and cached views
|
||||
dispatch('tagsView/delAllViews', null, {root: true})
|
||||
|
||||
resolve()
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
const mutations = {
|
||||
SET_TOKEN: (state, token) => {
|
||||
state.token = token
|
||||
},
|
||||
SET_INTRODUCTION: (state, introduction) => {
|
||||
state.introduction = introduction
|
||||
},
|
||||
SET_NAME: (state, name) => {
|
||||
state.name = name
|
||||
},
|
||||
SET_AVATAR: (state, avatar) => {
|
||||
state.avatar = avatar
|
||||
},
|
||||
SET_ROLES: (state, roles) => {
|
||||
state.roles = roles
|
||||
},
|
||||
}
|
||||
|
||||
export default {
|
||||
userLogin,
|
||||
getInfo,
|
||||
logout,
|
||||
}
|
@ -1,7 +1,33 @@
|
||||
import LayoutCom from './components/layout-com';
|
||||
import { Routes, Route } from 'react-router-dom';
|
||||
import routeList from './route';
|
||||
import Login from '@/page/login';
|
||||
import { AppstoreOutlined, MailOutlined } from '@ant-design/icons';
|
||||
|
||||
function App() {
|
||||
return <LayoutCom></LayoutCom>;
|
||||
}
|
||||
const sideMenuList = [
|
||||
{
|
||||
label: <a href="/about">about</a>,
|
||||
key: 'mail',
|
||||
icon: <MailOutlined />,
|
||||
},
|
||||
{
|
||||
label: <a href="/home">主页</a>,
|
||||
key: 'app',
|
||||
icon: <AppstoreOutlined />,
|
||||
},
|
||||
];
|
||||
|
||||
const App = () => {
|
||||
return (
|
||||
<LayoutCom sideMenuList={sideMenuList} isSider={false}>
|
||||
<Routes>
|
||||
<Route path="/Login" Component={Login}></Route>
|
||||
{routeList.map(item => (
|
||||
<Route key={item.path} path={item.path} Component={item.component} />
|
||||
))}
|
||||
</Routes>
|
||||
</LayoutCom>
|
||||
);
|
||||
};
|
||||
|
||||
export default App;
|
||||
|
@ -0,0 +1,4 @@
|
||||
const devBaseUrl = 'http://console.hippo4j.cn:6691/hippo4j/v1/cs'
|
||||
const proBaseUrl = 'http://console.hippo4j.cn:6691/hippo4j/v1/cs '
|
||||
export const BASE_URL = process.env.NODE_ENV === 'development' ? devBaseUrl : proBaseUrl
|
||||
export const TIMEOUT = 5000
|
@ -0,0 +1,192 @@
|
||||
import axios from 'axios';
|
||||
import { BASE_URL, TIMEOUT } from './config';
|
||||
const instance = axios.create({
|
||||
baseURL: BASE_URL,
|
||||
timeout: TIMEOUT,
|
||||
});
|
||||
|
||||
instance.interceptors.request.use(
|
||||
config => {
|
||||
config.data = JSON.stringify(config.data);
|
||||
config.headers = {
|
||||
'Content-Type': 'application/json',
|
||||
}
|
||||
return config
|
||||
}, err => {
|
||||
return Promise.reject(err)
|
||||
}
|
||||
);
|
||||
|
||||
instance.interceptors.response.use(
|
||||
res => {
|
||||
if (res.code === 'A000004') {
|
||||
removeToken()
|
||||
resetRouter()
|
||||
alert(res.message)
|
||||
document.location.href = 'index.html'
|
||||
} else if (res.code !== '20000' && res.code !== '0' && res.code !== '200') {
|
||||
Message({
|
||||
message: res.message || 'Error',
|
||||
type: 'error',
|
||||
duration: 5 * 1000
|
||||
})
|
||||
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
|
||||
if (res.code === '50008' || res.code === '50012' || res.code === '50014') {
|
||||
// to re-login
|
||||
MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', {
|
||||
confirmButtonText: 'Re-Login',
|
||||
cancelButtonText: 'Cancel',
|
||||
type: 'warning'
|
||||
}).then(() => {
|
||||
store.dispatch('user/resetToken').then(() => {
|
||||
location.reload()
|
||||
})
|
||||
})
|
||||
}
|
||||
console.log(res)
|
||||
return Promise.reject(new Error(res.message || 'Error'))
|
||||
} else {
|
||||
const { data } = response
|
||||
const { code } = data
|
||||
// 状态码为0||200表示api成功
|
||||
if (code === '0') {
|
||||
const { data: res } = data
|
||||
return res
|
||||
} else if (code === '200') {
|
||||
return data
|
||||
} else {
|
||||
// 返回数据
|
||||
return res
|
||||
}
|
||||
}
|
||||
return response
|
||||
}, err => {
|
||||
console.log('err' + err) // for debug
|
||||
Message({
|
||||
message: error.message,
|
||||
type: 'error',
|
||||
duration: 5 * 1000
|
||||
})
|
||||
return Promise.reject(err)
|
||||
}
|
||||
);
|
||||
|
||||
/**
|
||||
* 封装get
|
||||
* @param {String} url
|
||||
* @param {String} param
|
||||
* @returns
|
||||
*/
|
||||
export function get(url, param = {}) {
|
||||
return new Promise(
|
||||
(resolve, reject) => {
|
||||
axios.get(url, {
|
||||
params: param
|
||||
}).then((response) => {
|
||||
console.log("get error: url, params, state",url, params, response.data)
|
||||
resolve(response.data)
|
||||
}).catch(err => {
|
||||
msg(err)
|
||||
reject(err)
|
||||
})
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
*
|
||||
* 封装post
|
||||
* @param {String} url
|
||||
* @param {Object} param
|
||||
* @returns {Promise}
|
||||
*/
|
||||
export function post(url, param) {
|
||||
return new Promise(
|
||||
(resolve, reject) => {
|
||||
axios.post(url, param).then(response => {
|
||||
resolve(response.data)
|
||||
}, err => {
|
||||
reject(err)
|
||||
})
|
||||
}
|
||||
);
|
||||
}
|
||||
export default function (fecth, url, param) {
|
||||
return new Promise(
|
||||
(resolve, reject) => {
|
||||
switch(fecth) {
|
||||
case "get":
|
||||
console.log("a get request, url:", url)
|
||||
get(url, param)
|
||||
.then(response => {
|
||||
resolve(response)
|
||||
}).catch(err => {
|
||||
console.log("GET request error, err:", err)
|
||||
reject(err)
|
||||
})
|
||||
break
|
||||
case "post":
|
||||
post(url, param)
|
||||
.then(response => {
|
||||
resolve(response)
|
||||
}).catch(err => {
|
||||
console.log("POST request error, err:", err)
|
||||
reject(err)
|
||||
})
|
||||
break
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
function msg(err) {
|
||||
if (err && err.response) {
|
||||
switch (err.response.status) {
|
||||
case 400:
|
||||
alert(err.response.data.error.details);
|
||||
break;
|
||||
case 401:
|
||||
alert("未授权,请登录");
|
||||
break;
|
||||
|
||||
case 403:
|
||||
alert("拒绝访问");
|
||||
break;
|
||||
|
||||
case 404:
|
||||
alert("请求地址出错");
|
||||
break;
|
||||
|
||||
case 408:
|
||||
alert("请求超时");
|
||||
break;
|
||||
|
||||
case 500:
|
||||
alert("服务器内部错误");
|
||||
break;
|
||||
|
||||
case 501:
|
||||
alert("服务未实现");
|
||||
break;
|
||||
|
||||
case 502:
|
||||
alert("网关错误");
|
||||
break;
|
||||
|
||||
case 503:
|
||||
alert("服务不可用");
|
||||
break;
|
||||
|
||||
case 504:
|
||||
alert("网关超时");
|
||||
break;
|
||||
|
||||
case 505:
|
||||
alert("HTTP版本不受支持");
|
||||
break;
|
||||
default:
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
"use strict";
|
||||
exports.__esModule = true;
|
||||
var react_1 = require("react");
|
||||
var styled_components_1 = require("styled-components");
|
||||
var antd_1 = require("antd");
|
||||
var useThemeMode_1 = require("@/hooks/useThemeMode");
|
||||
var index_module_less_1 = require("./index.module.less");
|
||||
var Header = antd_1.Layout.Header, Sider = antd_1.Layout.Sider, Content = antd_1.Layout.Content;
|
||||
var LayoutCom = function (props) {
|
||||
var sideMenuList = props.sideMenuList, children = props.children, _a = props.isSider, isSider = _a === void 0 ? true : _a;
|
||||
var myThemes = react_1.useContext(styled_components_1.ThemeContext);
|
||||
var _b = react_1.useState('mail'), current = _b[0], setCurrent = _b[1];
|
||||
var onClick = function (e) {
|
||||
setCurrent(e.key);
|
||||
};
|
||||
var setIsDark = useThemeMode_1["default"]()[0];
|
||||
return (React.createElement("main", { className: index_module_less_1["default"].container, style: { backgroundColor: myThemes.backgroundColor.bg1 } },
|
||||
React.createElement(Header, { className: index_module_less_1["default"].header, style: { backgroundColor: myThemes.backgroundColor.bg2 } },
|
||||
React.createElement(antd_1.Button, { onClick: function () { return setIsDark(function (pre) { return !pre; }); } }, "\u5207\u6362\u4E3B\u9898")),
|
||||
React.createElement(antd_1.Layout, { style: { backgroundColor: myThemes.backgroundColor.bg1, height: 'calc(100vh - 64px)' } },
|
||||
isSider && (React.createElement(Sider, { className: index_module_less_1["default"].sider, style: { backgroundColor: myThemes.backgroundColor.bg1 } },
|
||||
React.createElement(antd_1.Menu, { onClick: onClick, selectedKeys: [current], mode: "inline", items: sideMenuList }))),
|
||||
React.createElement(Content, { className: index_module_less_1["default"].content }, children))));
|
||||
};
|
||||
exports["default"] = LayoutCom;
|
@ -1,19 +1,18 @@
|
||||
.container {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: #eee;
|
||||
color: #fff;
|
||||
.header {
|
||||
height: 48px;
|
||||
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.01), 0 3px 6px 3px rgba(0, 0, 0, 0.01), 0 2px 6px 0 rgba(0, 0, 0, 0.03);
|
||||
}
|
||||
.sider {
|
||||
height: calc(100vh - 48px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
padding-top: 24px;
|
||||
}
|
||||
.content {
|
||||
margin: 24px;
|
||||
margin: 10px 10px 0px;
|
||||
border-radius: 12px 12px 0 0;
|
||||
min-height: 100%;
|
||||
flex: 1;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,26 @@
|
||||
"use strict";
|
||||
exports.__esModule = true;
|
||||
var layout_com_1 = require("./components/layout-com");
|
||||
var react_router_dom_1 = require("react-router-dom");
|
||||
var route_1 = require("./route");
|
||||
var login_1 = require("@/page/login");
|
||||
var icons_1 = require("@ant-design/icons");
|
||||
var sideMenuList = [
|
||||
{
|
||||
label: React.createElement("a", { href: "/about" }, "about"),
|
||||
key: 'mail',
|
||||
icon: React.createElement(icons_1.MailOutlined, null)
|
||||
},
|
||||
{
|
||||
label: React.createElement("a", { href: "/home" }, "\u4E3B\u9875"),
|
||||
key: 'app',
|
||||
icon: React.createElement(icons_1.AppstoreOutlined, null)
|
||||
},
|
||||
];
|
||||
var App = function () {
|
||||
return (React.createElement(layout_com_1["default"], { sideMenuList: sideMenuList, isSider: false },
|
||||
React.createElement(react_router_dom_1.Routes, null,
|
||||
React.createElement(react_router_dom_1.Route, { path: "/Login", Component: login_1["default"] }),
|
||||
route_1["default"].map(function (item) { return (React.createElement(react_router_dom_1.Route, { key: item.path, path: item.path, Component: item.component })); }))));
|
||||
};
|
||||
exports["default"] = App;
|
@ -0,0 +1,16 @@
|
||||
import { useContext, useEffect } from 'react';
|
||||
import { useLocalStorageState } from 'ahooks';
|
||||
import { MyThemeContext, THEME_NAME } from '@/context/themeContext';
|
||||
|
||||
const useThemeMode = () => {
|
||||
const [isDark, setIsDark] = useLocalStorageState<boolean>('current-mode', { defaultValue: false });
|
||||
const { setThemeName } = useContext<any>(MyThemeContext);
|
||||
|
||||
useEffect(() => {
|
||||
isDark ? setThemeName(THEME_NAME.DARK) : setThemeName(THEME_NAME.DEFAULT);
|
||||
}, [isDark, setThemeName]);
|
||||
|
||||
return [setIsDark];
|
||||
};
|
||||
|
||||
export default useThemeMode;
|
@ -1,19 +1,3 @@
|
||||
.container {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: #eee;
|
||||
color: #fff;
|
||||
.header {
|
||||
height: 48px;
|
||||
box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.01), 0 3px 6px 3px rgba(0, 0, 0, 0.01), 0 2px 6px 0 rgba(0, 0, 0, 0.03);
|
||||
}
|
||||
.sider {
|
||||
height: calc(100vh - 48px);
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
.content {
|
||||
margin: 24px;
|
||||
}
|
||||
body {
|
||||
background-color: #ebebf2;
|
||||
}
|
||||
|
@ -0,0 +1,11 @@
|
||||
import { IRouterList } from '@/typings';
|
||||
import About from '.';
|
||||
|
||||
const routerList: IRouterList[] = [
|
||||
{
|
||||
path: '/about',
|
||||
component: About,
|
||||
},
|
||||
];
|
||||
|
||||
export default routerList;
|
@ -0,0 +1,5 @@
|
||||
import Home from './index';
|
||||
import { IRouterList } from '@/typings';
|
||||
|
||||
const routerList: IRouterList[] = [{ path: '/home', component: Home }];
|
||||
export default routerList;
|
@ -0,0 +1,63 @@
|
||||
"use strict";
|
||||
exports.__esModule = true;
|
||||
var antd_1 = require("antd");
|
||||
var user_1 = require("../../API/user");
|
||||
var Login = function (props) {
|
||||
var data = {
|
||||
passwordType: 'password',
|
||||
capsTooltip: false,
|
||||
loading: false,
|
||||
showDialog: false,
|
||||
redirect: undefined,
|
||||
otherQuery: {},
|
||||
loginForm: {
|
||||
username: '',
|
||||
password: ''
|
||||
}
|
||||
};
|
||||
var validatePassword = function (_, value) {
|
||||
if (value.length < 6) {
|
||||
return Promise.reject(new Error('The password can not be less than 6 digits'));
|
||||
}
|
||||
else if (value.length > 72) {
|
||||
return Promise.reject(new Error('The password can not be greater than 72 digits'));
|
||||
}
|
||||
return Promise.resolve();
|
||||
};
|
||||
var form = antd_1.Form.useForm()[0];
|
||||
var onFinish = function () {
|
||||
var loginParams = {
|
||||
username: form.getFieldValue('username'),
|
||||
password: form.getFieldValue('password'),
|
||||
// username: 'baoxinyi_admin',
|
||||
// password: 'baoxinyi_admin',
|
||||
rememberMe: 1
|
||||
};
|
||||
data.loginForm.username = form.getFieldValue('username');
|
||||
console.log('loginParams: ', loginParams);
|
||||
data.loading = true;
|
||||
user_1["default"](loginParams)
|
||||
.then(function (resolve) {
|
||||
console.log(resolve);
|
||||
//登录成功后将当前登录用户写入cookie
|
||||
// this.$cookie.set('userName', this.loginForm.username)
|
||||
// console.log('success submit.')
|
||||
// this.$router.push({ path: this.redirect || '/', query: this.otherQuery })
|
||||
data.loading = false;
|
||||
})["catch"](function (e) {
|
||||
console.log('login error.', e);
|
||||
data.loading = false;
|
||||
});
|
||||
};
|
||||
return (React.createElement("div", { className: "login-container" },
|
||||
React.createElement(antd_1.Form, { name: "loginForm", form: form, onFinish: onFinish, style: { maxWidth: 600 } },
|
||||
React.createElement("div", { className: "title-container" },
|
||||
React.createElement("h3", { className: "title" }, "\u4F60\u597D\u5440")),
|
||||
React.createElement(antd_1.Form.Item, { name: "username", label: "\u7528\u6237\u540D", rules: [{ required: true, message: 'Username is required' }] },
|
||||
React.createElement(antd_1.Input, { placeholder: "\u7528\u6237\u540D" })),
|
||||
React.createElement(antd_1.Form.Item, { name: "password", label: "\u5BC6\u7801", rules: [{ validator: validatePassword }, { required: true, message: 'Street is required' }] },
|
||||
React.createElement(antd_1.Input, { placeholder: "\u5BC6\u7801" })),
|
||||
React.createElement(antd_1.Form.Item, { name: "submit" },
|
||||
React.createElement(antd_1.Button, { type: "primary", htmlType: "submit", className: "login-button" }, "\u767B\u5F55")))));
|
||||
};
|
||||
exports["default"] = Login;
|
@ -1,5 +1,6 @@
|
||||
import React from 'react';
|
||||
import { IRouterList } from '@/typings';
|
||||
import homeRouter from '@/page/home/router';
|
||||
import aboutRouter from '@/page/about/router';
|
||||
|
||||
const Fc = () => {
|
||||
return <div>hhh</div>;
|
||||
};
|
||||
const routerList: IRouterList[] = [...homeRouter, ...aboutRouter];
|
||||
export default routerList;
|
||||
|
@ -0,0 +1,12 @@
|
||||
const proxy = require('http-proxy-middleware')
|
||||
|
||||
module.exports = function(app){
|
||||
app.use(
|
||||
proxy.createProxyMiddleware('/hippo4j/v1/cs',{
|
||||
target:'http://console.hippo4j.cn:6691/hippo4j/v1/cs',
|
||||
changeOrigin:true,
|
||||
secure: false,
|
||||
pathRewrite:{'^/hippo4j/v1/cs': ''}
|
||||
}),
|
||||
)
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
import { createStore} from 'redux';
|
||||
import reducer from './reducer'
|
||||
|
||||
const initState = { money: 0 };
|
||||
|
||||
const store = createStore(
|
||||
reducer,
|
||||
initState,
|
||||
);
|
||||
|
||||
export default store;
|
@ -0,0 +1,13 @@
|
||||
import { ReactNode } from 'react';
|
||||
import React from 'react';
|
||||
|
||||
export type IRouterList = {
|
||||
path: string;
|
||||
component: () => React.JSX.Element;
|
||||
};
|
||||
|
||||
export type IMenuList = {
|
||||
label: string | ReactNode;
|
||||
key: string;
|
||||
icon?: ReactNode;
|
||||
};
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue