Skip to content

Commit b218f10

Browse files
authored
fix(login): login page modal style fixed: #662 (#666)
* fix: catch axios error data on request * fix(login): login page modal style fixed: #662
1 parent 834fa7e commit b218f10

File tree

6 files changed

+32
-17
lines changed

6 files changed

+32
-17
lines changed

src/locales/lang/en/sys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export default {
55
errorMessage: 'The operation failed, the system is abnormal!',
66
timeoutMessage: 'Login timed out, please log in again!',
77
apiTimeoutMessage: 'The interface request timed out, please refresh the page and try again!',
8+
apiRequestFailed: 'The interface request failed, please try again later!',
89
networkException: 'network anomaly',
910
networkExceptionMsg:
1011
'Please check if your network connection is normal! The network is abnormal',

src/locales/lang/zh_CN/sys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ export default {
55
errorMessage: '操作失败,系统异常!',
66
timeoutMessage: '登录超时,请重新登录!',
77
apiTimeoutMessage: '接口请求超时,请刷新页面重试!',
8+
apiRequestFailed: '请求出错,请稍候重试',
89
networkException: '网络异常',
910
networkExceptionMsg: '请检查您的网络连接是否正常!',
1011

src/store/modules/user.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ export const useUserStore = defineStore({
100100
!sessionTimeout && goHome && (await router.replace(PageEnum.BASE_HOME));
101101
return userInfo;
102102
} catch (error) {
103-
return null;
103+
return Promise.reject(error);
104104
}
105105
},
106106
async getUserInfoAction({ userId }: GetUserInfoByUserIdParams) {

src/utils/http/axios/Axios.ts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import { AxiosCanceler } from './axiosCancel';
88
import { isFunction } from '/@/utils/is';
99
import { cloneDeep } from 'lodash-es';
1010

11-
import { errorResult } from './const';
11+
//import { errorResult } from './const';
1212
import { ContentTypeEnum } from '/@/enums/httpEnum';
1313
import { RequestEnum } from '../../../enums/httpEnum';
1414

@@ -208,11 +208,15 @@ export class VAxios {
208208
.request<any, AxiosResponse<Result>>(conf)
209209
.then((res: AxiosResponse<Result>) => {
210210
if (transformRequestHook && isFunction(transformRequestHook)) {
211-
const ret = transformRequestHook(res, opt);
212-
ret !== errorResult ? resolve(ret) : reject(new Error('request error!'));
211+
try {
212+
const ret = transformRequestHook(res, opt);
213+
resolve(ret);
214+
} catch (err) {
215+
reject(err || new Error('request error!'));
216+
}
213217
return;
214218
}
215-
resolve((res as unknown) as Promise<T>);
219+
resolve(res as unknown as Promise<T>);
216220
})
217221
.catch((e: Error) => {
218222
if (requestCatchHook && isFunction(requestCatchHook)) {

src/utils/http/axios/index.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { getToken } from '/@/utils/auth';
1818
import { setObjToUrlParams, deepMerge } from '/@/utils';
1919
import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog';
2020

21-
import { errorResult } from './const';
21+
//import { errorResult } from './const';
2222
import { useI18n } from '/@/hooks/web/useI18n';
2323
import { createNow, formatRequestDate } from './helper';
2424

@@ -31,7 +31,7 @@ const { createMessage, createErrorModal } = useMessage();
3131
*/
3232
const transform: AxiosTransform = {
3333
/**
34-
* @description: 处理请求数据
34+
* @description: 处理请求数据。如果数据不是预期格式,可直接抛出错误
3535
*/
3636
transformRequestHook: (res: AxiosResponse<Result>, options: RequestOptions) => {
3737
const { t } = useI18n();
@@ -50,7 +50,8 @@ const transform: AxiosTransform = {
5050
const { data } = res;
5151
if (!data) {
5252
// return '[HTTP] Request has no return value';
53-
return errorResult;
53+
throw new Error(t('sys.api.apiRequestFailed'));
54+
//return errorResult;
5455
}
5556
// 这里 code,result,message为 后台统一的字段,需要在 types.ts内修改为项目自己的接口返回格式
5657
const { code, result, message } = data;
@@ -66,8 +67,8 @@ const transform: AxiosTransform = {
6667
createMessage.error(message);
6768
}
6869
}
69-
Promise.reject(new Error(message));
70-
return errorResult;
70+
throw new Error(message);
71+
//return errorResult;
7172
}
7273

7374
// 接口请求成功,直接返回结果
@@ -78,13 +79,13 @@ const transform: AxiosTransform = {
7879
if (code === ResultEnum.ERROR) {
7980
if (message) {
8081
createMessage.error(data.message);
81-
Promise.reject(new Error(message));
82+
throw new Error(message);
8283
} else {
8384
const msg = t('sys.api.errorMessage');
8485
createMessage.error(msg);
85-
Promise.reject(new Error(msg));
86+
throw new Error(msg);
8687
}
87-
return errorResult;
88+
//return errorResult;
8889
}
8990
// 登录超时
9091
if (code === ResultEnum.TIMEOUT) {
@@ -93,10 +94,11 @@ const transform: AxiosTransform = {
9394
title: t('sys.api.operationFailed'),
9495
content: timeoutMsg,
9596
});
96-
Promise.reject(new Error(timeoutMsg));
97-
return errorResult;
97+
throw new Error(timeoutMsg);
98+
//return errorResult;
9899
}
99-
return errorResult;
100+
throw new Error(t('sys.api.apiRequestFailed'));
101+
//return errorResult;
100102
},
101103

102104
// 请求之前处理config

src/views/sys/login/LoginForm.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
},
119119
setup() {
120120
const { t } = useI18n();
121-
const { notification } = useMessage();
121+
const { notification, createErrorModal } = useMessage();
122122
const { prefixCls } = useDesign('login');
123123
const userStore = useUserStore();
124124
@@ -149,6 +149,7 @@
149149
toRaw({
150150
password: data.password,
151151
username: data.account,
152+
mode: 'none', //不要默认的错误提示
152153
})
153154
);
154155
if (userInfo) {
@@ -158,6 +159,12 @@
158159
duration: 3,
159160
});
160161
}
162+
} catch (error) {
163+
createErrorModal({
164+
title: t('sys.api.errorTip'),
165+
content: error.message || t('sys.api.networkExceptionMsg'),
166+
getContainer: () => document.body.querySelector(`.${prefixCls}`) || document.body,
167+
});
161168
} finally {
162169
loading.value = false;
163170
}

0 commit comments

Comments
 (0)