import CONSTANT from "@/constant"; import { mobileReg } from "@/utils/tools/validate"; import { getMiniAppUrl, isWxBrowser } from "@/utils/common"; // 是否为空 const isEmpty = val => { if (val instanceof Array) { if (val.length === 0){ return true } } else if (val instanceof Object) { if (Object.keys(val).length == 0){ return true } } else { if ( val === "null" || val === null || val === "undefined" || val === undefined || val === "" || JSON.stringify(val) == "[]"){ return true } return false; } return false; }; /** * 深拷贝对象 * @param {要拷贝对象} obj */ export const copyObject = obj => { let str, newobj = Array.isArray(obj) === true ? [] : {}; if (typeof obj !== "object") { return; } else if (JSON) { (str = JSON.stringify(obj)), //系列化对象 (newobj = JSON.parse(str)); //还原 } else { for (let i in obj) { newobj[i] = typeof obj[i] === "object" ? copyObject(obj[i]) : obj[i]; } } return newobj; }; const numberFormat = (number, type) => { if (number > 10000) { let num = (number / 10000 + "").split("."); return `${num[0]}.${("" + num[1]).slice(0, 1)} 万`; } else { return parseFloat(number) } }; // 截取图片上传字符串 const imgSubstr = val => { if (isEmpty(val)) return []; if (isArray(val)) { return val.map(e => { let index = e.indexOf("/uploads/"); e = e.substring(index); return e; }); } else { let index = val.indexOf("/uploads/"); return val.substring(index); } }; // 是否为数组 const isArray = arr => { return typeof arr == "object" && arr.constructor == Array; }; // 是否为字符串 const isString = str => { return typeof str == "string" && str.constructor == String; }; // 是否为对象 const isObject = obj => { return typeof obj == "object" && obj.constructor == Object; }; // 是否为数字 const isNumber = num => { return typeof num == "number" && num.constructor == Number; }; //是否金额 const isMoney = money =>{ return /(^[1-9]([0-9]+)?(\.[0-9]{1,2})?$)|(^(0){1}$)|(^[0-9]\.[0-9]([0-9])?$)/.test(money) } // 是否为日期类型 const isDate = date => { return typeof date == "object" && date.constructor == Date; }; // 是否为函数 const isFunction = obj => { return typeof obj == "object" && obj.constructor == Function; }; const checkMobile = num => { return mobileReg.test(num); }; const checkName = str => { return /^[\u4E00-\u9FA5A-Za-z\s]+(·[\u4E00-\u9FA5A-Za-z]+)*$/.test(str); }; /** * * 检查登录 * @parmas query 拼接得参数对象 * @parmas isFrist 为true时开头为& */ export async function getCheckLogin() { let status = false; let token = uni.getStorageSync("token"); if (token) { status = true; } else { // #ifdef H5 if (isWxBrowser()) { let option = JSON.parse(uni.getStorageSync("currentQuery")) || {}; console.log("option", option); // console.log('option', getMiniAppUrl(option, true)) // return false location.href = `${CONSTANT.hostUrl}/auth/prepare?url=${encodeURIComponent( getMiniAppUrl(option, true) )}`; } else { // uni.showToast({ // title: '请用微信浏览器打开!', // icon: 'none', // mask: true // }) } // #endif // #ifndef H5 // #endif } return status; } export const floatFormat = (f, n) => { let m = Math.pow(10, n); return parseInt(f * m, 10) / m; }; /** * * 对象参数转为url参数 * @parmas query 拼接得参数对象 * @parmas isFrist 为true时开头为& */ export const parse = (query, isFrist = false) => { let str = Object.keys(query) .filter(key => !isEmpty(query[key])) .reduce((result, key) => { const value = query[key]; // in查询特殊处理 if (Array.isArray(value) && !isEmpty(value)) { return `${result}&${value.reduce( (val, cVal) => `${val ? `${val}&` : val}${key}=${cVal}`, "" )}`; } // between查询做特殊处理 if (typeof value === "object" && !isEmpty(value)) { const [start, end] = value; return `${result}&${key}[]=${start}&${key}[]=${end}`; } return `${result}&${key}=${value}`; }, ""); return isFrist ? str : str.replace(/^&/, "?"); }; /** * * 全局时间转换 * @parmas num 时间戳默认为11位时间戳 * @parmas fmt 默认转换的时间格式 * @parmas all 为true时time为13位时间戳 */ export const $formatDate = (num, fmt = "YYYY-MM-DD HH:mm", all) => { num = all ? num : num * 1000; let date = new Date(); date.setTime(num); let o = { "M+": date.getMonth() + 1, "D+": date.getDate(), "h+": date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, "H+": date.getHours(), "m+": date.getMinutes(), "s+": date.getSeconds(), "q+": Math.floor((date.getMonth() + 3) / 3), S: date.getMilliseconds() }; let week = { "0": "\u65e5", "1": "\u4e00", "2": "\u4e8c", "3": "\u4e09", "4": "\u56db", "5": "\u4e94", "6": "\u516d" }; if (/(Y+)/.test(fmt)) { fmt = fmt.replace( RegExp.$1, (date.getFullYear() + "").substr(4 - RegExp.$1.length) ); } if (/(E+)/.test(fmt)) { fmt = fmt.replace( RegExp.$1, (RegExp.$1.length > 1 ? RegExp.$1.length > 2 ? "\u661f\u671f" : "\u5468" : "") + week[date.getDay() + ""] ); } for (let k in o) { if (new RegExp("(" + k + ")").test(fmt)) { fmt = fmt.replace( RegExp.$1, RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length) ); } } return fmt; }; /** * * 全局公共按钮跳转 * @parmas item.funtion 为可执行函数 * @parmas item.url 为跳转的路径 * @parmas item.query 为跳转携带的参数 * @parmas item.type 为跳转调用的函数 1 navigateTo, 2 redirectTo 关闭当前页面,跳转到应用内的某个页面 3 reLaunch 关闭所有页面,打开到应用内的某个页面 4 switchTab */ export const pageTo = item => { if (isNumber(item)) { uni.navigateBack({ delta: item }); } if (isString(item)) { uni.navigateTo({ url: item }); return false; } if (item.funtion) { item.funtion(); } if (item.url) { let query = item.query ? parse(item.query) : ""; let allUrl = `${item.url}${query}`; if (item.type == 2) { uni.redirectTo({ url: allUrl }); } else if (item.type == 3) { uni.reLaunch({ url: allUrl }); } else if (item.type == 4) { console.log("switchTab", item.query); uni.setStorageSync("switchTabQuery", item.query); uni.switchTab({ url: item.url }); } else { uni.navigateTo({ url: allUrl }); } } }; /** * * 是否登录 */ export const isLogin = () => { let token = uni.getStorageSync("token"); if (token) { return true; } return false; }; export const callUp = (mobile) =>{ //#ifdef MP-WEIXIN uni.makePhoneCall({ phoneNumber: mobile }); //#endif //#ifdef APP-PLUS plus.device.dial(mobile, true); //#endif } //没有库存时的语音播放 shish export const noStockRemind = () =>{ const innerAudioContext = uni.createInnerAudioContext() innerAudioContext.autoplay = false innerAudioContext.volume = 1 innerAudioContext.src = "/static/noStock.mp3" innerAudioContext.play() innerAudioContext.onError(function() { innerAudioContext.destroy() }) innerAudioContext.onPause(function() { innerAudioContext.destroy() }) innerAudioContext.onStop(function() { innerAudioContext.destroy() }) innerAudioContext.onEnded(function() { innerAudioContext.destroy() }) } export const hitVoice = () =>{ const innerAudioContext = uni.createInnerAudioContext() innerAudioContext.autoplay = false innerAudioContext.src = "/static/hit.mp3" innerAudioContext.play() innerAudioContext.onError(function() { innerAudioContext.destroy() }) innerAudioContext.onPause(function() { innerAudioContext.destroy() }) innerAudioContext.onStop(function() { innerAudioContext.destroy() }) innerAudioContext.onEnded(function() { innerAudioContext.destroy() }) } //去重 姜枫 2021.05.05 export const unique = (arr) => { for(var i=0; i{ let isScanEnv = false //#ifdef APP-PLUS if(plus.device.vendor == 'SUNMI'){ isScanEnv = true } if(plus.device.vendor == 'Newland'){ isScanEnv = true } //#endif return isScanEnv } export default { isEmpty, copyObject, imgSubstr, isArray, parse, checkMobile, checkName, $formatDate, floatFormat, pageTo, isLogin, getCheckLogin, numberFormat, isString, unique, isMoney, isNumber, noStockRemind, hitVoice, callUp, isScanEnv };