index.js 4.0 KB

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