zoukankan      html  css  js  c++  java
  • 基于vue项目的js工具方法汇总

    以下是个人在vue项目的开发过程中经常会用到的一些公共方法,在此进行汇总,方便以后及有需要的朋友查看~

    let util = {};
    /**
     * @description 日期格式化
     * @param {Date} date 日期
     * @param {String} fmt 日期格式 eg: yyyy-MM-dd hh:mm:ss
     */
    util.dateFormat = function (date, fmt) {
      var o = {
        'M+': date.getMonth() + 1, // 月份
        'd+': date.getDate(), //
        'h+': date.getHours(), // 小时
        'm+': date.getMinutes(), //
        's+': date.getSeconds(), //
        'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
        'S': date.getMilliseconds() // 毫秒
      };
      if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
      }
      for (var k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
          fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k]) : (('00' + o[k]).substr(('' + o[k]).length)));
        }
      }
      return fmt;
    };
    /**
     * @description 文件下载
     * @param {Object} data  数据 
     * @param {String} fileName 下载文件名
     */
    util.download = function (data, fileName) {
      //创建一个blob对象,file的一种
      let blob = new Blob([data], { type: 'application/x-xls' });
      if ('download' in document.createElement('a')) { // 非IE下载
        let link = document.createElement('a');
        if (window.URL) {
          link.href = window.URL.createObjectURL(blob);
        } else {
          link.href = window.webkitURL.createObjectURL(blob);
        }
        link.download = fileName;
        document.body.appendChild(link);
        link.click();
        link.remove();
      }else { // IE10+下载
        navigator.msSaveBlob(blob, fileName);
      }
    };
    /**
     * @description 校验导入execl格式
     * @param {file} file 导入文件对象
     */
    util.validateExecl = function(file) {
      const isXLS = file.type === 'application/vnd.ms-excel';
      const isXLSX = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
      if (!isXLS && !isXLSX) {
        this.$message.error('只支持导入execl文件');
        return false;
      }
    };
    /**
     * @description 校验上传图片格式和大小
     * @param {file} file 导入文件对象
     */
    util.validateImage = function(file) {
      const isPNG = file.type.toLowerCase() === 'image/png';
      const isJPG = file.type.toLowerCase() === 'image/jpeg';
      const isLt2M = file.size / 1024 / 1024 < 2;
      if (!isJPG && !isPNG) {
        this.$message.error('上传图片只能是JPG或PNG格式!');
        return false;
      }
      if (!isLt2M) {
        this.$message.error('上传图片大小不能超过 2M!');
        return false;
      }
    };

    AES加密/解密,需要先安装依赖 crypto-js。注:具体的选项参数可自行百度了解噢

    // 自定义密钥
    const key = CryptoJS.enc.Utf8.parse('ljycykxbchsbqtcy')
    // 加密
    util.encrypt = function(str) {
      let srcs = CryptoJS.enc.Utf8.parse(str)
      let encrypted = CryptoJS.AES.encrypt(srcs, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7})
      return encrypted.toString()
    };
    // 解密
    util.decrypt = function(str) {
      let decrypt = CryptoJS.AES.decrypt(str, key, {mode:CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7})
      return CryptoJS.enc.Utf8.stringify(decrypt).toString()
    };

    MD5加密,需要先安装依赖 js-md5

    // 在main.js中添加以下代码
    import md5 from 'js-md5';
    Vue.prototype.$md5 = md5;
    
    // str为需要加密字段
    let md5Str = this.$md5(str);
    /**
     * @description 倒计时
     * @param {} time 绑定展示的倒计时时间,初始值60s
     */
    let timer = null
    timer = setInterval(function() {
      if(this.time > 0) {
        this.time--
      }else {
        clearInterval(timer)
      }
    }, 1000)

    转换file文件对象为base64字符串

    let reader = new FileReader()
    // file为通过上传组件选择的文件对象
    reader.readAsDataURL(file)
    reader.onload = function(e) {
      let base64 = e.target.result
    }
    /**
     * @description 四舍五入
     * @param {Number} num 数值
     * @param {Number} digits 小数位数
     */
    util.round = function (num, digits) {    
      return Math.round(num * Math.pow(10, digits)) / Math.pow(10, digits);
    };
    /**
     * @description 回到顶部
     */
    util.backTop= function () {    
      let timer = setInterval(() => {
        let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
        let ispeed = Math.floor(-scrollTop / 5);
        document.documentElement.scrollTop = document.body.scrollTop = scrollTop + ispeed;
        if(scrollTop === 0) {
          clearInterval(timer);
        }
      }, 10);
    };
    /**
     * @description 数组对象排序
     * @param {Array} array 数组
     * @param {String} prop 排序字段
     * @param {String} order 升序或降序, asc:升序|desc:降序
     */
    sortData(array, prop, order) {
      array.sort(function(item1, item2){
        let value1 = item1[prop];
        let value2 = item2[prop];
        if(value1 < value2) {
          return order == 'desc' ? 1 : -1; 
        }else if (value1 > value2) {
          return order == 'desc' ? -1 : 1;
        }else {
          return 0;
        }
      });
    }
    /**
     * @description 快速排序
     * @param {Array} arr 数组
     */
    quickSort(arr) {
        if(arr.length <= 1) {
          return arr;
        }
        var index = Math.floor(arr.length / 2);
        var pivot = arr.splice(index, 1)[0];
        var left = [], right = [];
        for(var i = 0; i < arr.length; i++) {
          if(arr[i] < pivot) {
            left.push(arr[i]);
          }else {
            right.push(arr[i]);
          }
        }
        return quickSort(left).concat([pivot], quickSort(right));
    }
    export default util;

    持续更新中~~

  • 相关阅读:
    DRF-serializers.Serializer序列化器
    docker 打包容器和导入
    python 打包exex文件
    python 判断ip是否正确 re学习
    快排
    冒泡排序
    二分法查找
    递归实现斐波那契
    排序算法
    迭代器构造斐波那契数列
  • 原文地址:https://www.cnblogs.com/fengyuexuan/p/10881955.html
Copyright © 2011-2022 走看看