tg-turing
Version:
turing components
320 lines (275 loc) • 9.19 kB
JavaScript
import axios from 'axios'
// import moment from 'moment'
// const UA = navigator.userAgent.toLowerCase()
function serialize(data) {
if (!data) return '';
var pairs = [], value;
for (var name in data) {
if (!data.hasOwnProperty(name)) continue;
if (typeof data[name] === 'function') continue;
value = String(data[name]);
name = encodeURI(name);
value = encodeURI(value);
pairs.push(name + '=' + value);
}
if (pairs.length) {
return pairs.join('&');
} else {
return ''
}
}
// function getApi (name) {
// return api[name] || name
// }
let utils = {};
/**
* @method Post
* @description post请求
* @param {String} url - 请求地址,可以是api中定义的名称,或者具体的url地址
* @param {Object} data - 请求参数
* @param {*} config - 请求配置,详见axios文档 [https://github.com/mzabriskie/axios]
*/
utils.Post = (url, data = null, config = {}) => {
return axios({
method: 'post',
url: url,
data: data,
withCredentials: true,
headers: {
contentType: "application/json"
},
...config
// adapter: config.mockFlag ? () => MOCK_DATA[config.mock] : null
})
}
/**
* @method Get
* @description get请求, 判断运行环境为今日校园时,使用原生壳子提供的get方法(此方法可以解决跨域问题);若运行环境不是今日校园,则使用axios的get请求方法
* @param {String} url - 请求地址,可以是api中定义的名称,或者具体的url地址
* @param {Object} data - 请求参数
* @param {*} config - 运行环境是今日校园时,此参数为header参数;运行环境不是今日校园时,此参数为请求配置,详见axios文档 [https://github.com/mzabriskie/axios];
*/
utils.Get = (url, data = null, config = {}) => {
return axios({
method: 'get',
url: url + (url.indexOf("?") > -1 ? "&" : "?") + serialize(data),
...config
})
}
utils.Delete = (url, data = null, config = {}) => {
return axios({
method: 'delete',
url: url,
params: serialize(data),
...config
})
}
utils.getUrlParam = function (name) {
if (name === undefined) {
var url = location.search; //获取url中"?"符后的字串
var theRequest = new Object();
if (url.indexOf("?") != -1) {
var str = url.substr(1);
var strs = str.split("&");
for(var i = 0; i < strs.length; i ++) {
theRequest[strs[i].split("=")[0]]=decodeURIComponent(strs[i].split("=")[1]);
}
}
return theRequest;
} else {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象
var r = window.location.search.substr(1).match(reg); //匹配目标参数
if (r != null) return decodeURIComponent(r[2]); return null; //返回参数值
}
}
utils.setFullUrl = function (url, prefix) {
if ([".", "/"].indexOf(url.substring(0, 1)) > -1) {
return prefix + url;
} else {
return url;
}
}
utils.getContextPath = function(isFullPath) {
var pathName = window.location.pathname;
var index = pathName.substr(1).indexOf("/");
var result = pathName.substr(0,index+1);
if (isFullPath === false) {
return result;
} else {
return window.location.protocol + "//" + window.location.host + result;
}
}
utils.cleanProps = function(data) {
for(let prop in data) {
if (data[prop] === undefined || data[prop] === null || data[prop] === "") {
delete data[prop];
}
}
return data;
}
utils.toTreeData = function (data, parent_id, options) {
let opt = options || {ukey:"id", pkey:'parent_id', toCKey:'children'}
let tree = [];
let temp;
let count = data.length;
for(let i=0; i<count; i++){
if(!data[i][opt.pkey] && data[i][opt.pkey] !== 0){
tree.push(data[i]);
utils.addChildToTreeData(data, data[i], opt);
}
}
// for (var i = 0; i < data.length; i++) {
// if (data[i][opt.pkey] == parent_id || data[i][opt.ukey] === data[i][opt.pkey]) {
// var obj = data[i];
// temp = utils.toTreeData(data, data[i][opt.ukey], opt);
// if (temp.length > 0) {
// obj[opt.toCKey] = temp;
// }
// tree.push(obj);
// }
// }
return tree;
}
utils.addChildToTreeData = function (allData, parentData, opt) {
let parent_id = parentData[opt.ukey];
let count = allData.length;
for(let i=0; i<count; i++){
if(allData[i][opt.pkey] === parent_id){
if(!parentData[opt.toCKey]){
parentData[opt.toCKey] = [];
}
parentData[opt.toCKey].push(allData[i]);
utils.addChildToTreeData(allData, allData[i], opt);
}
}
}
//---extend
var hasOwn = Object.prototype.hasOwnProperty;
var toStr = Object.prototype.toString;
var isArray = function isArray(arr) {
if (typeof Array.isArray === 'function') {
return Array.isArray(arr);
}
return toStr.call(arr) === '[object Array]';
};
var isPlainObject = function isPlainObject(obj) {
if (!obj || toStr.call(obj) !== '[object Object]') {
return false;
}
var hasOwnConstructor = hasOwn.call(obj, 'constructor');
var hasIsPrototypeOf = obj.constructor && obj.constructor.prototype && hasOwn.call(obj.constructor.prototype, 'isPrototypeOf');
// Not own constructor property must be Object
if (obj.constructor && !hasOwnConstructor && !hasIsPrototypeOf) {
return false;
}
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.
var key;
for (key in obj) { /**/ }
return typeof key === 'undefined' || hasOwn.call(obj, key);
};
utils.extend = function extend() {
var options, name, src, copy, copyIsArray, clone;
var target = arguments[0];
var i = 1;
var length = arguments.length;
var deep = false;
// Handle a deep copy situation
if (typeof target === 'boolean') {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
if (target == null || (typeof target !== 'object' && typeof target !== 'function')) {
target = {};
}
for (; i < length; ++i) {
options = arguments[i];
// Only deal with non-null/undefined values
if (options != null) {
// Extend the base object
for (name in options) {
src = target[name];
copy = options[name];
// Prevent never-ending loop
if (target !== copy) {
// Recurse if we're merging plain objects or arrays
if (deep && copy && (isPlainObject(copy) || (copyIsArray = isArray(copy)))) {
if (copyIsArray) {
copyIsArray = false;
clone = src && isArray(src) ? src : [];
} else {
clone = src && isPlainObject(src) ? src : {};
}
// Never move original objects, clone them
target[name] = extend(deep, clone, copy);
// Don't bring in undefined values
} else if (typeof copy !== 'undefined') {
target[name] = copy;
}
}
}
}
}
// Return the modified object
return target;
};
/**
* 向父页面发送消息
* @param data
* @param data.type {string} 要发送的message类型
* @param data.data {object} 要发送的数据
*/
utils.sendMessageToParent = function (data) {
var type = data.type;
var sendData = data.data;
var guid = _createGuid();
guid = '_send_message_flag_'+guid;
//在当前页面中添加标识
window[guid] = guid;
var href = window.location.href;
//将标识和链接地址发给父页面
sendData['_send_message_href_'] = href;
sendData['_send_message_flag_'] = guid;
parent.postMessage({
type: type,
data: sendData
},'*');
};
// /**
// * 向父页面发送消息
// * @param data
// * @param data.container {selector} 页面容器
// */
// utils.sendMessageToResetCardHeight = function (data) {
// var pageContainerSelector = data.container;
// var container = document.querySelector(pageContainerSelector);
// var height = 0;
// if(container){
// height = container.scrollHeight;
// }else{
// return;
// }
// var sendData = {};
// var guid = _createGuid();
// guid = '_send_message_flag_'+guid;
// //在当前页面中添加标识
// window[guid] = guid;
// var href = window.location.href;
// //将标识和链接地址发给父页面
// sendData['_send_message_href_'] = href;
// sendData['_send_message_flag_'] = guid;
// sendData['height'] = height;
// parent.postMessage({
// type: 'portals-card-height-reset',
// data: sendData
// },'*');
// };
function _createGuid() {
var S4 = function() {
return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
};
return (S4() + S4() + "_" + S4() + "_" + S4() + "_" + S4() + "_" + S4() + S4() + S4());
}
export default utils;