/** * 提示方法 * @param {String} title 提示文字 * @param {String} icon icon图片 * @param {Number} duration 提示时间 */ export function toast(title, icon = "none", duration = 1500) { if (title) { uni.showToast({ title, icon, duration, }); } } /** * @param {String} url * @return {function} * @description navigateTo跳转 */ export function Jump(url) { uni.navigateTo({ url: url, }); } /** * 提示信息 * **/ export function showModal(title, msg, showCancel) { uni.showModal({ title: title, content: msg, showCancel: showCancel, success: function (res) {}, }); } export function showLoading(content) { uni.showLoading({ title: content, }); } /** * 隐藏loading * **/ export function hideLoading() { uni.hideLoading(); } /*** * 获取时间戳 */ export function getTimStamp() { var timestamp = Date.parse(new Date()); timestamp = timestamp / 1000; return timestamp; } /*** * 生成随机数 */ export function getNonce() { var t = ""; for (var i = 0; i < 12; i++) { t += Math.floor(Math.random() * 10); } return t; } /** * 获取32位随机数 * ***/ export function getnoncestr() { let len = len || 32; var $chars = "abcdefghijklmnopqrstuvwxyz0123456789"; var maxPos = $chars.length; var pwd = ""; for (var i = 0; i < len; i++) { pwd += $chars.charAt(Math.floor(Math.random() * maxPos)); } return pwd; } /** * 解析url中的参数 */ export function UrlParamHash(url) { var params = {}, h; var hash = url.slice(url.indexOf("?") + 1).split("&"); for (var i = 0; i < hash.length; i++) { h = hash[i].split("="); if (h.length > 1) { params[h[0]] = h[1]; } else { params[h[0]] = ""; } } return params; } /** * 一键复制 uni.setClipboardData * 用法: * 1. import {setClipboardData} from '该文件的地址' * 2. 利用async await * 3. await setClipboardData(需要复制的文本) */ const setClipboardData = (text) => { return new Promise((resolve, reject) => { uni.setClipboardData({ data: text, success: (res) => { resolve(res); }, fail: (err) => { reject(err); }, }); }); }; /** * 获取系统剪贴板内容 uni.getClipboardData * 用法: * 1. import {getClipboardData} from '该文件的地址' * 2. 利用async await来接收获取到的数据 * 3. await getClipboardData() */ const getClipboardData = () => { return new Promise((resolve, reject) => { uni.getClipboardData({ success: (res) => { resolve(res); }, fail: (err) => { reject(err); }, }); }); }; /** * 拨打电话 uni.makePhoneCall() * 用法: * 1. import {getBatteryInfo} from '该文件的地址' * 2. 直接makePhoneCall(拨打的电话号码) */ const makePhoneCall = (phone) => { uni.makePhoneCall({ phoneNumber: phone, }); }; /** * 设置缓存 * @param {String} key 键名 * @param {String} data 值 */ export function setStorageSync(key, data) { uni.setStorageSync(key, data); } /** * 获取缓存 * @param {String} key 键名 */ export function getStorageSync(key) { return uni.getStorageSync(key); } /** * 删除缓存 * @param {String} key 键名 */ export function removeStorageSync(key) { return uni.removeStorageSync(key); } /** * 清空缓存 * @param {String} key 键名 */ export function clearStorageSync() { return uni.clearStorageSync(); } /** * 页面跳转 * @param {'navigateTo' | 'redirectTo' | 'reLaunch' | 'switchTab' | 'navigateBack' | number } url 转跳路径 * @param {String} params 跳转时携带的参数 * @param {String} type 转跳方式 **/ export function useRouter(url, params = {}, type = "navigateTo") { try { if (Object.keys(params).length) url = `${url}?data=${encodeURIComponent(JSON.stringify(params))}`; if (type === "navigateBack") { uni[type]({ delta: url }); } else { uni[type]({ url }); } } catch (error) { console.error(error); } } /** * 预览图片 * @param {Array} urls 图片链接 */ export function previewImage( urls, itemList = ["发送给朋友", "保存图片", "收藏"] ) { uni.previewImage({ urls, longPressActions: { itemList, fail: function (error) { console.error(error, "===previewImage"); }, }, }); } /** * 保存图片到本地 * @param {String} filePath 图片临时路径 **/ export function saveImage(filePath) { if (!filePath) return false; uni.saveImageToPhotosAlbum({ filePath, success: (res) => { toast("图片保存成功", "success"); }, fail: (err) => { if ( err.errMsg === "saveImageToPhotosAlbum:fail:auth denied" || err.errMsg === "saveImageToPhotosAlbum:fail auth deny" ) { uni.showModal({ title: "提示", content: "需要您授权保存相册", showCancel: false, success: (modalSuccess) => { uni.openSetting({ success(settingdata) { if (settingdata.authSetting["scope.writePhotosAlbum"]) { uni.showModal({ title: "提示", content: "获取权限成功,再次点击图片即可保存", showCancel: false, }); } else { uni.showModal({ title: "提示", content: "获取权限失败,将无法保存到相册哦~", showCancel: false, }); } }, fail(failData) { console.log("failData", failData); }, }); }, }); } }, }); } /** * 深拷贝 * @param {Object} data **/ export const clone = (data) => JSON.parse(JSON.stringify(data)); /** * 获取平台名称 * @return {string} 平台名称 */ export function getPlatform() { let platform; switch (process.env.VUE_APP_PLATFORM) { case "app": case "app-plus": let n = uni.getSystemInfoSync().platform.toLowerCase(); if (n === "ios") { platform = "ios"; } else if (n === "android") { platform = "android"; } else { platform = "app"; } break; case "mp-weixin": platform = "wx"; break; case "mp-alipay": platform = "alipay"; break; case "mp-baidu": platform = "baidu"; break; case "mp-qq": platform = "qq"; break; case "mp-toutiao": platform = "toutiao"; break; case "quickapp-webview": platform = "kuai"; break; } return platform; } /** * 数组去重 * @param {Array} array 数值 * @retrun {Array} 数值 */ export function arrayShuffle(array) { let i = array.length, t, j; while (i) { j = Math.floor(Math.random() * i--); t = array[i]; array[i] = array[j]; array[j] = t; } return array; } /** * 日期格式化 * @param {Date} date 日期 * @param {string} format 返回的日期格式 * @retrun {string} 日期 */ export function dateFormat(date, format = "YYYY-MM-DD HH:mm:ss") { const config = { YYYY: date.getFullYear(), MM: date.getMonth() + 1, DD: date.getDate(), HH: date.getHours(), mm: date.getMinutes(), ss: date.getSeconds(), }; for (const key in config) { let value = config[key]; if (value < 10) { value = "0" + value; } format = format.replace(key, value); } return format; } /** * base64转文件 * @param {string} base64data base64 * @param {Function} cb 回调 */ export function base64ToSrc(base64data, cb) { const FILE_BASE_NAME = "tmp_base64src"; const [, format, bodyData] = /data:image\/(\w+);base64,(.*)/.exec(base64data) || []; if (!format) { return new Error("格式错误"); } // #ifdef MP-WEIXIN let filePath = `${wx.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`; // #endif // #ifdef MP-QQ let filePath = `${qq.env.USER_DATA_PATH}/${FILE_BASE_NAME}.${format}`; // #endif const buffer = uni.base64ToArrayBuffer(bodyData); uni.getFileSystemManager().writeFile({ filePath, data: buffer, encoding: "binary", success() { cb && cb(filePath); }, }); } /** * base64解码 * @param {string} str str * @param {string} */ export function encodeBase64(str) { return new Buffer.from(str).toString("base64"); } /** * base64解码 * @param {string} str str * @param {string} */ export function decodeBase64(str) { const commonContent = str.replace(/\s/g, "+"); return new Buffer.from(commonContent, "base64").toString(); } /** * 播放声音 * @param {string} src 声音文件地址 * @param {Boolean} loop 是否循环 */ export function playSound(src, loop = false) { const innerAudioContext = uni.createInnerAudioContext(); innerAudioContext.autoplay = true; innerAudioContext.loop = loop; innerAudioContext.src = src; innerAudioContext.onPlay(() => {}); innerAudioContext.onError((res) => {}); } /** * 生成订单ID * @param {string} prefix 订单前缀 * @param {string} 订单ID */ export function createOrderSn(prefix = "") { return `${prefix}${this.randomString(10).toUpperCase()}${+new Date()}`; } /** * 图片转base64 * @param {string} src 图片地址 * @return {Promise} base64 */ export function imageToBase64(src) { return new Promise((resolve, reject) => { uni.getImageInfo({ src, success: (image) => { console.log(image); uni.getFileSystemManager().readFile({ filePath: image.path, encoding: "base64", success: (e) => { return resolve(`data:image/jpeg;base64,${e.data}`); }, fail: (e) => { return reject(null); }, }); }, }); }); } /** * 随机范围内的数字 * @param {number} start 起始数字 * @param {number} end 起始数字 * @return {number || null} 随机数 */ export function randomByRange(start, end) { if (typeof start === "number" && typeof end === "number") { return start + Math.floor(Math.random() * (end - start)); } else { console.error("参数必须为数字"); return null; } } /** * 判断所给时间和今天的差值 * @param {string} date 所给时间 * @returns {string} 差值 */ export function getDateDiff(date) { const inputDate = new Date(date.replace(/\//g, "-")); const today = new Date(); today.setHours(0, 0, 0, 0); inputDate.setHours(0, 0, 0, 0); const timeDiff = inputDate - today; const oneDay = 24 * 60 * 60 * 1000; const daysDiff = Math.floor(timeDiff / oneDay); if (daysDiff === 0) { return "今天"; } else if (daysDiff > 0) { return `${daysDiff}天后`; } else { return `${Math.abs(daysDiff)}天前`; } } /** * 将分钟转换为时间格式 * @param {number} minutes 分钟 * @returns {string} 时间格式 */ export function minutesToTime(minutes) { const hours = Math.floor(minutes / 60); const mins = minutes % 60; const formattedHours = String(hours).padStart(2, '0'); const formattedMins = String(mins).padStart(2, '0'); return `${formattedHours}:${formattedMins}`; }