export default { isEmpty: function (value) { if (value === undefined || value === null) return true if (typeof value === 'string' && value.trim() === '') return true return false }, trim: function (value) { //去空格 return value.replace(/(^\s*)|(\s*$)/g, '') }, isMobile: function (value) { //是否为手机号 return /^(?:13\d|14\d|15\d|16\d|17\d|18\d|19\d)\d{5}(\d{3}|\*{3})$/.test(value) }, isFloat: function (value) { //金额,只允许保留两位小数 return /^([0-9]*[.]?[0-9])[0-9]{0,1}$/.test(value) }, isNum: function (value) { //是否全为数字 return /^[0-9]+$/.test(value) }, checkPwd: function (value) { //密码为8~20位数字和字母组合 return /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,20}$/.test(value) }, formatNum: function (num) { //格式化手机号码 if (utils.isMobile(num)) { num = num.replace(/^(\d{3})\d{4}(\d{4})$/, '$1****$2') } return num }, rmoney: function (money) { //金额格式化 return parseFloat(money) .toFixed(2) .toString() .split('') .reverse() .join('') .replace(/(\d{3})/g, '$1,') .replace(/\,$/, '') .split('') .reverse() .join('') }, copyText(text) { let inputElement = document.createElement('input') inputElement.value = text document.body.appendChild(inputElement) inputElement.select() //选中文本 document.execCommand('copy') //执行浏览器复制命令 inputElement.remove() }, /** * fn:检测图片协议,主要用于检测海报图片协议。 * param(imgPath): 图片地址。 */ checkImgHttp(imgPath) { let newPath = '' let pathArr = imgPath.split('://') // #ifdef H5 let ishttps = 'https:' == window.location.protocol ? true : false ishttps ? (pathArr[0] = 'https') : (pathArr[0] = 'http') // #endif // #ifdef MP-WEIXIN pathArr[0] = 'https' // #endif newPath = pathArr.join('://') return newPath }, // 打电话 callPhone(phoneNumber = '') { let num = phoneNumber.toString() uni.makePhoneCall({ phoneNumber: num, fail(err) { console.log('makePhoneCall出错', err) } }) }, // 图片处理-选择图片 chooseImage(count = 1) { return new Promise((resolve, reject) => { uni.chooseImage({ count: count, //默认9 sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有 sourceType: ['album'], //从相册选择 success: res => { resolve(res.tempFilePaths) } }) }).catch(e => { reject(e) }) }, // 图片处理-上传图片 uploadImage(api, url) { let config_url = API_URL uni.showLoading({ title: '上传中' }) return new Promise((resolve, reject) => { uni.uploadFile({ url: config_url + api, filePath: url, name: 'file', success: res => { res = JSON.parse(res.data) if (res.code === 1) { uni.hideLoading() uni.showToast({ title: '上传成功', icon: 'none' }) resolve(res.data) } else { uni.hideLoading() uni.showModal({ title: '上传失败', content: res.msg }) } } }) }).catch(e => { reject(e) }) }, // 图片处理-预览图片 previewImage(urls = [], current = 0) { uni.previewImage({ urls: urls, current: current, indicator: 'default', loop: true, fail(err) { console.log('previewImage出错', urls, err) } }) }, // 图片处理-获取图片信息 getImageInfo(src = '') { return new Promise((resolve, reject) => { uni.getImageInfo({ src: src, success: image => { resolve(image) }, fail(err) { console.log('getImageInfo出错', src, err) } }) }).catch(e => { reject(e) }) }, /** * 格式化时间 */ //时间格式化 天时分秒 format(t) { let format = { d: '00', h: '00', m: '00', s: '00' } if (t > 0) { let d = Math.floor(t / 86400) let h = Math.floor((t / 3600) % 24) let m = Math.floor((t / 60) % 60) let s = Math.floor(t % 60) format.d = d < 10 ? '0' + d : d format.h = h < 10 ? '0' + h : h format.m = m < 10 ? '0' + m : m format.s = s < 10 ? '0' + s : s } return format }, //时间格式化(格式化最大为小时) formatToHours(t) { let format = { d: '00', h: '00', m: '00', s: '00' } if (t > 0) { let h = Math.floor(t / 3600) let m = Math.floor((t / 60) % 60) let s = Math.floor(t % 60) format.h = h < 10 ? '0' + h : h format.m = m < 10 ? '0' + m : m format.s = s < 10 ? '0' + s : s } return format }, // 年月日 timestamp(timestamp) { let date = new Date(timestamp * 1000) //根据时间戳生成的时间对象 let y = date.getFullYear() let m = date.getMonth() + 1 let d = date.getDate() m = m < 10 ? '0' + m : m d = d < 10 ? '0' + d : d let dateText = y + '-' + m + '-' + d return dateText }, // 年月日,时分秒 // "YYYY-mm-dd HH:MM" dateFormat(fmt, date) { let ret const opt = { 'Y+': date.getFullYear().toString(), // 年 'm+': (date.getMonth() + 1).toString(), // 月 'd+': date.getDate().toString(), // 日 'H+': date.getHours().toString(), // 时 'M+': date.getMinutes().toString(), // 分 'S+': date.getSeconds().toString() // 秒 // 有其他格式化字符需求可以继续添加,必须转化成字符串 } for (let k in opt) { ret = new RegExp('(' + k + ')').exec(fmt) if (ret) { fmt = fmt.replace(ret[1], ret[1].length == 1 ? opt[k] : opt[k].padStart(ret[1].length, '0')) } } return fmt }, /** * @fn 时间间隔格式化 * @param {*} startTime 开始时间的时间戳 * @param {*} endTime 结束时间的时间戳 * @return {string} str 返回时间字符串 */ getTimeInterval(startTime, endTime) { let runTime = parseInt((endTime - startTime) / 1000) let year = Math.floor(runTime / 86400 / 365) runTime = runTime % (86400 * 365) let month = Math.floor(runTime / 86400 / 30) runTime = runTime % (86400 * 30) let day = Math.floor(runTime / 86400) runTime = runTime % 86400 let hour = Math.floor(runTime / 3600) runTime = runTime % 3600 let minute = Math.floor(runTime / 60) runTime = runTime % 60 let second = runTime let str = '' if (year > 0) { str = year + '年' } if (year <= 0 && month > 0) { str = month + '月' } if (year <= 0 && month <= 0 && day > 0) { str = day + '天' } if (year <= 0 && month <= 0 && day <= 0 && hour > 0) { str = hour + '小时' } if (year <= 0 && month <= 0 && day <= 0 && hour <= 0 && minute > 0) { str = minute + '分钟' } if (year <= 0 && month <= 0 && day <= 0 && hour <= 0 && minute <= 0 && second > 0) { str += second + '秒' } str += '前' return str }, /**提示框 *title(标题) *icon(图标): success,loading,none *duration(延时): 0为不关闭, 毫秒数 *options(其它参数) */ msg(title, duration = 2000, mask = false, icon = 'none') { //统一提示方便全局修改 if (Boolean(title) === false) { return } uni.showToast({ title, duration, mask, icon }) }, /** * @description 弹窗提示 showModal */ showModal(content, callback) { uni.showModal({ title: '提示', content: content, showCancel: false, success(res) { if (res.confirm) { if (typeof callback === 'function') { callback() } } else if (res.cancel) { } } }) }, showPromiseModal(title, content) { return new Promise(resolve => { uni.showModal({ title, content, cancelColor: '#0055A2', confirmColor: '#0055A2', success: res => { resolve(res.confirm) // true 表示点击了确定,false 表示取消 }, fail: () => resolve(false) }) }) }, isRsk() { let sysInfo = uni.getSystemInfoSync() let brand = sysInfo.brand.toLowerCase() if (sysInfo.platform == 'android' && brand.indexOf('qualcomm') > -1) { return true } return false }, // 自定义 replacer,将函数转换为字符串。json序列化和反序列化时避免函数丢失 replacer(key, value) { if (typeof value === 'function') { return value.toString() } return value }, // 自定义 reviver,将字符串转换回函数.json序列化和反序列化时避免函数丢失 reviver(key, value) { const functionKeys = ['change', 'dicFormatter', 'click', 'focus', 'blur'] if (functionKeys.includes(key)) { // 将字符串转换为函数 return new Function('return ' + value)() } return value } }