封装的一些工具方法

103 阅读1分钟

下面将统一封装的一些工具方法整理在utils/index.ts中,便于日后有类似需求可直接使用。

  1. 格式化时间

    调用:utils.dataFormat(new Date(), 'yyyy-MM-dd hh:mm:ss')

export default {
/**
   *
   * @param date
   * @returns 日期格式化
   */

  dataFormat(date: Date, fmt: string): string {
    //此处当时间是精确到时把小时精确到小时08时或者20时
    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;
  }
}
  1. 随机产生一个key值

    调用:utils.uuid()

/**
   * @description: 产生uuid (随机数函数)
   * @return {*}
   */
  uuid() {
    var s = [];
    var hexDigits = '0123456789abcdef';
    for (var i = 0; i < 36; i++) {
      s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
    }
    s[14] = '4'; // bits 12-15 of the time_hi_and_version field to 0010
    s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
    s[8] = s[13] = s[18] = s[23] = '-';

    var uuid = s.join('');
    return uuid;
  },
  1. 将时间戳转换成日期格式

    调用:utils.timestampToTime(时间戳)

  //将时间戳转换成日期格式
  timestampToTime(timestamp) {
    var date = new Date(timestamp); //时间戳为10位需*1000,时间戳为13位的话不需乘1000
    var Y = date.getFullYear() + '-';
    var M =
      (date.getMonth() + 1 < 10
        ? '0' + (date.getMonth() + 1)
        : date.getMonth() + 1) + '-';
    var D = (date.getDate() < 10 ? '0' + date.getDate() : date.getDate()) + ' ';
    var h =
      (date.getHours() < 10 ? '0' + date.getHours() : date.getHours()) + ':';
    var m =
      date.getMinutes() < 10 ? '0' + date.getMinutes() : date.getMinutes();
    var s =
      date.getSeconds() < 10 ? '0' + date.getSeconds() : date.getSeconds();
    return Y + M + D + h + m;
  },
  1. 开始时间与结束时间之间间隔的所有的半小时数据

    调用:utils.formatDayHalfHours(开始时间, 结束时间)

    强调下moment().add()方法: 计算任意指定时间后的任意时间

  /**
   * @description:开始时间与结束时间之间间隔的所有的半小时数据
   * @param {*} startTime 开始时间 endTime 结束时间
   * @return {*}
   */
  formatDayHalfHours(startDate, endDate) {
    let dateList = [];
    while (moment(endDate) > moment(startDate)) {
      startDate = moment(startDate).add(30, 'm');
      dateList.push(moment(startDate).format('YYYY-MM-DD HH:mm:ss'));
    }
    return dateList;
  },
  1. 阿拉伯1转换为一
 /**
   * @description: 阿拉伯1转换为一
   * @param {*} num
   * @return {*}
   */
  changeNumToHan(num) {
    var arr1 = ['零', '一', '二', '三', '四', '五', '六', '七', '八', '九'];
    var arr2 = [
      '',
      '十',
      '百',
      '千',
      '万',
      '十',
      '百',
      '千',
      '亿',
      '十',
      '百',
      '千',
      '万',
      '十',
      '百',
      '千',
      '亿'
    ];
    if (!num || isNaN(num)) return '零';
    var english = num.toString().split('');
    var result = '';
    for (var i = 0; i < english.length; i++) {
      var des_i = english.length - 1 - i; // 倒序排列设值
      result = arr2[i] + result;
      var arr1_index = english[des_i];
      result = arr1[arr1_index] + result;
    }
    result = result.replace(/零(千|百|十)/g, '零').replace(/十零/g, '十'); // 将【零千、零百】换成【零】 【十零】换成【十】
    result = result.replace(/零+/g, '零'); // 合并中间多个零为一个零
    result = result.replace(/零亿/g, '亿').replace(/零万/g, '万'); // 将【零亿】换成【亿】【零万】换成【万】
    result = result.replace(/亿万/g, '亿'); // 将【亿万】换成【亿】
    result = result.replace(/零+$/, ''); // 移除末尾的零
    // 将【一十】换成【十】
    result = result.replace(/^一十/g, '十');
    return result;
  },
  1. 时间推迟或提前

    调用:utils.getDateNew( 'day', 'yyyy-MM-dd', beginDate.value, -6 )

  /**
   * 时间推迟或者提前
   * @param {*} type
   * @param {*} formate
   * @param {*} currentDate
   * @param {*} number
   * @returns
   */
  getDateNew(
    type: string,
    format: string,
    currentDate: string,
    num: number
  ): string {
    if (!currentDate) return;
    const nowDate = new Date(currentDate);
    switch (type) {
      case 'day':
        nowDate.setDate(nowDate.getDate() - num);
        return this.dataFormat(nowDate, format);

      case 'hour':
        nowDate.setHours(nowDate.getHours() - num);
        // return dataFormat(nowDate, "yyyy-MM-dd hh:mm:ss");
        return this.dataFormat(nowDate, format);
      case 'mounth':
        let year: number | string = nowDate.getFullYear(); //当前年:四位数字
        let month: number | string = nowDate.getMonth(); //当前月:0-11
        let day: number | string = nowDate.getDate();
        //上个月
        if (num == -1) {
          if (month == 0) {
            //如果是0,则说明是1月份,上一个月就是去年的12月
            year -= 1;
            month = 12;
          }
        }

        if (num == 1) {
          month = month + 2;
          if (month == 13) {
            year += 1;
            month = 1;
          }
        }

        if (num == 0) {
          month = month + 1;
        }
        month = month < 10 ? '0' + month : String(month); //月份格式化:月份小于10则追加个0
        day = day < 10 ? '0' + day : day;
        let lastYearMonth = year + '-' + month + '-' + day;

        return lastYearMonth;
    }
  },
  1. 补充:a-select的模糊搜索功能,刚开始自己封装了一个模糊搜索方法,后来查阅到filterOption方法
     <a-select
          ref="select"
          v-model:value="item.value"
          :style="{ marginLeft: item.marginLeft, width: item.inputWidth }"
          :filter-option="filterOption"
          show-search
          @change="handleSelectChange($event, item.index)"
        >
          <a-select-option
            :value="ele.label"
            v-for="(ele, index) in item.options"
            :key="index"
            >{{ ele.label }}</a-select-option
          >
        </a-select>

重点:

    const filterOption = (input: string, option: any) => {
      console.log('input', input);
      console.log('option', option);
      // 将输入的内容与显示的内容进行匹配
      return option.value.toLowerCase().indexOf(input.toLowerCase()) >= 0;
    };