Commit a0bfc60c by Cat
parents 60d4b410 e292b909
import axios from 'axios' import axios from "axios";
import {Notification, MessageBox, Message, Loading} from 'element-ui' import { Notification, MessageBox, Message, Loading } from "element-ui";
import store from '@/store' import store from "@/store";
import {getToken} from '@/utils/auth' import { getToken } from "@/utils/auth";
import errorCode from '@/utils/errorCode' import errorCode from "@/utils/errorCode";
import {tansParams, blobValidate} from "@/utils/ruoyi"; import { tansParams, blobValidate } from "@/utils/ruoyi";
import cache from '@/plugins/cache' import cache from "@/plugins/cache";
import {saveAs} from 'file-saver' import { saveAs } from "file-saver";
import {timeout} from '@/enums/request' import { timeout } from "@/enums/request";
let downloadLoadingInstance; let downloadLoadingInstance;
// 是否显示重新登录 // 是否显示重新登录
export let isRelogin = {show: false}; export let isRelogin = { show: false };
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8' axios.defaults.headers["Content-Type"] = "application/json;charset=utf-8";
// 创建axios实例 // 创建axios实例
const service = axios.create({ const service = axios.create({
// axios中请求配置有baseURL选项,表示请求URL公共部分 // axios中请求配置有baseURL选项,表示请求URL公共部分
baseURL: process.env.VUE_APP_BASE_API, baseURL: process.env.VUE_APP_BASE_API,
// 超时 // 超时
timeout: timeout timeout: timeout,
}) });
// request拦截器 // request拦截器
service.interceptors.request.use(config => { service.interceptors.request.use(
// 是否需要设置 token (config) => {
const isToken = (config.headers || {}).isToken === false // 是否需要设置 token
// 是否需要防止数据重复提交 const isToken = (config.headers || {}).isToken === false;
const isRepeatSubmit = (config.headers || {}).repeatSubmit === false // 是否需要防止数据重复提交
if (getToken() && !isToken) { const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
if (getToken() && !isToken) {
config.headers['Authorization'] = 'Bearer ' + getToken() // 让每个请求携带自定义token 请根据实际情况自行修改 config.headers["Authorization"] = "Bearer " + getToken(); // 让每个请求携带自定义token 请根据实际情况自行修改
}
// get请求映射params参数
if (config.method === 'get' && config.params) {
let url = config.url + '?' + tansParams(config.params);
url = url.slice(0, -1);
config.params = {};
config.url = url;
}
if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
const requestObj = {
url: config.url,
data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
time: new Date().getTime()
} }
const sessionObj = cache.session.getJSON('sessionObj') // get请求映射params参数
if (sessionObj === undefined || sessionObj === null || sessionObj === '') { if (config.method === "get" && config.params) {
cache.session.setJSON('sessionObj', requestObj) let url = config.url + "?" + tansParams(config.params);
} else { url = url.slice(0, -1);
const s_url = sessionObj.url; // 请求地址 config.params = {};
const s_data = sessionObj.data; // 请求数据 config.url = url;
const s_time = sessionObj.time; // 请求时间 }
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交 if (
if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) { !isRepeatSubmit &&
const message = '数据正在处理,请勿重复提交'; (config.method === "post" || config.method === "put")
console.warn(`[${s_url}]: ` + message) ) {
return Promise.reject(new Error(message)) const requestObj = {
url: config.url,
data:
typeof config.data === "object"
? JSON.stringify(config.data)
: config.data,
time: new Date().getTime(),
};
const sessionObj = cache.session.getJSON("sessionObj");
if (
sessionObj === undefined ||
sessionObj === null ||
sessionObj === ""
) {
cache.session.setJSON("sessionObj", requestObj);
} else { } else {
cache.session.setJSON('sessionObj', requestObj) const s_url = sessionObj.url; // 请求地址
const s_data = sessionObj.data; // 请求数据
const s_time = sessionObj.time; // 请求时间
const interval = 1000; // 间隔时间(ms),小于此时间视为重复提交
if (
s_data === requestObj.data &&
requestObj.time - s_time < interval &&
s_url === requestObj.url
) {
const message = "数据正在处理,请勿重复提交";
console.warn(`[${s_url}]: ` + message);
return Promise.reject(new Error(message));
} else {
cache.session.setJSON("sessionObj", requestObj);
}
} }
} }
return config;
},
(error) => {
console.log(error);
Promise.reject(error);
} }
return config );
}, error => {
console.log(error)
Promise.reject(error)
})
// 响应拦截器 // 响应拦截器
service.interceptors.response.use(res => { service.interceptors.response.use(
(res) => {
// 未设置状态码则默认成功状态 // 未设置状态码则默认成功状态
const code = res.data.code || 200; const code = res.data.code || 200;
// 获取错误信息 // 获取错误信息
const msg = errorCode[code] || res.data.msg || errorCode['default'] const msg = errorCode[code] || res.data.msg || errorCode["default"];
// 二进制数据则直接返回 // 二进制数据则直接返回
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') { if (
return res.data res.request.responseType === "blob" ||
res.request.responseType === "arraybuffer"
) {
return res.data;
} }
if (code === 401) { if (code === 401) {
if (!isRelogin.show) { if (!isRelogin.show) {
isRelogin.show = true; isRelogin.show = true;
MessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { MessageBox.confirm(
confirmButtonText: '重新登录', "登录状态已过期,您可以继续留在该页面,或者重新登录",
cancelButtonText: '取消', "系统提示",
type: 'warning' {
confirmButtonText: "重新登录",
cancelButtonText: "取消",
type: "warning",
} }
).then(() => { )
isRelogin.show = false; .then(() => {
store.dispatch('LogOut').then(() => { isRelogin.show = false;
location.href = '/index'; store.dispatch("LogOut").then(() => {
location.href = "/login";
});
}) })
}).catch(() => { .catch(() => {
isRelogin.show = false; isRelogin.show = false;
}); });
} }
return Promise.reject('无效的会话,或者会话已过期,请重新登录。') return Promise.reject("无效的会话,或者会话已过期,请重新登录。");
} else if (code === 500) { } else if (code === 500) {
Message({ Message({
dangerouslyUseHTMLString: true,//重点代码 dangerouslyUseHTMLString: true, //重点代码
message: msg, message: msg,
type: 'error' type: "error",
}) });
return Promise.reject(new Error(msg)) return Promise.reject(new Error(msg));
} else if (code !== 200) { } else if (code !== 200) {
Notification.error({ Notification.error({
title: msg title: msg,
}) });
return Promise.reject('error') return Promise.reject("error");
} else { } else {
return res.data return res.data;
} }
}, },
error => { (error) => {
console.log('err' + error) console.log("err" + error);
let {message} = error; let { message } = error;
if (message == "Network Error") { if (message == "Network Error") {
message = "后端接口连接异常"; message = "后端接口连接异常";
} else if (message.includes("timeout")) { } else if (message.includes("timeout")) {
...@@ -123,12 +148,12 @@ service.interceptors.response.use(res => { ...@@ -123,12 +148,12 @@ service.interceptors.response.use(res => {
} }
Message({ Message({
message: message, message: message,
type: 'error', type: "error",
duration: 5 * 1000 duration: 5 * 1000,
}) });
return Promise.reject(error) return Promise.reject(error);
} }
) );
// 通用下载方法 // 通用下载方法
export function download(url, params, filename, config) { export function download(url, params, filename, config) {
...@@ -136,31 +161,37 @@ export function download(url, params, filename, config) { ...@@ -136,31 +161,37 @@ export function download(url, params, filename, config) {
text: "正在下载数据,请稍候", text: "正在下载数据,请稍候",
spinner: "el-icon-loading", spinner: "el-icon-loading",
background: "rgba(0, 0, 0, 0.7)", background: "rgba(0, 0, 0, 0.7)",
}) });
return service.post(url, params, { return service
transformRequest: [(params) => { .post(url, params, {
return tansParams(params) transformRequest: [
}], (params) => {
headers: {'Content-Type': 'application/x-www-form-urlencoded'}, return tansParams(params);
responseType: 'blob', },
...config ],
}).then(async (data) => { headers: { "Content-Type": "application/x-www-form-urlencoded" },
const isLogin = await blobValidate(data); responseType: "blob",
if (isLogin) { ...config,
const blob = new Blob([data]) })
saveAs(blob, filename) .then(async (data) => {
} else { const isLogin = await blobValidate(data);
const resText = await data.text(); if (isLogin) {
const rspObj = JSON.parse(resText); const blob = new Blob([data]);
const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'] saveAs(blob, filename);
Message.error(errMsg); } else {
} const resText = await data.text();
downloadLoadingInstance.close(); const rspObj = JSON.parse(resText);
}).catch((r) => { const errMsg =
console.error(r) errorCode[rspObj.code] || rspObj.msg || errorCode["default"];
Message.error('下载文件出现错误,请联系管理员!') Message.error(errMsg);
downloadLoadingInstance.close(); }
}) downloadLoadingInstance.close();
})
.catch((r) => {
console.error(r);
Message.error("下载文件出现错误,请联系管理员!");
downloadLoadingInstance.close();
});
} }
export default service export default service;
...@@ -488,14 +488,14 @@ export default { ...@@ -488,14 +488,14 @@ export default {
}, },
], ],
password: [{ required: true, message: "登录密码不能为空", trigger: "blur" },], password: [{ required: true, message: "登录密码不能为空", trigger: "blur" },],
teacherCode: [{ required: true, message: "工作编号不能为空", trigger: "blur" }, // teacherCode: [{ required: true, message: "工作编号不能为空", trigger: "blur" },
{ message: "工作编号格式不正确", trigger: "blur", pattern: /[0-9]\d*/ }, // { message: "工作编号格式不正确", trigger: "blur", pattern: /[0-9]\d*/ },
], // ],
idCard: [{ required: true, validator: checkIdcard, trigger: "blur" }], // idCard: [{ required: true, validator: checkIdcard, trigger: "blur" }],
deptId: [{ required: true, message: "归属部门不能为空", trigger: "change" }], deptId: [{ required: true, message: "归属部门不能为空", trigger: "change" }],
employeeType: [{ required: true, message: "职工类型不能为空", trigger: "change" }], // employeeType: [{ required: true, message: "职工类型不能为空", trigger: "change" }],
deviceNum: [{ required: true, message: "设备工号不能为空", trigger: "change" }], // deviceNum: [{ required: true, message: "设备工号不能为空", trigger: "change" }],
sex: [{ required: true, message: "性别不能为空", trigger: "change" }], // sex: [{ required: true, message: "性别不能为空", trigger: "change" }],
}, },
// 自定义列表单元格样式 // 自定义列表单元格样式
......
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