| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551 | import Validate from './validate.js';import regeneratorRuntime from './wxPromise.min.js'export default {  //验证  Validate,  regeneratorRuntime,  //格式化时间  formatTime(date, format) {    let newFormat = format || 'YY-M-D h:m:s';    let formatNumber = this.formatNumber;    let newDate = date || new Date();    if (Object.prototype.toString.call(newDate).slice(8, -1) !== "Date") {      newDate = new Date(date);    }    let week = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', '日', '一', '二', '三', '四', '五', '六'];    return newFormat.replace(/YY|Y|M|D|h|m|s|week|星期/g, function (a) {      switch (a) {        case 'YY':          return newDate.getFullYear();        case 'Y':          return (newDate.getFullYear() + '').slice(2);        case 'M':          return formatNumber(newDate.getMonth() + 1);        case 'D':          return formatNumber(newDate.getDate());        case 'h':          return formatNumber(newDate.getHours());        case 'm':          return formatNumber(newDate.getMinutes());        case 's':          return formatNumber(newDate.getSeconds());        case '星期':          return "星期" + week[newDate.getDay() + 7];        case 'week':          return week[newDate.getDay()];      }    })  },  //格式化数字  formatNumber(n) {    n = n.toString();    return n[1] ? n : '0' + n  },  /**   * 人性话格式时间   */  ctDate(date) {    const minute = 1000 * 60;    const hour = minute * 60;    const day = hour * 24;    const month = day * 30;    if (!date) return "";    const now = Date.now();    let diffValue;    let result;    date = typeof date === "number" ? date : +(new Date(date));    diffValue = now - date;    let monthC = diffValue / month;    let weekC = diffValue / (7 * day);    let dayC = diffValue / day;    let hourC = diffValue / hour;    let minC = diffValue / minute;    if (monthC >= 1) {      result = parseInt(monthC) + "个月前";    } else if (weekC >= 1) {      result = parseInt(weekC) + "个星期前";    } else if (dayC >= 1) {      result = parseInt(dayC) + "天前";    } else if (hourC >= 1) {      result = parseInt(hourC) + "个小时前";    } else if (minC >= 1) {      result = parseInt(minC) + "分钟前";    } else {      result = "刚刚发表";    }    return result;  },  //返回类型  typeOf(param) {    return Object.prototype.toString.call(param).slice(8, -1)  },  //判断是否为空  isEmpty(param) {    //基本类型为空    let condition1 = param === '' || param === null || param === undefined || param === "NaN" || param === false;    let condition2;    let condition3    //引用类型为空    if (!condition1) {      condition2 = this.typeOf(param) === "Object" && Object.keys(param).length < 1;      condition3 = this.typeOf(param) === "Array" && param.length < 1;    }    return condition1 || condition2 || condition3;  },  // 判断是否是数字  isNum(param) {    var reg = /^[0-9]+.?[0-9]*$/;    if (reg.test(param)) {      return true    }    return false  },  //检查授权  checkAuth(name) {    let that = this;    return new Promise((resove, reject) => {      wx.getSetting({        success(res) {          console.log(res.authSetting[`scope.${name}`], "res.authSetting")          if (res.authSetting[`scope.${name}`]) {            resove(true)          } else {            resove(false)          }        },        fail() {          that.networkError()        }      })    })  },  //小程序自带获取定位  getLocation() {    let that = this;    return new Promise((resove, reject) => {      wx.getLocation({        success: function (res) {          resove(res)        },        fail: function (res) {          reject(res)          that.hideAll()        }      })    })  },  //授权后调用百度地图接口获取当前城市  getLocation(_this) {    // 微信获得经纬度    let ak = 'GoI7BxLpfvBEyf1TcMXCloi99Vov7flZ'    return new Promise((resolve, reject) => {      wx.getLocation({        type: 'wgs84', //gcj02 // wgs84        success: function (res) {          let latitude = res.latitude          let longitude = res.longitude          wx.request({            url: 'https://api.map.baidu.com/reverse_geocoding/v3/?ak=sHZTomd7grslfP7sPKB8tRgT49FK9TEu&output=json&coordtype=gcj02&location=' + latitude + ',' + longitude,            data: {},            header: {              'Content-Type': 'application/json'            },            success: function (ops) {              let {                province,                city,                district              } = ops.data.result.addressComponent              let region = province + city + district              resolve({                region,                latitude,                longitude              })            },            fail: function (err) {              wx.showModal({                title: '信息提示',                content: '请求失败',                showCancel: false,                confirmColor: '#f37938'              });            },            complete: function () { }          })        },        fail(err) {          wx.showModal({            title: '未授权',            content: `为保证功能正常使用,点击「右上角」-「关于**」-「右上角」-「设置」,打开位置权限后重试`,            showCancel: false,          })          resolve()        },        complete: (data) => {        }      })    })  },  //网络错误提示  networkError(status = 0) {    const netMessage = {      "0": "网络异常",      "1": "请求超时",      "500": "服务器错误",      "404": "请求地址错误"    }    if (status != 500) return;    this.showFail(netMessage[status])  },  /* 打开提示信息 */  showModal(content = "服务器错误") {    wx.showModal({      title: "提示",      content,      showCancel: false    })  },  showLoading(title = "加载中") {    wx.showLoading({      title,      mask: true    })  },  showSuccess(title = "操作成功") {    wx.showToast({      title,    })  },  showFail(title = "操作失败") {    wx.showToast({      title,      icon: 'none'    })  },  hideLoading() {    wx.hideLoading()  },  /* 隐藏所有提示信息 */  hideAll() {    wx.hideLoading();    wx.stopPullDownRefresh();    wx.hideNavigationBarLoading();  },  //获取标签上data  getFormData(e) {    return e.detail.target.dataset  },  getData(e) {    return e.currentTarget.dataset  },  //获表单控件值  getValue(e) {    return e.detail.value  },  //跳转  goUrl(url, method = "navigateTo") {    if (!url) {      return;    }    //拨打电话    if (url.indexOf('tel:') > -1) {      wx.makePhoneCall({        phoneNumber: url.split(':')[1],      })      return;    }    //网页跳转    if (url.indexOf('http') > -1) {      wx.navigateTo({        url: `/pages/common/webview/webview?url=${url}`,      })      return;    }    //小程序跳转    if (url.indexOf('wx') == 0) {      var appIdData, pathData = '',        envVersionData = 'release';      var urlArr = url.split(':');      if (urlArr.length == 1) {        appIdData = urlArr[0];      } else if (urlArr.length == 2) {        appIdData = urlArr[0];        pathData = urlArr[1];      } else if (urlArr.length == 3) {        appIdData = urlArr[0];        pathData = urlArr[1];        envVersionData = urlArr[2];      }      wx.navigateToMiniProgram({        appId: appIdData,        path: pathData,        extraData: {          lb: 'longbing'        },        envVersion: envVersionData,        success(res) {          // 打开成功        }      })      return;    }    //消息插件跳转    if (url.indexOf('/nova-chat') == 0) {      getApp().JIMServ.chatNavigate(url);      return    }    //商城组件跳转    if (url.indexOf('/mshop') == 0) {      wx.navigateTo({        url      })      return    }    //正常页面跳转     wx[method]({      url    })  },  //复制文本  setClipboard(content) {    wx.setClipboardData({      data: content,      success: function (res) {        wx.getClipboardData({          success: function (res) {            console.log('复制文本成功 ==>>', res.data);          }        });      }    });  },  //格式化参数对象  setOptions(o) {    return encodeURIComponent(JSON.stringify(o))  },  //解析参数对象  getOptions(o) {    return JSON.parse(decodeURIComponent(o))  },  //获取页面对象,0时为当前页面  getPage(index = 0) {    let pages = getCurrentPages();    let page = pages[pages.length - 1 + index]    return page  },  //发起支付  pay(orderInfo) {    let that = this;    return new Promise((resove, reject) => {      wx.requestPayment({        timeStamp: orderInfo.timeStamp,        nonceStr: orderInfo.nonceStr,        'package': orderInfo.package,        signType: orderInfo.signType,        paySign: orderInfo.paySign,        success: function (res) {          resove(true)        },        fail: function (res) {          that.showFail("支付失败")        },        complete: function (res) {          console.log(res)        },      })    })  },  //深拷贝  deepCopy(o) {    let that = this;    if (o instanceof Array) {      var n = [];      for (var i = 0; i < o.length; ++i) {        n[i] = that.deepCopy(o[i]);      }      return n;    } else if (o instanceof Function) {      var n = new Function("return " + o.toString())();      return n    } else if (o instanceof Object) {      var n = {}      for (var i in o) {        n[i] = that.deepCopy(o[i]);      }      return n;    } else {      return o;    }  },  //获取数组中的id字符串,以逗号隔开  getIds: function (o) {    let ids = [];    o = o || [];    o.forEach((item) => {      ids.push(item.id || item)    })    return ids.join(',');  },  //查询某个字符在字符串的位置  searchSubStr: function (str, subStr) {    let positions = [];    let pos = str.indexOf(subStr);    while (pos > -1) {      positions.push(pos);      pos = str.indexOf(subStr, pos + 1);    }    return positions  },  //将一个数组根据规则分为两个  partition: function (arr, isValid) {    arr.reduce(      ([pass, fail], elem) =>        isValid(elem) ? [          [...pass, elem], fail        ] : [pass, [...fail, elem]], [      [],      []    ],    )  },  /*   * 获取链接某个参数   * url 链接地址   * name 参数名称   */  getUrlParam: function (url, name) {    var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)"); //构造一个含有目标参数的正则表达式对象      var r = url.split('?')[1].match(reg); //匹配目标参数      if (r != null) return unescape(r[2]);    return null; //返回参数值    },  /*  * 格式化扫码二维码的参数scene例如a=1&b=2转化为对象{a:1,b:2}  * param 参数scene  */  getSceneParam: function (param) {    if (!param) return {};    let paramArr = param.split('&');    let paramObj = {};    for (let item of paramArr) {      let sp = item.split("=")      paramObj[sp[0]] = sp[1]    }    return paramObj  },  /**   * @desc 函数防抖   * @param func 函数   * @param wait 延迟执行毫秒数   * @param immediate true 表立即执行,false 表非立即执行   */  debounce: function (func, wait, immediate) {    var timeout = null;    return function () {      var context = this;      var args = arguments;      if (timeout) clearTimeout(timeout);      if (immediate) {        let callNow = !timeout;        timeout = setTimeout(function () {          timeout = null;        }, wait)        if (callNow) func.apply(context, args)      } else {        timeout = setTimeout(function () {          func.apply(context, args)        }, wait);      }    }  },  getHostname(url) {    var reg = /^http(s)?:\/\/(.*?)\//    // 必须是http开头或者https开头,结尾为'/'    var ToReplace = 'Host/'    url.replace(reg, ToReplace)    url = reg.exec(url)[2];    return url;  },  nowPageIndex(tabBar) {    let pages = getCurrentPages();    let page = pages[pages.length - 1]    let route = page.__route__    let nowPageIndex;    for (let i in tabBar.list) {      let item = tabBar.list[i]      if (item.pagePath.includes(route)) {        nowPageIndex = i      }    }    return nowPageIndex;  },  getNavBarHeight() {    let {      statusBarHeight    } = wx.getSystemInfoSync();    let custom = wx.getMenuButtonBoundingClientRect();    let navBarHeight = custom.bottom + custom.top - statusBarHeight;    //let navBarHeight = statusBarHeight+44    return navBarHeight  },  splitArr(list, num) {    let newList = [];    let index = 0;    while (index < list.length) {      newList.push(list.slice(index, index += num));    }    return newList  },  getPageConfig(configInfo, arr = []) {    let pageConfig = {};    for (let i in arr) {      let key = arr[i]      pageConfig[key] = configInfo[key]    }    return pageConfig  },  //解析文件类型  getFileType(url) {    let pdfReg = /^.+(\.pdf)$/    let txtReg = /^.+(\.txt)$/    let wordReg = /^.+(\.doc|\.docx)$/    let excelReg = /^.+(\.xls|\.xlsx)$/    let jpgPng = /^.+(\.png)$/    let jpgJpg = /^.+(\.jpg)$/    let jpgJpeg = /^.+(\.jpeg)$/    if (pdfReg.test(url)) {      return 'pdf'    }    if (txtReg.test(url)) {      return 'txt'    }    if (wordReg.test(url)) {      return 'docx'    }    if (excelReg.test(url)) {      return 'xls'    }    if (jpgPng.test(url)) {      return 'png'    }    if (jpgJpg.test(url)) {      return 'jpg'    }    if (jpgJpeg.test(url)) {      return 'jpeg'    }  },}
 |