common.ts 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. // import { CryptoJS } from './crypto-js.min.js';
  2. import { CryptoJS } from './crypto-js.min.js';
  3. let loading = false;
  4. let count = 0;
  5. /** 请求弹窗开启 */
  6. export const showLoading = function (title = '') {
  7. if (!loading) {
  8. uni.showLoading({
  9. title: title || '',
  10. mask: true,
  11. });
  12. loading = true;
  13. }
  14. count += 1;
  15. };
  16. /** 请求弹窗关闭 */
  17. export const hideLoading = function () {
  18. let timer = setTimeout(() => {
  19. // 在下一次tick中如果没有新的loading进来(count === 1) 则关闭loading (消除多接口同步或者异步的loading闪屏)
  20. if (count === 1 && loading) {
  21. uni.hideLoading();
  22. loading = false;
  23. }
  24. count -= 1;
  25. clearTimeout(timer);
  26. timer = null;
  27. }, 0);
  28. };
  29. /** 提示消息 */
  30. export const showToast = function (msg: string, fn = () => {}, duration = 1500) {
  31. let timer = null;
  32. uni.showToast({
  33. title: msg,
  34. mask: true,
  35. icon: 'none',
  36. duration: duration,
  37. });
  38. if (fn) {
  39. timer = setTimeout(() => {
  40. fn();
  41. timer = null;
  42. }, duration);
  43. }
  44. };
  45. /** 提示信息 */
  46. export const showModal = function (content: string, callBack = () => {}, data: any = {}) {
  47. uni.showModal({
  48. content: content,
  49. title: data.title || '',
  50. confirmText: data.confirmText || '确定',
  51. confirmColor: data.confirmColor || '',
  52. cancelColor: data.cancelColor || '',
  53. cancelText: data.cancelText || '',
  54. showCancel: data.cancelText ? true : false,
  55. success: (res) => {
  56. if (res.confirm && callBack instanceof Function) {
  57. callBack();
  58. }
  59. if (!res.confirm && data.callBack instanceof Function) {
  60. data.callBack();
  61. }
  62. },
  63. });
  64. };
  65. /** 是否为空 */
  66. export const isEmpty = function (obj) {
  67. if (obj == undefined || obj == null || obj == '') {
  68. return true;
  69. } else if (obj instanceof Array) {
  70. return obj.length <= 0;
  71. } else if (obj instanceof Object) {
  72. return Object.keys(obj).length <= 0;
  73. }
  74. return false;
  75. };
  76. /** 是否不为空 */
  77. export const isNotEmpty = function (obj) {
  78. return !isEmpty(obj);
  79. };
  80. /** des加密 */
  81. export const desEncrypt = function (message, key) {
  82. let keyHex = CryptoJS.enc.Utf8.parse(key);
  83. let encrypted = CryptoJS.DES.encrypt(message, keyHex, {
  84. mode: CryptoJS.mode.ECB,
  85. padding: CryptoJS.pad.Pkcs7,
  86. });
  87. return encrypted.toString();
  88. };
  89. /** des ECB解密str:秘钥串;key:秘钥;exportType:输出方式; */
  90. export const desDecrypt = function (str, key, exportType) {
  91. let keyHex = CryptoJS.enc.Utf8.parse(key);
  92. let decrypted = CryptoJS.DES.decrypt(
  93. exportType == 'hex'
  94. ? {
  95. ciphertext: CryptoJS.enc.Hex.parse(str),
  96. }
  97. : str,
  98. keyHex,
  99. {
  100. mode: CryptoJS.mode.ECB,
  101. padding: CryptoJS.pad.Pkcs7,
  102. }
  103. );
  104. return decrypted.toString(CryptoJS.enc.Utf8);
  105. };
  106. /** 数组转化成对象,方便使用 */
  107. export const turnToMap = (list) => {
  108. let map = {};
  109. list.map((item) => {
  110. map[item.routePath] = JSON.parse(item.infoJson || '{}');
  111. });
  112. return map;
  113. };
  114. /**
  115. * 页面跳转 封装使用不同的微信页面跳转方法
  116. * @param {string} toUrl 跳转路由
  117. * @param {string} skipWay 跳转方法(
  118. navigateTo : 保留当前页面,跳转到应用内的某个页面。但是不能跳到 tabbar 页面。使用 wx.navigateBack 可以返回到原页面。小程序中页面栈最多十层
  119. switchTab : 跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
  120. reLaunch : 关闭所有页面,打开到应用内的某个页面
  121. redirectTo : 关闭当前页面,跳转到应用内的某个页面。但是不允许跳转到 tabbar 页面。
  122. )
  123. * @param {string} data
  124. */
  125. export const goToUrl = function (toUrl, data = { skipWay: 'navigateTo', data: '' }) {
  126. var menu = [];
  127. let num = toUrl.indexOf('?') || 0; // 参数下标
  128. let key = toUrl.substr(num == -1 ? toUrl.length : num, toUrl.length); // 获取地址带参
  129. let url = toUrl.substr(0, num == -1 ? toUrl.length : num); // 获取地址除去带的参数
  130. if (uni.getStorageSync('menuList')) {
  131. menu = uni.getStorageSync('menuList');
  132. }
  133. menu = menu.filter((item) => item.MenuName == 'DiyMenu');
  134. if (isNotEmpty(menu) && isNotEmpty(menu[0])) {
  135. var diyMenu = menu[0];
  136. diyMenu.Children.forEach(function (val, index) {
  137. var FromUrl = val.FromUrl;
  138. var ToDiyUrl = val.ToUrl;
  139. if (url == FromUrl) {
  140. url = ToDiyUrl;
  141. }
  142. });
  143. }
  144. // 判断是否是传data.data (data.data代表页面值)
  145. if (isNotEmpty(data.data)) {
  146. if (data.data.indexOf('?') == -1) {
  147. url = url + '?' + data.data;
  148. } else {
  149. url = url + data.data;
  150. }
  151. }
  152. // 判断是否是地址带参
  153. if (isNotEmpty(key)) {
  154. // 判断是否有http跳转
  155. if (key.indexOf('url=') >= 0) {
  156. let url_ = key.substr(key.indexOf('url=') + 4);
  157. // 传入的url未转码 则转码 已转码 则不处理
  158. if (url_ == decodeURIComponent(url_)) {
  159. url_ = encodeURIComponent(url_);
  160. }
  161. key = key.substr(0, key.indexOf('url=') + 4) + url_;
  162. }
  163. url = url + key;
  164. }
  165. // 使用微信那种跳转方法
  166. let way = data.skipWay || 'navigateTo';
  167. uni[way]({
  168. url: url,
  169. success: () => {
  170. // loadSysAppPageMessage(url);
  171. },
  172. });
  173. };
  174. /** 日期格式化 */
  175. export const dateFormat = function (date) {
  176. const weekArr = ['日', '一', '二', '三', '四', '五', '六'];
  177. let year = date.getFullYear();
  178. let month = formatNumber(date.getMonth() + 1);
  179. let day = formatNumber(date.getDate());
  180. let week = weekArr[date.getDay()];
  181. let hour = formatNumber(date.getHours());
  182. let min = formatNumber(date.getMinutes());
  183. let sec = formatNumber(date.getSeconds());
  184. return {
  185. regDate: `${year}年${month}月${day}日 星期${week}`,
  186. date: `${year}${month}${day}`,
  187. formatYear: `${year}-${month}-${day}`,
  188. formatMon: `${month}-${day}`,
  189. formatMon_C: `${month}月${day}日`,
  190. formatTime: `${year}-${month}-${day} ${hour}:${min}:${sec}`,
  191. week: `星期${week}`,
  192. day: day,
  193. year: year,
  194. time: `${hour}${min}`,
  195. };
  196. };
  197. /** 日期补足两位 */
  198. export const formatNumber = function (n) {
  199. n = n.toString();
  200. return n[1] ? n : '0' + n;
  201. };