index.js 3.7 KB

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