From bb74e261151f40ad28d770e8160d3742995700dc Mon Sep 17 00:00:00 2001 From: zhaofengchao <13723060510@163.com> Date: Thu, 11 Jan 2024 16:43:26 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BB=E5=BD=95=E3=80=81=E6=B3=A8=E5=86=8C?= =?UTF-8?q?=E8=81=94=E8=B0=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/.umirc.ts | 9 +- client/package-lock.json | 12 +++ client/package.json | 2 + client/routes.js | 9 ++ client/src/layouts/index.tsx | 2 +- client/src/pages/file/index.tsx | 1 + client/src/pages/login/index.tsx | 145 +++++++++++++++++----------- client/src/pages/login/model.ts | 31 +++++- client/src/services/loginService.ts | 18 ---- client/src/services/userService.ts | 24 +++++ client/src/utils/api.ts | 10 +- client/src/utils/request.ts | 27 ++---- 12 files changed, 180 insertions(+), 110 deletions(-) delete mode 100644 client/src/services/loginService.ts create mode 100644 client/src/services/userService.ts diff --git a/client/.umirc.ts b/client/.umirc.ts index ab7e16cb1..2d5286eb0 100644 --- a/client/.umirc.ts +++ b/client/.umirc.ts @@ -13,6 +13,13 @@ export default defineConfig({ type: 'hash', }, plugins: ['@umijs/plugins/dist/dva'], - dva: {} + dva: {}, + proxy: { + '/v1': { + 'target': 'http://54.80.112.79:9380/', + 'changeOrigin': true, + 'pathRewrite': { '^/v1': '/v1' }, + }, + }, }); diff --git a/client/package-lock.json b/client/package-lock.json index 17fa55fba..c757cb046 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -12,6 +12,8 @@ "axios": "^1.6.3", "classnames": "^2.5.1", "i18next": "^23.7.16", + "js-base64": "^3.7.5", + "jsencrypt": "^3.3.2", "lodash": "^4.17.21", "react-i18next": "^14.0.0", "react-infinite-scroll-component": "^6.1.0", @@ -8772,6 +8774,11 @@ "node": ">=10" } }, + "node_modules/js-base64": { + "version": "3.7.5", + "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-3.7.5.tgz", + "integrity": "sha512-3MEt5DTINKqfScXKfJFrRbxkrnk2AxPWGBL/ycjz4dK8iqiSJ06UxD8jh8xuh6p10TX4t2+7FsBYVxxQbMg+qA==" + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", @@ -8789,6 +8796,11 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/jsencrypt": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.3.2.tgz", + "integrity": "sha512-arQR1R1ESGdAxY7ZheWr12wCaF2yF47v5qpB76TtV64H1pyGudk9Hvw8Y9tb/FiTIaaTRUyaSnm5T/Y53Ghm/A==" + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", diff --git a/client/package.json b/client/package.json index 7f4320b96..b20783bf6 100644 --- a/client/package.json +++ b/client/package.json @@ -15,6 +15,8 @@ "axios": "^1.6.3", "classnames": "^2.5.1", "i18next": "^23.7.16", + "js-base64": "^3.7.5", + "jsencrypt": "^3.3.2", "lodash": "^4.17.21", "react-i18next": "^14.0.0", "react-infinite-scroll-component": "^6.1.0", diff --git a/client/routes.js b/client/routes.js index d989b608a..546f8af61 100644 --- a/client/routes.js +++ b/client/routes.js @@ -68,6 +68,15 @@ const routes = [ component: '@/pages/setting', pathname: "setting" }, + { + id: 1, + name: '文件', + icon: 'file', + auth: [3, 4, 100], + path: '/file', + component: '@/pages/file', + pathname: 'file' + }, { path: '/*', component: '@/pages/404', diff --git a/client/src/layouts/index.tsx b/client/src/layouts/index.tsx index 85b185cdc..310f9339d 100644 --- a/client/src/layouts/index.tsx +++ b/client/src/layouts/index.tsx @@ -35,7 +35,7 @@ const App: React.FC = (props) => { setCurrent(path) navigate(path); }; - const tagsData = [{ path: '/knowledge', name: 'knowledge' }, { path: '/chat', name: 'chat' }]; + const tagsData = [{ path: '/knowledge', name: 'knowledge' }, { path: '/chat', name: 'chat' }, { path: '/file', name: 'file' }]; return ( diff --git a/client/src/pages/file/index.tsx b/client/src/pages/file/index.tsx index 7a5fa9537..47321dca7 100644 --- a/client/src/pages/file/index.tsx +++ b/client/src/pages/file/index.tsx @@ -40,6 +40,7 @@ const App: React.FC = () => { action="https://run.mocky.io/v3/435e224c-44fb-4773-9faf-380c5e6a2188" listType="picture" fileList={[...fileList]} + multiple > diff --git a/client/src/pages/login/index.tsx b/client/src/pages/login/index.tsx index 031fd9fca..32dc4632b 100644 --- a/client/src/pages/login/index.tsx +++ b/client/src/pages/login/index.tsx @@ -2,83 +2,110 @@ import { connect } from 'umi'; import { Input, Form, Button, Checkbox } from 'antd'; // import md5 from 'md5'; import styles from './index.less'; - +import JSEncrypt from 'jsencrypt'; +import { Base64 } from 'js-base64'; +import Title from 'antd/es/skeleton/Title'; +import { useState, useEffect } from 'react'; +// import Base64 from 'crypto-js/enc-base64'; const View = ({ loginModel, dispatch, location, }) => { - const onFinish = (params: any) => { - console.log('Success:', params); - params.mail = params.username.replace(/^\s+|\s+$/g, ''); - params.passwordMd5 = params.password.replace(/^\s+|\s+$/g, ''); + const [title, setTitle] = useState('login') + const pub = "-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArq9XTUSeYr2+N1h3Afl/z8Dse/2yD0ZGrKwx+EEEcdsBLca9Ynmx3nIB5obmLlSfmskLpBo0UACBmB5rEjBp2Q2f3AG3Hjd4B+gNCG6BDaawuDlgANIhGnaTLrIqWrrcm4EMzJOnAOI1fgzJRsOOUEfaS318Eq9OVO3apEyCCt0lOQK6PuksduOjVxtltDav+guVAA068NrPYmRNabVKRNLJpL8w4D44sfth5RvZ3q9t+6RTArpEtc5sh5ChzvqPOzKGMXW83C95TxmXqpbK6olN4RevSfVjEAgCydH6HN6OhtOQEcnrU97r9H0iZOWwbw3pVrZiUkuRD1R56Wzs2wIDAQAB-----END PUBLIC KEY-----" + const changeTitle = () => { + setTitle((title) => title === 'login' ? 'register' : 'login') + } + const [form] = Form.useForm(); + const [checkNick, setCheckNick] = useState(false); - dispatch({ - type: 'loginModel/login', - payload: { - mail: params.mail, - authority: 1, - passwordMd5: params.passwordMd5 - // passwordMd5: md5(params.passwordMd5).toLocaleUpperCase() + useEffect(() => { + form.validateFields(['nickname']); + }, [checkNick, form]); + + const onCheck = async () => { + try { + const params = await form.validateFields(); + console.log('Success:', params); + const encryptor = new JSEncrypt() + encryptor.setPublicKey(pub) + var rsaPassWord = encryptor.encrypt(Base64.encode(params.password)) + if (title === 'login') { + dispatch({ + type: 'loginModel/login', + payload: { + email: params.email, + password: rsaPassWord + } + }); + } else { + dispatch({ + type: 'loginModel/register', + payload: { + nickname: params.nickname, + email: params.email, + password: rsaPassWord + } + }); } - }); + } catch (errorInfo) { + console.log('Failed:', errorInfo); + } + }; + const formItemLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 8 }, }; - const onFinishFailed = (errorInfo: any) => { - console.log('Failed:', errorInfo); + const formTailLayout = { + labelCol: { span: 4 }, + wrapperCol: { span: 8, offset: 4 }, }; - - - type FieldType = { - username?: string; - password?: string; - remember?: string; - }; - - const onJump = () => { - window.location.href = 'http://www.martechlab.cn/'; - }; - return (
+ {title === 'login' ? '登录' : '注册'}
-
- - label="mail" - name="username" - rules={[{ required: true, message: 'Please input your mail!' }]} + + - + - - - label="Password" + { + title === 'register' && + + + } + - + - - {/* - name="remember" - valuePropName="checked" - wrapperCol={{ offset: 8, span: 16 }} - > - Remember me - */} - - - diff --git a/client/src/pages/login/model.ts b/client/src/pages/login/model.ts index cd88d7ba9..281d25249 100644 --- a/client/src/pages/login/model.ts +++ b/client/src/pages/login/model.ts @@ -1,6 +1,6 @@ import { message } from 'antd'; import { addParam } from '@/utils'; -import loginService from '@/services/loginService'; +import userService from '@/services/userService'; const Model = { namespace: 'loginModel', @@ -18,11 +18,32 @@ const Model = { }, effects: { *login({ payload = {} }, { call, put }) { + console.log(111, payload) + const { retcode, data, retmsg } = yield call(userService.login, payload); + if (retcode === 0) { + message.success('登录成功!'); + const name = data.name; + const token = data.access_token; + const role = data.role; + const title = data.title; + const userInfo = { + role: data.avatar, + title: data.title, + name: data.nickname, + }; + localStorage.setItem('token', token) + localStorage.setItem('userInfo', JSON.stringify(userInfo)) + // setTimeout(() => { + // window.location.href = '/file'; + // }, 300); + } + }, + *register({ payload = {} }, { call, put }) { console.log(111) - const { code, data, errorMessage } = yield call(loginService.login, payload); - setTimeout(() => { - window.location.href = '/'; - }, 300); + const { retcode, data, retmsg } = yield call(userService.register, payload); + // setTimeout(() => { + // window.location.href = '/'; + // }, 300); // if (code === 0) { // message.success('登录成功!'); // const name = data.name; diff --git a/client/src/services/loginService.ts b/client/src/services/loginService.ts deleted file mode 100644 index 484b02aed..000000000 --- a/client/src/services/loginService.ts +++ /dev/null @@ -1,18 +0,0 @@ -import api from '@/utils/api'; -import registerServer from '@/utils/registerServer'; -import request from '@/utils/request'; - -const { - login, } = api; - -const chatService = registerServer( - { - login: { - url: login, - method: 'post' - } - }, - request -); - -export default chatService; diff --git a/client/src/services/userService.ts b/client/src/services/userService.ts new file mode 100644 index 000000000..e7cf54371 --- /dev/null +++ b/client/src/services/userService.ts @@ -0,0 +1,24 @@ +import api from '@/utils/api'; +import registerServer from '@/utils/registerServer'; +import request from '@/utils/request'; + +const { + login, register } = api; +interface userServiceType { + login: (params: any) => void +} +const userService = registerServer( + { + login: { + url: login, + method: 'post' + }, + register: { + url: register, + method: 'post' + } + }, + request +); + +export default userService; diff --git a/client/src/utils/api.ts b/client/src/utils/api.ts index 0966a1483..cb6d2dbce 100644 --- a/client/src/utils/api.ts +++ b/client/src/utils/api.ts @@ -1,14 +1,9 @@ import config from '@/utils/config'; -const host = window.location.host; -let api_host = `//mp.test.amnetapi.com/mp/v1`; +let api_host = `/v1`; -// api_host = '//mpcompany3.test.amnetapi.com/mp/v1'; -let login = '//mp41.test.amnetapi.com/mp/v1/user/ssoLogin'; -// sso_host = `//test120-sso.amnetapi.com`; - export { api_host }; export default { @@ -19,7 +14,8 @@ export default { segment_upload: `${api_host}/uploadPopulation`, // 用户 - login: login, + login: `${api_host}/user/login`, + register: `${api_host}/user/register`, user: `${api_host}/user/validate`, getUrl: `${api_host}/requestGetUrl`, getAdPermits: `${api_host}/adServer/getAdPermits`, diff --git a/client/src/utils/request.ts b/client/src/utils/request.ts index 38a1c4e8d..45e4a912c 100644 --- a/client/src/utils/request.ts +++ b/client/src/utils/request.ts @@ -15,7 +15,7 @@ const ABORT_REQUEST_ERR_MESSAGE = 'The user aborted a request.'; // 手动中断 -const codeMessage = { +const retcodeMessage = { 200: '服务器成功返回请求的数据。', 201: '新建或修改数据成功。', 202: '一个请求已经进入后台排队(异步任务)。', @@ -43,7 +43,7 @@ const errorHandler = (error: any) => { console.log('user abort request'); } else { if (response && response.status) { - const errorText = codeMessage[response.status] || response.statusText; + const errorText = retcodeMessage[response.status] || response.statusText; const { status, url } = response; notification.error({ message: `请求错误 ${status}: ${url}`, @@ -91,37 +91,26 @@ request.interceptors.request.use((url, options) => { * */ request.interceptors.response.use(async (response, request) => { const data = await response.clone().json(); - if (data.code && data.code !== 0) { - const payload = { - token: request.headers.Authorization, - res: data, - body: request.data, - url: response.url - }; - } // response 拦截 - if (data.code === 401 || data.Code === 401) { + if (data.retcode === 401 || data.retcode === 401) { notification.error({ message: data.errorMessage, description: data.errorMessage, duration: 3, - top: 65 }); - store.domainPrefix = ''; - } else if (data.code !== 0) { - if (data.code === 100) { - //code为100 时账户名或者密码错误, 为了跟之前弹窗一样所以用message + } else if (data.retcode !== 0) { + if (data.retcode === 100) { + //retcode为100 时账户名或者密码错误, 为了跟之前弹窗一样所以用message message.error(data.errorMessage); } else { notification.error({ - message: `提示 : ${data.code}`, + message: `提示 : ${data.retcode}`, description: data.errorMessage, duration: 3, - top: 65 }); } - return response; //这里return response, 是为了避免modal里面报code undefined + return response; //这里return response, 是为了避免modal里面报retcode undefined } else { return response; }