export const Mixin = Base => class extends Base {
static contextTypes = {
FH: PropTypes.func,
PH: PropTypes.func,
};
constructor() {
super();
this.name = 'zhanglei';
this.timer = null;
}
debounce(callback) {
if (this.timer) {
clearTimeout(this.timer);
this.timer = null;
}
this.timer = setTimeout(callback, 500)
};
mapListOptions(data, name = 'name') {
if (!data) {
throw new Error('数据不正确');
}
return data.map(item => {
return (
<Option key={item.id} value={item.id}>{item[name]}</Option>
)
})
};
getParam(params) {
const url = params.split("&");
if (!url) return !1;
const obj = url.map(item => ({
[item.split('=')[0]]: item.split('=')[1]
})).reduce((prev, next) => ({ ...prev, ...next }));
return obj;
};
compress(file) {
return new Promise((resolve) => {
if (typeof (FileReader) === 'undefined') {
throw new Error("当前浏览器内核不支持base64图标压缩");
} else {
try {
const reader = new FileReader();
reader.onload = e => {
const image = new Image();
image.src = e.target.result;
image.onload = function () {
resolve(createCanvas(this));
};
};
reader.readAsDataURL(file);
} catch (e) {
throw new Error("压缩失败!");
}
}
});
function createCanvas(_this) {
const square = 600;
const canvas = document.createElement('canvas');
const context = canvas.getContext('2d');
let imageWidth;
let imageHeight;
let offsetX = 0;
let offsetY = 0;
if (_this.width > _this.height) {
imageWidth = Math.round(square * _this.width / _this.height);
imageHeight = square;
} else {
imageHeight = Math.round(square * _this.height / _this.width);
imageWidth = square;
}
canvas.width = imageWidth;
canvas.height = imageHeight;
context.clearRect(0, 0, imageWidth, imageHeight);
context.drawImage(_this, offsetX, offsetY, imageWidth, imageHeight);
return canvas.toDataURL('image/jpeg');
}
};
escapeHTML(t) {
return t.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/ /g, " ").replace(/"/g, """).replace(/'/g, "'")
};
isBase64(file, fn) {
const reader = new FileReader();
reader.onload = e => {
fn && fn(e.target.result);
};
reader.onerror = e => {
throw new Error(e)
};
reader.readAsDataURL(file);
};
setCookie(c_name, value, expiredays) {
const exdate = new Date();
exdate.setDate(exdate.getDate() + expiredays);
document.cookie = `${c_name}=${value};domain=.paic.com.cn;`/*+exdate.toGMTString()*/
};
getCookie(a) {
const b = document.cookie.match(new RegExp(`(^| )${a}=([^;]*)(;|$)`));
return null !== b ? unescape(b[2]) : null
};
deleteCookie(a) {
const b = this.getCookie(a);
null !== b && this.setCookie(a, "", -1)
};
// isURL(t) {
// return /^(((http[s]?:\/\/)|(ftp:\/\/))?([\w-]+\.)+(com|edu|gov|int|mil|net|org|biz|info|pro|name|museum|coop|aero|xxx|idv|al|dz|af|ar|ae|aw|om|az|eg|et|ie|ee|ad|ao|ai|ag|at|au|mo|bb|pg|bs|pk|py|ps|bh|pa|br|by|bm|bg|mp|bj|be|is|pr|ba|pl|bo|bz|bw|bt|bf|bi|bv|kp|gq|dk|de|tl|tp|tg|dm|do|ru|ec|er|fr|fo|pf|gf|tf|va|ph|fj|fi|cv|fk|gm|cg|cd|co|cr|gg|gd|gl|ge|cu|gp|gu|gy|kz|ht|kr|nl|an|hm|hn|ki|dj|kg|gn|gw|ca|gh|ga|kh|cz|zw|cm|qa|ky|km|ci|kw|cc|hr|ke|ck|lv|ls|la|lb|lt|lr|ly|li|re|lu|rw|ro|mg|im|mv|mt|mw|my|ml|mk|mh|mq|yt|mu|mr|us|um|as|vi|mn|ms|bd|pe|fm|mm|md|ma|mc|mz|mx|nr|np|ni|ne|ng|nu|no|nf|na|za|zq|aq|gs|eu|pw|pn|pt|jp|se|ch|sv|ws|yu|sl|sn|cy|sc|sa|cx|st|sh|kn|lc|sm|pm|vc|lk|sk|si|sj|sz|sd|sr|sb|so|tj|tw|th|tz|to|tc|tt|tn|tv|tr|tm|tk|wf|vu|gt|ve|bn|ug|ua|uy|uz|es|eh|gr|hk|sg|nc|nz|hu|sy|jm|am|ac|ye|iq|ir|il|it|in|id|uk|vg|io|jo|vn|zm|je|td|gi|cl|cf|cn)(:\d+)?(\/[^\s]*)?)$/.test(t)
// };
randomRange(start, end) {
return Math.floor(Math.random() * (end - start + 1)) + start;
};
countDown(e) {
const t = (new Date(e).getTime() - new Date().getTime()) / 1e3;
const n = parseInt(t / 3600 / 7.5, 10);
const a = parseInt(t / 60 / 60 % 7.5, 10);
const r = parseInt(t / 60 % 60, 10);
const o = parseInt(t % 60, 10);
const i = a < 10 ? `0${a}` : a;
const l = r < 10 ? `0${r}` : r;
const s = o < 10 ? `0${o}` : o;
return (n > 0 && `${n}天${i}小时${l}分钟${s}秒`) ||
(a > 0 && `${i}小时${l}分钟${s}秒`) ||
(r > 0 && `${l}分钟${s}秒`) ||
(o > 0 && `${s}秒`)
};
CheckDateTime(str) {
const reg = /^(\d+)-(\d{1,2})-(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/;
const r = str.match(reg);
if (r === null) { return; }
r[2] = r[2] - 1;
const d = new Date(r[1], r[2], r[3], r[4], r[5], r[6]);
if (d.getFullYear() === r[1] && d.getFullYear() !== r[1] && d.getMonth() !== r[2] && d.getDate() !== r[3] && d.getHours() !== r[4] && d.getMinutes() !== r[5] && d.getSeconds() !== r[6]) return !0;
};
circleFunction(e, t) {
return t.map(t => e[t] = e[t].bind(e))
};
formatTime(e, d = 7.5,type =1) {
const { PH } = this.context
const t = parseInt(e/type, 10);
const n = parseInt(t / 3600 / d, 10);
const a = parseInt(t / 3600 - d * n, 10);
const r = parseInt(t / 60 - 60 * a - d * n * 60, 10);
const o = parseInt(t - 60 * r - 3600 * a - d * n * 3600, 10);
const i = a < 10 ? `0${a}` : a;
const l = r < 10 ? `0${r}` : r;
const s = o < 10 ? `0${o}` : o;
return (n > 0 && `${n}${PH('app.day')}${i}${PH('app.hour')}${l}${PH('app.minute')}${s}${PH('app.seconds')}`) ||
(a > 0 && `${i}${PH('app.hour')}${l}${PH('app.minute')}${s}${PH('app.seconds')}`) ||
(r > 0 && `${l}${PH('app.minute')}${s}${PH('app.seconds')}`) ||
(o > 0 && `${s}${PH('app.seconds')}`)
};
getObjKeys(obj) {
if (Object.keys) return Object.keys(obj);
const t = [];
for (const n in obj) Object.prototype.hasOwnProperty.call(obj, n) && t.push(n);
return t
};
getDom(element) {
const chartName = element.charAt(0);
switch (chartName) {
case '.': return document.querySelector(`${element}`);
case '#': return document.getElementsByName(`${element}`);
default: return document.getElementsByTagName(`${element}`);
}
};
addLocalStorage(...args) {
if (args.length !== 2) throw new Error('格式不对');
if (!window.localStorage) throw new Error('不支持此方法');
(this.isObject(args[1]) || this.isArray(args[1])) ? localStorage.setItem(args[0], JSON.stringify(args[1])) : localStorage.setItem(args[0], args[1]);
};
addSessionStorage(...args) {
if (args.length !== 2) throw new Error('格式不对');
if (!window.sessionStorage) throw new Error('不支持此方法');
(this.isObject(args[1]) || this.isArray(args[1])) ? sessionStorage.setItem(args[0], JSON.stringify(args[1])) : sessionStorage.setItem(args[0], args[1]);
};
addManyLocal(obj) {
if (!window.localStorage) throw new Error('不支持此方法');
this.getObjKeys(obj).forEach(k => {
return this.addLocalStorage(k, obj[k])
})
};
getLocalStorage(key) {
if (!window.localStorage) throw new Error("不支持此方法");
const t = localStorage.getItem(key);
try {
if (JSON.parse(t) !== Infinity) {
return JSON.parse(t)
}
throw new Error('')
} catch (e) {
return t;
}
};
getSessionStorage(key) {
if (!window.sessionStorage) throw new Error("不支持此方法");
const t = sessionStorage.getItem(key);
try {
if (JSON.parse(t) !== Infinity) {
return JSON.parse(t)
}
throw new Error('')
} catch (e) {
return t;
}
};
removeLocalStorage(key) {
if (!window.localStorage) throw new Error("不支持此方法");
localStorage.removeItem(key)
};
removeMoreStorage(arr) {
if (arr instanceof Array) {
arr.forEach(item => localStorage.removeItem(item));
}
}
clearLocalStorage() {
if (!window.localStorage) throw new Error("不支持此方法");
localStorage.clear()
};
clearSessionStorage() {
if (!window.sessionStorage) throw new Error("不支持此方法");
sessionStorage.clear()
};
isString(str) {
return typeof str === 'string';
};
getStrLength(str) {
let len = 0;
str.split('').forEach(item => {
item.charCodeAt(0) < 256 ? len++ : len += 2
});
return len
};
isArray(e) {
return "[object Array]" === Object.prototype.toString.call(e)
};
arrayRepetition(array = []) {
return [...new Set(array)];
};
arrayUnico(array1, array2) {
return new Set([...array1, ...array2]);
};
arrayIntersect(array1, array2) {
return new Set(array1.filter(item => array2.has(item)));
};
arrayDifference(array1, array2) {
return new Set(array1.filter(item => !array2.has(item)));
};
arrayHasObj(arr, id) {
return arr.some(item => item.id === id);
};
unEmptyArray(arr) {
return arr && arr.length > 0;
};
isObject(e) {
return "[object Object]" === Object.prototype.toString.call(e)
};
isEmptyObj(obj) {
for (const t in obj) return !1;
return !0
};
isEmptyObjContent(obj) {
return !Object.keys(obj).some(item => obj[item] && obj[item].length > 0)
};
cloneObj(obj) {
let str = null;
let newObj = {};
if (typeof obj !== 'object') {
return;
} else if (window.JSON) {
str = JSON.stringify(obj);
newObj = JSON.parse(str);
} else {
for (let a in obj) {
newObj[a] = this.cloneObj(obj[a]);
}
}
return newObj;
};
clone(obj) {
if (null === obj || "object" !== typeof obj) return obj;
// Handle Date
if (obj instanceof Date) {
const copy = new Date();
copy.setTime(obj.getTime());
return copy;
}
// Handle Array
if (obj instanceof Array) {
const copy = [];
for (let i = 0; i < obj.length; ++i) {
copy[i] = this.clone(obj[i]);
}
return copy;
}
// Handle Object
if (obj instanceof Object) {
const copy = {};
for (let attr in obj) {
if (obj.hasOwnProperty(attr)) copy[attr] = this.clone(obj[attr]);
}
return copy;
}
throw new Error("不支持拷贝");
};
removeHtml(str) {
return str.replace(/<[^>]+>/g, "")
};
removeStyle(str) {
return str.replace(/style="[^"]*"/g, "")
};
removeSpace(str) {
if (typeof str === 'string') {
return str.replace(/^( |\s)+|( |\s)+$/g, '')
}
};
reCn(str) {
return str.replace(/([\u4E00-\u9FA5]|[\uFE30-\uFFA0])+/gi, '-');
};
addEvent(e, t, n) {
e.addEventListener ? e.addEventListener(t, n, !1) : e.attachEvent(`on${t}`, n)
};
removeEvent(e, t, n) {
e.removeEventListener ? e.removeEventListener(t, n, !1) : e.detachEvent(`on${t}`, n)
};
//动画
zhangleiAnimate(dom, m, t, d) {
dom.style.cssText = `-webkit-animation:${m} ${t}s ease-in-out 1 ${d}s alternate forwards`;
dom.style.cssText = `-moz-animation:${m} ${t}s ease-in-out 1 ${d}s alternate forwards`;
dom.style.cssText = `-o-animation:${m} ${t}s ease-in-out 1 ${d}s alternate forwards`;
dom.style.cssText = `animation:${m} ${t}s ease-in-out 1 ${d}s alternate forwards`;
};
jsonToStr(json) {
if (typeof json === 'object') {
return JSON && JSON.stringify(json);
}
};
strToJson(str) {
if ("string" === typeof str) return JSON && JSON.parse(str)
};
ucase(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
};
compareTime(stime, etime) {
const t1 = new Date(stime);
const t2 = new Date(etime);
return Date.parse(t2) - Date.parse(t1);
};
stopBubble(e) {
const t = e || window.event;
return t.stopPropagation ? t.stopPropagation() : t.cancelBubble = !0
};
upperCase(str) {
return str && str.toUpperCase();
};
isCurrentDay(time) {
const y = time.getFullYear();
const month = time.getMonth() + 1;
const day = time.getDate();
const m = month < 10 ? `0${month}` : month;
const d = day < 10 ? `0${day}` : day;
return `${y}-${m}-${d}`
};
isCurrentDayOne(time) {
const y = time.getFullYear();
const month = time.getMonth() + 1;
const m = month < 10 ? `0${month}` : month;
return `${y}-${m}-01`
};
isCurrentTime(time) {
const y = time.getFullYear();
const month = time.getMonth() + 1;
const hour = time.getHours();
const min = time.getMinutes();
const sec = time.getSeconds();
const day = time.getDate();
const m = month < 10 ? `0${month}` : month;
const h = hour < 10 ? `0${hour}` : hour;
const mins = min < 10 ? `0${min}` : min;
const s = sec < 10 ? `0${sec}` : sec;
const d = day < 10 ? `0${day}` : day;
return `${y}-${m}-${d} ${h}:${mins}:${s}`
};
maxInArray(arr) {
return Math.max.apply(Math, arr);
};
minInArray(arr) {
return Math.min.apply(Math, arr)
};
sameArray(e) {
const n = e.sort();
return n.map((m, i, a) => a[i] === a[i + 1] && a[i])
};
createLink(href) {
let link = document.createElement('a');
link.target = '_blank';
link.href = href;
link.click();
};
mapSelect(data) {
return (value, name) => {
return data.map(e => {
return <Option key={e[value]} value={e[value]}>{e[name]}</Option>
});
}
};
}
interface FetchData {
reqUrl: string;
method?: string;
body?: any;
contentType?: string;
fetchType?: string;
}
export declare function getCookie(str: string): string;
export declare function deleteStorage(arr: string[]): void;
export declare function mapGetDataToStr(obj: object): void;
export declare function abortFetch(promise: Promise<any>): object;
export declare function getOnlineIfo(): object;
export declare function saveLoginInfor(): object;
export declare function makeCancelable(promise: Promise<any>): object;
export declare function switchDate(obj: object): object;
export declare function changeTableHead(userName:string, filterCall:object[], type:string, typeContent:string, typeConContent:string): Promise<any>;
export declare function getTableHead( columns:object[], type:string, typeContent:string, typeConContent:string): Promise<any>;
export declare type InitFunc = (props: object[]) => string[]
export declare class MapList {
static init: InitFunc
list(): JSX.Element
}
export declare function fetchData({
reqUrl,
method,
body,
contentType,
fetchType
}: FetchData): Promise<any>
export const fetchData = async ({ reqUrl, method = 'get', body, contentType, fetchType = 'json', cancelFunc, isCors = false }) => {
if (['get', 'delete'].includes(method.toLowerCase())) {
reqUrl += mapGetDataToStr(body);
body = undefined
}
if (Object.prototype.toString.call(body) !== "[object FormData]") {
contentType = 'application/json';
if (typeof body !== "string") {
body = JSON.stringify(body);
}
}
const headers = () => {
const other = {
'Accept-Language': isEnUS(window.location.hash) ? 'en-US' : 'zh-CN',
"Token": window.localStorage.token || getCookie('PASESSION') || "",
"Timezone": timezone.name()
}
if (Object.prototype.toString.call(body) !== "[object FormData]") {
return {
'Content-Type': contentType, ...other
}
} else {
return other
}
};
try {
const config = {
method: method,
headers: headers(),
credentials: 'include',
body: body,
}
if (isCors) {
config.mode = 'cors'
}
const response = await fetch(encodeURI(reqUrl), config)
const { status } = response;
if (status === 200 || status === 201) {
if (fetchType === 'file') {
fetchType = 'blob';
}
return response[fetchType]()
} else if (status === 401) {
if (!window.sessionStorage.lastRequestHref) {
window.sessionStorage.lastRequestHref = window.location.hash
}
message.error("未登录或登录超时!");
throw new Error("未登录或登录超时!");
} else {
console.error('错误信息:接口', reqUrl + ' | 状态码' + status);
}
} catch (e) {
console.error(e)
throw new Error("未登录或登录超时!");
}
}
export default fetchData;