You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

299 lines
6.2 KiB

import axios from "axios";
import jsonp from "jsonp";
// axios.defaults.withCredentials = true;
const $globalRequestUrl = (params) => {
const { VITE_BASE_URL } = import.meta.env;
const baseUrl = VITE_BASE_URL;
return `${params.baseUrl ? params.baseUrl : baseUrl}${params.url}`;
};
function extend(dst) {
for (let i = 1, ii = arguments.length; i < ii; i++) {
let obj = arguments[i];
if (obj) {
let keys = Object.keys(obj);
for (let j = 0, jj = keys.length; j < jj; j++) {
let key = keys[j];
dst[key] = obj[key];
}
}
}
return dst;
}
/**
* @description:jsonp url拼接参数
* @param {Object} data
* @returns {String}
*/
const paramJsonp = (data) => {
let url = "";
for (var k in data) {
if (Object.property.hasOwnProperty.call(data, k)) {
let value = data[k] !== undefined ? data[k] : "";
url += "&" + k + "=" + encodeURIComponent(value);
}
}
return url ? url.substring(1) : "";
};
/**
* @description:jsonp
* @param {String} url
* @param {Object} data
* @param {Object} option
*/
const getJsonpData = (url, data, option) => {
url += (url.indexOf("?") < 0 ? "?" : "&") + paramJsonp(data);
return new Promise((resolve, reject) => {
jsonp(url, option, (err, data) => {
if (!err) {
resolve(data);
} else {
reject(err);
}
});
});
};
/**
* @description:post
* @param {Object} config
*/
const post = (config) => {
return new Promise((resolve, reject) => {
extend(config, {
method: "post",
});
axios(config).then(
(rep) => {
resolve(rep);
},
(error) => {
reject(error);
}
);
});
};
/**
* @description:PUT
* @param {Object} config
*/
const put = (config) => {
return new Promise((resolve, reject) => {
extend(config, {
method: "PUT",
});
axios(config).then(
(rep) => {
resolve(rep);
},
(error) => {
reject(error);
}
);
});
};
/**
* @description:get
* @param {Object} config
*/
const get = (config) => {
return new Promise((resolve, reject) => {
extend(config, {
method: "GET",
});
axios(config)
.then((rep) => {
resolve(rep);
})
.catch((error) => {
reject(error);
});
});
};
/**
* @description:delete
* @param {Object} config
*/
const Delete = (config) => {
return new Promise((resolve, reject) => {
extend(config, {
method: "DELETE",
});
axios(config).then(
(rep) => {
resolve(rep);
},
(error) => {
reject(error);
}
);
});
};
/**
* @description: handlePostFormdata
* @param {Object} params
*/
const handlePostFormdata = (params) => {
let fd = new FormData();
for (let i in params) {
if (params[i] instanceof Array) {
for (let j = 0; j < params[i].length; j++) {
for (let k in params[i][j]) {
if (Object.property.hasOwnProperty.call(params[i][j], k)) {
let key = "";
let val = "";
key = i + "[" + j + "]" + "." + k;
val = params[i][j][k];
fd.append(key, val);
}
}
}
} else {
fd.append(i, params[i]);
}
}
return fd;
};
/**
* @description: handlePostFormURLENCODED
* @param {Object} params
*/
const handlePostFormURLENCODED = (params) => {
let str = "";
for (let i in params) {
if (Object.property.hasOwnProperty.call(params, i)) {
str = str + i + "=" + params[i];
str += "&";
}
}
str = str.slice(0, str.length - 1);
return str;
};
/**
* @description: handlePutFormData
* @param {Object} params
*/
const handlePutFormData = (params, option) => {
let headers = { "Content-Type": "application/json;charset=UTF-8" };
if (option.method === "PUT_FORDATA") {
let formData = new FormData();
Object.keys(params).forEach((key) => {
formData.append(key, params[key]);
});
headers = { "Content-Type": "application/x-www-form-urlencoded" };
params = formData;
}
return { headers, params };
};
const $globalRequest = (url = "", params = {}, option = {}) => {
try {
const { method } = option;
const methodStr =
typeof method === "string" ? method.toUpperCase() : method;
option.method = methodStr;
let config = extend({ method: "JSONP" }, option);
let reqData = {};
if (["POST_FORMDATA"].includes(methodStr)) {
const fd = handlePostFormdata(params);
reqData = {
url: url,
headers: {
"Content-Type": "multipart/form-data",
},
data: fd,
};
config = extend(config, reqData);
return post(config).then((res) => {
return res;
});
} else if (["POST_FORM_URLENCODED"].includes(methodStr)) {
const str = handlePostFormURLENCODED(params);
reqData = {
url: url,
headers: {
"Content-Type": "application/x-www-form-urlencoded;charset=UTF-8",
},
data: str,
};
config = extend(config, reqData);
return post(config).then((res) => {
return res;
});
} else if (["POST", "POST_JSON"].includes(methodStr)) {
if (methodStr === "POST_JSON") {
params = JSON.stringify(params);
}
reqData = {
url: url,
headers: {
"Content-Type": "application/json;charset=UTF-8",
},
data: params,
};
config = extend(config, reqData);
return post(config).then((res) => {
return res;
});
} else if (["PUT", "PUT_FORDATA"].includes(methodStr)) {
const { headers, params } = handlePutFormData(params, option);
reqData = {
url: url,
headers: headers,
data: params,
};
config = extend(config, reqData);
return put(config).then((res) => {
return res;
});
} else if (["DELETE"].includes(methodStr)) {
reqData = {
url: url,
headers: {
"Content-Type": "application/json",
},
params: params,
};
config = extend(config, reqData);
return Delete(config).then((res) => {
return res;
});
} else if (["GET"].includes(methodStr)) {
reqData = {
url: url,
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
params: params,
};
config = extend(config, reqData);
return get(config).then((res) => {
return res;
});
} else if (["JSONP"].includes(methodStr)) {
return getJsonpData(url, params, null).then((res) => {
return res;
});
} else {
console.error("请求方式有误,请检查您的请求方式");
return;
}
} catch (error) {
console.error("请求方式代码异常", error);
}
};
export { $globalRequestUrl, $globalRequest };