util.js方法合集(...记录)

这段代码包含多个JavaScript实用函数,如日期格式化为指定样式,正则验证身份证号,获取URL的查询参数对象,将日期字符串转换为包含星期的格式,文件下载以及通过XHR进行文件导出。函数实用且涵盖多种常见的前端开发场景。
摘要由CSDN通过智能技术生成
/**
 * 将时间戳或者 这种格式 2019/10/20 13:06:05 变成 2019-09-05 13:06:05
 *
 */
export function formateDate(val) {
    const date = new Date(val);
    const year = date.getFullYear();
    const month = date.getMonth() + 1 >= 10 ? date.getMonth() + 1 : '0' + (date.getMonth() + 1);
    const day = date.getDate() >= 10 ? date.getDate().toString() : '0' + date.getDate().toString();
    const hour = date.getHours() >= 10 ? date.getHours().toString() : '0' + date.getHours().toString();
    const minute = date.getMinutes() >= 10 ? date.getMinutes().toString() : '0' + date.getMinutes().toString();
    const second = date.getSeconds() >= 10 ? date.getSeconds().toString() : '0' + date.getSeconds().toString();
    return `${year}-${month}-${day} ${hour}:${minute}:${second}`
}
//正则表达式 验证身份证
export const identify = /^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$|^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}([0-9]|X|x)$/;
// 获取url的query
export function getQueryObject(url) {
    url = url == null ? window.location.href : url
    const search = url.substring(url.lastIndexOf('?') + 1)
    const obj = {}
    const reg = /([^?&=]+)=([^?&=]*)/g
    search.replace(reg, (rs, $1, $2) => {
        const name = decodeURIComponent($1)
        let val = decodeURIComponent($2)
        val = String(val)
        obj[name] = val
        return rs
    })
    return obj
}
/**
 * 将 2021-1-21 16:21:32 转换为 2021-1-21 16:21:32 星期四
 * 
 */

export function getUnixTime(dateStr) {
    const newDate = new Date(dateStr.slice(0, 10))
    const weekDay = ["星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"]
    const lastTime = dateStr + " " + weekDay[newDate.getDay()]
    return lastTime
}
//下载
export function downloadFile(blob,fileName){
  const newBlob = new Blob([blob], {type: "application/vnd.ms-excel"});	  
  let url = window.URL.createObjectURL(newBlob);	    
  //创建一个a标签元素,设置下载属性,点击下载,最后移除该元素	  
  let link = document.createElement('a');  	
  link.href = url;	  
  link.style.display = 'none';
  link.setAttribute('download',fileName);	
  link.click()	  
  window.URL.revokeObjectURL(url)	
  link.remove()
}
//导出
export  function XHRLoadLoadFile(url,params,method){ 
    let apiUrl = `${process.env.VUE_APP_EHOSPITAL_API}`
    let getParamsList = [];
    if(params){
      for(let key of Object.keys(params)){
        if(params.hasOwnProperty(key)){
          getParamsList.push(`${key}=${params[key]}`);
        }
      }
    }
    let getUrl = url;
    if(getParamsList.length > 0){
      getUrl += '?' + getParamsList.join('&');
    }
    let xhr = new XMLHttpRequest();
    if(method && method=='post'){
      xhr.open('post',apiUrl+url);  
    } else {
      xhr.open('get',apiUrl+getUrl);    
    }

    const header = getSign(params);
    delete header['param'];

    for(let key of Object.keys(header)){
      xhr.setRequestHeader(key,header[key]);
    }
    
    xhr.responseType = 'blob';
    if(method && method=='post'){
      xhr.send(JSON.stringify(params));  
    }  else {
      xhr.send();  
    }
    xhr.timeout = 3*60*1000;
    let loadingInstance = Loading.service({
      text: '正在导出中...',
      lock: true
    });
    xhr.onreadystatechange = function(){	
      if(xhr.readyState ===4){
        loadingInstance.close();
        if(xhr.status === 200){
          if(xhr.response['type'] == 'application/json'){
            
            ScMessage.error('导出失败');
            return;
          }
          ScMessage.success('导出成功');
          const blob = new Blob([xhr.response])	  
          let url = window.URL.createObjectURL(blob)	    
          //创建一个a标签元素,设置下载属性,点击下载,最后移除该元素	  
          let link = document.createElement('a')	  
          link.href = url	  
          link.style.display = 'none'	  //取出下载文件名	  
          const disposition = xhr.getResponseHeader('Content-disposition');	
          let fileName= new Date().getTime() + '.xls';
          if(disposition){
            fileName = disposition.split(";")[1].split("filename=")[1]; 
          }
          link.setAttribute('download',decodeURI(fileName));	  
          link.click()	  
          window.URL.revokeObjectURL(url)	
          link.remove()
        } else {
          ScMessage.error('网络错误');
        }
      }
    }
}
/**
 * 这个是深拷贝
 */

export const deepCopy = function(obj) {
        if (!typeof obj == 'object') return obj;
        if (obj == null) return null;
        const myObj = Array.isArray(obj) ? [] : {};
        for (const key in obj) {
            if (obj.hasOwnProperty(key)) {
                if (typeof(obj[key]) == 'object') {
                    myObj[key] = deepCopy(obj[key]);
                } else {
                    myObj[key] = obj[key];
                }
            }
        }
        return myObj;
    }
// 在数组对象中去掉重复的对象
export function deteleRepeatObject(arr) {
    var stepArr = [];
    var str = {};
    for (var i = 0; i < arr.length; i++) {
        var keys = Object.keys(arr[i]);
        keys.sort(function(a, b) {
            return (Number(a) - Number(b));
        });
        var str = '';
        for (var j = 0; j < keys.length; j++) {
            str += JSON.stringify(keys[j]);
            str += JSON.stringify(arr[i][keys[j]]);
        }
        if (!str.hasOwnProperty(str)) {
            stepArr.push(arr[i]);
            str[str] = true;
        }
    }
    stepArr = stepArr;
    return stepArr;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值