import clone from './clone.js' /** * @desc 函数防抖 * @param func 函数 * @param wait 延迟执行毫秒数 * @param immediate true 表立即执行,false 表非立即执行 */ export let debounce = (func, wait, immediate) => { let timeout; return function () { let context = this; let args = arguments; if (timeout) clearTimeout(timeout); if (immediate) { let callNow = !timeout; timeout = setTimeout(() => { timeout = null; }, wait); if (callNow) func.apply(context, args); } else { timeout = setTimeout(() => { func.apply(context, args); }, wait); } }; }; export const goHome = () => { uni.redirectTo({ url: '/page/index/index' }) return } /** * @desc 函数节流 * @param func 函数 * @param delay 毫秒数 */ export let throttle = (func, delay) => { let timeout; return function () { let args = arguments; if (!timeout) { timeout = setTimeout(() => { func.apply(this, args); timeout = null; }, delay); } }; }; /** * 函数节流 * @param fn * @param interval * @returns {Function} * @constructor */ let startThrottleTimer = true; // 是否第一次执行 第一次点击时立即执行一次,后续不再立即执行 let isThrottleTimer = false; // 第一次是否执行 let ThrottleTimer = true; // 节流函数开关 // 节流函数 export let Throttle = function (fn, delay) { var arg = Array.from(arguments).splice(2); if (ThrottleTimer) { if (startThrottleTimer) { fn.apply(this, arg); startThrottleTimer = false; } ThrottleTimer = false; setTimeout(() => { ThrottleTimer = true; if (isThrottleTimer) { fn.apply(this, arg); } startThrottleTimer = true; isThrottleTimer = !startThrottleTimer; }, delay); } }; // 校验手机号 export function phoneValidate(phone) { const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/ return reg.test(phone) } // 校验+86手机号 \ 座机电话 export function is86Phone(phone) { const reg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/ if (reg.test(phone)) { return true } const str2 = phone.substring(0, 2) if (str2 == '86') { const str3 = phone.substring(2, phone.length - 1) if (reg.test(str3)) { return true } } const regMob = /^((0\d{2,3})-)?(\d{7,8})$/ if (regMob.test(phone)) { return true } return false } // 复制文本 export function copy(data, msg) { uni.setClipboardData({ data: data, success: () => { uni.showToast({ title: msg || '复制成功', icon: 'none', mask: true }) }, fail: () => { // uni.showToast({ // title: '复制失败', // icon: 'none', // mask: true // }) copyFallback(data) } }) } function copyFallback(text) { // 创建临时textarea元素 const textarea = document.createElement('textarea'); textarea.value = text; textarea.style.position = 'fixed'; // 防止页面滚动 document.body.appendChild(textarea); textarea.select(); try { // 执行复制命令 const successful = document.execCommand('copy'); if (successful) { uni.showToast({title: '复制成功', icon: 'none'}); } else { throw new Error('复制失败'); } } catch (err) { console.error('复制失败:', err); uni.showToast({title: '复制失败,请手动复制', icon: 'none'}); // 提示用户手动复制 prompt('请手动复制以下内容', text); } finally { document.body.removeChild(textarea); } } // 拨打电话 export function callPhone(phone) { uni.makePhoneCall({ phoneNumber: phone }) } // 拆分字符串--汉字 | 数字 export function splitStr(str) { if (!str) { return } let show_text = str const arr = Array.from(new Set(show_text.match(/\d+(.\d+)?/g))) let replace_text = arr.map(item => { if (item.length >= 8 && item.length <= 11) { return item } }) for (var i = 0; i < replace_text.length; i++) { var replaceString = '**' + replace_text[i] + "**" show_text = show_text.replace(RegExp(replace_text[i]), replaceString) } return show_text.split('**') } // 预览pdf export function exportPDF(pdfUrl) { // #ifdef H5 window.open( pdfUrl ) // #endif // 微信下载文件需要在微信公众平台>开发>开发管理>服务器域名>downloadFile合法域名>配置白名单域名 // #ifdef MP-WEIXIN uni.downloadFile({ url: pdfUrl, success: res => { console.log(res) if (res.statusCode === 200) { // 预览pdf文件 uni.openDocument({ filePath: res.tempFilePath, showMenu: true, // 右上角菜单,可以进行分享保存pdf success: function (file) { console.log("file-success", file) } }) } } }) // #endif // #ifdef APP-PLUS uni.downloadFile({ url: pdfUrl, success: res => { console.log(res) if (res.statusCode === 200) { // 保存pdf文件至手机,一般安卓端存储路径为:手机存储/dcim/camera文件夹下 uni.showLoading({ title: '请稍等...' }) setTimeout(function () { uni.hideLoading() // 预览pdf文件 uni.openDocument({ filePath: res.tempFilePath, showMenu: true, success: function (file) { console.log("file-success", file) } }) }, 1000) } } }) // #endif } /** * 抹除api请求的对象的null和undefined */ export const wipeNulish = (obj) => { obj = Object(obj) // 不是对象类型就转成对象类型 obj = clone(obj, true) // 不改变原来的值 Object.keys(obj) .forEach((key) => { // 删除null和undefined obj[key] == null && delete obj[key] if ( typeof obj[key] === 'object' && Object.prototype.toString.call(obj) === '[object Object]' ) { // 不对Array或Date或RegExp这样的对象处理 // 递归删除 wipeNulish(obj[key]) } }) return obj } // 调用历史栈页面方法 export function pageInit(obj = {}) { if (!obj.route || !obj.funName) { return } return new Promise(resolve => { let params = { route: obj.route, funName: obj.funName } const pages = getCurrentPages() const listPage = pages.find(item => item.route === params.route) if (listPage) { console.log(listPage) const fun = listPage.$vm[params.funName] fun && fun() setTimeout(_ => { resolve() }, 300) } else { resolve() } }) } // 获取url参数--普通 export const getUrlParamsNormal = (param) => { let query = '' let hash = window.location.hash const index = hash.indexOf('#') query = hash.substring(index, hash.length) const indexQuery = hash.indexOf('?') query = query.substring(indexQuery + 1, hash.length) let vars = query.split("&") for (let i = 0; i < vars.length; i++) { let pair = vars[i].split("=") if (pair[0] == param) { return pair[1] } } return (false) } // 检测微信是否安装 export function checkApp() { if (plus.runtime.isApplicationExist({ pname: 'com.tencent.mm', action: 'weixin://' })) { return true console.log("微信应用已安装"); } else { return false console.log("微信应用未安装"); } } // 数字保留两位小数或保留整数 export function numFixtwo(num) { let number = Number(num) // console.log(number,'num'); if (parseInt(number.toString()) == parseFloat(number.toString())) { return number } else { return number.toFixed(2) } }