Commit 6eddbffd8c4671bdc494e11090e4bf492cef10a1
1 parent
c8823752
perf: axios
Showing
2 changed files
with
18 additions
and
54 deletions
yudao-ui-admin-vue3/src/config/axios/index.ts
| ... | ... | @@ -4,6 +4,8 @@ import qs from 'qs' |
| 4 | 4 | import { config } from '@/config/axios/config' |
| 5 | 5 | import { getAccessToken, getRefreshToken, getTenantId } from '@/utils/auth' |
| 6 | 6 | import errorCode from './errorCode' |
| 7 | +import { useI18n } from '@/hooks/web/useI18n' | |
| 8 | +const { t } = useI18n() | |
| 7 | 9 | |
| 8 | 10 | const tenantEnable = import.meta.env.VITE_APP_TENANT_ENABLE |
| 9 | 11 | const BASE_URL = import.meta.env.VITE_BASE_URL |
| ... | ... | @@ -18,8 +20,11 @@ const ignoreMsgs = [ |
| 18 | 20 | // 是否显示重新登录 |
| 19 | 21 | export const isRelogin = { show: false } |
| 20 | 22 | // Axios 无感知刷新令牌,参考 https://www.dashingdog.cn/article/11 与 https://segmentfault.com/a/1190000020210980 实现 |
| 23 | +// 请求队列 | |
| 24 | +// const requestList = [] | |
| 21 | 25 | // 是否正在刷新中 |
| 22 | 26 | let isRefreshToken = false |
| 27 | + | |
| 23 | 28 | export const PATH_URL = base_url[import.meta.env.VITE_API_BASEPATH] |
| 24 | 29 | |
| 25 | 30 | // 创建axios实例 |
| ... | ... | @@ -95,13 +100,17 @@ service.interceptors.response.use( |
| 95 | 100 | if (!getRefreshToken()) { |
| 96 | 101 | return handleAuthorized() |
| 97 | 102 | } |
| 103 | + // 2. 进行刷新访问令牌 | |
| 104 | + // TODO: 引入refreshToken会循环依赖报错 | |
| 98 | 105 | } |
| 99 | 106 | } else if (code === 500) { |
| 100 | - ElMessage.error(msg) | |
| 107 | + ElMessage.error(t('sys.api.errMsg500')) | |
| 101 | 108 | return Promise.reject(new Error(msg)) |
| 102 | 109 | } else if (code === 901) { |
| 103 | 110 | ElMessage.error( |
| 104 | - '<div>演示模式,无法进行写操作</div>' + | |
| 111 | + '<div>' + | |
| 112 | + t('sys.api.errMsg901') + | |
| 113 | + '</div>' + | |
| 105 | 114 | '<div> </div>' + |
| 106 | 115 | '<div>参考 https://doc.iocoder.cn/ 教程</div>' + |
| 107 | 116 | '<div> </div>' + |
| ... | ... | @@ -126,11 +135,11 @@ service.interceptors.response.use( |
| 126 | 135 | console.log('err' + error) // for debug |
| 127 | 136 | let { message } = error |
| 128 | 137 | if (message === 'Network Error') { |
| 129 | - message = '后端接口连接异常' | |
| 138 | + message = t('sys.api.errorMessage') | |
| 130 | 139 | } else if (message.includes('timeout')) { |
| 131 | - message = '系统接口请求超时' | |
| 140 | + message = t('sys.api.apiTimeoutMessage') | |
| 132 | 141 | } else if (message.includes('Request failed with status code')) { |
| 133 | - message = '系统接口' + message.substr(message.length - 3) + '异常' | |
| 142 | + message = t('sys.api.apiRequestFailed') + message.substr(message.length - 3) | |
| 134 | 143 | } |
| 135 | 144 | ElMessage.error(message) |
| 136 | 145 | return Promise.reject(error) |
| ... | ... | @@ -139,9 +148,9 @@ service.interceptors.response.use( |
| 139 | 148 | function handleAuthorized() { |
| 140 | 149 | if (!isRelogin.show) { |
| 141 | 150 | isRelogin.show = true |
| 142 | - ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { | |
| 143 | - confirmButtonText: '重新登录', | |
| 144 | - cancelButtonText: '取消', | |
| 151 | + ElMessageBox.confirm(t('sys.api.timeoutMessage'), t('common.confirmTitle'), { | |
| 152 | + confirmButtonText: t('login.relogin'), | |
| 153 | + cancelButtonText: t('common.cancel'), | |
| 145 | 154 | type: 'warning' |
| 146 | 155 | }) |
| 147 | 156 | .then(() => { |
| ... | ... | @@ -151,6 +160,6 @@ function handleAuthorized() { |
| 151 | 160 | isRelogin.show = false |
| 152 | 161 | }) |
| 153 | 162 | } |
| 154 | - return Promise.reject('无效的会话,或者会话已过期,请重新登录。') | |
| 163 | + return Promise.reject(t('sys.api.timeoutMessage')) | |
| 155 | 164 | } |
| 156 | 165 | export { service } | ... | ... |
yudao-ui-admin-vue3/src/router/modules/error.ts deleted
| 1 | -import { Layout } from '@/utils/routerHelper' | |
| 2 | -import { useI18n } from '@/hooks/web/useI18n' | |
| 3 | -const { t } = useI18n() | |
| 4 | - | |
| 5 | -const errorRouter = [ | |
| 6 | - { | |
| 7 | - path: '/error', | |
| 8 | - component: Layout, | |
| 9 | - redirect: '/error/404', | |
| 10 | - name: 'Error', | |
| 11 | - meta: { | |
| 12 | - title: t('router.errorPage'), | |
| 13 | - icon: 'ci:error', | |
| 14 | - alwaysShow: true | |
| 15 | - }, | |
| 16 | - children: [ | |
| 17 | - { | |
| 18 | - path: '404-demo', | |
| 19 | - component: () => import('@/views/Error/404.vue'), | |
| 20 | - name: '404Demo', | |
| 21 | - meta: { | |
| 22 | - title: '404' | |
| 23 | - } | |
| 24 | - }, | |
| 25 | - { | |
| 26 | - path: '403-demo', | |
| 27 | - component: () => import('@/views/Error/403.vue'), | |
| 28 | - name: '403Demo', | |
| 29 | - meta: { | |
| 30 | - title: '403' | |
| 31 | - } | |
| 32 | - }, | |
| 33 | - { | |
| 34 | - path: '500-demo', | |
| 35 | - component: () => import('@/views/Error/500.vue'), | |
| 36 | - name: '500Demo', | |
| 37 | - meta: { | |
| 38 | - title: '500' | |
| 39 | - } | |
| 40 | - } | |
| 41 | - ] | |
| 42 | - } | |
| 43 | -] | |
| 44 | - | |
| 45 | -export default errorRouter |