From 5ba7c4d78f953646417fd6bcd2da392aba809e90 Mon Sep 17 00:00:00 2001 From: billchen Date: Tue, 30 Jan 2024 13:34:45 +0800 Subject: [PATCH] feat: set the type for registerServer --- web/src/pages/login/index.tsx | 36 ++++--- web/src/pages/login/model.ts | 6 +- web/src/services/kbService.ts | 172 ++++++++++++++------------------ web/src/services/userService.ts | 102 ++++++++++--------- web/src/utils/registerServer.ts | 17 +++- web/src/utils/request.ts | 14 +-- 6 files changed, 172 insertions(+), 175 deletions(-) diff --git a/web/src/pages/login/index.tsx b/web/src/pages/login/index.tsx index c997ba057..3bb10ce68 100644 --- a/web/src/pages/login/index.tsx +++ b/web/src/pages/login/index.tsx @@ -1,15 +1,19 @@ import { rsaPsw } from '@/utils'; import { Button, Checkbox, Form, Input } from 'antd'; -import { FC, useEffect, useState } from 'react'; -import { Dispatch, Icon, connect, useNavigate } from 'umi'; +import { useEffect, useState } from 'react'; +import { Icon, useDispatch, useNavigate, useSelector } from 'umi'; import styles from './index.less'; -interface LoginProps { - dispatch: Dispatch; -} -const View: FC = ({ dispatch }) => { - let navigate = useNavigate(); +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 signLoading = + effectsLoading['loginModel/login'] || effectsLoading['loginModel/register']; const changeTitle = () => { setTitle((title) => (title === 'login' ? 'register' : 'login')); @@ -37,17 +41,15 @@ const View: FC = ({ dispatch }) => { console.info(ret); navigate('/knowledge'); } else { - dispatch({ + const ret = await dispatch({ type: 'loginModel/register', payload: { nickname: params.nickname, email: params.email, password: rsaPassWord, }, - callback() { - setTitle('login'); - }, }); + setTitle('login'); } } catch (errorInfo) { console.log('Failed:', errorInfo); @@ -133,7 +135,13 @@ const View: FC = ({ dispatch }) => { )} - {title === 'login' && ( @@ -176,6 +184,4 @@ const View: FC = ({ dispatch }) => { ); }; -export default connect(({ loginModel, loading }) => ({ loginModel, loading }))( - View, -); +export default Login; diff --git a/web/src/pages/login/model.ts b/web/src/pages/login/model.ts index d2d781533..a02d1244d 100644 --- a/web/src/pages/login/model.ts +++ b/web/src/pages/login/model.ts @@ -50,19 +50,15 @@ const model: DvaModel = { userInfo: JSON.stringify(userInfo), Token: token, }); - // setTimeout(() => { - // window.location.href = '/file'; - // }, 300); } return data; }, - *register({ payload = {}, callback }, { call, put }) { + *register({ payload = {} }, { call, put }) { const { data, response } = yield call(userService.register, payload); console.log(); const { retcode, data: res, retmsg } = data; if (retcode === 0) { message.success('注册成功!'); - callback && callback(); } }, }, diff --git a/web/src/services/kbService.ts b/web/src/services/kbService.ts index 2ea491798..0fa02544b 100644 --- a/web/src/services/kbService.ts +++ b/web/src/services/kbService.ts @@ -19,101 +19,83 @@ const { get_chunk, switch_chunk, rm_chunk, - retrieval_test } = api; -interface kbService { - createKb: () => void; - updateKb: () => void; - rmKb: () => void; - get_kb_detail: () => void; - getList: () => void; - get_document_list: () => void; - document_change_status: () => void; - document_rm: () => void; - document_create: () => void; - document_change_parser: () => void; - chunk_list: () => void; - create_chunk: () => void; - set_chunk: () => void; - get_chunk: () => void; - switch_chunk: () => void; - rm_chunk: () => void; - retrieval_test: () => void; -} -const kbService: kbService = registerServer( - { - // 知识库管理 - createKb: { - url: create_kb, - method: 'post' - }, - updateKb: { - url: update_kb, - method: 'post' - }, - rmKb: { - url: rm_kb, - method: 'post' - }, - get_kb_detail: { - url: get_kb_detail, - method: 'get' - }, - getList: { - url: kb_list, - method: 'get' - }, - // 文件管理 - get_document_list: { - url: get_document_list, - method: 'get' - }, - document_change_status: { - url: document_change_status, - method: 'post' - }, - document_rm: { - url: document_rm, - method: 'post' - }, - document_create: { - url: document_create, - method: 'post' - }, - document_change_parser: { - url: document_change_parser, - method: 'post' - }, - // chunk管理 - chunk_list: { - url: chunk_list, - method: 'post' - }, - create_chunk: { - url: create_chunk, - method: 'post' - }, - set_chunk: { - url: set_chunk, - method: 'post' - }, - get_chunk: { - url: get_chunk, - method: 'get' - }, - switch_chunk: { - url: switch_chunk, - method: 'post' - }, - rm_chunk: { - url: rm_chunk, - method: 'post' - }, - retrieval_test: { - url: retrieval_test, - method: 'post' - }, + retrieval_test, +} = api; + +const methods = { + // 知识库管理 + createKb: { + url: create_kb, + method: 'post', }, - request -); + updateKb: { + url: update_kb, + method: 'post', + }, + rmKb: { + url: rm_kb, + method: 'post', + }, + get_kb_detail: { + url: get_kb_detail, + method: 'get', + }, + getList: { + url: kb_list, + method: 'get', + }, + // 文件管理 + get_document_list: { + url: get_document_list, + method: 'get', + }, + document_change_status: { + url: document_change_status, + method: 'post', + }, + document_rm: { + url: document_rm, + method: 'post', + }, + document_create: { + url: document_create, + method: 'post', + }, + document_change_parser: { + url: document_change_parser, + method: 'post', + }, + // chunk管理 + chunk_list: { + url: chunk_list, + method: 'post', + }, + create_chunk: { + url: create_chunk, + method: 'post', + }, + set_chunk: { + url: set_chunk, + method: 'post', + }, + get_chunk: { + url: get_chunk, + method: 'get', + }, + switch_chunk: { + url: switch_chunk, + method: 'post', + }, + rm_chunk: { + url: rm_chunk, + method: 'post', + }, + retrieval_test: { + url: retrieval_test, + method: 'post', + }, +}; + +const kbService = registerServer(methods, request); export default kbService; diff --git a/web/src/services/userService.ts b/web/src/services/userService.ts index 37a7b3364..6e11f7344 100644 --- a/web/src/services/userService.ts +++ b/web/src/services/userService.ts @@ -3,55 +3,61 @@ import registerServer from '@/utils/registerServer'; import request from '@/utils/request'; const { - login, register, setting, user_info, tenant_info, factories_list, llm_list, my_llm, set_api_key, set_tenant_info } = api; -interface userServiceType { - login: (params: any) => void -} -const userService = registerServer( - { - login: { - url: login, - method: 'post', + login, + register, + setting, + user_info, + tenant_info, + factories_list, + llm_list, + my_llm, + set_api_key, + set_tenant_info, +} = api; - }, - register: { - url: register, - method: 'post' - }, - setting: { - url: setting, - method: 'post' - }, - user_info: { - url: user_info, - method: 'get' - }, - get_tenant_info: { - url: tenant_info, - method: 'get' - }, - set_tenant_info: { - url: set_tenant_info, - method: 'post' - }, - factories_list: { - url: factories_list, - method: 'get' - }, - llm_list: { - url: llm_list, - method: 'get' - }, - my_llm: { - url: my_llm, - method: 'get' - }, - set_api_key: { - url: set_api_key, - method: 'post' - }, +const methods = { + login: { + url: login, + method: 'post', }, - request -); + register: { + url: register, + method: 'post', + }, + setting: { + url: setting, + method: 'post', + }, + user_info: { + url: user_info, + method: 'get', + }, + get_tenant_info: { + url: tenant_info, + method: 'get', + }, + set_tenant_info: { + url: set_tenant_info, + method: 'post', + }, + factories_list: { + url: factories_list, + method: 'get', + }, + llm_list: { + url: llm_list, + method: 'get', + }, + my_llm: { + url: my_llm, + method: 'get', + }, + set_api_key: { + url: set_api_key, + method: 'post', + }, +} as const; + +const userService = registerServer(methods, request); export default userService; diff --git a/web/src/utils/registerServer.ts b/web/src/utils/registerServer.ts index 148ce0814..9404ce0d4 100644 --- a/web/src/utils/registerServer.ts +++ b/web/src/utils/registerServer.ts @@ -1,17 +1,24 @@ -const registerServer = (opt: any, request: any): any => { - let server = {}; +import { RequestMethod } from 'umi-request'; + +type Service = Record any>; + +const registerServer = ( + opt: Record, + request: RequestMethod, +) => { + const server: Service = {} as Service; for (let key in opt) { - server[key] = (params: any) => { + server[key] = (params) => { if (opt[key].method === 'post' || opt[key].method === 'POST') { return request(opt[key].url, { method: opt[key].method, - data: params + data: params, }); } if (opt[key].method === 'get' || opt[key].method === 'GET') { return request.get(opt[key].url, { - params + params, }); } }; diff --git a/web/src/utils/request.ts b/web/src/utils/request.ts index 60fae733b..536c6746e 100644 --- a/web/src/utils/request.ts +++ b/web/src/utils/request.ts @@ -1,5 +1,5 @@ import { message, notification } from 'antd'; -import { extend } from 'umi-request'; +import { RequestMethod, extend } from 'umi-request'; import { Authorization } from '@/constants/authorization'; import api from '@/utils/api'; @@ -9,7 +9,7 @@ const { login } = api; const ABORT_REQUEST_ERR_MESSAGE = 'The user aborted a request.'; // 手动中断请求。errorHandler 抛出的error message -const retcodeMessage = { +const RetcodeMessage = { 200: '服务器成功返回请求的数据。', 201: '新建或修改数据成功。', 202: '一个请求已经进入后台排队(异步任务)。', @@ -26,7 +26,7 @@ const retcodeMessage = { 503: '服务不可用,服务器暂时过载或维护。', 504: '网关超时。', }; -type retcode = +type ResultCode = | 200 | 201 | 202 @@ -45,7 +45,7 @@ type retcode = /** * 异常处理程序 */ -interface responseType { +interface ResponseType { retcode: number; data: any; retmsg: string; @@ -62,7 +62,7 @@ const errorHandler = (error: { } else { if (response && response.status) { const errorText = - retcodeMessage[response.status as retcode] || response.statusText; + RetcodeMessage[response.status as ResultCode] || response.statusText; const { status, url } = response; notification.error({ message: `请求错误 ${status}: ${url}`, @@ -81,7 +81,7 @@ const errorHandler = (error: { /** * 配置request请求时的默认参数 */ -const request = extend({ +const request: RequestMethod = extend({ errorHandler, // 默认错误处理 timeout: 3000000, getResponse: true, @@ -108,7 +108,7 @@ request.interceptors.request.use((url: string, options: any) => { request.interceptors.response.use(async (response: any, request) => { console.log(response, request); - const data: responseType = await response.clone().json(); + const data: ResponseType = await response.clone().json(); // response 拦截 if (data.retcode === 401 || data.retcode === 401) {