-
zhangwei
2024-10-08 93a986bc80abdef75923054b9df9adb6e1ccff52
src/common/utils/util.js
@@ -133,6 +133,24 @@
         parseInt(t[2], 10) || null
      )).getTime() / 1000;
   },
   formatDate(dat, type, addNum) {
      if(!dat){
         return '-'
      }
      let date = new Date(dat)
      if(addNum){
         date = new Date(date.setDate(date.getDate() + addNum));
      }
      const year = date.getFullYear();
      const month = (date.getMonth() + 1).toString().padStart(2, '0');
      const day = date.getDate().toString().padStart(2, '0');
      const hours = date.getHours().toString().padStart(2, '0');
      const minutes = date.getMinutes().toString().padStart(2, '0');
      if (type) {
         return `${year}-${month}-${day} ${hours}:${minutes}`;
      }
      return `${year}-${month}-${day}`;
   },
   /**
    * 倒计时
    * @param {Object} seconds 秒
@@ -695,6 +713,124 @@
         }
      }
      typeof callback == 'function' && callback(theRequest);
   }
   },
   /**
    * 路径转base64
    * @param {Object} string
    */
   pathToBase64(path) {
      if (/^data:/.test(path)) return path
      return new Promise((resolve, reject) => {
         // #ifdef H5
         let image = new Image();
         image.setAttribute("crossOrigin", 'Anonymous');
         image.onload = function() {
            let canvas = document.createElement('canvas');
            canvas.width = this.naturalWidth;
            canvas.height = this.naturalHeight;
            canvas.getContext('2d').drawImage(image, 0, 0);
            let result = canvas.toDataURL('image/png')
            resolve(result);
            canvas.height = canvas.width = 0
         }
         image.src = path + '?v=' + Math.random()
         image.onerror = (error) => {
            reject(error);
         };
         // #endif
         // #ifdef MP
         if (uni.canIUse('getFileSystemManager')) {
            uni.getFileSystemManager().readFile({
               filePath: path,
               encoding: 'base64',
               success: (res) => {
                  resolve('data:image/png;base64,' + res.data)
               },
               fail: (error) => {
                  reject(error)
               }
            })
         }
         // #endif
         // #ifdef APP-PLUS
         plus.io.resolveLocalFileSystemURL(getLocalFilePath(path), (entry) => {
            entry.file((file) => {
               const fileReader = new plus.io.FileReader()
               fileReader.onload = (data) => {
                  resolve(data.target.result)
               }
               fileReader.onerror = (error) => {
                  reject(error)
               }
               fileReader.readAsDataURL(file)
            }, reject)
         }, reject)
         // #endif
      })
   },
   roundToTwo(num){
      if(isNaN(num)){
         return 0
      }
      return Math.round((num + Number.EPSILON) * 100) / 100;
   },
   /**
    * @method 函数防抖
    * @desc 短时间内多次触发同一事件,只执行最后一次,或者只执行最开始的一次,中间的不执行。
    * @param func 目标函数
    * @param wait 延迟执行毫秒数
    * @param immediate true - 立即执行, false - 延迟执行
    */
   debounce(func, wait = 1000, immediate = true) {
      let timer;
      return function() {
         let context = this,
            args = arguments;
         if (timer) clearTimeout(timer);
         if (immediate) {
            let callNow = !timer;
            timer = setTimeout(() => {
               timer = null;
            }, wait);
            if (callNow) func.apply(context, args);
         } else {
            timer = setTimeout(() => {
               func.apply(context, args);
            }, wait)
         }
      }
   },
   /**
    * @method 函数节流
    * @desc 指连续触发事件,但是在 n 秒内只执行一次函数。即 2n 秒内执行 2 次... 。会稀释函数的执行频率。
    * @param func 函数
    * @param wait 延迟执行毫秒数
    * @param type 1 在时间段开始的时候触发 2 在时间段结束的时候触发
    */
   throttle(func, wait = 1000, type = 1) {
      let previous = 0;
      let timeout;
      return function() {
         let context = this;
         let args = arguments;
         if (type === 1) {
            let now = Date.now();
            if (now - previous > wait) {
               func.apply(context, args);
               previous = now;
            }
         } else if (type === 2) {
            if (!timeout) {
               timeout = setTimeout(() => {
                  timeout = null;
                  func.apply(context, args)
               }, wait)
            }
         }
      }
   },
}