|
@@ -0,0 +1,140 @@
|
|
|
+import axios from 'axios'
|
|
|
+import router from '@/router'
|
|
|
+import { ElLoading, ElMessage, ElMessageBox } from 'element-plus'
|
|
|
+import { getToken, setToken } from '@/utils/auth'
|
|
|
+import { AxiosConfigTy, AxiosReqTy, ObjTy } from '~/common'
|
|
|
+import { useUserStore } from '@/store/user'
|
|
|
+let reqConfig: any
|
|
|
+let loadingE: any
|
|
|
+
|
|
|
+const service: any = axios.create()
|
|
|
+
|
|
|
+// 请求拦截
|
|
|
+service.interceptors.request.use(
|
|
|
+ (request: AxiosReqTy) => {
|
|
|
+ // token setting
|
|
|
+ request.headers['AUTHORIZE_TOKEN'] = getToken()
|
|
|
+ request.headers['token'] = "4cdc82f3d9374abc9cd2c940170a770b"
|
|
|
+ request.data["OperatorId"] ="1656481036138";
|
|
|
+ /* download file*/
|
|
|
+ if (request.isDownLoadFile) {
|
|
|
+ request.responseType = 'blob'
|
|
|
+ }
|
|
|
+ /* upload file*/
|
|
|
+ if (request.isUploadFile) {
|
|
|
+ request.headers['Content-Type'] = 'application/json'
|
|
|
+ }
|
|
|
+ reqConfig = request
|
|
|
+ if (request.bfLoading) {
|
|
|
+ loadingE = ElLoading.service({
|
|
|
+ lock: true,
|
|
|
+ text: '数据载入中',
|
|
|
+ // spinner: 'el-icon-ElLoading',
|
|
|
+ background: 'rgba(0, 0, 0, 0.1)'
|
|
|
+ })
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ *params会拼接到url上
|
|
|
+ * */
|
|
|
+ if (request.isParams) {
|
|
|
+ request.params = request.data
|
|
|
+ request.data = {}
|
|
|
+ }
|
|
|
+ return request
|
|
|
+ },
|
|
|
+ (err: any) => {
|
|
|
+ Promise.reject(err)
|
|
|
+ }
|
|
|
+)
|
|
|
+// 响应拦截
|
|
|
+service.interceptors.response.use(
|
|
|
+ (res: any) => {
|
|
|
+ if (reqConfig.afHLoading && loadingE) {
|
|
|
+ loadingE.close()
|
|
|
+ }
|
|
|
+ // 如果是下载文件直接返回
|
|
|
+ if (reqConfig.isDownLoadFile) {
|
|
|
+ return res
|
|
|
+ }
|
|
|
+ const { flag, msg, isNeedUpdateToken, updateToken, code } = res.data
|
|
|
+ //更新token保持登录状态
|
|
|
+ if (isNeedUpdateToken) {
|
|
|
+ setToken(updateToken)
|
|
|
+ }
|
|
|
+ const successCode = '0,200,20000'
|
|
|
+ if (successCode.includes(code)) {
|
|
|
+ return res.data
|
|
|
+ } else {
|
|
|
+ if (code === 403) {
|
|
|
+ ElMessageBox.confirm('请重新登录', {
|
|
|
+ confirmButtonText: '重新登录',
|
|
|
+ cancelButtonText: '取消',
|
|
|
+ type: 'warning'
|
|
|
+ }).then(() => {
|
|
|
+ const userStore = useUserStore()
|
|
|
+ userStore.resetState().then(() => {
|
|
|
+ router.push({ path: '/login' })
|
|
|
+ })
|
|
|
+ })
|
|
|
+ }
|
|
|
+ if (reqConfig.isAlertErrorMsg) {
|
|
|
+ ElMessage({
|
|
|
+ message: msg,
|
|
|
+ type: 'error',
|
|
|
+ duration: 2 * 1000
|
|
|
+ })
|
|
|
+ }
|
|
|
+ //返回错误信息
|
|
|
+ //如果未catch 走unhandledrejection进行收集
|
|
|
+ //注:如果没有return 则,会放回到请求方法中.then ,返回的res为 undefined
|
|
|
+ return Promise.reject(res.data)
|
|
|
+ }
|
|
|
+ },
|
|
|
+ (err: any) => {
|
|
|
+ /*http错误处理,处理跨域,404,401,500*/
|
|
|
+ if (loadingE) loadingE.close()
|
|
|
+ ElMessage({
|
|
|
+ message: err,
|
|
|
+ type: 'error',
|
|
|
+ duration: 2 * 1000
|
|
|
+ })
|
|
|
+ //如果是跨域
|
|
|
+ //Network Error,cross origin
|
|
|
+ const errObj: ObjTy = {
|
|
|
+ msg: err.toString(),
|
|
|
+ reqUrl: reqConfig.baseURL + reqConfig.url,
|
|
|
+ params: reqConfig.isParams ? reqConfig.params : reqConfig.data
|
|
|
+ }
|
|
|
+ return Promise.reject(JSON.stringify(errObj))
|
|
|
+ }
|
|
|
+)
|
|
|
+
|
|
|
+export function axiosReq({
|
|
|
+ url,
|
|
|
+ data,
|
|
|
+ method,
|
|
|
+ isParams,
|
|
|
+ bfLoading,
|
|
|
+ afHLoading,
|
|
|
+ isUploadFile,
|
|
|
+ isDownLoadFile,
|
|
|
+ baseURL,
|
|
|
+ timeout,
|
|
|
+ isAlertErrorMsg = true
|
|
|
+}: AxiosConfigTy): any {
|
|
|
+ return service({
|
|
|
+ url: url,
|
|
|
+ method: method ?? 'get',
|
|
|
+ data: data ?? {},
|
|
|
+ isParams: isParams ?? false,
|
|
|
+ bfLoading: bfLoading ?? false,
|
|
|
+ afHLoading: afHLoading ?? true,
|
|
|
+ isUploadFile: isUploadFile ?? false,
|
|
|
+ isDownLoadFile: isDownLoadFile ?? false,
|
|
|
+ isAlertErrorMsg: isAlertErrorMsg,
|
|
|
+ baseURL: baseURL ?? import.meta.env.VITE_WEB_BASE_URL,
|
|
|
+ timeout: timeout ?? 15000
|
|
|
+ })
|
|
|
+}
|
|
|
+
|
|
|
+export default axiosReq
|