Files
juipvue/src/extend/api/api.js
wanyongkang 511a52be0c 提现
2020-10-22 11:19:17 +08:00

345 lines
11 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 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);
}
};