| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279 |
- // 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) {}
- };
|