index.js 3.9 KB

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