feat: set the type for registerServer

This commit is contained in:
billchen 2024-01-30 13:34:45 +08:00
parent 4edfdad342
commit 5ba7c4d78f
6 changed files with 172 additions and 175 deletions

View file

@ -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<LoginProps> = ({ dispatch }) => {
let navigate = useNavigate();
const Login = () => {
const [title, setTitle] = useState('login');
let navigate = useNavigate();
const dispatch = useDispatch();
const effectsLoading: any = useSelector<any>( // 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<LoginProps> = ({ 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<LoginProps> = ({ dispatch }) => {
</div>
)}
</div>
<Button type="primary" block size="large" onClick={onCheck}>
<Button
type="primary"
block
size="large"
onClick={onCheck}
loading={signLoading}
>
{title === 'login' ? 'Sign in' : 'Continue'}
</Button>
{title === 'login' && (
@ -176,6 +184,4 @@ const View: FC<LoginProps> = ({ dispatch }) => {
);
};
export default connect(({ loginModel, loading }) => ({ loginModel, loading }))(
View,
);
export default Login;

View file

@ -50,19 +50,15 @@ const model: DvaModel<LoginModelState> = {
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();
}
},
},

View file

@ -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<keyof typeof methods>(methods, request);
export default kbService;

View file

@ -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<keyof typeof methods>(methods, request);
export default userService;

View file

@ -1,17 +1,24 @@
const registerServer = (opt: any, request: any): any => {
let server = {};
import { RequestMethod } from 'umi-request';
type Service<T extends string> = Record<T, (params: any) => any>;
const registerServer = <T extends string>(
opt: Record<T, { url: string; method: string }>,
request: RequestMethod,
) => {
const server: Service<T> = {} as Service<T>;
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,
});
}
};

View file

@ -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) {