/** * 将数据转换为数组格式 * @param {any} data - 需要转换的数据 * @returns {Array} 转换后的数组 */ function toArray(data) { if (!data) return [] if (data instanceof Array){ return data } else { return [data] } } /** * 生成UUID * @returns {string} 生成的UUID字符串 */ function generateUUID() { return 'xxxxxxxxxxxx4xxxyxxxxxxxxxxxxxxx'.replace(/[xy]/g, function(c) { var r = Math.random() * 16 | 0, v = c == 'x' ? r : (r & 0x3 | 0x8); return v.toString(16); }); } /** * 生成随机颜色 * @returns {string} 生成的十六进制颜色值 */ function generateRandomColor() { const letters = '0123456789ABCDEF'; let color = '#'; for (let i = 0; i < 6; i++) { color += letters[Math.floor(Math.random() * 16)]; } return color; } /** * 生成浅色系的随机颜色 * @returns {string} 生成的RGB格式颜色值 */ function generateLightRandomColor() { const min = 150; const range = 105; const r = Math.floor(Math.random() * range + min); const g = Math.floor(Math.random() * range + min); const b = Math.floor(Math.random() * range + min); const color = 'rgb(' + r + ',' + g + ',' + b + ')'; return color; } /** * 表单数据验证 * @param {Object} data - 需要验证的表单数据 * @param {Object} msg - 验证失败时的提示信息 * @returns {boolean} 验证结果,true表示验证失败,false表示验证通过 */ function verificationAll(data, msg){ if (!msg){ console.log(msg); return false } if (!data){ uni.showToast({ title: '表单数据未填写', icon: "none" }) } for (let key in msg) { if (!data[key]) { uni.showToast({ title: msg[key], icon: "none" }) return true } } return false } /** * 验证手机号是否合法 * @param {string} phone - 需要验证的手机号 * @returns {boolean} 验证结果,true表示合法,false表示不合法 */ function verificationPhone(phone){ if(!/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(phone)){ return false } return true } //获取url中参数的方法 /** * 获取URL中指定参数的值 * @param {string} name - 参数名称 * @returns {string} 参数值,如果不存在则返回空字符串 */ export function getHrefParams(name) { var url = window.location.href; try { var cs = url.split('?')[1]; //获取?之后的参数字符串 var cs_arr = cs.split('&'); //参数字符串分割为数组 for (var i = 0; i < cs_arr.length; i++) { //遍历数组,拿到json对象 if (cs_arr[i].split('=')[0] == name) { return cs_arr[i].split('=')[1]; } } return ""; } catch { return ""; } } /** * 深度合并两个对象,相同属性b会覆盖a * @param {Object} a - 目标对象 * @param {Object} b - 源对象 * @returns {Object} 合并后的新对象 */ export function deepMergeObject(a, b){ let data = JSON.parse(JSON.stringify(a)) function mergeObject(obj1, obj2){ for(let key in obj2){ if(typeof obj1[key] == 'object'){ obj1[key] = mergeObject(obj1[key], obj2[key]) }else{ obj1[key] = obj2[key] } } return obj1 } return mergeObject(data, b) } /** * 复制文本到剪贴板 * @param {string} content - 要复制的内容 */ export function copyText(content) { uni.setClipboardData({ data: content, success: () => { uni.showToast({ title: '复制成功', icon: 'none' }) } }) } /** * 将字符串中的文本格式化为HTML * @param {string} str - 需要格式化的字符串 * @returns {string} 格式化后的HTML字符串 */ export function stringFormatHtml(str){ return str && str.replace(/\n/gi, '
') .replace(/ /gi, ' ') } /** * 处理页面导航参数 * @param {string|Object} url - 页面路径或导航参数对象 * @returns {Object} 处理后的导航参数对象 */ function params(url){ if(typeof url == 'object'){ return url } let data = { url } if(!data.url.includes('/pages')){ data.url = '/pages' + data.url } return data } /** * 页面导航方法 * @param {...any} args - 导航参数 */ export function navigateTo(...args){ uni.navigateTo(params(...args)) } /** * 返回上一页 * @param {number} num - 返回的页面数,默认为-1 */ export function navigateBack(num = -1){ uni.navigateBack(num) } /** * 重定向到指定页面 * @param {...any} args - 导航参数 */ export function redirectTo(...args){ uni.redirectTo(params(...args)) } /** * 登录跳转函数,防止短时间内多次调用 * @returns {Function} 节流处理后的登录跳转函数 */ export const toLogin = function(){ let time = 0 return () => { if(new Date().getTime() - time < 1000){ return } time = new Date().getTime() uni.navigateTo({ url: '/pages_order/auth/wxLogin' }) } }() export default { toArray, generateUUID, verificationAll, generateRandomColor, generateLightRandomColor, verificationPhone, getHrefParams, deepMergeObject, navigateTo, navigateBack, redirectTo, copyText, stringFormatHtml, toLogin }