import IDCard from "../vendor/IDCard.js"; const dialog = uni.requireNativePlugin("CL-Dialog"); /** * @param {string} text 提示内容 * @param {int} time 多少时间消失 * @return {function} fn 函数 * */ const Tip = (text, time = 2000, fn = null) => { uni.showToast({ 'title': text, duration: time, icon: 'none' }); if (fn != null) setTimeout(() => { fn(); }, time); } /** * 加载数据 */ const loadIng = (title = false, mask = false) => { uni.showLoading({ title: title ? title : "加载中...", mask: mask }); } //询问框 const showModal = (title, success = null, fail = null) => { if (dialog != null) { let options = { title: "系统提示", //标题 (可选) con: title, //内容(可选)但是标题和内容至少选择一个 okTitle: "确认", //确认按钮文字(可选) cancleTitle: "取消", //取消按钮文字(可选) okTextColor: "#f1851e", //确认按钮颜色(可选) cancleTextColor: "#999999", //取消按钮颜色(可选) singer: false, //是否只显示确认按钮,默认false(可选 textAlign: "center", //对齐方式 //left居左,center居中 ,right 居右 默认居中 conColor: "", bgColor: "#ffffff", //自定义弹框颜色 titleColor: "#3d3d3d" //自定义title颜色 //提示框内容颜色; } dialog.show(options, () => { if (success != null) success(); }, () => { if (fail != null) fail(); }); } else { uni.showModal({ title: "系统提示", content: title, confirmText: "确定", cancelText: "取消", success: function(res) { if (res.confirm && success != null) { success(); return; } if (!res.confirm && fail != null) { fail(); return; } } }) } } /** * 提示框 */ const showAlert = (ob, success = null) => { var oAr = {}; if (ob instanceof Object) { oAr = ob; if (oAr['title'] == null || oAr['title'] == '') { oAr['title'] = "系统提示"; } } else { oAr['title'] = "系统提示"; oAr['content'] = ob; } if (dialog != null) { let options = { title: oAr['title'], //标题 (可选) con: oAr['content'], //内容(可选)但是标题和内容至少选择一个 okTitle: oAr['btn'] == null ? '确认' : oAr['btn'], //确认按钮文字(可选) okTextColor: "#f1851e", //确认按钮颜色(可选) singer: true, //是否只显示确认按钮,默认false(可选 textAlign: "center", //对齐方 式 //left居左,center居中 ,right 居右 默认居中 conColor: "", bgColor: "#ffffff", //自定义弹框颜色 titleColor: "#3d3d3d" //自定义title颜色 //提示框内容颜色; } // console.log(dialog); dialog.show(options, () => { if (success != null) success(); }); } else { uni.showModal({ title: oAr['title'], content: oAr['content'], confirmText: oAr['btn'] == null ? '确认' : oAr['btn'], showCancel: false, success: function() { if (success != null) success(); } }); } } /** * 判断是否微信 * @return {bool} 是否微信 */ function isWeiXin() { var ua = window.navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == 'micromessenger') { return true; } else { return false; } } /** * 判断是否存在 * @param {Object} value */ function isDefine(value) { if (value == null || value == "" || value == "undefined" || value == undefined || value == "null" || value == "(null)" || value == 'NULL' || typeof(value) == 'undefined') { return false; } else { value = value + ""; value = value.replace(/\s/g, ""); if (value == "") { return false; } return true; } } /** * 时间戳11位 */ function timest() { var tmp = Date.parse(new Date()).toString(); tmp = tmp.substr(0, 10); return tmp; } /** * 时间戳格式化函数 * @param {string} format 格式 * @param {int} timestamp 要格式化的时间 默认为当前时间 * @return {string} 格式化的时间字符串 */ function date(format, timestamp) { var a, jsdate = ((timestamp) ? new Date(timestamp * 1000) : new Date()); var pad = function(n, c) { n = n + ""; if (n.length < c) { var i = c - n.length; var v = ''; for (var j = 0; j < i; j++) { v += '0'; } return v + n; } else { return n; } }; var txt_weekdays = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"]; var txt_ordin = { "1": "st", "2": "nd", "3": "rd", "21": "st", "22": "nd", "23": "rd", "31": "st" }; var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; var f = { // Day d: function() { return pad(f.j(), 2) }, D: function() { return f.l().substr(0, 3) }, j: function() { return jsdate.getDate() }, l: function() { return txt_weekdays[f.w()] }, N: function() { return f.w() + 1 }, S: function() { return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th' }, w: function() { return jsdate.getDay() }, // Week W: function() { var a = f.z(), b = 364 + f.L() - a; var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1; if (b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) { return 1; } else { if (a <= 2 && nd >= 4 && a >= (6 - nd)) { nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31"); return date("W", Math.round(nd2.getTime() / 1000)); } else { return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0); } } }, // Month F: function() { return txt_months[f.n()] }, m: function() { return pad(f.n(), 2) }, M: function() { return f.F().substr(0, 3) }, n: function() { return jsdate.getMonth() + 1 }, t: function() { var n; if ((n = jsdate.getMonth() + 1) == 2) { return 28 + f.L(); } else { if (n & 1 && n < 8 || !(n & 1) && n > 7) { return 31; } else { return 30; } } }, //o not supported yet Y: function() { return jsdate.getFullYear() }, y: function() { return (jsdate.getFullYear() + "") }, // Time a: function() { return jsdate.getHours() > 11 ? "pm" : "am" }, A: function() { return f.a().toUpperCase() }, B: function() { // peter paul koch: var off = (jsdate.getTimezoneOffset() + 60) * 60; var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off; var beat = Math.floor(theSeconds / 86.4); if (beat > 1000) beat -= 1000; if (beat < 0) beat += 1000; if ((String(beat)).length == 1) beat = "00" + beat; if ((String(beat)).length == 2) beat = "0" + beat; return beat; }, g: function() { return jsdate.getHours() % 12 || 12 }, G: function() { return jsdate.getHours() }, h: function() { return pad(f.g(), 2) }, H: function() { return pad(jsdate.getHours(), 2) }, i: function() { return pad(jsdate.getMinutes(), 2) }, s: function() { return pad(jsdate.getSeconds(), 2) }, //u not supported yet // Timezone //e not supported yet //I not supported yet O: function() { var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4); if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t; return t; }, P: function() { var O = f.O(); return (O.substr(0, 3) + ":" + O.substr(3, 2)) }, //T not supported yet //Z not supported yet // Full Date/Time c: function() { return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P() }, //r not supported yet U: function() { return Math.round(jsdate.getTime() / 1000) } }; return format.replace(/[\\]?([a-zA-Z])/g, function(t, s) { var ret = ''; if (t != s) { ret = s; } else if (f[s]) { ret = f[s](); } else { ret = s; } return ret; }); } /** * strtotime()函数 * strtotime('2012-07-27 12:43:43') OR strtotime('2012-07-27') * @return 时间戳 */ function strtotime(str = '') { if (str == '') { var _temp = new Date(); return parseInt(_temp.getTime() / 1000); } var _arr = str.split(' '); var _day = _arr[0].split('-'); _arr[1] = (_arr[1] == null) ? '0:0:0' : _arr[1]; var _time = _arr[1].split(':'); for (var i = _day.length - 1; i >= 0; i--) { _day[i] = isNaN(parseInt(_day[i])) ? 0 : parseInt(_day[i]); }; for (var i = _time.length - 1; i >= 0; i--) { _time[i] = isNaN(parseInt(_time[i])) ? 0 : parseInt(_time[i]); }; var _temp = new Date(_day[0], _day[1] - 1, _day[2], _time[0], _time[1], _time[2]); return parseInt(_temp.getTime() / 1000); } /** * 小数保留默认2位 */ function returnFloat(value) { var value = Math.round(parseFloat(value) * 100) / 100; var xsd = value.toString().split("."); if (xsd.length == 1) { value = value.toString() + ".00"; return value; } if (xsd.length > 1) { if (xsd[1].length < 2) { value = value.toString() + "0"; } return value; } } /** * 百分比 */ function percentage(value, value2) { return returnFloat((value / value2) * 100); } /** * 倒计时【验证码】 * @time 倒计时 秒 * @结束 */ function CountDowm(time, fe = null) { var id = setInterval(() => { time--; if (fe != null) fe(time, 0); if (time <= 0) { clearInterval(id); fe(0, 1); } }, 1000); } /** * 远程获取[GET同步返回] * @parm url 地址 * @parm data get数据 * @parm fn 异步返回 */ const httpGet = (url, data, fn, fe) => { // if (fe == null) { fe = () => { Tip("网络错误,请稍等尝试..."); wx.hideLoading() } }; if (data == null) data = { time: Math.round(new Date().getTime() / 1000) }; uni.request({ url: url, data: post, success: res => { if (res.statusCode == 200) if (fn != null) fn(res.data); else fe(); }, fail: () => { fe(); } }); } /** * 远程获取[GET异步返回] * @parm url 地址 * @parm data get数据 */ const httpGetAsy = (url, data) => { return new Promise((resolve, reject) => { if (data == null) data = { time: Math.round(new Date().getTime() / 1000) }; uni.request({ url: url, data: data, success: res => { if (res.statusCode == 200) resolve(res.data); else reject(); }, fail: () => { reject(); } }); }); }; /** * 判断手机号码是否准确 */ const isPoneAvailable = (tel) => { var myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/; if (!myreg.test(tel)) { return false; } else { return true; } }; /** * 远程获取[POST异步操作] * @parm url 地址 * @parm post post数据 */ const httpPostAsy = (url, post) => { return new Promise((resolve, reject) => { uni.request({ url: url, method: 'POST', data: post, header: { "content-type": "application/x-www-form-urlencoded" }, success: res => { if (res.statusCode == 200) resolve(res.data); else reject(); }, fail: () => { reject(); } }); }); }; /** * 广告跳转页面 * @param {Object} url */ function navigateTo(url) { if (url == '#' || url == '') { return; } var switchAr = [ '/pages/cart/index' ]; for (var i in switchAr) { if (switchAr[i] == url) { uni.switchTab({ url: url }); } } if (url.indexOf("http://") >= 0 || url.indexOf("https://") >= 0) { location.href = url; return; } uni.navigateTo({ url: url }); } /** * 阿拉伯数字转中文数字 * @param {Object} num */ function noToChinese(num) { if (!/^\d*(\.\d*)?$/.test(num)) { alert("Number is wrong!"); return "Number is wrong!"; } var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九"); var BB = new Array("", "十", "百", "千", "万", "亿", "点", ""); var a = ("" + num).replace(/(^0*)/g, "").split("."), k = 0, re = ""; for (var i = a[0].length - 1; i >= 0; i--) { switch (k) { case 0: re = BB[7] + re; break; case 4: if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0])) re = BB[4] + re; break; case 8: re = BB[5] + re; BB[7] = BB[5]; k = 0; break; } if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re; if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re; k++; } if (a.length > 1) //加上小数部分(如果有小数部分) { re += BB[6]; for (var i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)]; } return re; }; /** * 字节转换 */ function bytesToSize(bytes) { if (bytes === 0) return '0 B'; var k = 1024; var sizes = ['B', 'KB', 'M', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']; var i = Math.floor(Math.log(bytes) / Math.log(k)); return toDecimal(bytes / Math.pow(k, i)) + ' ' + sizes[i]; } /** * 星座 */ function constellation(strBirthday) { if (strBirthday == '0') return '无'; var strBirthdayArr = strBirthday.split("-"); var month = strBirthdayArr[1]; var date = strBirthdayArr[2]; if (month == 1 && date >= 20 || month == 2 && date <= 18) { return "水瓶座"; } if (month == 2 && date >= 19 || month == 3 && date <= 20) { return "双鱼座"; } if (month == 3 && date >= 21 || month == 4 && date <= 19) { return "白羊座"; } if (month == 4 && date >= 20 || month == 5 && date <= 20) { return "金牛座"; } if (month == 5 && date >= 21 || month == 6 && date <= 21) { return "双子座"; } if (month == 6 && date >= 22 || month == 7 && date <= 22) { return "巨蟹座"; } if (month == 7 && date >= 23 || month == 8 && date <= 22) { return "狮子座"; } if (month == 8 && date >= 23 || month == 9 && date <= 22) { return "室女座"; } if (month == 9 && date >= 23 || month == 10 && date <= 22) { return "天秤座"; } if (month == 10 && date >= 23 || month == 11 && date <= 21) { return "天蝎座"; } if (month == 11 && date >= 22 || month == 12 && date <= 21) { return "人马座"; } if (month == 12 && date >= 22 || month == 1 && date <= 19) { return "摩羯座"; } } /** * 消息时间值转化 * @param {int} timestamp 要格式化的时间 默认为当前时间 * @return {string} 格式化的时间字符串 */ function timeLastdate(timestamp, isWeekTime = false) { //判断是否今天 var stoday = strtotime(date('Y-m-d 00:00:00')); if (timestamp > stoday) { var h = date('H'); if (h <= 12) return '早上' + date('H:i', timestamp); else return '下午' + date('H:i', timestamp); } //昨天 var day = new Date(); day.setTime(day.getTime() - 24 * 60 * 60 * 1000); var ytoday = day.getTime() / 1000; var s_yesterday = strtotime(date('Y-m-d 0:0:0', ytoday)); var e_yesterday = strtotime(date('Y-m-d 23:59:59', ytoday)); if (timestamp > s_yesterday && timestamp < e_yesterday) { return '昨天' + date('H:i', timestamp); } //获取周一时间 var dayInWeek = day.getDay(); dayInWeek == 0 && (dayInWeek = 7); var beginWeek = strtotime(date('Y-m-d 0:0:0', (day.getTime() - (dayInWeek - 1) * 86400000) / 1000)); if (timestamp >= beginWeek) { return date('l', timestamp) + (isWeekTime == true ? date('h:i', timestamp) : ''); } //判断是否今年 var y = day.getFullYear(); var y1 = date('Y', timestamp); if (y == y1) { return isWeekTime ? date('m月d日 H:i', timestamp) : date('m月d日', timestamp); } return date('Y年m月d日 H:i', timestamp); } function countdown(time, isAr) { var str = ""; var day = parseInt(time / (3600 * 24)); var day_yusu = time % (3600 * 24); var housr = parseInt(day_yusu / 3600); var housr_yusu = day_yusu % 3600; var minutes = parseInt(housr_yusu / 60); var seconds = housr_yusu % 60; if (isAr) { return [day, (housr > 9 ? housr : ('0' + housr)), (minutes > 9 ? minutes : ('0' + minutes)), (seconds > 9 ? seconds : ('0' + seconds)) ]; } if (day > 0) { str = day + '天'; } console.log(seconds); str += (housr > 9 ? housr : ('0' + housr)) + ':' + (minutes > 9 ? minutes : ('0' + minutes)) + ':' + (seconds > 9 ? seconds : ('0' + seconds)); return str; } /** * 金钱单位模拟 * @param {Object} str */ function moneyUnit(str) { let money = parseFloat(str); if (money < 1000) { return money + "元"; } if (money >= 1000) { return Math.floor(money / 1000) + "K"; } } /** * 返回薪水 * @param {Object} min_price 最小金额 * @param {Object} max_price 最大金额 * @param {Object} salary_type 薪水类型 */ function nxMoney(min_price, max_price, salary_type) { var tls = ""; if (min_price == max_price && min_price == 0) { return '面议'; } if (min_price == max_price && min_price > 0) { tls = (min_price) + "元"; } //以上 if (min_price > 0 && max_price == 0) { tls = (min_price) + "元以上"; } //区间 if (min_price > 0 && max_price > 0) { tls = (min_price) + "元-" + (max_price) + "元"; } //小时制 if (salary_type == 2) { tls += "/每小时"; } //天制 if (salary_type == 3) { tls += "/每天"; } return tls; } /** * 最小年龄 | 最大年龄 * @param {Object} min_age * @param {Object} max_age */ function nxAge(min_age, max_age) { if (min_age > 0 && max_age > 0 && max_age != min_age) { return min_age + "岁-" + max_age + "岁"; } if (min_age > 0 && max_age > 0 && max_age == min_age) { return min_age + "岁"; } if (min_age > 0 && max_age == 0) { return min_age + "岁以上"; } if (min_age == 0 && max_age > 0) { return max_age + "岁以下"; } if (min_age == 0 && max_age == 0) { return "不限年龄"; } } function toH5ml(str) { if (str == null || str.length == 0) return ''; //#ifdef H5 var newStr = str.replace(/\n/g, '_@').replace(/\r/g, '_#'); newStr = newStr.replace(/_#_@/g, '
'); //IE7-8 newStr = newStr.replace(/_@/g, '
'); //IE9、FF、chrome newStr = newStr.replace(/\s/g, ' '); //空格处理 return newStr; //#endif //#ifndef H5 str = str.replace(/\n/g, '
'); //替换HTML空格 //#endif return str; } function bankCode(code) { if (code.length <= 12) { return code; } var len = parseInt(code.length / 4) + (code.length % 4 > 0 ? 1 : 0); var reStr = ""; for (var i = 0; i < len; i++) { var llen = ((i * 4) + 4) >= code.length ? code.length : (i * 4); reStr += code.substr((i * 4), 4) + " "; } return reStr; } /** * 标题搜索突出关键词 * @param {Object} title1 * @param {Object} title2 */ function titleTag(title1, title2) { var dAr = []; for (var i in title2) { if (title1.indexOf(title2[i]) >= 0) { dAr.push({ name: title2[i], type: 's' }); } else { dAr.push({ name: title2[i], type: 'e' }); } } return dAr; } /** * 检验18位身份证号码(15位号码可以只检测生日是否正确即可) * @author wolfchen * @param cid 18为的身份证号码 * @return Boolean 是否合法 **/ function isCnNewID(cid) { return IDCard(cid); } /** * 自动计算高度 | 宽度 * @param width 原始 * @param height 原始 * @param mWidth 现在 0不参与计算 * @param mHeight 现在 */ function getAotuWidth(width, height, mWidth, mHeight = 0) { if (mWidth > 0 && mHeight == 0) { return (height / width) * mWidth; } if (mWidth == 0 && mHeight > 0) { return (width / height) * mHeight; } return 0; } function getAvatar(img, type) { if (isDefine(img) && img != "") { return img; } return type == 'chat' ? '/static/chat/user-avatar.png' : '/static/chat/group_chat.png'; } /** * 销售量 * @param {Object} count */ function sales(count) { if (isNaN(count)) return 0; if (count < 100) return count + ""; if (count > 100 && count < 1000) return parseInt(count / 100) * 100 + "+"; if (count >= 1000 && count < 10000) return parseInt(count / 1000) * 1000 + "+"; if (count >= 10000) return parseInt(count / 10000) + "万+"; } /** * 数字转化文字 * @param {Object} num */ function numberToChinese(num) { var cnNums = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"]; var cnIntRadice = ["", "十", "百", "千"]; var cnIntUnits = ["", "万", "亿", "兆"]; var integerNum = Math.floor(num); var decimalNum = Math.round((num - integerNum) * 100); function convertToChinese(num) { var cnStr = ""; var numStr = num.toString(); var length = numStr.length; var lastNonZero = false; // 用于处理连续的零 for (var i = 0; i < length; i++) { var digit = numStr.charAt(i); if (digit === "0") { lastNonZero = false; if (i === length - 1 || numStr.charAt(i + 1) !== "0") { cnStr += cnNums[parseInt(digit)]; } } else { cnStr += cnNums[parseInt(digit)] + cnIntRadice[length - i - 1]; lastNonZero = true; } } return cnStr; } var chineseStr = ""; var zeroCount = 0; while (integerNum > 0) { var section = integerNum % 10000; if (zeroCount > 0) { chineseStr = cnNums[0] + chineseStr; // 处理连续的零 } chineseStr = convertToChinese(section) + cnIntUnits[zeroCount] + chineseStr; integerNum = Math.floor(integerNum / 10000); zeroCount++; } chineseStr += convertToChinese(decimalNum); chineseStr = chineseStr.replace(/(零.)*零$/, "").replace(/^$/, "零"); if (chineseStr[chineseStr.length - 1] == '零') { chineseStr = chineseStr.substring(0, chineseStr.length - 1); } return chineseStr; } /** * 取小数位0 * @param {Object} num */ function removeTrailingZeros(num) { let str = num.toString(); if (str.indexOf('.') !== -1) { let parts = str.split('.'); let decimalPart = parts[1].replace(/0+$/, ''); if (decimalPart.length === 0) { return parseInt(parts[0]); } else { return parts[0] + '.' + decimalPart; } } else { return str; } } function isJSON(str) { if (typeof str == 'string') { try { var obj = JSON.parse(str); if (typeof obj == 'object' && obj) { return true; } else { return false; } } catch (e) { return false; } } } const uuidv4 = function() { return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) { let r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16) }) } const getAppStore =()=>{ return new Promise((resolve,reject)=>{ const getPageApp = ()=> { try { const app = getApp() if (app.$store) { resolve(app) } } catch (err) { setTimeout(() => { getPageApp() }, 200) } } getPageApp() }) } export default { getAppStore:getAppStore, uuidv4: uuidv4, Tip: Tip, // sales: sales, //销售数量 loadIng: loadIng, //加载效果 showModal: showModal, //确认框 showAlert: showAlert, //提示框 date: date, //时间戳解析时间 strtotime: strtotime, //日期解析时间戳 returnFloat: returnFloat, //小数保留二位 CountDowm: CountDowm, //倒计时 isDefine: isDefine, //判断是否空 httpGet: httpGet, //同步获取GET timest: timest, //获取11位时间戳 httpGetAsy: httpGetAsy, //异步GET httpPostAsy: httpPostAsy, //异步POST isPoneAvailable: isPoneAvailable, //判断手机号码 navigateTo: navigateTo, //页面跳转 noToChinese: noToChinese, //数字转为中文数字 timeLastdate: timeLastdate, moneyUnit: moneyUnit, //金钱单位 bankCode: bankCode, //银行卡hide toH5ml: toH5ml, //格式化 nxAge: nxAge, //年龄格式化 nxMoney: nxMoney, //金钱格式化 titleTag: titleTag, //标题tag countdown: countdown, isCnNewID: isCnNewID, getAotuWidth: getAotuWidth, percentage: percentage, getAvatar: getAvatar, isJSON: isJSON, numberToChinese: numberToChinese, //数字转化中文 removeTrailingZeros: removeTrailingZeros, navigateBack: () => { const pages = getCurrentPages(); pages.length > 1 ? uni.navigateBack() : uni.reLaunch({ url: "/pages/index/home" }); } }