// 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); }; /** 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 = { 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); }, }); }; /** 日期格式化 */ 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; };