|
|
@@ -5,6 +5,7 @@ import { Shield, Zap, Lock, User, Eye, EyeOff, ArrowRight, Activity, Radio, Laye
|
|
|
import { loginApi } from '../api';
|
|
|
import type { LoginFormParams } from '../api/Login';
|
|
|
import { toast } from 'sonner';
|
|
|
+import { Toaster } from 'sonner';
|
|
|
import { env } from '../utils/env';
|
|
|
import * as authUtil from '../utils/auth';
|
|
|
import { setPermissionInfo } from '../utils/permission';
|
|
|
@@ -317,7 +318,32 @@ export default function Login() {
|
|
|
}, 500);
|
|
|
} catch (error: any) {
|
|
|
toast.dismiss('loading');
|
|
|
- toast.error(error.message || t('common.error') || '登录失败');
|
|
|
+
|
|
|
+ // axios拦截器已经将 data.msg 提取到 error.message 中
|
|
|
+ // 优先使用 error.message,然后尝试从 error.response.data 获取
|
|
|
+ let errorMessage = '登录失败';
|
|
|
+
|
|
|
+ // 优先使用 error.message(axios拦截器已经提取了msg)
|
|
|
+ if (error?.message && error.message.trim() !== '') {
|
|
|
+ errorMessage = error.message;
|
|
|
+ } else if (error?.response?.data) {
|
|
|
+ // 如果 error.message 为空,尝试从 response.data 中获取
|
|
|
+ errorMessage = error.response.data.msg ||
|
|
|
+ error.response.data.message ||
|
|
|
+ error.response.data.error ||
|
|
|
+ errorMessage;
|
|
|
+ } else {
|
|
|
+ // 使用默认错误消息
|
|
|
+ errorMessage = t('common.error') || '登录失败';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 确保错误消息不为空
|
|
|
+ if (!errorMessage || errorMessage.trim() === '') {
|
|
|
+ errorMessage = t('common.error') || '登录失败';
|
|
|
+ }
|
|
|
+
|
|
|
+ // 显示错误提示
|
|
|
+ toast.error(errorMessage);
|
|
|
} finally {
|
|
|
setIsLoading(false);
|
|
|
}
|
|
|
@@ -1056,6 +1082,7 @@ export default function Login() {
|
|
|
</div>
|
|
|
</div>
|
|
|
</div>
|
|
|
+ <Toaster position="top-center" richColors />
|
|
|
</div>
|
|
|
);
|
|
|
}
|