fix: 合并代码

pull/1461/head
yikai 2 years ago
parent a8cb04ed2d
commit 26abb9092c

@ -20,7 +20,7 @@ module.exports = {
// A callback function that receives two arguments: the webpack rule, // A callback function that receives two arguments: the webpack rule,
// and the context. You must return an updated rule object. // and the context. You must return an updated rule object.
modifyLessRule: (lessRule, context) => { modifyLessRule: lessRule => {
lessRule.test = lessModuleRegex; lessRule.test = lessModuleRegex;
lessRule.exclude = /node_modules|antd\.css/; lessRule.exclude = /node_modules|antd\.css/;
return lessRule; return lessRule;
@ -36,6 +36,7 @@ module.exports = {
webpack: { webpack: {
alias: { alias: {
'@': resolve('src'), '@': resolve('src'),
'@i18': resolve('public/locales'),
}, },
}, },
devServer: { devServer: {

File diff suppressed because it is too large Load Diff

@ -9,8 +9,10 @@
"ahooks": "^3.7.8", "ahooks": "^3.7.8",
"antd": "^5.4.7", "antd": "^5.4.7",
"axios": "^1.5.0", "axios": "^1.5.0",
"i18next": "^23.5.1",
"react": "^18.2.0", "react": "^18.2.0",
"react-dom": "^18.2.0", "react-dom": "^18.2.0",
"react-i18next": "^13.2.2",
"react-router-dom": "^6.11.1", "react-router-dom": "^6.11.1",
"react-scripts": "5.0.1", "react-scripts": "5.0.1",
"web-vitals": "^2.1.4" "web-vitals": "^2.1.4"

@ -1,52 +1,52 @@
import request from "../axios/request" import request from '../axios/request';
export function userLogin(data) { export function userLogin(data) {
return request('post', '/hippo4j/v1/cs/auth/login', data) return request('post', '/hippo4j/v1/cs/auth/login', data);
} }
export function getInfo() { export function getInfo() {
return request('get', '/hippo4j/v1/cs/user/info') return request('get', '/hippo4j/v1/cs/user/info');
} }
export function logout() { export function logout() {
return request('post', '/hippo4j/v1/cs/user/logout') return request('post', '/hippo4j/v1/cs/user/logout');
} }
function islogin({commit}, userInfo) { function islogin({ commit }, userInfo) {
const {username, password} = userInfo const { username, password } = userInfo;
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
let key = genKey() let key = genKey();
let encodePassword = encrypt(password, key) let encodePassword = encrypt(password, key);
key = key.split("").reverse().join("") key = key.split('').reverse().join('');
login({username: username.trim(), password: encodePassword, tag: key, rememberMe: 1}) login({ username: username.trim(), password: encodePassword, tag: key, rememberMe: 1 })
.then((response) => { .then(response => {
const {data} = response const { data } = response;
const {roles} = response const { roles } = response;
commit('SET_TOKEN', data) commit('SET_TOKEN', data);
localStorage.setItem('roles', JSON.stringify(roles)) localStorage.setItem('roles', JSON.stringify(roles));
localStorage.setItem('USER_ROLE', roles[0]) localStorage.setItem('USER_ROLE', roles[0]);
setToken(data) setToken(data);
resolve() resolve();
}) })
.catch((error) => { .catch(error => {
// alert('登录失败') // alert('登录失败')
reject(error) reject(error);
}) });
}) });
} }
// get user info // get user info
function getInfo({commit, state}) { function getInfo({ commit, state }) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
const data = {} const data = {};
data.roles = JSON.parse(localStorage.getItem('roles')) data.roles = JSON.parse(localStorage.getItem('roles'));
commit('SET_ROLES', data.roles) commit('SET_ROLES', data.roles);
resolve(data) resolve(data);
}) });
} }
// user logout // user logout
function logout({commit, state}) { function logout({ commit, state }) {
// return new Promise((resolve, reject) => { // return new Promise((resolve, reject) => {
// logout(state.token).then(() => { // logout(state.token).then(() => {
// commit('SET_TOKEN', '') // commit('SET_TOKEN', '')
@ -58,71 +58,70 @@ function logout({commit, state}) {
// reject(error) // reject(error)
// }) // })
// }) // })
return new Promise((resolve) => { return new Promise(resolve => {
commit('SET_TOKEN', '') commit('SET_TOKEN', '');
commit('SET_ROLES', []) commit('SET_ROLES', []);
removeToken() removeToken();
resetRouter() resetRouter();
resolve() resolve();
}) });
} }
// remove token // remove token
function resetToken({commit}) { function resetToken({ commit }) {
return new Promise((resolve) => { return new Promise(resolve => {
commit('SET_TOKEN', '') commit('SET_TOKEN', '');
commit('SET_ROLES', []) commit('SET_ROLES', []);
removeToken() removeToken();
resolve() resolve();
}) });
} }
// dynamically modify permissions // dynamically modify permissions
function changeRoles({commit, dispatch}, role) { function changeRoles({ commit, dispatch }, role) {
return new Promise(async (resolve) => { return new Promise(async resolve => {
const token = role + '-token' const token = role + '-token';
commit('SET_TOKEN', token) commit('SET_TOKEN', token);
setToken(token) setToken(token);
const {roles} = await dispatch('getInfo') const { roles } = await dispatch('getInfo');
resetRouter() resetRouter();
// generate accessible routes map based on roles // generate accessible routes map based on roles
const accessRoutes = await dispatch('permission/generateRoutes', roles, {root: true}) const accessRoutes = await dispatch('permission/generateRoutes', roles, { root: true });
// dynamically add accessible routes // dynamically add accessible routes
router.addRoutes(accessRoutes) router.addRoutes(accessRoutes);
// reset visited views and cached views // reset visited views and cached views
dispatch('tagsView/delAllViews', null, {root: true}) dispatch('tagsView/delAllViews', null, { root: true });
resolve() resolve();
}) });
} }
const mutations = { const mutations = {
SET_TOKEN: (state, token) => { SET_TOKEN: (state, token) => {
state.token = token state.token = token;
}, },
SET_INTRODUCTION: (state, introduction) => { SET_INTRODUCTION: (state, introduction) => {
state.introduction = introduction state.introduction = introduction;
}, },
SET_NAME: (state, name) => { SET_NAME: (state, name) => {
state.name = name state.name = name;
}, },
SET_AVATAR: (state, avatar) => { SET_AVATAR: (state, avatar) => {
state.avatar = avatar state.avatar = avatar;
}, },
SET_ROLES: (state, roles) => { SET_ROLES: (state, roles) => {
state.roles = roles state.roles = roles;
}, },
} };
export default { export default {
userLogin, userLogin,
getInfo, getInfo,
logout, logout,
} };

@ -21,7 +21,7 @@ const App = () => {
return ( return (
<LayoutCom sideMenuList={sideMenuList} isSider={false}> <LayoutCom sideMenuList={sideMenuList} isSider={false}>
<Routes> <Routes>
<Route path="/Login" Component={Login}></Route> <Route path="/Login" Component={Login}></Route>
{routeList.map(item => ( {routeList.map(item => (
<Route key={item.path} path={item.path} Component={item.component} /> <Route key={item.path} path={item.path} Component={item.component} />
))} ))}

@ -1,4 +1,4 @@
const devBaseUrl = 'http://console.hippo4j.cn:6691/hippo4j/v1/cs' const devBaseUrl = 'http://console.hippo4j.cn:6691/hippo4j/v1/cs';
const proBaseUrl = '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 BASE_URL = process.env.NODE_ENV === 'development' ? devBaseUrl : proBaseUrl;
export const TIMEOUT = 5000 export const TIMEOUT = 5000;

@ -1,5 +1,6 @@
import axios from 'axios'; import axios from 'axios';
import { BASE_URL, TIMEOUT } from './config'; import { BASE_URL, TIMEOUT } from './config';
const instance = axios.create({ const instance = axios.create({
baseURL: BASE_URL, baseURL: BASE_URL,
timeout: TIMEOUT, timeout: TIMEOUT,
@ -10,135 +11,143 @@ instance.interceptors.request.use(
config.data = JSON.stringify(config.data); config.data = JSON.stringify(config.data);
config.headers = { config.headers = {
'Content-Type': 'application/json', 'Content-Type': 'application/json',
} };
return config return config;
}, err => { },
return Promise.reject(err) err => {
return Promise.reject(err);
} }
); );
instance.interceptors.response.use( instance.interceptors.response.use(
res => { res => {
if (res.code === 'A000004') { if (res.code === 'A000004') {
removeToken() removeToken();
resetRouter() resetRouter();
alert(res.message) alert(res.message);
document.location.href = 'index.html' document.location.href = 'index.html';
} else if (res.code !== '20000' && res.code !== '0' && res.code !== '200') { } else if (res.code !== '20000' && res.code !== '0' && res.code !== '200') {
Message({ Message({
message: res.message || 'Error', message: res.message || 'Error',
type: 'error', type: 'error',
duration: 5 * 1000 duration: 5 * 1000,
}) });
// 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired;
if (res.code === '50008' || res.code === '50012' || res.code === '50014') { if (res.code === '50008' || res.code === '50012' || res.code === '50014') {
// to re-login // to re-login
MessageBox.confirm('You have been logged out, you can cancel to stay on this page, or log in again', 'Confirm logout', { MessageBox.confirm(
confirmButtonText: 'Re-Login', 'You have been logged out, you can cancel to stay on this page, or log in again',
cancelButtonText: 'Cancel', 'Confirm logout',
type: 'warning' {
}).then(() => { confirmButtonText: 'Re-Login',
cancelButtonText: 'Cancel',
type: 'warning',
}
).then(() => {
store.dispatch('user/resetToken').then(() => { store.dispatch('user/resetToken').then(() => {
location.reload() location.reload();
}) });
}) });
} }
console.log(res) console.log(res);
return Promise.reject(new Error(res.message || 'Error')) return Promise.reject(new Error(res.message || 'Error'));
} else { } else {
const { data } = response const { data } = response;
const { code } = data const { code } = data;
// 状态码为0||200表示api成功 // 状态码为0||200表示api成功
if (code === '0') { if (code === '0') {
const { data: res } = data const { data: res } = data;
return res return res;
} else if (code === '200') { } else if (code === '200') {
return data return data;
} else { } else {
// 返回数据 // 返回数据
return res return res;
} }
} }
return response return response;
}, err => { },
console.log('err' + err) // for debug err => {
Message({ console.log('err' + err); // for debug
message: error.message, Message({
type: 'error', message: error.message,
duration: 5 * 1000 type: 'error',
}) duration: 5 * 1000,
return Promise.reject(err) });
return Promise.reject(err);
} }
); );
/** /**
* 封装get * 封装get
* @param {String} url * @param {String} url
* @param {String} param * @param {String} param
* @returns * @returns
*/ */
export function get(url, param = {}) { export function get(url, param = {}) {
return new Promise( return new Promise((resolve, reject) => {
(resolve, reject) => { axios
axios.get(url, { .get(url, {
params: param params: param,
}).then((response) => {
console.log("get error: url, params, state",url, params, response.data)
resolve(response.data)
}).catch(err => {
msg(err)
reject(err)
}) })
} .then(response => {
); console.log('get error: url, params, state', url, params, response.data);
resolve(response.data);
})
.catch(err => {
msg(err);
reject(err);
});
});
} }
/** /**
* *
* 封装post * 封装post
* @param {String} url * @param {String} url
* @param {Object} param * @param {Object} param
* @returns {Promise} * @returns {Promise}
*/ */
export function post(url, param) { export function post(url, param) {
return new Promise( return new Promise((resolve, reject) => {
(resolve, reject) => { axios.post(url, param).then(
axios.post(url, param).then(response => { response => {
resolve(response.data) resolve(response.data);
}, err => { },
reject(err) err => {
}) reject(err);
} }
); );
});
} }
export default function (fecth, url, param) { export default function (fecth, url, param) {
return new Promise( return new Promise((resolve, reject) => {
(resolve, reject) => { switch (fecth) {
switch(fecth) { case 'get':
case "get": console.log('a get request, url:', url);
console.log("a get request, url:", url) get(url, param)
get(url, param)
.then(response => { .then(response => {
resolve(response) resolve(response);
}).catch(err => {
console.log("GET request error, err:", err)
reject(err)
}) })
break .catch(err => {
case "post": console.log('GET request error, err:', err);
post(url, param) reject(err);
});
break;
case 'post':
post(url, param)
.then(response => { .then(response => {
resolve(response) resolve(response);
}).catch(err => {
console.log("POST request error, err:", err)
reject(err)
}) })
break .catch(err => {
default: console.log('POST request error, err:', err);
break reject(err);
} });
break;
default:
break;
} }
); });
} }
function msg(err) { function msg(err) {
@ -148,45 +157,45 @@ function msg(err) {
alert(err.response.data.error.details); alert(err.response.data.error.details);
break; break;
case 401: case 401:
alert("未授权,请登录"); alert('未授权,请登录');
break; break;
case 403: case 403:
alert("拒绝访问"); alert('拒绝访问');
break; break;
case 404: case 404:
alert("请求地址出错"); alert('请求地址出错');
break; break;
case 408: case 408:
alert("请求超时"); alert('请求超时');
break; break;
case 500: case 500:
alert("服务器内部错误"); alert('服务器内部错误');
break; break;
case 501: case 501:
alert("服务未实现"); alert('服务未实现');
break; break;
case 502: case 502:
alert("网关错误"); alert('网关错误');
break; break;
case 503: case 503:
alert("服务不可用"); alert('服务不可用');
break; break;
case 504: case 504:
alert("网关超时"); alert('网关超时');
break; break;
case 505: case 505:
alert("HTTP版本不受支持"); alert('HTTP版本不受支持');
break; break;
default: default:
} }
} }
} }

@ -1,25 +0,0 @@
"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;

@ -14,5 +14,6 @@
border-radius: 12px 12px 0 0; border-radius: 12px 12px 0 0;
min-height: 100%; min-height: 100%;
flex: 1; flex: 1;
padding: 10px 12px;
} }
} }

@ -22,7 +22,7 @@ const LayoutCom = (props: ILayoutCom) => {
const [setIsDark] = useThemeMode(); const [setIsDark] = useThemeMode();
return ( return (
<main className={style.container} style={{ backgroundColor: myThemes.backgroundColor.bg1 }}> <main className={style.container} style={{ backgroundColor: myThemes.backgroundColor.bg1 }}>
<Header className={style.header} style={{ backgroundColor: myThemes.backgroundColor.bg2 }}> <Header className={style.header}>
<Button onClick={() => setIsDark(pre => !pre)}></Button> <Button onClick={() => setIsDark(pre => !pre)}></Button>
</Header> </Header>
<Layout style={{ backgroundColor: myThemes.backgroundColor.bg1, height: 'calc(100vh - 64px)' }}> <Layout style={{ backgroundColor: myThemes.backgroundColor.bg1, height: 'calc(100vh - 64px)' }}>

@ -1,26 +0,0 @@
"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;

@ -3,7 +3,6 @@ const Home = () => {
return ( return (
<div style={{ color: 'red' }}> <div style={{ color: 'red' }}>
<Button>jjjjj</Button> <Button>jjjjj</Button>
<Card></Card>
</div> </div>
); );
}; };

@ -1,63 +0,0 @@
"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,12 +1,12 @@
const proxy = require('http-proxy-middleware') const proxy = require('http-proxy-middleware');
module.exports = function(app){ module.exports = function (app) {
app.use( app.use(
proxy.createProxyMiddleware('/hippo4j/v1/cs',{ proxy.createProxyMiddleware('/hippo4j/v1/cs', {
target:'http://console.hippo4j.cn:6691/hippo4j/v1/cs', target: 'http://console.hippo4j.cn:6691/hippo4j/v1/cs',
changeOrigin:true, changeOrigin: true,
secure: false, secure: false,
pathRewrite:{'^/hippo4j/v1/cs': ''} pathRewrite: { '^/hippo4j/v1/cs': '' },
}), })
) );
} };

@ -7,6 +7,10 @@ export const darkAlgorithm = {
fontSize: 14, fontSize: 14,
}, },
components: { components: {
Layout: {
bodyBg: darkDefaultTheme.backgroundColor.bg1,
headerBg: darkDefaultTheme.backgroundColor.bgHeader,
},
Button: { Button: {
fontSize: 14, fontSize: 14,
}, },

@ -8,6 +8,10 @@ export const defaultAlgorithm = {
// colorBgBase: lightDefaultTheme.backgroundColor.bg1, // colorBgBase: lightDefaultTheme.backgroundColor.bg1,
}, },
components: { components: {
Layout: {
bodyBg: lightDefaultTheme.backgroundColor.bg1,
headerBg: lightDefaultTheme.backgroundColor.bgHeader,
},
Button: { Button: {
fontSize: 14, fontSize: 14,
}, },

@ -29,6 +29,8 @@ declare module 'styled-components' {
}; };
// 背景色 // 背景色
backgroundColor: { backgroundColor: {
bgHeader: string;
bgContent: string;
bg1: string; bg1: string;
bg2: string; bg2: string;
bg3: string; bg3: string;

@ -24,6 +24,8 @@ export const lightDefaultTheme: DefaultTheme = {
bl3: '#B5BDCE', bl3: '#B5BDCE',
}, },
backgroundColor: { backgroundColor: {
bgHeader: '#fff',
bgContent: '#fff',
// main bgc // main bgc
bg1: '#ebebf2', bg1: '#ebebf2',
// app or head bgc // app or head bgc
@ -65,6 +67,8 @@ export const darkDefaultTheme: DefaultTheme = {
bl3: '#424242', bl3: '#424242',
}, },
backgroundColor: { backgroundColor: {
bgHeader: '#141414',
bgContent: '#141414',
// 大面积色 // 大面积色
bg1: '#141414', bg1: '#141414',
// tab顶部颜色 // tab顶部颜色

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save