345 lines
11 KiB
JavaScript
345 lines
11 KiB
JavaScript
import axios from "axios";
|
||
import qs from 'qs';
|
||
import router from "../../router";
|
||
import { Message } from "element-ui";
|
||
import saveAs from "./../lib/filesaver";
|
||
import NProgress from 'nprogress';
|
||
import './../../../static/css/nprogress.css';
|
||
|
||
var http = require("./httpurl");
|
||
function getUserToken(){
|
||
var data = window.localStorage.getItem("etorcurrentuser");
|
||
if(data)
|
||
return JSON.parse(data).Token;
|
||
return "";
|
||
}
|
||
|
||
var bmsAxios = axios.create({
|
||
// timeout: 120000,
|
||
// withCredentials: true,
|
||
baseURL: http.baseURL,
|
||
headers: {
|
||
post: {
|
||
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
|
||
}
|
||
}
|
||
});
|
||
|
||
bmsAxios.interceptors.request.use(
|
||
config => {
|
||
var data = "";
|
||
if (window.localStorage.getItem("etorcurrentuser")) {
|
||
data = window.localStorage.getItem("etorcurrentuser");
|
||
}
|
||
|
||
if (data == "") {
|
||
config.headers.token = "";
|
||
config.headers.sid = sid || 0;
|
||
} else {
|
||
config.headers.token = JSON.parse(data).Token;
|
||
//var TenantId = JSON.parse(data).Manager.TenantId;
|
||
//var OperaterID = JSON.parse(data).Manager.ID;
|
||
}
|
||
var sid = window.localStorage.getItem("sid");
|
||
config.headers.sid = sid || 0;
|
||
removeNullAndUndefinedProperty(config.data)//没用的参数不要传
|
||
removeNullAndUndefinedProperty(config.params)//没用的参数不要传
|
||
if (config.url != "Permission/AgainGetToken") {
|
||
window.localStorage.setItem(
|
||
"lastrequesttime",
|
||
JSON.stringify(Date.now())
|
||
); //记录用户最后请求时间
|
||
}
|
||
//debugger
|
||
return config;
|
||
},
|
||
error => {
|
||
return Promise.reject(error);
|
||
}
|
||
);
|
||
// 返回状态
|
||
let onceMessage = false;
|
||
bmsAxios.interceptors.response.use(
|
||
res => {
|
||
return res;
|
||
},
|
||
error => {
|
||
//有异常
|
||
if (error.response) {
|
||
switch (error.response.status) {
|
||
case 401:
|
||
if (onceMessage) return;
|
||
onceMessage = true;
|
||
// Message.error("信息过期,请重新登陆");
|
||
router.replace({
|
||
path: "/login",
|
||
query: {
|
||
redirect: router.currentRoute.fullPath
|
||
}
|
||
});
|
||
break;
|
||
case 204:
|
||
Message.error("暂无数据");
|
||
break;
|
||
}
|
||
}
|
||
|
||
return Promise.reject(error);
|
||
}
|
||
);
|
||
|
||
export function get(url, config) {
|
||
return new Promise((resolve, reject) => {
|
||
bmsAxios.get(url, {
|
||
params: config,
|
||
paramsSerializer: function (params) {
|
||
return qs.stringify(params, { arrayFormat: 'repeat' })
|
||
}
|
||
}).then(
|
||
response => {
|
||
if (response.data.Code == 10000) {
|
||
return resolve(response.data);
|
||
} else {
|
||
Message.error(response.data.Message||"数据异常")
|
||
}
|
||
},
|
||
err => {
|
||
reject(err);
|
||
}
|
||
)
|
||
.catch(error => {
|
||
reject(error);
|
||
});
|
||
});
|
||
}
|
||
|
||
export function post (url, params) {
|
||
return new Promise((resolve, reject) => {
|
||
bmsAxios.post(url, params).then(
|
||
response => {
|
||
if (response.data.Code === 20000) {
|
||
return
|
||
}
|
||
if (response.data.Code === 30000) {
|
||
return resolve(response.data)
|
||
}
|
||
if (response.data.Code === 10000) {
|
||
Message.success('操作成功')
|
||
return resolve(response.data)
|
||
} else {
|
||
Message.error(response.data.Message)
|
||
}
|
||
},
|
||
err => {
|
||
Message.error('操作失败')
|
||
reject(err)
|
||
}
|
||
)
|
||
.catch(error => {
|
||
Message.error('操作异常')
|
||
reject(error)
|
||
})
|
||
})
|
||
}
|
||
|
||
export function put(url, params) {
|
||
return new Promise((resolve, reject) => {
|
||
bmsAxios.put(url, params).then(
|
||
response => {
|
||
resolve(response.data);
|
||
},
|
||
err => {
|
||
reject(err);
|
||
}
|
||
)
|
||
.catch(error => {
|
||
reject(error);
|
||
});
|
||
});
|
||
}
|
||
export function del(url, config) {
|
||
return new Promise((resolve, reject) => {
|
||
bmsAxios.delete(url, { params: config }).then(
|
||
response => {
|
||
resolve(response.data);
|
||
},
|
||
err => {
|
||
reject(err);
|
||
}
|
||
)
|
||
.catch(error => {
|
||
reject(error);
|
||
});
|
||
});
|
||
}
|
||
/** 使用 get HTTP Method 下载文件 */
|
||
export function getDownloadFile(url, params, name) {
|
||
NProgress.start();
|
||
return new Promise((resolve, reject) => {
|
||
bmsAxios
|
||
.get(url, {
|
||
params: {
|
||
...params,
|
||
params: params
|
||
},
|
||
responseType: "blob"
|
||
})
|
||
.then(response => {
|
||
//确定最终文件名
|
||
const fileNameHeader = "x-suggested-filename";
|
||
let suggestedFileName = response.headers[fileNameHeader] || name;
|
||
if (suggestedFileName)
|
||
suggestedFileName = decodeURIComponent(suggestedFileName);
|
||
const effectiveFileName =
|
||
suggestedFileName === undefined ? "untitled" : suggestedFileName;
|
||
|
||
//长度为零给出提示,扔出错误
|
||
if (response.data.size == 0) throw new Error("文件长度为0");
|
||
|
||
//返回json,进行解析,获取Message,扔出错误
|
||
if (response.data.type == "application/json") {
|
||
let reader = new FileReader();
|
||
reader.onload = function (event) {
|
||
var message = JSON.parse(event.target.result);
|
||
reject(new Error(message.Message)); //拒绝
|
||
};
|
||
reader.readAsText(response.data);
|
||
} else {
|
||
saveAs(response.data, effectiveFileName);
|
||
resolve(); //解决
|
||
}
|
||
})
|
||
.catch(e => reject(e)).finally(function () {
|
||
NProgress.done();
|
||
}); //拒绝
|
||
});
|
||
}
|
||
export function all(urlArr) { //并发请求
|
||
if (urlArr.length > 6) {
|
||
throw '当前不支持数量大于6个的并发请求';
|
||
}
|
||
return new Promise((resolve, reject) => {
|
||
axios.all(urlArr).then(
|
||
axios.spread((v0, v1, v2, v3, v4, v5) => {
|
||
let ret = {};
|
||
arguments.forEach((item, idx) => {
|
||
if (item)
|
||
ret[`ret${idx}`] = item
|
||
})
|
||
resolve(item);
|
||
}),
|
||
err => {
|
||
reject(err);
|
||
}
|
||
)
|
||
.catch(error => {
|
||
reject(error);
|
||
});
|
||
});
|
||
}
|
||
|
||
export function axiosHttp(url, params, type = 'get') {
|
||
return new Promise((resolve, reject) => {
|
||
axios[type](url, { params: params }).then(
|
||
response => {
|
||
resolve(response.data);
|
||
},
|
||
err => {
|
||
reject(err);
|
||
}
|
||
).catch(error => {
|
||
reject(error);
|
||
});
|
||
});
|
||
}
|
||
function removeNullAndUndefinedProperty(model) {//移除对象中值为null、undefined的属性
|
||
if (model) {
|
||
for (let key in model) {
|
||
if (model[key] === null || typeof (model[key]) === 'undefined') {
|
||
delete model[key]
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
function createFileInput(accept, onSelect) {
|
||
var lastFileInput = document.getElementById("f1_id");
|
||
if (lastFileInput != null) {
|
||
document.body.removeChild(lastFileInput);
|
||
}
|
||
lastFileInput = document.createElement("input");
|
||
lastFileInput.type = "file";
|
||
lastFileInput.name = "f1";
|
||
lastFileInput.id = "f1_id";
|
||
accept && (lastFileInput.accept = accept);
|
||
lastFileInput.setAttribute("style", "display:none;");
|
||
document.body.appendChild(lastFileInput);
|
||
lastFileInput.onchange = function (e) {
|
||
var f = lastFileInput.files[0];
|
||
onSelect && onSelect(f)
|
||
}
|
||
return lastFileInput;
|
||
}
|
||
export function getUuid(length) {
|
||
return Number(Math.random().toString().substr(3, length) + Date.now()).toString(36);
|
||
}
|
||
|
||
//通过axios上传文件
|
||
export function upload(url, uconfig) {
|
||
var uconfig = uconfig || {};
|
||
var params = uconfig.params || {};
|
||
var accept = uconfig.accept || "image/gif, image/jpeg,image/jpg,image/png,image/*";
|
||
var onProgress = uconfig.onProgress || function () { };
|
||
var onStart = uconfig.onStart || function () { };
|
||
var uuid = uconfig.uuid || getUuid(10);
|
||
let config = {
|
||
headers: {
|
||
"Content-Type": "multipart/form-data",
|
||
"token":getUserToken(),
|
||
"sid":0
|
||
},
|
||
transformRequest: [function (data) {
|
||
return data
|
||
}],
|
||
onUploadProgress: e => {
|
||
var completeProgress = ((e.loaded / e.total * 100) | 0);
|
||
onProgress && onProgress(uuid, completeProgress);
|
||
console.log("onUploadProgress:" + completeProgress);
|
||
}
|
||
}
|
||
let formData = new FormData();
|
||
for (let key of Object.keys(params)) {
|
||
formData.append(key, params[key] !== null ? params[key] : '')
|
||
}
|
||
return new Promise((resolve, reject) => {
|
||
var lastFileInput = createFileInput(accept, file => {
|
||
if (!file)
|
||
reject("没有选择文件")
|
||
formData.append(file.name, file);
|
||
onStart && onStart(uuid, file);
|
||
|
||
var uploadAxios = axios.create({
|
||
// withCredentials: true,
|
||
baseURL: http.baseURL
|
||
});
|
||
uploadAxios.post(url, formData, config).then(
|
||
response => { resolve(response.data) },
|
||
err => { reject(err) }
|
||
).catch(error => { reject(error) })
|
||
})
|
||
lastFileInput.click();
|
||
});
|
||
}
|
||
export default {
|
||
baseURL: http.baseURL,
|
||
get,
|
||
post,
|
||
del,
|
||
put,
|
||
upload,//:httpfile.upload,
|
||
getDownloadFile,
|
||
all(urlArr) { //并发请求
|
||
return all(urlArr);
|
||
}
|
||
};
|