Files
udf/admin/src/assets/js/glob.js
T
2020-04-30 15:05:40 +08:00

153 lines
4.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import router from "../../router";
import {Message} from 'element-ui';
const glob = {
//初始化
inti() {
//初始化NProgress
this.initNProgress();
//初始化Axios
this.intiAxios();
},
//读取cookies
getCookie(name) {
var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
if (arr === document.cookie.match(reg)) {
return unescape(arr[2]);
} else {
return null;
}
},
//返回token
getToken() {
//token名称
const TOKEN_NAME = 'token';
//返回TOKEN
return this.getCookie(this.TOKEN_NAME);
},
//检查是否登陆
checkLogin() {
//检查是否有token
if (!this.getToken()) {
//跳转到登陆页
this.jumpLoginPage();
}
},
//跳转到登陆页
jumpLoginPage() {
//弹出提示
Message({
dangerouslyUseHTMLString: false,
showClose: true,
duration: 2000,
type: 'info',
message: '认证过期,请重新登陆,正在跳转',
onClose: () => {
const redirectUrl = escape(window.location.href);
if (process.env.NODE_ENV === 'production') {
window.location = '/login.html?redirectUrl=' + redirectUrl;
} else {
window.location.href = 'http://127.0.0.1:9000/login.html?redirectUrl=' + redirectUrl;
}
}
});
},
//初始化NProgress
initNProgress() {
//配置
NProgress.configure({easing: 'ease', speed: 500, showSpinner: false});
NProgress.inc(0.2);
//开始遍历
router.beforeEach((to, from, next) => {
NProgress.start();
next();
});
//结束遍历
router.afterEach(() => {
NProgress.done();
});
},
//初始化Axios
intiAxios() {
// 添加请求拦截器(从session存储中拿token)
axios.interceptors.request.use(config => {
//设置请求根路径
if (process.env.NODE_ENV === 'production') {
config.baseURL = '/api/udf/web';
} else {
config.baseURL = 'http://127.0.0.1:9000/api/udf/web';
}
//添加token到header中
config.headers.token = this.getToken() ? this.getToken() : '';
//设置请求超时时间
config.timeout = 5000;
//返回
return config;
},
error => Promise.reject(error)
);
// 添加响应拦截器(状态码不为200默认失败)
axios.interceptors.response.use(response => {
if (response.status == 200) {
return Promise.resolve(response);
}
return this.errorHandle(response);
}, error => {
return this.errorHandle(error.response);
}
);
},
//展示错误信息
errorHandle(response) {
if (response.status == 403) {
this.jumpLoginPage();
} else {
this.message(response);
}
return Promise.reject(response);
},
// 错误面板
message(response) {
//弹出消息框
Message({
dangerouslyUseHTMLString: false, // 设置HTML显示
showClose: true, // 显示关闭按钮
duration: 3000, // 默认3秒后关闭
type: response.status === 400 ? 'warning' : 'error',
message: this.getErrorMessage(response)
});
},
// 3.获取错误详情
getErrorMessage(response) {
//默认提示语
let msg = '服务器开小差了 , 请稍后再试';
//判断是否有响应消息体
if (response.data && response.data.errorDetail) {
//判断错误类型
if (response.data.errorDetail.type === 'org.springframework.web.bind.MethodArgumentNotValidException') {
//参数校验错误
let obj = [];
try {
const msgData = response.data.errorDetail.message.replace(/"/g, '"');
obj = JSON.parse(msgData);
} catch (e) {
obj = [];
}
let message = '';
if (obj instanceof Array) {
obj.forEach(item => {
message = message ? `${message},${item.defaultMessage}` : item.defaultMessage;
})
}
msg = message;
} else {
//其他错误
msg = response.data.errorDetail.message;
}
}
return msg;
},
}
Vue.prototype.$glob = glob;
export default glob;