Newer
Older
urbanLifeline_YanAn / src / utils / util.js
@zhangqy zhangqy on 3 Oct 7 KB first commit
import mitt from "mitt";

const bus = mitt();
export default bus;

//guid
export const guid = () => {
  const s4 = () =>
    Math.floor((1 + Math.random()) * 0x10000)
      .toString(16)
      .substring(1);
  return (() =>
    `${s4() + s4()}-${s4()}-${s4()}-${s4()}-${s4()}${s4()}${s4()}`)();
};

/**
 *动态设置img Src 属性
 *@param {string} name:图片名
 */
export const getImageUrlForPublic = (name) => {
  return new URL(`../assets/images/oneMap/${name}.png`, import.meta.url).href;
};
/**
 *动态设置天气img Src 属性
 *@param {string} name:图片名
 */
export const getImageUrlForWeather = (name) => {
  return new URL(`../assets/images/weather/${name}.png`, import.meta.url).href;
};

/**
 * 获取uuid
 */
export function getUUID() {
  return "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, (c) => {
    return (c === "x" ? (Math.random() * 16) | 0 : "r&0x3" | "0x8").toString(
      16
    );
  });
}
/**
 * 树形数据转换
 * @param {*} data
 */
export function treeDataTranslate(data) {
  const arr = [];
  let obj = {};
  data.forEach((item) => {
    const tmp = {
      ...item,
    };
    if (tmp.children) {
      tmp.children = treeDataTranslate(tmp.children);
      obj = {
        label: tmp.name,
        key: tmp.id,
        children: tmp.children,
      };
    } else {
      obj = {
        label: tmp.name,
        key: tmp.id,
      };
    }
    arr.push(obj);
  });
  return arr;
}
/**
 * 去掉多余的children
 * @param {*} data
 */
export function deleteChildren(data) {
  console.log(data);
  const arr = [];
  let obj = {};
  data.forEach((item) => {
    const tmp = {
      ...item,
    };
    if (tmp.children.length > 0) {
      tmp.children = deleteChildren(tmp.children);
      obj = {
        label: tmp.areaName,
        value: tmp.areaCode,
        children: tmp.children,
      };
    } else {
      obj = {
        label: tmp.areaName,
        value: tmp.areaCode,
      };
    }
    arr.push(obj);
  });
  return arr;
}
/**
 * 时间格式化
 * @param {*} time
 */
export function formatDate(
  time = +new Date(),
  dateType = "YYYY-MM-DD hh:mm:ss"
) {
  const timeStamp = +new Date(time);
  // 如果转换成数字出错
  if (!timeStamp) {
    return time;
  }
  let str;
  // 得到时间字符串
  const dateStr = new Date(timeStamp);
  str = dateType.replace("YYYY", dateStr.getFullYear());
  str = str.replace(
    "MM",
    (dateStr.getMonth() + 1 < 10 ? "0" : "") + (dateStr.getMonth() + 1)
  );
  str = str.replace(
    "DD",
    (dateStr.getDate() < 10 ? "0" : "") + dateStr.getDate()
  );
  str = str.replace(
    "hh",
    (dateStr.getHours() < 10 ? "0" : "") + dateStr.getHours()
  );
  str = str.replace(
    "mm",
    (dateStr.getMinutes() < 10 ? "0" : "") + dateStr.getMinutes()
  );
  str = str.replace(
    "ss",
    (dateStr.getSeconds() < 10 ? "0" : "") + dateStr.getSeconds()
  );

  return str;
}
/**
 * 下载 blob 流数据
 * @param {*} data 流数据
 * @param {*} fileName
 */
export function downloadBlob(data, fileName) {
  // 1.解析 blob 数据 生成 url
  const blob = new Blob([data], {
    type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8",
  });
  const url = window.URL.createObjectURL(blob);
  // 2.创建下载链接+自动下载
  const link = document.createElement("a");
  link.href = url;
  let name = decodeURIComponent(fileName);
  link.download = name;
  document.body.appendChild(link);
  link.click();
  window.URL.revokeObjectURL(link);
}
/**
 * 表单重置
 * @param {*} formObj 表单数据
 *
 */
export function resetForm(formObj) {
  let obj = Object.keys(formObj).forEach((key) => (formObj[key] = null));
  return obj;
}

export function getDom(key) {
  return document.querySelector(key);
}

/**
 * 转换接口字符串加上括号
 * @param {*} formObj 表单数据
 *
 */
export function convertString(str) {
  return str && str.indexOf("/") === -1 ? `(${str})` : "";
}

/**
 * 判断日期是否过期
 * @param {*} formObj 日期字符串
 *
 */
export function isDateExpired(date) {
  var now = new Date();
  var date = new Date(date);
  if (now.getTime() > date.getTime()) {
    return true;
  } else {
    return false;
  }
}

//echar自适应设置
export function nowSize(val, initWidth) {
  let nowClientWidth = document.documentElement.clientWidth
  return val * (nowClientWidth / initWidth);
}

//通过id获取对应的名称
export const getChineseFun = (data, key, arrId, name) => {
  if (data && data.length > 0 && arrId) {
    let arr = arrId.split(",");
    let nameArr = [];
    for (let i = 0; i < arr.length; i++) {
      for (let j = 0; j < data.length; j++) {
        if (data[j][key] == arr[i]) {
          nameArr.push(data[j][name]);
        }
      }
    }
    return nameArr.join(",");
  }
};
/**
 * 通过key找到在列表中对应的显示
 * @param {Object} obj
 * @param obj.dataList 数据列表
 * @param obj.value    数据的值对应的字段名称   例如 'value'
 * @param obj.label    数据的说明对应的字段名称 例如 'label'
 * @param obj.data     当前传入的数据值
 * @return name        返回当前传入值在数组中对应的名字
 */
export const getDataName = (obj) => {
  let name = obj.data;
  if (Array.isArray(obj.dataList) && obj.dataList.length > 0) {
    for (let i = 0; i < obj.dataList.length; i++) {
      if (obj.dataList[i][obj.value] == obj.data) {
        name = obj.dataList[i][obj.label];
      }
    }
  }
  return name;
};
/**
 * 递归寻找当前级
 */
export const findCurrentTreeObj = (data, target, value) => {
  for (let i = 0; i < data.length; i++) {
    if (data[i][target] == value) {
      return data[i];
    } else {
      if (data[i].children && data[i].children.length > 0) {
        let item = data[i].children;
        let res = findCurrentTreeObj(item, target, value);
        if (res) {
          return res;
        }
      }
    }
  }
};

// 手机号前3后4
export function phonefromdata(val) {
  if (val) {
    let regPhoneNum = val.replace(/(\d{3})(\d{4})/, "$1 **** "); //添加空格
    return regPhoneNum;
  }
}
/**
 * 浏览器判断是否全屏
 */
export const fullscreenToggel = () => {
  if (fullscreenEnable()) {
    exitFullScreen();
  } else {
    reqFullScreen();
  }
};
/**
* esc监听全屏
*/
export const listenfullscreen = (callback) => {
  function listen() {
    callback();
  }

  document.addEventListener("fullscreenchange", function () {
    listen();
  });
  document.addEventListener("mozfullscreenchange", function () {
    listen();
  });
  document.addEventListener("webkitfullscreenchange", function () {
    listen();
  });
  document.addEventListener("msfullscreenchange", function () {
    listen();
  });
};
/**
* 浏览器判断是否全屏
*/
export const fullscreenEnable = () => {
  var isFullscreen =
    document.isFullScreen ||
    document.mozIsFullScreen ||
    document.webkitIsFullScreen;
  return isFullscreen;
};

/**
* 浏览器全屏
*/
export const reqFullScreen = () => {
  if (document.documentElement.requestFullScreen) {
    document.documentElement.requestFullScreen();
  } else if (document.documentElement.webkitRequestFullScreen) {
    document.documentElement.webkitRequestFullScreen();
  } else if (document.documentElement.mozRequestFullScreen) {
    document.documentElement.mozRequestFullScreen();
  }
};
/**
* 浏览器退出全屏
*/
export const exitFullScreen = () => {
  if (document.documentElement.requestFullScreen) {
    document.exitFullScreen();
  } else if (document.documentElement.webkitRequestFullScreen) {
    document.webkitCancelFullScreen();
  } else if (document.documentElement.mozRequestFullScreen) {
    document.mozCancelFullScreen();
  }
};
/**
 * <p> 获取加载图片地址 </p>
 * examples: bg/bg.png
 * @param imgName: string
 */
export const requireTuChengImg = (imgName) => {
  return new URL(`../assets/images/Sponge_screen/TuCheng/${imgName}.png`, import.meta.url).href;
};