// import { CryptoJS } from './crypto-js.min.js'; import { CryptoJS } from './crypto-js.min.js'; let loading = false; let count = 0; /** 请求弹窗开启 */ export const showLoading = function (title = '') { if (!loading) { uni.showLoading({ title: title || '', mask: true, }); loading = true; } count += 1; }; /** 请求弹窗关闭 */ export const hideLoading = function () { let timer = setTimeout(() => { // 在下一次tick中如果没有新的loading进来(count === 1) 则关闭loading (消除多接口同步或者异步的loading闪屏) if (count === 1 && loading) { uni.hideLoading(); loading = false; } count -= 1; clearTimeout(timer); timer = null; }, 0); }; /** 提示消息 */ export const showToast = function (msg: string, fn = () => {}, duration = 1500) { let timer = null; uni.showToast({ title: msg, mask: true, icon: 'none', duration: duration, }); if (fn) { timer = setTimeout(() => { fn(); timer = null; }, duration); } }; /** 提示信息 */ export const showModal = function (content: string, callBack = () => {}, data: any = {}) { uni.showModal({ content: content, title: data.title || '', confirmText: data.confirmText || '确定', confirmColor: data.confirmColor || '', cancelColor: data.cancelColor || '', cancelText: data.cancelText || '', showCancel: data.cancelText ? true : false, success: (res) => { if (res.confirm && callBack instanceof Function) { callBack(); } if (!res.confirm && data.callBack instanceof Function) { data.callBack(); } }, }); }; /** 是否为空 */ export const isEmpty = function (obj) { if (obj == undefined || obj == null || obj == '') { return true; } else if (obj instanceof Array) { return obj.length <= 0; } else if (obj instanceof Object) { return Object.keys(obj).length <= 0; } return false; }; /** 是否不为空 */ export const isNotEmpty = function (obj) { return !isEmpty(obj); }; /** 判断是否为JSON */ export const isJSON = function (str) { /** JSON.stringify */ if (typeof str == 'string') { try { var obj = JSON.parse(str); if (typeof obj == 'object' && obj) { return true; } else { return false; } } catch (e) { return false; } } }; export const stringify = function (str) { return escape(JSON.stringify(str)); }; /** des加密 */ export const desEncrypt = function (message, key) { let keyHex = CryptoJS.enc.Utf8.parse(key); let encrypted = CryptoJS.DES.encrypt(message, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, }); return encrypted.toString(); }; /** des ECB解密str:秘钥串;key:秘钥;exportType:输出方式; */ export const desDecrypt = function (str, key, exportType) { let keyHex = CryptoJS.enc.Utf8.parse(key); let decrypted = CryptoJS.DES.decrypt( exportType == 'hex' ? { ciphertext: CryptoJS.enc.Hex.parse(str), } : str, keyHex, { mode: CryptoJS.mode.ECB, padding: CryptoJS.pad.Pkcs7, } ); return decrypted.toString(CryptoJS.enc.Utf8); }; /** 数组转化成对象,方便使用 */ export const turnToMap = (list) => { let map = {}; list.map((item) => { map[item.routePath] = JSON.parse(item.infoJson || '{}'); }); return map; }; /** * 页面跳转 封装使用不同的微信页面跳转方法 * @param {string} toUrl 跳转路由 * @param {string} skipWay 跳转方法( navigateTo : 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层 switchTab : 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面 reLaunch : 关闭所有页面,打开到应用内的某个页面 redirectTo : 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。 ) * @param {string} data */ export const goToUrl = function (toUrl, data: any = { skipWay: 'navigateTo', data: '' }) { var menu = []; let num = toUrl.indexOf('?') || 0; // 参数下标 let key = toUrl.substr(num == -1 ? toUrl.length : num, toUrl.length); // 获取地址带参 let url = toUrl.substr(0, num == -1 ? toUrl.length : num); // 获取地址除去带的参数 if (uni.getStorageSync('menuList')) { menu = uni.getStorageSync('menuList'); } menu = menu.filter((item) => item.MenuName == 'DiyMenu'); if (isNotEmpty(menu) && isNotEmpty(menu[0])) { var diyMenu = menu[0]; diyMenu.Children.forEach(function (val, index) { var FromUrl = val.FromUrl; var ToDiyUrl = val.ToUrl; if (url == FromUrl) { url = ToDiyUrl; } }); } // 判断是否是传data.data (data.data代表页面值) if (isNotEmpty(data.data)) { if (data.data.indexOf('?') == -1) { url = url + '?' + data.data; } else { url = url + data.data; } } // 判断是否是地址带参 if (isNotEmpty(key)) { // 判断是否有http跳转 if (key.indexOf('url=') >= 0) { let url_ = key.substr(key.indexOf('url=') + 4); // 传入的url未转码 则转码 已转码 则不处理 if (url_ == decodeURIComponent(url_)) { url_ = encodeURIComponent(url_); } key = key.substr(0, key.indexOf('url=') + 4) + url_; } url = url + key; } // 使用微信那种跳转方法 let way = data.skipWay || 'navigateTo'; uni[way]({ url: url, success: () => { // loadSysAppPageMessage(url); }, }); }; /** 返回上delta级,并修改上delta级页面数据,默认会调用refresh方法刷新页面数据 */ export const navigateBack = function (delta, key = '', value = '') { let pages = getCurrentPages(); let goPage = pages[pages.length - (delta + 1)] as any; if (isNotEmpty(key)) { // goPage.setData({ // [key]: value, // }); } uni.navigateBack({ delta: delta, }); // if (typeof goPage.refresh == 'function') { // goPage.refresh(); // } }; /** 日期格式化 */ export const dateFormat = function (date) { const weekArr = ['日', '一', '二', '三', '四', '五', '六']; let year = date.getFullYear(); let month = formatNumber(date.getMonth() + 1); let day = formatNumber(date.getDate()); let week = weekArr[date.getDay()]; let hour = formatNumber(date.getHours()); let min = formatNumber(date.getMinutes()); let sec = formatNumber(date.getSeconds()); return { regDate: `${year}年${month}月${day}日 星期${week}`, date: `${year}${month}${day}`, formatYear: `${year}-${month}-${day}`, formatMon: `${month}-${day}`, formatMon_C: `${month}月${day}日`, formatTime: `${year}-${month}-${day} ${hour}:${min}:${sec}`, week: `星期${week}`, day: day, year: year, time: `${hour}${min}`, }; }; /** 日期补足两位 */ export const formatNumber = function (n) { n = n.toString(); return n[1] ? n : '0' + n; }; /** 对象合并 忽略未定义的值 */ export const mergeObject = function (A, B) { let res = {}; Object.keys({ ...A, ...B }).map((key) => { res[key] = B[key] || A[key]; }); return res; }; /** 根据经纬度计算距离,单位 :千米 */ export const getDistance = function (la1, lo1, la2, lo2) { var La1 = (la1 * Math.PI) / 180.0; var La2 = (la2 * Math.PI) / 180.0; var La3 = La1 - La2; var Lb3 = (lo1 * Math.PI) / 180.0 - (lo2 * Math.PI) / 180.0; var s: any = 2 * Math.asin( Math.sqrt( Math.pow(Math.sin(La3 / 2), 2) + Math.cos(La1) * Math.cos(La2) * Math.pow(Math.sin(Lb3 / 2), 2) ) ); s = s * 6378.137; //地球半径 s = Math.round(s * 10000) / 10000; s = s.toFixed(2); return s; }; /** 休眠 */ export const sleep = (val = 100) => { try { val = Number(val); return new Promise((resolve) => { let timer = setTimeout(() => { resolve(true); clearTimeout(timer); timer = null; }, val); }); } catch (error) {} };