import * as React from 'react';
import * as PropTypes from 'prop-types';
import ShopEmpty from '../common/empty/empty'
import CptCode from "./config";
declare global {
interface Window {
imgBaseUrl: string
}
}
class MUtil {
static daySecond = 24 * 60 * 60;
static hourSecond = 60 * 60;
/*
* 手机端:根据组件代码解析成相应的组件
* @params:
* type:组件代码
* data:组件参数
* */
static transInReactNode(data: any, type?: any) {
let ReactNode = null;
if (data && data.cptCode && data.cptType) {
let cptCode = data.cptCode;
let cptType = data.cptType;
let TagName = CptCode[cptCode][cptType];
if (TagName) {
ReactNode =
}
}
return ReactNode;
}
/*
* 判断参数是否为空
* */
static hasContent(data: any): boolean {
if (Object.prototype.toString.call(data) === '[object Array]') {
if (data.length > 0) {
return true;
}
}
if (Object.prototype.toString.call(data) === '[object Object]') {
if (Object.keys(data).length === 0) {
return false
} else {
return true
}
}
return false;
}
/*
* 判断是否是数组
* */
static isArray(data) {
if (Object.prototype.toString.call(data) === '[object Array]') {
return true;
}
return false;
}
/*
* 判断是否是空数组
* */
static isEmptyArray(data) {
if (this.isArray(data)) {
if (data.length == 0) {
return true;
}
}
return false;
}
/*
* 全局图片地址前缀
* */
static baseUrl(url) {
return url;
}
// 分,换算成元
static centTransformOut(num: any) {
let price = null;
num = parseFloat(num) / 100;
if (isNaN(num) || num < 0) {
price = 0.00;
} else {
price = num;
}
price = price.toFixed(2);
return price;
}
// 分,单位换算
static centChange(num: any) {
num = Number(num);
if (isNaN(num) || num < 0) {
num = 0;
}
let str = num.toString(), unit = "";
if (str.length >= 7 && str.length < 11) {
str = num / 1000000;
unit = "万"
} else if (str.length >= 11) {
str = num / 10000000000;
unit = "亿"
} else {
str = num / 100;
}
str = str.toFixed(2);
return {
str: str,
unit: unit
}
}
static initParams(data, source) {
let obj = {};
for (var key in source) {
if (key != 'content') {
obj[key] = source[key];
}
}
let newObj = Object.assign(obj, data);
return newObj;
}
static groupFixed(range, callback) {
let containers = document.getElementsByClassName('shop-tabs-container-left');
for (let i = 0; i < containers.length; i++) {
let el: any = containers[i];
let scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
let offset = el.offsetTop - scrollTop;
let wrapperEl = el.getElementsByClassName('shop-tabs-wrapper')[0];
//判断左侧分组列表是否固定到顶部
if (offset <= 0) {
wrapperEl.classList.remove('shop-tabs-absolute');
wrapperEl.classList.add('shop-tabs-fixed')
} else {
wrapperEl.classList.remove('shop-tabs-fixed');
wrapperEl.classList.remove('shop-tabs-absolute')
}
// 当前分组尾部距离顶部的距离小于左侧分组高度时,fix改成absolute
let totalHeight = el.offsetTop + el.clientHeight;
let remainHeight = totalHeight - scrollTop;
let letHeight = wrapperEl.clientHeight;
if (remainHeight <= letHeight) {
wrapperEl.classList.remove('shop-tabs-fixed');
wrapperEl.classList.add('shop-tabs-absolute')
}
// 页面滚动时左侧分组自动定位到当前商品分组
var topRange = 0;
if (range) {
topRange = range;
}
var panels = el.getElementsByClassName('shop-tabs-panel');
for (let j = 0; j < panels.length; j++) {
var panelItem = panels[j];
if (panelItem.offsetTop + el.offsetTop - topRange - scrollTop < 0 && panelItem.getElementsByClassName('shop-tabs-title').length > 0) {
if (callback) {
callback(j);
}
}
}
}
}
goTarget(target) {
var timer = null;
var lastPos = 0;
function goMove() {
var currentPosition = document.documentElement.scrollTop || document.body.scrollTop;
currentPosition = currentPosition;
if (lastPos == currentPosition) { //页面高度不够长,未滑动到指定位置的时候,已经滑动到底部了
window.scrollTo(0, target);
clearInterval(timer);
console.log('move to ' + target);
return;
}
lastPos = currentPosition;
if (Math.abs(currentPosition - target) < 20) {
window.scrollTo(0, target);
clearInterval(timer);
return;
}
if (currentPosition - target > 20) {
currentPosition -= 20;
window.scrollTo(0, currentPosition);
} else {
currentPosition += 20;
window.scrollTo(0, currentPosition);
}
}
timer = setInterval(goMove, 10);
}
/**
* DDD,*H,*M,*S
* @param timeInSecond
*/
static second2Date(timeInSecond):any{
let day: any = Math.floor(timeInSecond / MUtil.daySecond);
let remainInDay = timeInSecond - day * MUtil.daySecond;
let hour: any = Math.floor(remainInDay / MUtil.hourSecond);
let remainInHour = remainInDay - hour * MUtil.hourSecond;
let minute: any = Math.floor(remainInHour / 60);
let second: any = Math.floor(remainInHour - minute * 60);
if (isNaN(day) || day < 0) {
day = 0;
}
if (isNaN(hour) || hour < 0) {
hour = 0;
}
if (isNaN(minute) || minute < 0) {
minute = 0;
}
if (isNaN(second) || second < 0) {
second = 0;
}
return {day: day,
hour: hour,
minute: minute,
second: second}
}
/**
* DDD,HH,MM,SS
* @param timeInSecond
*/
static second2FormatDate(timeInSecond):any{
let {day,hour,minute,second} = MUtil.second2Date(timeInSecond);
return {
day: day<10?('0'+day):String(day),
hour: hour<10?('0'+minute):String(hour),
minute: minute<10?('0'+minute):String(minute),
second: second<10?('0'+second):String(second)
};
}
/*
* 倒计时
* */
static calcTimer(remainTime, id): any {
if (remainTime <= 0) {
return false;
}
let data = MUtil.second2FormatDate(remainTime);
// let className = this.state.key;
let el = document.getElementById(id);
if (el) {
let dayCon = "" +
"" + data.day + "" +
"天" +
"";
let html = "" + data.hour + ":" +
"" + data.minute + ":" +
"" + data.second + "";
if (data.day) {
html = dayCon + html;
}
el.innerHTML = html;
setTimeout(() => {
remainTime = remainTime - 1;
this.calcTimer(remainTime, id)
}, 1000);
}
}
static calcTimerNew(remainTime, id, flag = 1): any {
if (remainTime <= 0) {
return false;
}
if (isNaN(remainTime)) {
remainTime = 0;
}
let {day,hour,minute,second} = MUtil.second2Date(flag == 1?remainTime:remainTime/1000);
if (flag == 1) {
remainTime = remainTime * 1000;
}
let msecond: any = (flag == 1?0:Math.floor((remainTime % 1000) / 100));
if (isNaN(msecond) || msecond <= 0) {
msecond = 0;
}
let data = {
day: day<10?("0"+day):String(day),
hour: hour<10?("0"+hour):String(hour),
minute: minute<10?("0"+minute):String(minute),
second: second<10?("0"+second):String(second),
msecond: String(msecond)
};
let el: any = document.getElementsByClassName(id);
if (el && el[0]) {
let html = "" + data.minute + ":" +
"" + data.second + "" ;
if(hour > 0 || day > 0)
html = "" + data.hour + ":" + html ;
if(day > 0)
html = "" + data.day + "天 " + html ;
el[0].innerHTML = html;
setTimeout(() => {
remainTime = remainTime - 100;
this.calcTimerNew(remainTime, id, 2)
}, 100);
}
}
static timerType() {
return {
TIMER_BIG: 'big',
TIMER_SMALL: 'small',
TIMER_NULL: 1
}
}
static marketType() {
return {
NORMAL: 0,
GROUPBUY: 2,
DISTRI: 1,
BARGAIN: 3,
MEMBER:6
}
}
static calcNum(num) {
let numNum = num;
if (num >= 10000) {
numNum = num / 10000;
numNum = numNum.toFixed(1);
numNum = numNum + '万';
}
if (num >= 100000000) {
numNum = num / 100000000;
numNum = numNum.toFixed(1);
numNum = numNum + '亿';
}
return numNum;
}
/*
* 计算图片高度,用于百度编辑器有高度的图片
* */
static overwriteImg(html) {
let clientW = document.documentElement.clientWidth || document.body.clientWidth
if (clientW > 750) {
clientW = 750
}
clientW = clientW - 30;
let wrapper = document.createElement('div');
wrapper.innerHTML = html;
let imgs = wrapper.getElementsByTagName('img');
for (let i = 0; i < imgs.length; i++) {
let item = imgs[i];
let width: any = item.getAttribute('width');
let height: any = item.getAttribute('height');
let rate = width / clientW;
if (rate > 1) {
height = Number(height / rate);
width = Number(width / rate);
height = height.toFixed(0);
width = width.toFixed(0);
item.setAttribute('height', height);
item.setAttribute('width', width);
item.setAttribute('mode', 'aspectFit')
// mode='aspectFit'
}
}
return wrapper.innerHTML;
}
/*
* 向右滚动
* */
static scrollLeft(el, left, time) {
let nowScrollLeft = el.scrollLeft;
let total = left - nowScrollLeft;
let space = total / time;
let scrollLeft = nowScrollLeft;
let timer = setInterval(() => {
time--;
scrollLeft += space;
if (time >= 0) {
el.scrollLeft = scrollLeft;
} else {
clearInterval(timer);
}
}, 1)
}
/*
* 向上滚动
* */
static scrollTop(el, left, time) {
let nowScroll = el.scrollTop;
let total = left - nowScroll;
let space = total / time;
let scroll = nowScroll;
let timer = setInterval(() => {
time--;
scroll += space;
if (time >= 0) {
el.scrollTop = scroll;
} else {
clearInterval(timer);
}
}, 1)
}
}
export default MUtil;