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'
- }
- },
- }
|