utils.js 5.32 KB
import Cookies from 'js-cookie';
import pathRegexp from 'path-to-regexp';
import { parse } from 'querystring';
import { cloneDeep } from 'lodash';
import pkg from '../../package.json';

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

export const getPageQuery = () => parse(window.location.href.split('?')[1]);

export const getAuthorityFromRouter = (router, pathname) => {
  const authority = router.find(
    ({ routes, path = '/', target = '_self' }) =>
      (path && target !== '_blank' && pathRegexp(path).exec(pathname)) ||
      (routes && getAuthorityFromRouter(routes, pathname)),
  );
  if (authority) return authority;
  return undefined;
};

export const getRouteAuthority = (path, routeData) => {
  let authorities;
  routeData.forEach(route => {
    if (pathRegexp(`${route.path}/(.*)`).test(`${path}/`)) {
      if (route.authority) {
        authorities = route.authority;
      }
      if (route.path === path) {
        authorities = route.authority || authorities;
      }

      if (route.routes) {
        authorities = getRouteAuthority(path, route.routes) || authorities;
      }
    }
  });
  return authorities;
};

export function isPromise(obj) {
  return (
    !!obj && // 有实际含义的变量才执行方法,变量null,undefined和''空串都为false
    (typeof obj === 'object' || typeof obj === 'function') && // 初始promise 或 promise.then返回的
    typeof obj.then === 'function'
  );
}

export function getBaseName() {
  return pkg.name.toLocaleLowerCase();
}

export const getKeyName = path => {
  const truePath = path.split('?')[0];
  const curRoute = [].filter(item => item.path.includes(truePath));

  if (!curRoute[0]) {
    return {
      title: '暂无权限',
      tabKey: '403',
    };
  }
  const { name, key, component } = curRoute[0];
  return { title: name, tabKey: key, component };
};

export const asyncAction = action => {
  const wait = new Promise(resolve => resolve(action));
  return callback => {
    wait.then(() => setTimeout(() => callback()));
  };
};

export function getToken() {
  return Cookies.get('token');
}
export function setToken(token) {
  Cookies.set(token);
}
export function getVideoUrl() {
  const { protocol } = window.location;
  const address =
    protocol === 'https:'
      ? window.location.origin.replace(protocol, 'wss:')
      : window.location.origin.replace(protocol, 'ws:');
  return `${address}/`;
}
export const getImageUrl = path => {
  if (!path || typeof path !== 'string') return '';
  if (path.indexOf('http') === 0) {
    return path;
  }
  if (path.indexOf('data:') === 0) {
    return path;
  }
  if (path.startsWith('assets')) {
    return `${window.location.origin}/civweb4/${path}`.replace(/\\/g, '/');
  }
  if (path.startsWith('center/images')) {
    return `${window.location.origin}/${path}`.replace(/\\/g, '/');
  }
  if (path.includes('/个人信息/')) {
    path = `/cityinterface/rest/services/filedownload.svc/download${path}`;
    return path;
  }
  if (!path.includes('CityTemp') && !path.includes('图库')) {
    path = `CityTemp\\图库\\${path}`;
  }

  return `/PandaOMS/OMS/FileCenter/DownLoadFiles?module=图库&filePath=${encodeURIComponent(path)}`;
};

/**
 * 跳转到指定页面
 * @param {*} path  功能地址
 */
export const goToPath = (path, data, widgetId, mode) => {
  const routes = window.globalConfig?.allWidgets || [];
  if (!path || !routes.length) return;
  let info = null;
  const target = path.substr(0, 1) === '/' ? path.slice(1) : path;
  function urlSearch(arr) {
    arr.forEach(a => {
      if (a.url) {
        if (a.url.indexOf(target) > -1 && (!widgetId || a.url.indexOf(widgetId) > -1)) {
          // 跳转到指定板块功能
          if (mode) {
            if (a.widgetId && a.widgetId.split('_').includes(mode)) {
              info = cloneDeep(a);
            }
          } else {
            info = cloneDeep(a);
          }
        }
      }
      if (a.widgets) {
        urlSearch(a.widgets);
      }
    });
  }
  urlSearch(routes);
  if (!info) return info;
  info.url = info.url.substr(0, 1) === '/' ? info.url : `/${info.url}`;
  let url = `/civbase/${info.product}${info.url}`;
  const arr = url.split('|');
  let params = {};
  url = arr[0];
  if (arr[1]) {
    url += encodeURI(`|${arr[1]}`);
    const arrObj = arr[1].split('&');
    arrObj.forEach(item => {
      const temp = item.split('=');
      params[temp[0]] = temp[1];
    });
  }
  params = { ...params, ...data };
  params.widget = widgetId || params.widget;
  console.log(params, url);
  window.history.pushState(params, '', url);
};

/**
 * 查找功能的跳转地址
 * @param {*} path  功能地址
 */
export const searchUrl = path => {
  const routes = window.globalConfig?.widgets || [];

  let url = '';
  if (!path || !routes.length) return url;
  const target = path.substr(0, 1) === '/' ? path.slice(1) : path;
  function urlSearch(arr) {
    arr.forEach(a => {
      if (a.url) {
        if (a.url.indexOf(target) > -1) {
          url = a.url.substr(0, 1) === '/' ? a.url : `/${a.url}`;
          url = `/civbase/${a.product}${url}`;
        }
      }
      if (a.widgets) {
        urlSearch(a.widgets);
      }
    });
  }
  urlSearch(routes);
  if (!url) return url;
  return url;
};