diff --git a/Yi.RuoYi.Vue3/src/api/login.js b/Yi.RuoYi.Vue3/src/api/login.js index 83852fcb..dbfcf95b 100644 --- a/Yi.RuoYi.Vue3/src/api/login.js +++ b/Yi.RuoYi.Vue3/src/api/login.js @@ -48,6 +48,7 @@ export function logout() { // 获取验证码 export function getCodeImg() { + return request({ url: '/account/captcha-image', headers: { diff --git a/Yi.RuoYi.Vue3/src/utils/request.js b/Yi.RuoYi.Vue3/src/utils/request.js index 4832812e..6a8ed856 100644 --- a/Yi.RuoYi.Vue3/src/utils/request.js +++ b/Yi.RuoYi.Vue3/src/utils/request.js @@ -33,6 +33,7 @@ const service = axios.create({ // request拦截器 service.interceptors.request.use(config => { + // 是否需要设置 token const isToken = (config.headers || {}).isToken === false // 是否需要防止数据重复提交 @@ -40,6 +41,8 @@ service.interceptors.request.use(config => { if (getToken() && !isToken) { config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 } + + // get请求映射params参数 if (config.method === 'get' && config.params) { let url = config.url + '?' + tansParams(config.params); @@ -70,6 +73,7 @@ service.interceptors.request.use(config => { } } } + return config }, error => { Promise.reject(error) @@ -78,16 +82,19 @@ service.interceptors.request.use(config => { // 响应拦截器 service.interceptors.response.use(res => { // 未设置状态码则默认成功状态 - const code = res.data.code || 200; + const code = res.status || 200; + // 获取错误信息 const msg = errorCode[code] || res.data.message || errorCode['default'] - + // 二进制数据则直接返回 if(res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer'){ return res } if (code === 401) { + if (!isRelogin.show) { + isRelogin.show = true; ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', @@ -103,8 +110,11 @@ service.interceptors.response.use(res => { isRelogin.show = false; }); } + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') - } else if (code === 500) { + } + else if (code === 500) { + ElMessage({ message: msg, type: 'error' @@ -116,28 +126,60 @@ service.interceptors.response.use(res => { }) return Promise.reject('error') } else { + return Promise.resolve(res) } + }, - error => { - - let { message } = error; - - if (message == "Network Error") { - message = "后端接口连接异常"; - } - else if (message.includes("timeout")) { - message = "系统接口请求超时"; - } - else if (message.includes("Request failed with status code")) { - message = "系统接口" + message.substr(message.length - 3) + "异常"; - } + error=>{ + const response=error.response; + const code=response.status + const msg=response.data.message + if(code==403) + { ElMessage({ - message: message, - type: 'error', - duration: 5 * 1000 + message: msg, + type: 'error' }) - return Promise.reject(error) + } + else if (code === 401) { + + if (!isRelogin.show) { + + isRelogin.show = true; + ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning' + } + ).then(() => { + isRelogin.show = false; + useUserStore().logOut().then(() => { + location.href = '/index'; + }) + }).catch(() => { + isRelogin.show = false; + }); + } + + return Promise.reject('无效的会话,或者会话已过期,请重新登录。') + } + else if (code === 500) { + + ElMessage({ + message: msg, + type: 'error' + }) + return Promise.reject(new Error(msg)) + } else if (code !== 200) { + ElNotification.error({ + title: msg + }) + return Promise.reject('error') + } else { + + return Promise.resolve(res) + } } ) diff --git a/Yi.RuoYi.Vue3/src/views/login.vue b/Yi.RuoYi.Vue3/src/views/login.vue index 4abb826b..f327e1ba 100644 --- a/Yi.RuoYi.Vue3/src/views/login.vue +++ b/Yi.RuoYi.Vue3/src/views/login.vue @@ -116,6 +116,7 @@ function handleLogin() { router.push({ path: redirect.value || "/" }); }).catch(() => { loading.value = false; + // 重新获取验证码 if (captchaEnabled.value) { getCode(); @@ -126,6 +127,7 @@ function handleLogin() { } function getCode() { + getCodeImg().then(res => { captchaEnabled.value = res.captchaEnabled === undefined ? true : res.captchaEnabled; if (captchaEnabled.value) {