初始提交

This commit is contained in:
wanyongkang
2020-10-04 10:30:08 +08:00
commit 3193537726
441 changed files with 171716 additions and 0 deletions

338
src/extend/api/api.js Normal file
View File

@@ -0,0 +1,338 @@
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 == 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);
}
};

224
src/extend/api/httpfile.js Normal file
View File

@@ -0,0 +1,224 @@
function then(onthen) {
this._then_callback = function (p) { };
this._error_callback = function (p) { };
this._on_then = onthen;
}
function JsFormData() {
this.boundry = "";
this.formName = "";
this.formValue = "";
}
JsFormData.prototype.constructor = JsFormData;
JsFormData.prototype.getFormString = function () {
return "--" + this.boundry + "\r\nContent-Disposition:form-data; name=" + this.formName + "\r\n\r\n" + this.formValue + "\r\n";
};
JsFormData.prototype.toString = function () {
return this.getFormString();
};
function JsFileFormData() {
this.formFileName = "";
this.contentType = "";
JsFormData.call(this);
}
JsFileFormData.prototype = new JsFileFormData();
JsFileFormData.prototype.constructor = JsFileFormData;
JsFileFormData.prototype.getFormString = function () {
return "--" + this.boundry + "\r\nContent-Disposition:form-data; name=" + this.formName + "; filename=" + this.formFileName + "\r\nContent-Type: " + this.contentType + "\r\n\r\n" + this.formValue + "\r\n";
};
JsFileFormData.prototype.toString = function () {
return this.getFormString();
};
then.prototype.constructor = then;
then.prototype = new then();
then.prototype.then = function (p) {
this._then_callback = p;
this._on_then();
return this;
};
then.prototype.error = function (p) {
this._error_callback = p;
return this;
}
then.prototype.invoke_then = function (p) {
this._then_callback(p);
return this;
}
then.prototype.invoke_error = function (p) {
this._error_callback(p);
return this;
}
function JsHttpHelper() {
this.formData = new Array();
}
JsHttpHelper.prototype.boundry = Math.random().toString().substr(2),
JsHttpHelper.prototype.addFormValue = function (key, value) {
var f = new JsFormData();
f.formName = key;
f.formValue = value;
f.boundry = this.boundry;
this.formData.push(f);
};
JsHttpHelper.prototype.addFileFormValue = function (key, fname, fcontent) {
var f = new JsFileFormData();
f.formName = key;
f.formValue = fcontent;
f.contentType = "application/octet-stream";
f.formFileName = fname;
f.boundry = this.boundry;
this.formData.push(f);
};
JsHttpHelper.prototype.postMultipartFormData = function (url, postCallBack, updateProgress, errorFunc) {
var xhr = new XMLHttpRequest();
// xhr.onloadend = function (e) {
// if (e.total > 0)
// postCallBack(e, xhr);
// };
xhr.onload = function (e) {
if((e.status >= 200 && e.status < 300) || e.status == 304){
postCallBack(e, xhr);
}
};
xhr.onabort = errorFunc;
xhr.onerror = errorFunc;
xhr.ontimeout = errorFunc;
if (updateProgress != null) {
xhr.upload.onprogress = function (e) {
if (e.lengthComputable) {
updateProgress((e.loaded / e.total) * 100);
}
}
};
xhr.open("POST", url, true);
xhr.setRequestHeader("content-type", "multipart/form-data; charset=utf-8; boundary=" + this.boundry);
var postBody = "";
// console.log(this.formData);
for (var s = 0; s < this.formData.length; s++) {
postBody += this.formData[s].getFormString();
}
postBody += "--" + this.boundry + "--\r\n";
xhr.send(postBody);
this.formData = new Array();
console.log(this.formData);
};
JsHttpHelper.prototype.constructor = JsHttpHelper;
var lastFileInput;
function compress_image(base64Image, callback, wd) {
if (wd == null || wd == undefined) {
wd = 200;
}
var image = document.createElement("img");
image.onload = function () {
var square = wd;
var canvas = document.createElement('canvas');
var HoverW = this.height / this.width;
var hNew = wd * HoverW;
var wNew = wd;
canvas.width = wNew;
canvas.height = hNew;
var context = canvas.getContext('2d');
context.clearRect(0, 0, canvas.width, canvas.height);
context.drawImage(this, 0, 0, this.width, this.height, 0, 0, wNew, hNew);
var data = canvas.toDataURL('image/jpeg');
//console.log("compress_image raw " + base64Image.length + " now " + data.length + " decrease rate " + (base64Image.length - data.length) / base64Image.length);
callback(data);
};
image.setAttribute('src', base64Image);
}
function read_file_base64String(funcReadOver, funcReadOutoffLimit, sizeLimit) {
if (sizeLimit == null || sizeLimit == undefined) {
sizeLimit = 200;
}
lastFileInput = document.getElementById("f1_id");
if (lastFileInput != null) {
document.body.removeChild(lastFileInput);
lastFileInput = null;
}
if (lastFileInput == null) {
lastFileInput = document.createElement("input");
lastFileInput.type = "file";
lastFileInput.name = "f1";
lastFileInput.id = "f1_id";
lastFileInput.setAttribute("style", "display:none;");
document.body.appendChild(lastFileInput);
}
lastFileInput.onchange = null;
lastFileInput.onchange = function (e) {
var f = lastFileInput.files[0];
var reader = new FileReader();
var sz = ((f.size / 1024) / 1024);
//console.log(sz + "m");
reader.onloadend = function (e) {
compress_image(e.target.result, function (bs64) {
funcReadOver(bs64);
}, sizeLimit);
//1M == 1398211
};
reader.readAsDataURL(f);
};
lastFileInput.click();
}
function upload(url,func, keyValues, isfile, accept) {
// var proc = progressBar.start();
lastFileInput = document.getElementById("f1_id");
if (lastFileInput != null) {
document.body.removeChild(lastFileInput);
lastFileInput = null;
}
if (lastFileInput == null) {
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 = null;
lastFileInput.onchange = function (e) {
var f = lastFileInput.files[0];
var reader = new FileReader();
reader.onloadend = function (e) {
var sz = ((f.size / 1024) / 1024);
if (isfile != undefined && isfile!=='') {
var http = new JsHttpHelper();
http.addFileFormValue("f2", f.name, e.target.result);
if(keyValues){
for (var key in keyValues) {
http.addFormValue(keyValues[key].key, keyValues[key].value);
}
}
http.postMultipartFormData(url, func, null, function (e, xhr) {
});
} else {
compress_image(e.target.result, function (bs64) {
var http = new JsHttpHelper();
http.addFileFormValue("f2", f.name, bs64);
if(keyValues){
for (var key in keyValues) {
http.addFormValue(keyValues[key].key, keyValues[key].value);
}
}
http.postMultipartFormData(url, func, null, function (e, xhr) {
});
});
}
//1M == 1398211
};
reader.readAsDataURL(f);
};
lastFileInput.click();
}
export default{
compress_image,
read_file_base64String,
upload
}

23
src/extend/api/httpurl.js Normal file
View File

@@ -0,0 +1,23 @@
//npm run build -- dev
//npm run build -- test
//npm run build -- prod
const devUrlNew ='http://localhost:5000/api/'
const testUrlNew = "http://localhost:5000/api/"
const prodUrlNew ="http://www.juip.com/api/";// "http://api.yk.hncore.net/api/"/"http://hapi.hncore.net/api"
var baseURL= devUrlNew
switch (process.env.NODE_ENV) {
case "development":
baseURL =devUrlNew
break;
case "test":
baseURL =testUrlNew
break;
case "production":
baseURL = prodUrlNew
break;
}
export {
baseURL
};