diff --git a/web/src/global.ts b/web/src/global.ts new file mode 100644 index 000000000..d025e4a33 --- /dev/null +++ b/web/src/global.ts @@ -0,0 +1 @@ +import '@/locales/config'; diff --git a/web/src/hooks/loginHooks.ts b/web/src/hooks/loginHooks.ts new file mode 100644 index 000000000..590ffadde --- /dev/null +++ b/web/src/hooks/loginHooks.ts @@ -0,0 +1,44 @@ +import { useCallback } from 'react'; +import { useDispatch } from 'umi'; + +export interface ILoginRequestBody { + email: string; + password: string; +} + +export interface IRegisterRequestBody extends ILoginRequestBody { + nickname: string; +} + +export const useLogin = () => { + const dispatch = useDispatch(); + + const login = useCallback( + (requestBody: ILoginRequestBody) => { + // TODO: Type needs to be improved + return dispatch({ + type: 'loginModel/login', + payload: requestBody, + }); + }, + [dispatch], + ); + + return login; +}; + +export const useRegister = () => { + const dispatch = useDispatch(); + + const register = useCallback( + (requestBody: IRegisterRequestBody) => { + return dispatch({ + type: 'loginModel/register', + payload: requestBody, + }); + }, + [dispatch], + ); + + return register; +}; diff --git a/web/src/locales/config.ts b/web/src/locales/config.ts index dd92cd3dc..b127f9147 100644 --- a/web/src/locales/config.ts +++ b/web/src/locales/config.ts @@ -5,20 +5,20 @@ import translation_en from './en.json'; import translation_zh from './zh.json'; const resources = { - en: { - translation: translation_en, - }, - zh: { - translation: translation_zh, - }, + en: { + translation: translation_en, + }, + zh: { + translation: translation_zh, + }, }; i18n.use(initReactI18next).init({ - resources, - lng: 'zh', - interpolation: { - escapeValue: false, - }, + resources, + lng: 'en', + interpolation: { + escapeValue: false, + }, }); export default i18n; diff --git a/web/src/locales/en.json b/web/src/locales/en.json index 91ad5c446..9f0778ec1 100644 --- a/web/src/locales/en.json +++ b/web/src/locales/en.json @@ -1,20 +1,21 @@ { - "header": { - "register": "Register", - "signin": "Sign In", - "home": "Home", - "setting": "用户设置", - "logout": "登出" - }, - "footer": { - "detail": "All rights reserved @ React" - }, - "layout": { - "file": "file", - "knowledge": "knowledge", - "chat": "chat" - }, - "setting": { - "btn": "en" - } -} \ No newline at end of file + "login": { "login": "Sign in" }, + "header": { + "register": "Register", + "signin": "Sign in", + "home": "Home", + "setting": "用户设置", + "logout": "登出" + }, + "footer": { + "detail": "All rights reserved @ React" + }, + "layout": { + "file": "file", + "knowledge": "knowledge", + "chat": "chat" + }, + "setting": { + "btn": "en" + } +} diff --git a/web/src/locales/zh.json b/web/src/locales/zh.json index 057310543..7eb7974a0 100644 --- a/web/src/locales/zh.json +++ b/web/src/locales/zh.json @@ -1,20 +1,21 @@ { - "header": { - "register": "注册", - "signin": "登陆", - "home": "首页", - "setting": "user setting", - "logout": "logout" - }, - "footer": { - "detail": "版权所有 @ React" - }, - "layout": { - "file": "文件", - "knowledge": "知识库", - "chat": "聊天" - }, - "setting": { - "btn": "中文" - } -} \ No newline at end of file + "login": { "login": "登录" }, + "header": { + "register": "注册", + "signin": "登陆", + "home": "首页", + "setting": "user setting", + "logout": "logout" + }, + "footer": { + "detail": "版权所有 @ React" + }, + "layout": { + "file": "文件", + "knowledge": "知识库", + "chat": "聊天" + }, + "setting": { + "btn": "中文" + } +} diff --git a/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.less b/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.less index b3d17f1e1..e11dd150e 100644 --- a/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.less +++ b/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.less @@ -1,16 +1,24 @@ .uploadWrapper { display: flex; flex-direction: column; - padding: 32px; + padding: 64px 32px 32px; height: 100%; .backToList { + display: none; padding-bottom: 60px; } .footer { - text-align: right; + text-align: center; padding-top: 16px; .nextButton { - background-color: @purple; + // background-color: @purple; + font-weight: 700; + font-size: 24px; + display: inline-flex; + align-items: center; + padding: 26px 40px; + justify-content: center; + width: 10%; } } .uploadContent { diff --git a/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.tsx b/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.tsx index 8cb643304..aaff97ccd 100644 --- a/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.tsx +++ b/web/src/pages/add-knowledge/components/knowledge-dataset/knowledge-upload-file/index.tsx @@ -287,9 +287,10 @@ const KnowledgeUploadFile = () => {
diff --git a/web/src/pages/login/index.tsx b/web/src/pages/login/index.tsx index 5a89c98d2..d494c295e 100644 --- a/web/src/pages/login/index.tsx +++ b/web/src/pages/login/index.tsx @@ -1,59 +1,56 @@ +import { useOneNamespaceEffectsLoading } from '@/hooks/storeHooks'; import { rsaPsw } from '@/utils'; import { Button, Checkbox, Form, Input } from 'antd'; import { useEffect, useState } from 'react'; -import { Icon, useDispatch, useNavigate, useSelector } from 'umi'; +import { useTranslation } from 'react-i18next'; +import { Icon, useNavigate } from 'umi'; import RightPanel from './right-panel'; +import { useLogin, useRegister } from '@/hooks/loginHooks'; import styles from './index.less'; const Login = () => { const [title, setTitle] = useState('login'); - let navigate = useNavigate(); - const dispatch = useDispatch(); - const effectsLoading: any = useSelector( // TODO: Type needs to be improved - (state) => state.loading.effects, - ); + const navigate = useNavigate(); + const login = useLogin(); + const register = useRegister(); + const { t } = useTranslation(); // TODO: When the server address request is not accessible, the value of dva-loading always remains true. - const signLoading = - effectsLoading['loginModel/login'] || effectsLoading['loginModel/register']; + const signLoading = useOneNamespaceEffectsLoading('loginModel', [ + 'login', + 'register', + ]); const changeTitle = () => { setTitle((title) => (title === 'login' ? 'register' : 'login')); }; const [form] = Form.useForm(); - const [checkNick, setCheckNick] = useState(false); useEffect(() => { form.validateFields(['nickname']); - }, [checkNick, form]); + }, [form]); const onCheck = async () => { try { const params = await form.validateFields(); - var rsaPassWord = rsaPsw(params.password); + const rsaPassWord = rsaPsw(params.password) as string; + if (title === 'login') { - const retcode = await dispatch({ - type: 'loginModel/login', - payload: { - email: params.email, - password: rsaPassWord, - }, + const retcode = await login({ + email: params.email, + password: rsaPassWord, }); if (retcode === 0) { navigate('/knowledge'); } } else { - // TODO: Type needs to be improved - const retcode = await dispatch({ - type: 'loginModel/register', - payload: { - nickname: params.nickname, - email: params.email, - password: rsaPassWord, - }, + const retcode = await register({ + nickname: params.nickname, + email: params.email, + password: rsaPassWord, }); if (retcode === 0) { setTitle('login'); @@ -72,12 +69,15 @@ const Login = () => { window.location.href = 'https://github.com/login/oauth/authorize?scope=user:email&client_id=302129228f0d96055bee'; }; + return (
-
{title === 'login' ? 'Sign in' : 'Create an account'}
+
+ {title === 'login' ? t('login.login') : 'Create an account'} +
{title === 'login' ? 'We’re so excited to see you again!'