feat: set the type for registerServer
This commit is contained in:
parent
4edfdad342
commit
5ba7c4d78f
6 changed files with 172 additions and 175 deletions
|
|
@ -1,15 +1,19 @@
|
||||||
import { rsaPsw } from '@/utils';
|
import { rsaPsw } from '@/utils';
|
||||||
import { Button, Checkbox, Form, Input } from 'antd';
|
import { Button, Checkbox, Form, Input } from 'antd';
|
||||||
import { FC, useEffect, useState } from 'react';
|
import { useEffect, useState } from 'react';
|
||||||
import { Dispatch, Icon, connect, useNavigate } from 'umi';
|
import { Icon, useDispatch, useNavigate, useSelector } from 'umi';
|
||||||
import styles from './index.less';
|
import styles from './index.less';
|
||||||
|
|
||||||
interface LoginProps {
|
const Login = () => {
|
||||||
dispatch: Dispatch;
|
|
||||||
}
|
|
||||||
const View: FC<LoginProps> = ({ dispatch }) => {
|
|
||||||
let navigate = useNavigate();
|
|
||||||
const [title, setTitle] = useState('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 = () => {
|
const changeTitle = () => {
|
||||||
setTitle((title) => (title === 'login' ? 'register' : 'login'));
|
setTitle((title) => (title === 'login' ? 'register' : 'login'));
|
||||||
|
|
@ -37,17 +41,15 @@ const View: FC<LoginProps> = ({ dispatch }) => {
|
||||||
console.info(ret);
|
console.info(ret);
|
||||||
navigate('/knowledge');
|
navigate('/knowledge');
|
||||||
} else {
|
} else {
|
||||||
dispatch({
|
const ret = await dispatch({
|
||||||
type: 'loginModel/register',
|
type: 'loginModel/register',
|
||||||
payload: {
|
payload: {
|
||||||
nickname: params.nickname,
|
nickname: params.nickname,
|
||||||
email: params.email,
|
email: params.email,
|
||||||
password: rsaPassWord,
|
password: rsaPassWord,
|
||||||
},
|
},
|
||||||
callback() {
|
|
||||||
setTitle('login');
|
|
||||||
},
|
|
||||||
});
|
});
|
||||||
|
setTitle('login');
|
||||||
}
|
}
|
||||||
} catch (errorInfo) {
|
} catch (errorInfo) {
|
||||||
console.log('Failed:', errorInfo);
|
console.log('Failed:', errorInfo);
|
||||||
|
|
@ -133,7 +135,13 @@ const View: FC<LoginProps> = ({ dispatch }) => {
|
||||||
</div>
|
</div>
|
||||||
)}
|
)}
|
||||||
</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'}
|
{title === 'login' ? 'Sign in' : 'Continue'}
|
||||||
</Button>
|
</Button>
|
||||||
{title === 'login' && (
|
{title === 'login' && (
|
||||||
|
|
@ -176,6 +184,4 @@ const View: FC<LoginProps> = ({ dispatch }) => {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
export default connect(({ loginModel, loading }) => ({ loginModel, loading }))(
|
export default Login;
|
||||||
View,
|
|
||||||
);
|
|
||||||
|
|
|
||||||
|
|
@ -50,19 +50,15 @@ const model: DvaModel<LoginModelState> = {
|
||||||
userInfo: JSON.stringify(userInfo),
|
userInfo: JSON.stringify(userInfo),
|
||||||
Token: token,
|
Token: token,
|
||||||
});
|
});
|
||||||
// setTimeout(() => {
|
|
||||||
// window.location.href = '/file';
|
|
||||||
// }, 300);
|
|
||||||
}
|
}
|
||||||
return data;
|
return data;
|
||||||
},
|
},
|
||||||
*register({ payload = {}, callback }, { call, put }) {
|
*register({ payload = {} }, { call, put }) {
|
||||||
const { data, response } = yield call(userService.register, payload);
|
const { data, response } = yield call(userService.register, payload);
|
||||||
console.log();
|
console.log();
|
||||||
const { retcode, data: res, retmsg } = data;
|
const { retcode, data: res, retmsg } = data;
|
||||||
if (retcode === 0) {
|
if (retcode === 0) {
|
||||||
message.success('注册成功!');
|
message.success('注册成功!');
|
||||||
callback && callback();
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -19,101 +19,83 @@ const {
|
||||||
get_chunk,
|
get_chunk,
|
||||||
switch_chunk,
|
switch_chunk,
|
||||||
rm_chunk,
|
rm_chunk,
|
||||||
retrieval_test } = api;
|
retrieval_test,
|
||||||
interface kbService {
|
} = api;
|
||||||
createKb: () => void;
|
|
||||||
updateKb: () => void;
|
const methods = {
|
||||||
rmKb: () => void;
|
// 知识库管理
|
||||||
get_kb_detail: () => void;
|
createKb: {
|
||||||
getList: () => void;
|
url: create_kb,
|
||||||
get_document_list: () => void;
|
method: 'post',
|
||||||
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'
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
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;
|
export default kbService;
|
||||||
|
|
|
||||||
|
|
@ -3,55 +3,61 @@ import registerServer from '@/utils/registerServer';
|
||||||
import request from '@/utils/request';
|
import request from '@/utils/request';
|
||||||
|
|
||||||
const {
|
const {
|
||||||
login, register, setting, user_info, tenant_info, factories_list, llm_list, my_llm, set_api_key, set_tenant_info } = api;
|
login,
|
||||||
interface userServiceType {
|
register,
|
||||||
login: (params: any) => void
|
setting,
|
||||||
}
|
user_info,
|
||||||
const userService = registerServer(
|
tenant_info,
|
||||||
{
|
factories_list,
|
||||||
login: {
|
llm_list,
|
||||||
url: login,
|
my_llm,
|
||||||
method: 'post',
|
set_api_key,
|
||||||
|
set_tenant_info,
|
||||||
|
} = api;
|
||||||
|
|
||||||
},
|
const methods = {
|
||||||
register: {
|
login: {
|
||||||
url: register,
|
url: login,
|
||||||
method: 'post'
|
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'
|
|
||||||
},
|
|
||||||
},
|
},
|
||||||
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;
|
export default userService;
|
||||||
|
|
|
||||||
|
|
@ -1,17 +1,24 @@
|
||||||
const registerServer = (opt: any, request: any): any => {
|
import { RequestMethod } from 'umi-request';
|
||||||
let server = {};
|
|
||||||
|
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) {
|
for (let key in opt) {
|
||||||
server[key] = (params: any) => {
|
server[key] = (params) => {
|
||||||
if (opt[key].method === 'post' || opt[key].method === 'POST') {
|
if (opt[key].method === 'post' || opt[key].method === 'POST') {
|
||||||
return request(opt[key].url, {
|
return request(opt[key].url, {
|
||||||
method: opt[key].method,
|
method: opt[key].method,
|
||||||
data: params
|
data: params,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (opt[key].method === 'get' || opt[key].method === 'GET') {
|
if (opt[key].method === 'get' || opt[key].method === 'GET') {
|
||||||
return request.get(opt[key].url, {
|
return request.get(opt[key].url, {
|
||||||
params
|
params,
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
import { message, notification } from 'antd';
|
import { message, notification } from 'antd';
|
||||||
import { extend } from 'umi-request';
|
import { RequestMethod, extend } from 'umi-request';
|
||||||
|
|
||||||
import { Authorization } from '@/constants/authorization';
|
import { Authorization } from '@/constants/authorization';
|
||||||
import api from '@/utils/api';
|
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 ABORT_REQUEST_ERR_MESSAGE = 'The user aborted a request.'; // 手动中断请求。errorHandler 抛出的error message
|
||||||
|
|
||||||
const retcodeMessage = {
|
const RetcodeMessage = {
|
||||||
200: '服务器成功返回请求的数据。',
|
200: '服务器成功返回请求的数据。',
|
||||||
201: '新建或修改数据成功。',
|
201: '新建或修改数据成功。',
|
||||||
202: '一个请求已经进入后台排队(异步任务)。',
|
202: '一个请求已经进入后台排队(异步任务)。',
|
||||||
|
|
@ -26,7 +26,7 @@ const retcodeMessage = {
|
||||||
503: '服务不可用,服务器暂时过载或维护。',
|
503: '服务不可用,服务器暂时过载或维护。',
|
||||||
504: '网关超时。',
|
504: '网关超时。',
|
||||||
};
|
};
|
||||||
type retcode =
|
type ResultCode =
|
||||||
| 200
|
| 200
|
||||||
| 201
|
| 201
|
||||||
| 202
|
| 202
|
||||||
|
|
@ -45,7 +45,7 @@ type retcode =
|
||||||
/**
|
/**
|
||||||
* 异常处理程序
|
* 异常处理程序
|
||||||
*/
|
*/
|
||||||
interface responseType {
|
interface ResponseType {
|
||||||
retcode: number;
|
retcode: number;
|
||||||
data: any;
|
data: any;
|
||||||
retmsg: string;
|
retmsg: string;
|
||||||
|
|
@ -62,7 +62,7 @@ const errorHandler = (error: {
|
||||||
} else {
|
} else {
|
||||||
if (response && response.status) {
|
if (response && response.status) {
|
||||||
const errorText =
|
const errorText =
|
||||||
retcodeMessage[response.status as retcode] || response.statusText;
|
RetcodeMessage[response.status as ResultCode] || response.statusText;
|
||||||
const { status, url } = response;
|
const { status, url } = response;
|
||||||
notification.error({
|
notification.error({
|
||||||
message: `请求错误 ${status}: ${url}`,
|
message: `请求错误 ${status}: ${url}`,
|
||||||
|
|
@ -81,7 +81,7 @@ const errorHandler = (error: {
|
||||||
/**
|
/**
|
||||||
* 配置request请求时的默认参数
|
* 配置request请求时的默认参数
|
||||||
*/
|
*/
|
||||||
const request = extend({
|
const request: RequestMethod = extend({
|
||||||
errorHandler, // 默认错误处理
|
errorHandler, // 默认错误处理
|
||||||
timeout: 3000000,
|
timeout: 3000000,
|
||||||
getResponse: true,
|
getResponse: true,
|
||||||
|
|
@ -108,7 +108,7 @@ request.interceptors.request.use((url: string, options: any) => {
|
||||||
|
|
||||||
request.interceptors.response.use(async (response: any, request) => {
|
request.interceptors.response.use(async (response: any, request) => {
|
||||||
console.log(response, request);
|
console.log(response, request);
|
||||||
const data: responseType = await response.clone().json();
|
const data: ResponseType = await response.clone().json();
|
||||||
// response 拦截
|
// response 拦截
|
||||||
|
|
||||||
if (data.retcode === 401 || data.retcode === 401) {
|
if (data.retcode === 401 || data.retcode === 401) {
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue