utils.js 4.92 KB
Newer Older
1
import moment from 'moment';
ddcat1115's avatar
ddcat1115 committed
2
import React from 'react';
3

偏右's avatar
偏右 committed
4
export function fixedZero(val) {
5 6 7
  return val * 1 < 10 ? `0${val}` : val;
}

偏右's avatar
偏右 committed
8
export function getTimeDistance(type) {
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
  const now = new Date();
  const oneDay = 1000 * 60 * 60 * 24;

  if (type === 'today') {
    now.setHours(0);
    now.setMinutes(0);
    now.setSeconds(0);
    return [moment(now), moment(now.getTime() + (oneDay - 1000))];
  }

  if (type === 'week') {
    let day = now.getDay();
    now.setHours(0);
    now.setMinutes(0);
    now.setSeconds(0);

    if (day === 0) {
      day = 6;
    } else {
      day -= 1;
    }

    const beginTime = now.getTime() - (day * oneDay);

    return [moment(beginTime), moment(beginTime + ((7 * oneDay) - 1000))];
  }

  if (type === 'month') {
    const year = now.getFullYear();
    const month = now.getMonth();
    const nextDate = moment(now).add(1, 'months');
    const nextYear = nextDate.year();
    const nextMonth = nextDate.month();

nikogu's avatar
nikogu committed
43
    return [moment(`${year}-${fixedZero(month + 1)}-01 00:00:00`), moment(moment(`${nextYear}-${fixedZero(nextMonth + 1)}-01 00:00:00`).valueOf() - 1000)];
44 45 46 47 48 49 50 51
  }

  if (type === 'year') {
    const year = now.getFullYear();

    return [moment(`${year}-01-01 00:00:00`), moment(`${year}-12-31 23:59:59`)];
  }
}
ddcat1115's avatar
ddcat1115 committed
52

53
export function getPlainNode(nodeList, parentPath = '') {
ddcat1115's avatar
ddcat1115 committed
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
  const arr = [];
  nodeList.forEach((node) => {
    const item = node;
    item.path = `${parentPath}/${item.path || ''}`.replace(/\/+/g, '/');
    item.exact = true;
    if (item.children && !item.component) {
      arr.push(...getPlainNode(item.children, item.path));
    } else {
      if (item.children && item.component) {
        item.exact = false;
      }
      arr.push(item);
    }
  });
  return arr;
}

71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
export function digitUppercase(n) {
  const fraction = ['', ''];
  const digit = ['', '', '', '', '', '', '', '', '', ''];
  const unit = [
    ['', '', '亿'],
    ['', '', '', ''],
  ];
  let num = Math.abs(n);
  let s = '';
  fraction.forEach((item, index) => {
    s += (digit[Math.floor(num * 10 * (10 ** index)) % 10] + item).replace(/零./, '');
  });
  s = s || '';
  num = Math.floor(num);
  for (let i = 0; i < unit[0].length && num > 0; i += 1) {
    let p = '';
    for (let j = 0; j < unit[1].length && num > 0; j += 1) {
      p = digit[num % 10] + unit[1][j] + p;
      num = Math.floor(num / 10);
    }
    s = p.replace(/(零.)*零$/, '').replace(/^$/, '') + unit[0][i] + s;
  }

  return s.replace(/(零.)*零元/, '').replace(/(零.)+/g, '').replace(/^整$/, '零元整');
}
ddcat1115's avatar
ddcat1115 committed
96

陈帅's avatar
陈帅 committed
97

ddcat1115's avatar
ddcat1115 committed
98 99
function getRelation(str1, str2) {
  if (str1 === str2) {
100
    console.warn('Two path are equal!');  // eslint-disable-line
ddcat1115's avatar
ddcat1115 committed
101 102 103 104 105 106 107 108 109 110 111
  }
  const arr1 = str1.split('/');
  const arr2 = str2.split('/');
  if (arr2.every((item, index) => item === arr1[index])) {
    return 1;
  } else if (arr1.every((item, index) => item === arr2[index])) {
    return 2;
  }
  return 3;
}

陈帅's avatar
陈帅 committed
112
function getRenderArr(routes) {
ddcat1115's avatar
ddcat1115 committed
113 114 115 116
  let renderArr = [];
  renderArr.push(routes[0]);
  for (let i = 1; i < routes.length; i += 1) {
    let isAdd = false;
陈帅's avatar
陈帅 committed
117
    // 是否包含
ddcat1115's avatar
ddcat1115 committed
118
    isAdd = renderArr.every(item => getRelation(item, routes[i]) === 3);
陈帅's avatar
陈帅 committed
119
    // 去重
ddcat1115's avatar
ddcat1115 committed
120 121 122 123 124
    renderArr = renderArr.filter(item => getRelation(item, routes[i]) !== 1);
    if (isAdd) {
      renderArr.push(routes[i]);
    }
  }
陈帅's avatar
陈帅 committed
125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
  return renderArr;
}

/**
 * Get router routing configuration
 * { path:{name,...param}}=>Array<{name,path ...param}>
 * @param {string} path
 * @param {routerData} routerData
 */
export function getRoutes(path, routerData) {
  let routes = Object.keys(routerData).filter(routePath =>
    routePath.indexOf(path) === 0 && routePath !== path);
  // Replace path to '' eg. path='user' /user/name => name
  routes = routes.map(item => item.replace(path, ''));
  // Get the route to be rendered to remove the deep rendering
  const renderArr = getRenderArr(routes);
  // Conversion and stitching parameters
ddcat1115's avatar
ddcat1115 committed
142 143 144
  const renderRoutes = renderArr.map((item) => {
    const exact = !routes.some(route => route !== item && getRelation(route, item) === 1);
    return {
ddcat1115's avatar
ddcat1115 committed
145
      ...routerData[`${path}${item}`],
ddcat1115's avatar
ddcat1115 committed
146 147 148 149 150 151 152
      key: `${path}${item}`,
      path: `${path}${item}`,
      exact,
    };
  });
  return renderRoutes;
}
153 154 155 156 157 158 159 160


/* eslint no-useless-escape:0 */
const reg = /(((^https?:(?:\/\/)?)(?:[-;:&=\+\$,\w]+@)?[A-Za-z0-9.-]+|(?:www.|[-;:&=\+\$,\w]+@)[A-Za-z0-9.-]+)((?:\/[\+~%\/.\w-_]*)?\??(?:[-\+=&;%@.\w_]*)#?(?:[\w]*))?)$/g;

export function isUrl(path) {
  return reg.test(path);
}
ddcat1115's avatar
ddcat1115 committed
161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187

export function formatWan(val) {
  const v = val * 1;
  if (!v || isNaN(v)) return '';

  let result = val;
  if (val > 10000) {
    result = Math.floor(val / 10000);
    result = (
      <span>
        {result}
        <em styles={{
            position: 'relative',
            top: -2,
            fontSize: 14,
            fontStyle: 'normal',
            lineHeight: 20,
            marginLeft: 2,
          }}
        >
          
        </em>
      </span>
    );
  }
  return result;
}