diff --git a/frontend/src/api/helper/checkStatus.ts b/frontend/src/api/helper/checkStatus.ts index ab2c685..dcfd8a1 100644 --- a/frontend/src/api/helper/checkStatus.ts +++ b/frontend/src/api/helper/checkStatus.ts @@ -10,9 +10,9 @@ export const checkStatus = (status: number) => { case 400: ElMessage.error("请求失败!请您稍后重试"); break; - case 401: - ElMessage.error("登录失效!请您重新登录"); - break; + // case 401: + // ElMessage.error("登录失效!请您重新登录"); + // break; case 403: ElMessage.error("当前账号无权限访问!"); break; diff --git a/frontend/src/api/index.ts b/frontend/src/api/index.ts index 75e4914..87368bd 100644 --- a/frontend/src/api/index.ts +++ b/frontend/src/api/index.ts @@ -8,6 +8,7 @@ import { ResultEnum } from '@/enums/httpEnum' import { checkStatus } from './helper/checkStatus' import { useUserStore } from '@/stores/modules/user' import router from '@/routers' +import {refreshToken} from '@/api/user/login' export interface CustomAxiosRequestConfig extends InternalAxiosRequestConfig { loading?: boolean; @@ -53,22 +54,44 @@ class RequestHttp { }, ) + let isFirst = true /** * @description 响应拦截器 * 服务器换返回信息 -> [拦截统一处理] -> 客户端JS获取到信息 */ this.service.interceptors.response.use( - (response: AxiosResponse) => { + async (response: AxiosResponse) => { const { data } = response const userStore = useUserStore() tryHideFullScreenLoading() + + if(data.code === ResultEnum.ACCESSTOKEN_EXPIRED){ + // 用长token去换短token + const result = await refreshToken() + if (result) { //获取新token成功的话 + // 有新的token后,重新请求 + userStore.setAccessToken(result.data.accessToken) + userStore.setRefreshToken(result.data.refreshToken) + response.config.headers.Authorization = `Bearer ${result.data.accessToken}`//重新请求前需要将更新后的新token更换掉之前无效的token,不然会死循环 + const resp = await this.service.request(response.config) + return resp + } else { + // 刷新失效,跳转登录页 + } + } // 登陆失效 if (data.code == ResultEnum.OVERDUE) { + console.log("登陆失效") userStore.setAccessToken('') userStore.setRefreshToken('') userStore.setUserInfo({ name: '' }) router.replace(LOGIN_URL) - ElMessage.error(data.message) + if(data.code != ResultEnum.OVERDUE){//临时处理token失效弹窗多次 + ElMessage.error(data.message) + }else if(isFirst){ + ElMessage.error(data.message) + isFirst = false + } return Promise.reject(data) } // 全局错误信息拦截(防止下载文件的时候返回数据流,没有 code 直接报错) @@ -87,6 +110,7 @@ class RequestHttp { async (error: AxiosError) => { const { response } = error tryHideFullScreenLoading() + console.log('error', error.message) // 请求超时 && 网络错误单独判断,没有 response if (error.message.indexOf('timeout') !== -1) ElMessage.error('请求超时!请您稍后重试') if (error.message.indexOf('Network Error') !== -1) ElMessage.error('网络错误!请您稍后重试') diff --git a/frontend/src/api/user/login/index.ts b/frontend/src/api/user/login/index.ts index 0111540..f663338 100644 --- a/frontend/src/api/user/login/index.ts +++ b/frontend/src/api/user/login/index.ts @@ -30,7 +30,11 @@ export const getDictList = () =>{ return http.get('/dictData/dictDataCache') } -// token刷新 +//token刷新 export const refreshToken = () => { - return http.post(`${rePrefix}/refreshToken`, {},{ loading: false }) -} \ No newline at end of file + return http.get(`${rePrefix}/refreshToken`, + {}, + { loading: false } + ) +} + diff --git a/frontend/src/enums/httpEnum.ts b/frontend/src/enums/httpEnum.ts index bb59f68..6deff04 100644 --- a/frontend/src/enums/httpEnum.ts +++ b/frontend/src/enums/httpEnum.ts @@ -4,7 +4,8 @@ export enum ResultEnum { SUCCESS = "A0000", ERROR = 500, - OVERDUE = "401", + ACCESSTOKEN_EXPIRED = 401, + OVERDUE = 4001, TIMEOUT = 30000, TYPE = "success" } diff --git a/frontend/src/views/home/components/table.vue b/frontend/src/views/home/components/table.vue index e11a7ea..4a5dddd 100644 --- a/frontend/src/views/home/components/table.vue +++ b/frontend/src/views/home/components/table.vue @@ -891,21 +891,21 @@ const handleTest = async (val: string) => { if (val === '手动检测' || val === '自动检测' || val === '不合格项复检' || val === '全部复检') { - if (devNum > 6) { + // if (devNum > 6) { + // ElMessageBox.confirm( + // '每次检测最多只能选择6台设备,请重新选择', + // '提示', + // { + // confirmButtonText: '确定', + // cancelButtonText: '取消', + // type: 'warning', + // }, + // ) + // return + // } + if (devChannelsNum > 12) { ElMessageBox.confirm( - '每次检测最多只能选择6台设备,请重新选择', - '提示', - { - confirmButtonText: '确定', - cancelButtonText: '取消', - type: 'warning', - }, - ) - return - } - if (devChannelsNum > 20) { - ElMessageBox.confirm( - '每次检测最多只能检测20个设备通道,请重新选择', + '每次检测最多只能检测12个设备通道,请重新选择', '提示', { confirmButtonText: '确定', diff --git a/frontend/src/views/home/components/testPopup.vue b/frontend/src/views/home/components/testPopup.vue index 7790377..e0e9cbd 100644 --- a/frontend/src/views/home/components/testPopup.vue +++ b/frontend/src/views/home/components/testPopup.vue @@ -27,7 +27,7 @@ 跳过 - 开始检测 + 开始检测 @@ -114,7 +114,7 @@ import {showFullScreenLoading} from "@/components/Loading/fullScreen"; // (e: 'update:visible', value: boolean): void; // (e: 'submit', data: any): void; // }>(); - +const btnState = ref(false) const checkStore = useCheckStore(); const skipDisabled = ref(false); const nextStepText = ref('下一步'); @@ -243,6 +243,7 @@ const open = (selection: Device.ResPqDev[], title: string, time: boolean) => { let loading; const handleSubmit = () => { skipDisabled.value = true + //btnState.value = true console.log('=============', stepsActiveIndex.value) let deviceIds = checkStore.devices.map((item) => item.deviceId)