Commit 364c2fbd authored by 姬鋆屾's avatar 姬鋆屾

fixed:修复token过期无法回到登录页的问题

parent 33ed8a80
......@@ -8,15 +8,13 @@ export default {
methods: {
// 渲染前置处理
beforeRender(data) {
return data
return data;
},
// 渲染后置处理
afterRender(data) {
},
afterRender(data) {},
// 提交表单的前置处理
beforeSubmit(data) {
return data
return data;
},
// 提交表单的后置处理, 会阻断默认的回退行为
afterSubmit(data) {
......@@ -38,16 +36,18 @@ export default {
this.dict = Object.assign({}, this.dict, res.dict);
this.afterRender(res);
})
.catch(error => {
console.error(error)
.catch((error) => {
this.$message.error(error.message);
error.message.indexOf("过期") > -1
? (window.location = "/#/login")
: "";
})
.then(data => {
.then((data) => {
clearTimeout(this.loadingTimer);
this.loadingTimer = setTimeout(() => {
this.loading = false;
}, 300);
})
});
},
// 提交表单
submitForm(ref) {
......@@ -55,72 +55,81 @@ export default {
el.validate((valid) => {
if (!valid) return;
this.loading = true;
this.$post(this.urls.saveUrl || this.pageInfo.saveUrl,
this.beforeSubmit(this.form)
this.$post(
this.urls.saveUrl || this.pageInfo.saveUrl,
this.beforeSubmit(this.form)
)
.then(res => {
.then((res) => {
this.$message.success(res.msg);
this.afterSubmit(res);
})
.catch(error => {
.catch((error) => {
this.$message.error(error.message);
})
.then(data => {
.then((data) => {
clearTimeout(this.loadingTimer);
this.loadingTimer = setTimeout(() => {
this.loading = false;
}, 200);
})
});
});
},
// 复制一个数组或对象
util_copy(data) {
return JSON.parse(JSON.stringify(data))
return JSON.parse(JSON.stringify(data));
},
// 工具方法,把数字转化为字符串
util_toString(data, array) {
//原始数据
const dataCopy = Object.assign({}, data);
array.forEach(item => {
array.forEach((item) => {
//如果相等做操作
dataCopy[item] = dataCopy[item] === undefined ? '' : dataCopy[item] + '';
})
dataCopy[item] =
dataCopy[item] === undefined ? "" : dataCopy[item] + "";
});
return dataCopy;
},
// 工具方法,把字符串转化为数组
util_toArrays(data, array) {
const dataCopy = Object.assign({}, data);
array.forEach(item => {
dataCopy[item] = dataCopy[item] === undefined ? [] : dataCopy[item].split(",");
})
array.forEach((item) => {
dataCopy[item] =
dataCopy[item] === undefined ? [] : dataCopy[item].split(",");
});
return dataCopy;
},
// 工具方法,把字符串转化为格式化日期
util_toDateStr(data, array) {
const dataCopy = Object.assign({}, data);
array.forEach(item => {
dataCopy[item] = dataCopy[item] === undefined ? '' : this.util_formatterDate(dataCopy[item]);
})
array.forEach((item) => {
dataCopy[item] =
dataCopy[item] === undefined
? ""
: this.util_formatterDate(dataCopy[item]);
});
return dataCopy;
},
util_formatterDate(time) {
let date = new Date(Number(time));
let Y = date.getFullYear() + '-';
let M = (date.getMonth()+1 < 10 ? '0'+(date.getMonth()+1) : date.getMonth()+1) + '-';
let D = this.panLeft(date.getDate()) + ' ';
let h = this.panLeft(date.getHours()) + ':';
let m = this.panLeft(date.getMinutes()) + ':';
let Y = date.getFullYear() + "-";
let M =
(date.getMonth() + 1 < 10
? "0" + (date.getMonth() + 1)
: date.getMonth() + 1) + "-";
let D = this.panLeft(date.getDate()) + " ";
let h = this.panLeft(date.getHours()) + ":";
let m = this.panLeft(date.getMinutes()) + ":";
let s = this.panLeft(date.getSeconds());
return Y+M+D+h+m+s;
return Y + M + D + h + m + s;
},
panLeft(num){
return num < 10 ? '0'+num : num;
panLeft(num) {
return num < 10 ? "0" + num : num;
},
// 从dict字段暴力取值,取不到则返回原值
util_formatter(key, val) {
try {
return this.dict[key][val]
return this.dict[key][val];
} catch (error) {
return val;
}
......@@ -133,24 +142,24 @@ export default {
}
});
}, 0);
}
},
},
computed: {
pageInfo() {
let currUrl = this.$route.path;
let urlArray = currUrl.split('/');
let urlArray = currUrl.split("/");
let type = urlArray.pop();
urlArray.push('save');
let saveUrl = urlArray.join('/');
urlArray.push("save");
let saveUrl = urlArray.join("/");
urlArray.pop();
urlArray.push('edit');
let editUrl = urlArray.join('/');
urlArray.push("edit");
let editUrl = urlArray.join("/");
urlArray.pop();
urlArray.push('add');
let addUrl = urlArray.join('/');
urlArray.push("add");
let addUrl = urlArray.join("/");
urlArray.pop();
urlArray.push('view');
let viewUrl = urlArray.join('/');
urlArray.push("view");
let viewUrl = urlArray.join("/");
return {
type,
currUrl,
......@@ -174,9 +183,6 @@ export default {
toString: [], // 需要把number转化为string的表单字段name数组
toArrays: [], // 需要把number转化为arrays的表单字段name数组
toDate: [], // 需要把number转化为date的表单字段name数组
}
}
}
};
},
};
......@@ -51,6 +51,9 @@ export default {
})
.catch((error) => {
this.$message.error(error.message);
error.message.indexOf("过期") > -1
? (window.location = "/#/login")
: "";
throw error;
})
.then((data) => {
......
......@@ -64,7 +64,6 @@ export default {
return;
}
this.tableData.loading = true;
console.log(this.query);
if (this.$route.path == "/user/list") {
this.query.userType
? (this.query.userTypeList = [])
......@@ -82,8 +81,12 @@ export default {
this.afterRender(this.tableData);
})
.catch((error) => {
console.log(error);
if (error.message == "自动取消ajax操作") return;
this.$message.error(error.message);
error.message.indexOf("过期") > -1
? (window.location = "/#/login")
: "";
})
.then((data) => {
clearTimeout(this.loadingTimer);
......
import axios from 'axios';
import Qs from 'qs';
const JSONbig = require('json-bigint')({"storeAsString": true});
import cookie from './cookie';
import httpErrorHandler from './httpErrorHandler';
import axios from "axios";
import Qs from "qs";
const JSONbig = require("json-bigint")({ storeAsString: true });
import cookie from "./cookie";
import httpErrorHandler from "./httpErrorHandler";
const instance = axios.create({
baseURL: '/enterprise',
baseURL: "/enterprise",
headers: {
post: {
'Content-Type': 'application/json;charset=UTF-8',
'dataType': 'json',
}
"Content-Type": "application/json;charset=UTF-8",
dataType: "json",
},
},
transformResponse: [data=>{
try {
JSON.parse(data);
return JSONbig.parse(data);
} catch (error) {
return data;
}
}],
transformResponse: [
(data) => {
try {
JSON.parse(data);
return JSONbig.parse(data);
} catch (error) {
return data;
}
},
],
});
instance.interceptors.request.use(
(config) => {
//config.data = Qs.stringify(config.data, {arrayFormat: 'repeat', allowDots: true});
//config.data = Qs.stringify(config.data, {arrayFormat: 'indices', allowDots: true});
//brackets
// 也可以在这里给请求添加token之类的字段
// config.headers['Content-Type'] = 'application/json;charset=UTF-8'
// config.headers.timestamp = Math.floor(new Date().getTime() / 1000)
// console.log("sessionStorage",window.sessionStorage)
config.headers.Authorization = window.sessionStorage.getItem("token") || "";
//console.log("request config and session",config,window.sessionStorage);
instance.interceptors.request.use(config => {
//config.data = Qs.stringify(config.data, {arrayFormat: 'repeat', allowDots: true});
//config.data = Qs.stringify(config.data, {arrayFormat: 'indices', allowDots: true});
//brackets
// 也可以在这里给请求添加token之类的字段
// config.headers['Content-Type'] = 'application/json;charset=UTF-8'
// config.headers.timestamp = Math.floor(new Date().getTime() / 1000)
// console.log("sessionStorage",window.sessionStorage)
config.headers.Authorization = window.sessionStorage.getItem('token') || ''
//console.log("request config and session",config,window.sessionStorage);
return config;
}, err => {
return Promise.reject(err);
});
return config;
},
(err) => {
return Promise.reject(err);
}
);
instance.interceptors.response.use(response=>{
return response.data
},httpErrorHandler);
instance.interceptors.response.use((response) => {
return response.data;
}, httpErrorHandler);
/**
* 封装后的axios post方法
......@@ -52,9 +57,9 @@ instance.interceptors.response.use(response=>{
*/
export function post(url, option, config = {}) {
const data = Object.assign({}, option, {
// __mortals_token__: cookie.getItem('__mortals_token__'),
})
return instance.post(url, data, config)
// __mortals_token__: cookie.getItem('__mortals_token__'),
});
return instance.post(url, data, config, httpErrorHandler);
}
/**
......@@ -68,24 +73,23 @@ export function post(url, option, config = {}) {
export function get(url, option, config = {}) {
const data = Object.assign({}, option, {
//__mortals_token__: cookie.getItem('__mortals_token__'),
})
return instance.get(url, { params: data }, config)
});
return instance.get(url, { params: data }, config, httpErrorHandler);
}
// 文件上传
const uploadInstance = axios.create({
baseURL: '/m',
baseURL: "/m",
headers: {
post: {
'Content-Type': 'multipart/form-data',
}
}
"Content-Type": "multipart/form-data",
},
},
});
uploadInstance.interceptors.response.use(response=>{
return response.data
},httpErrorHandler);
uploadInstance.interceptors.response.use((response) => {
return response.data;
}, httpErrorHandler);
/**
* 封装后的axios upload方法
......@@ -97,8 +101,8 @@ uploadInstance.interceptors.response.use(response=>{
*/
export function upload(url, option, config = {}) {
let formdata = new FormData();
Object.keys(option).forEach(key=>{
formdata.append(key, option[key])
})
return uploadInstance.post(url, formdata, config)
Object.keys(option).forEach((key) => {
formdata.append(key, option[key]);
});
return uploadInstance.post(url, formdata, config);
}
export default (error) => {
if(error.message === '自动取消ajax操作') return Promise.reject(error);
if (!error.response) {
console.error(error);
return Promise.reject({
message: '未知错误',
error,
});
};
let tip = '';
const status = error.response.status;
switch (status) {
case 400:
tip = '错误的请求参数';
break;
case 401:
tip = '没有该操作权限';
break;
case 403:
tip = '用户未登录或登录失效,请重新登录';
break;
case 404:
tip = '错误的请求地址';
break;
case 405:
tip = '请修改当前密码(原因:首次登录或超过期限未修改密码)';
break;
case 500:
case 501:
case 502:
case 503:
case 504:
tip = '服务器错误';
break;
default:
tip = '未知错误' + status;
}
if(status === 405){
window.location='/#/login/updatePwd';
}else{
tip +=',将自动返回主页';
window.location='/#/';
}
if (error.message === "自动取消ajax操作") return Promise.reject(error);
if (!error.response) {
console.error(error);
return Promise.reject({
message: tip,
message: "未知错误",
error,
status,
});
}
\ No newline at end of file
let tip = "";
const status = error.response.status;
switch (status) {
case 400:
tip = "错误的请求参数";
break;
case 401:
tip = "没有该操作权限";
break;
case 403:
tip = "用户未登录或登录失效,请重新登录";
break;
case 404:
tip = "错误的请求地址";
break;
case 405:
tip = "请修改当前密码(原因:首次登录或超过期限未修改密码)";
break;
case 500:
case 501:
case 502:
case 503:
case 504:
tip = "服务器错误";
break;
default:
tip = "未知错误" + status;
}
if (status === 405) {
window.location = "/#/login/updatePwd";
} else {
tip += ",将自动返回主页";
window.location = "/#/";
}
return Promise.reject({
message: tip,
error,
status,
});
};
import axios from 'axios';
import Qs from 'qs';
import cookie from './cookie';
import httpErrorHandler from './httpErrorHandler';
import axios from "axios";
import Qs from "qs";
import cookie from "./cookie";
import httpErrorHandler from "./httpErrorHandler";
const isDev = process.env.NODE_ENV === 'development';
const isDev = process.env.NODE_ENV === "development";
const queue = [];
const cancelToken = axios.CancelToken;
const token = (config) =>{
return `${config.url}_${config.method}`
}
const token = (config) => {
return `${config.url}_${config.method}`;
};
const instance = axios.create({
baseURL: '/m',
baseURL: "/m",
headers: {
token: cookie.getItem('fe_t'),
token: cookie.getItem("fe_t"),
post: {
'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8',
'dataType': 'json',
}
}
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
dataType: "json",
},
},
});
const removeQueue = (config) => {
for(let i=0, size = queue.length; i < size; i++){
for (let i = 0, size = queue.length; i < size; i++) {
const task = queue[i];
if(task.token === token(config)) {
if (task.token === token(config)) {
task.cancel();
queue.splice(i, 1);
}
}
}
};
//添加请求拦截器
instance.interceptors.request.use(config=>{
removeQueue(config); //在一个ajax发送前执行一下取消操作
config.cancelToken = new cancelToken((c)=>{
queue.push({ token: token(config), cancel: c });
});
return config;
}, error => {
return Promise.reject(error);
});
instance.interceptors.request.use(
(config) => {
removeQueue(config); //在一个ajax发送前执行一下取消操作
config.cancelToken = new cancelToken((c) => {
queue.push({ token: token(config), cancel: c });
});
return config;
},
(error) => {
return Promise.reject(error);
}
);
//添加响应拦截器
instance.interceptors.response.use(response=>{
instance.interceptors.response.use((response) => {
removeQueue(response.config);
return response.data
return response.data;
}, httpErrorHandler);
/**
......@@ -56,5 +59,5 @@ instance.interceptors.response.use(response=>{
* @returns
*/
export default (url, data, config = {}) => {
return instance.post(url, data, config)
}
return instance.post(url, data, config);
};
......@@ -202,7 +202,6 @@ export default {
emit() {
this.$emit("input", this.newVal);
this.$emit("change", this.newVal);
console.log(this.newVal);
},
},
computed: {
......
......@@ -103,8 +103,6 @@ export default {
},
beforeSubmit(data) {
data.companyIds = data.companyIds.join(",");
return data;
},
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment