UNPKG

@ecip/ecip-web

Version:

A magical vue admin. An out-of-box UI solution for enterprise applications. Newest development stack of vue. Lots of awesome features

305 lines (287 loc) 9.2 kB
import axios from "axios"; import { MessageBox, Notification } from "element-ui"; import store from "@/store"; import { getToken } from "@/utils/auth"; import router from "@/router"; import ErrorLogDialog from "../components/ErrorLog/error-log-dialog"; import { changeZIndex } from "./index"; const ignoreError = "_ignore_error=true"; // create an axios instance const baseUrl = process.env.VUE_APP_BASE_API; const service = axios.create({ baseURL: baseUrl, // url = base url + request url // withCredentials: true, // send cookies when cross-domain requests // timeout: 5000 // request timeout }); // request interceptor service.interceptors.request.use( (config) => { // do something before request is sent if (store.getters.token) { // let each request carry token // ['X-Token'] is a custom headers key // please modify it according to the actual situation config.headers["token"] = getToken(); } if (store.getters.language) { config.headers["Accept-Language"] = store.getters.language + ";q=0.9"; } // const clientTenantId = localStorage.getItem('clientTenantId') // if (clientTenantId && config.url !== 'api/v1/system/router' && config.url !== 'api/v1/token/validate') { // config.headers['tenantId'] = clientTenantId // } return config; }, (error) => { // do something with request error console.log(error); // for debug return Promise.reject(error); } ); const reLogin = (respData) => { if (window._CONFIG.cas) { store.dispatch("user/resetToken").then(() => { const baseUrl = process.env.NODE_ENV === "development" ? "" : process.env.VUE_APP_BASE_API; const service = window.location.protocol + "//" + window.location.host + baseUrl + "/?appId=" + window._CONFIG["appId"]; const serviceUrl = encodeURIComponent(service); window.location = window._CONFIG["casPrefixUrl"] + "/login?service=" + serviceUrl; }); return; } if (window._CONFIG.oauth) { store.dispatch("user/resetToken").then(() => { const baseUrl = process.env.NODE_ENV === "development" ? process.env.BASE_URL : process.env.VUE_APP_BASE_API; const service = window.location.protocol + "//" + window.location.host + baseUrl; window.location.href = `${window._CONFIG["oauthPrefixUrl"]}/app/oauth/login?response_type=code&scope=USERINFO&state=state&client_id=${window._CONFIG["oauthClientId"]}&redirect_uri=${service}`; }); return; } if (window._CONFIG["centerAuthEnabled"]) { store.dispatch("user/resetToken").then(() => { let msgShow = "登录已超时"; let msgShowbtn = "重新登录"; let toPortal = false; if (respData && respData.message) { msgShow = respData.message; if ( respData.message.indexOf("账号异常") !== -1 || respData.message.indexOf("common.user") !== -1 ) { msgShow = "业务系统账号异常"; msgShowbtn = "返回"; toPortal = true; } else if (respData.message.indexOf("token已失效") !== -1) { msgShow = "登录已超时"; msgShowbtn = "重新登录"; } else if (respData.message.indexOf("权限异常") !== -1) { msgShow = "业务系统权限异常,请检查是否被授权"; toPortal = true; msgShowbtn = "返回"; } else { msgShow = respData.message; msgShowbtn = "返回"; toPortal = true; } } MessageBox.confirm(msgShow, "授权异常", { confirmButtonText: msgShowbtn, type: "warning", showClose: false, customClass: "casMessageBoxRequest", }).then(() => { // console.debug('request.js', window._CONFIG['centerAuthUrl']) if (location.hash.startsWith("#/center-auth") || toPortal) { window.location.href = `${window._CONFIG["centerAuthUrl"]}`; } else { const baseUrl = process.env.NODE_ENV === "development" ? process.env.BASE_URL : process.env.VUE_APP_BASE_API; const appId = window._CONFIG["centerAuthAppId"] || window._CONFIG["appId"]; const service = encodeURIComponent( window.location.protocol + "//" + window.location.host + baseUrl + "?appId=" + appId + location.hash ); // console.debug( // "request.js", // `${window._CONFIG["centerAuthUrl"]}` + "?service=" + service // ); window.location.href = `${window._CONFIG["centerAuthUrl"]}` + "?service=" + service; } }); }); return; } // MessageBox.confirm( // "登录超时,可以取消继续留在该页面,或者重新登录", // "确定登出", // { // confirmButtonText: "重新登录", // cancelButtonText: "取消", // type: "warning", // customClass: "casMessageBoxRequest", // } // ).then(() => { // store.dispatch("user/resetToken").then(() => { // location.reload(); // }); // }); MessageBox.confirm( '登录已失效,请重新登录', "温馨提示", { showCancelButton: false, type: "warning", customClass: "casMessageBoxRequest", }) changeZIndex("casMessageBoxRequest"); }; // response interceptor service.interceptors.response.use( /** * If you want to get http information such as headers or status * Please return response => response */ /** * Determine the request status by custom code * Here is just an example * You can also judge the status by HTTP Status Code */ (response) => { const res = response.data; if (res instanceof Blob) { return response; } // if the custom code is not 20000, it is judged as an error. if (res.code !== 200) { if ( response.config.url && response.config.url.indexOf(ignoreError) === -1 ) { if (res.code === 500 && res.data) { const notification = Notification({ dangerouslyUseHTMLString: true, message: `<a style="color: #0088fe">服务器出错,点击查看详情</a>`, type: "error", offset: 50, duration: 0, onClick: () => { notification.close(); ErrorLogDialog.show({ id: res.data }); }, }); } else { if (res.code < 0) { console.log("noAlertErrorType", res); } else { Notification({ message: res.message || res.code || "未知错误,请稍后再试", type: "error", offset: 50, duration: 5 * 1000, customClass: "ecip-notificationRequest", }); } } } // 50008: Illegal token; 50012: Other clients logged in; 50014: Token expired; if (res.code === 401) { if ( response.config.url && response.config.url.indexOf("_allow_anonymous=true") === -1 ) { // debugger; reLogin(); } // to re-login } if (res.code === 700) { router.replace({ path: "/change-pwd" }); // router.replace({ path: '/login' }) } if (res.code === 701) { router.replace({ name: "NoAuth" }); } if (res.code === 429) { Notification({ message: res.message || "Error", type: "error", offset: 50, duration: 5 * 1000, }); } return Promise.reject(new Error(res.message || "Error")); } else { return res; } }, (error) => { console.log("err" + error); // for debug if (!error.response) { return Promise.reject(error); } if (error.response.status === 401) { if ( error.response.config.url && error.response.config.url.indexOf("_allow_anonymous=true") === -1 ) { // debugger; reLogin(error.response.data); } return Promise.reject(error); } if (error.response.status === 700) { // router.replace({ path: '/change-pwd' }) router.replace({ path: "/login" }); return Promise.reject(error); } if (error.response.status === 429) { Notification({ message: error.message || error.response.status || "未知错误,请稍后再试", type: "error", offset: 50, duration: 5 * 1000, customClass: "ecip-notificationRequest", }); } if (error.response.status === 701) { router.replace({ name: "NoAuth" }); return Promise.reject(error); } if ( error.response.config.url && error.response.config.url.indexOf(ignoreError) === -1 ) { Notification({ message: error.message, type: "error", offset: 50, duration: 5 * 1000, }); } return Promise.reject(error); } ); export default service;