1
0

index.js 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /**
  2. * 功能:工具类
  3. * 作者:小莫唐尼
  4. * 邮箱:studio@925i.cn
  5. * 时间:2022年07月21日 17:30:14
  6. * 版本:v0.1.0
  7. * 修改记录:
  8. * 修改内容:
  9. * 修改人员:
  10. * 修改时间:
  11. */
  12. import HaloConfig from '@/config/halo.config.js';
  13. import HaloTokenConfig from '@/config/token.config.js'
  14. import {
  15. logTypes,
  16. logUtils
  17. } from '@/utils/halo.logs.js'
  18. const utils = {
  19. /**
  20. * 检查是否为http/https链接
  21. */
  22. checkIsUrl: function(s) {
  23. var reg = /^(http(s)?:\/\/)/i;
  24. return reg.test(s)
  25. },
  26. // 检查链接
  27. checkUrl: function(url) {
  28. if (!url) return '';
  29. if (!this.checkIsUrl(url)) return HaloTokenConfig.BASE_API + url;
  30. return url
  31. },
  32. // 检查封面图
  33. checkThumbnailUrl: function(thumbnail, mustRealUrl = false) {
  34. if (!thumbnail && mustRealUrl) {
  35. return HaloConfig.defaultStaticThumbnailUrl
  36. }
  37. let _url = HaloConfig.defaultThumbnailUrl
  38. if (_url) {
  39. if (_url.indexOf('?') == -1) {
  40. _url += `?next-v=${new Date().getTime()}`
  41. } else {
  42. _url += `&next-v=${new Date().getTime()}`
  43. }
  44. }
  45. if (!thumbnail) return _url;
  46. if (!this.checkIsUrl(thumbnail)) return HaloTokenConfig.BASE_API + thumbnail;
  47. return thumbnail
  48. },
  49. // 检查图片
  50. checkImageUrl: function(image) {
  51. let _url = HaloConfig.defaultImageUrl
  52. if (_url) {
  53. if (_url.indexOf('?') == -1) {
  54. _url += `?next-v=${new Date().getTime()}`
  55. } else {
  56. _url += `&next-v=${new Date().getTime()}`
  57. }
  58. }
  59. if (!image) return _url;
  60. if (!this.checkIsUrl(image)) return HaloTokenConfig.BASE_API + image;
  61. return image
  62. },
  63. // 检查头像
  64. checkAvatarUrl: function(avatar, isAdmin = false) {
  65. if (isAdmin) return HaloConfig.author.avatar;
  66. if (!avatar) {
  67. let _url = HaloConfig.defaultAvatarUrl
  68. if (_url) {
  69. if (_url.indexOf('?') == -1) {
  70. _url += `?next-v=${new Date().getTime()}`
  71. } else {
  72. _url += `&next-v=${new Date().getTime()}`
  73. }
  74. }
  75. return _url;
  76. }
  77. if (!this.checkIsUrl(avatar)) return HaloTokenConfig.BASE_API + avatar;
  78. return avatar
  79. },
  80. // 检查文件类型
  81. fnCheckIsFileType(type, attachment) {
  82. if (!attachment) return false;
  83. if (!attachment.mediaType) return false;
  84. if (type == 'video') return attachment.mediaType.indexOf('video/') != -1;
  85. else if (type == 'image') return attachment.mediaType.indexOf('image/') != -1;
  86. else return false;
  87. },
  88. groupData: function(arr, fun) {
  89. const groups = {}
  90. arr.forEach((el) => {
  91. const group = fun(el)
  92. groups[group] = groups[group] || []
  93. groups[group].push(el)
  94. })
  95. return Object.keys(groups).map((group) => {
  96. // 更改data的数据结构 可以改变新数据的结构 data即为newData的数组中每个数据的结构
  97. let data = {
  98. groupName: group,
  99. data: groups[group]
  100. }
  101. return data
  102. })
  103. },
  104. /**
  105. * 数据分组
  106. * @param {Object} oldData 数据源
  107. * @param {Object} prop 分组属性
  108. */
  109. arrayGroupBy: function(oldData, prop) {
  110. const newData = this.groupData(oldData, (item) => {
  111. return item[prop]
  112. })
  113. return newData
  114. },
  115. /**
  116. * 深克隆
  117. * @param {Object} obj 数据源
  118. */
  119. deepClone(obj) {
  120. var objClone = Array.isArray(obj) ? [] : {};
  121. if (obj && typeof obj === "object") {
  122. for (const key in obj) {
  123. if (obj.hasOwnProperty(key)) {
  124. if (obj[key] && typeof obj[key] === "object") {
  125. objClone[key] = this.deepClone(obj[key]);
  126. } else {
  127. objClone[key] = obj[key];
  128. }
  129. }
  130. }
  131. }
  132. return objClone;
  133. },
  134. /**
  135. * 复制内容到剪贴板
  136. * @param {Object} obj 数据源
  137. */
  138. copyText(content, tips = '复制成功') {
  139. uni.setClipboardData({
  140. data: content,
  141. showToast: false,
  142. success: () => {
  143. if (tips) {
  144. uni.showToast({
  145. icon: 'none',
  146. title: tips
  147. })
  148. }
  149. }
  150. })
  151. },
  152. previewImage(list) {
  153. list = list.map(item => {
  154. return this.checkUrl(item)
  155. })
  156. uni.previewImage({
  157. urls: list,
  158. loop: true
  159. })
  160. }
  161. };
  162. export default utils;