tools.js 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. import {
  2. API_URL
  3. } from '@/env'
  4. import router from '@/common/router'
  5. export default {
  6. /**
  7. * 跳转再封装,不支持复杂传参。
  8. */
  9. routerTo(path, params = {}, isTabbar) {
  10. let objParams = params;
  11. // 是否跳转外部链接
  12. if (~path.indexOf('http')) {
  13. // #ifdef H5
  14. window.location = path;
  15. // #endif
  16. // #ifndef H5
  17. router.push({
  18. path: '/pages/public/webview',
  19. query: {
  20. 'webviewPath': path
  21. }
  22. })
  23. // #endif
  24. return false
  25. }
  26. // 判断是否有参数
  27. if (path.indexOf('?') !== -1) {
  28. let index = path.lastIndexOf('?');
  29. let query = path.substring(index + 1, path.length);
  30. let arr = query.split('&')
  31. path = path.slice(0, index);
  32. arr.forEach(item => {
  33. let mArr = []
  34. let obj = {}
  35. mArr = item.split('=');
  36. obj[mArr[0]] = mArr[1];
  37. objParams = {
  38. ...objParams,
  39. ...obj
  40. }
  41. })
  42. }
  43. // 判断是否是tabbar
  44. if (isTabbar) {
  45. router.replaceAll({
  46. path: path,
  47. query: objParams
  48. })
  49. } else {
  50. router.push({
  51. path: path,
  52. query: objParams
  53. })
  54. }
  55. },
  56. /**
  57. * fn:检测图片协议,主要用于检测海报图片协议。
  58. * param(imgPath): 图片地址。
  59. */
  60. checkImgHttp(imgPath) {
  61. let newPath = '';
  62. let pathArr = imgPath.split('://');
  63. // #ifdef H5
  64. let ishttps = 'https:' == window.location.protocol ? true : false;
  65. ishttps ? (pathArr[0] = 'https') : (pathArr[0] = 'http');
  66. // #endif
  67. // #ifdef MP-WEIXIN
  68. pathArr[0] = 'https'
  69. // #endif
  70. newPath = pathArr.join('://');
  71. return newPath;
  72. },
  73. // 打电话
  74. callPhone(phoneNumber = '') {
  75. let num = phoneNumber.toString()
  76. uni.makePhoneCall({
  77. phoneNumber: num,
  78. fail(err) {
  79. console.log('makePhoneCall出错', err)
  80. },
  81. });
  82. },
  83. // 图片处理-选择图片
  84. chooseImage(count = 1) {
  85. return new Promise((resolve, reject) => {
  86. uni.chooseImage({
  87. count: count, //默认9
  88. sizeType: ['original', 'compressed'], //可以指定是原图还是压缩图,默认二者都有
  89. sourceType: ['album'], //从相册选择
  90. success: res => {
  91. resolve(res.tempFilePaths);
  92. }
  93. });
  94. }).catch(e => {
  95. reject(e)
  96. })
  97. },
  98. // 图片处理-上传图片
  99. uploadImage(api, url) {
  100. let config_url = API_URL;
  101. uni.showLoading({
  102. title: '上传中'
  103. });
  104. return new Promise((resolve, reject) => {
  105. uni.uploadFile({
  106. url: config_url + api,
  107. filePath: url,
  108. name: 'file',
  109. success: res => {
  110. res = JSON.parse(res.data);
  111. if (res.code === 1) {
  112. uni.hideLoading()
  113. uni.showToast({
  114. title: '上传成功',
  115. icon: 'none'
  116. });
  117. resolve(res.data)
  118. } else {
  119. uni.hideLoading()
  120. uni.showModal({
  121. title: '上传失败',
  122. content: res.msg
  123. });
  124. }
  125. }
  126. });
  127. }).catch(e => {
  128. reject(e)
  129. })
  130. },
  131. // 图片处理-预览图片
  132. previewImage(urls = [], current = 0) {
  133. uni.previewImage({
  134. urls: urls,
  135. current: current,
  136. indicator: 'default',
  137. loop: true,
  138. fail(err) {
  139. console.log('previewImage出错', urls, err)
  140. },
  141. })
  142. },
  143. // 图片处理-获取图片信息
  144. getImageInfo(src = '') {
  145. return new Promise((resolve, reject) => {
  146. uni.getImageInfo({
  147. src: src,
  148. success: (image) => {
  149. resolve(image)
  150. },
  151. fail(err) {
  152. console.log('getImageInfo出错', src, err)
  153. },
  154. })
  155. }).catch(e => {
  156. reject(e)
  157. })
  158. },
  159. /**
  160. * 格式化时间
  161. */
  162. //时间格式化 天时分秒
  163. format(t) {
  164. let format = {
  165. d: '00',
  166. h: '00',
  167. m: '00',
  168. s: '00',
  169. }
  170. if (t > 0) {
  171. let d = Math.floor(t / 86400)
  172. let h = Math.floor((t / 3600) % 24)
  173. let m = Math.floor((t / 60) % 60)
  174. let s = Math.floor(t % 60)
  175. format.d = d < 10 ? '0' + d : d
  176. format.h = h < 10 ? '0' + h : h
  177. format.m = m < 10 ? '0' + m : m
  178. format.s = s < 10 ? '0' + s : s
  179. }
  180. return format
  181. },
  182. //时间格式化(格式化最大为小时)
  183. formatToHours(t) {
  184. let format = {
  185. d: '00',
  186. h: '00',
  187. m: '00',
  188. s: '00',
  189. }
  190. if (t > 0) {
  191. let h = Math.floor(t / 3600)
  192. let m = Math.floor((t / 60) % 60)
  193. let s = Math.floor(t % 60)
  194. format.h = h < 10 ? '0' + h : h
  195. format.m = m < 10 ? '0' + m : m
  196. format.s = s < 10 ? '0' + s : s
  197. }
  198. return format
  199. },
  200. // 年月日
  201. timestamp(timestamp) {
  202. let date = new Date(timestamp * 1000); //根据时间戳生成的时间对象
  203. let y = date.getFullYear();
  204. let m = date.getMonth() + 1;
  205. let d = date.getDate();
  206. m = m < 10 ? '0' + m : m;
  207. d = d < 10 ? '0' + d : d
  208. let dateText = y + "-" + m + "-" + d
  209. return dateText
  210. },
  211. // 年月日,时分秒
  212. // "YYYY-mm-dd HH:MM"
  213. dateFormat(fmt, date) {
  214. let ret;
  215. const opt = {
  216. "Y+": date.getFullYear().toString(), // 年
  217. "m+": (date.getMonth() + 1).toString(), // 月
  218. "d+": date.getDate().toString(), // 日
  219. "H+": date.getHours().toString(), // 时
  220. "M+": date.getMinutes().toString(), // 分
  221. "S+": date.getSeconds().toString() // 秒
  222. // 有其他格式化字符需求可以继续添加,必须转化成字符串
  223. };
  224. for (let k in opt) {
  225. ret = new RegExp("(" + k + ")").exec(fmt);
  226. if (ret) {
  227. fmt = fmt.replace(ret[1], (ret[1].length == 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, "0")))
  228. };
  229. };
  230. return fmt;
  231. },
  232. /**
  233. * @fn 时间间隔格式化
  234. * @param {*} startTime 开始时间的时间戳
  235. * @param {*} endTime 结束时间的时间戳
  236. * @return {string} str 返回时间字符串
  237. */
  238. getTimeInterval(startTime, endTime) {
  239. let runTime = parseInt((endTime - startTime) / 1000);
  240. let year = Math.floor(runTime / 86400 / 365);
  241. runTime = runTime % (86400 * 365);
  242. let month = Math.floor(runTime / 86400 / 30);
  243. runTime = runTime % (86400 * 30);
  244. let day = Math.floor(runTime / 86400);
  245. runTime = runTime % 86400;
  246. let hour = Math.floor(runTime / 3600);
  247. runTime = runTime % 3600;
  248. let minute = Math.floor(runTime / 60);
  249. runTime = runTime % 60;
  250. let second = runTime;
  251. let str = '';
  252. if (year > 0) {
  253. str = year + '年';
  254. }
  255. if (year <= 0 && month > 0) {
  256. str = month + '月';
  257. }
  258. if (year <= 0 && month <= 0 && day > 0) {
  259. str = day + '天';
  260. }
  261. if (year <= 0 && month <= 0 && day <= 0 && hour > 0) {
  262. str = hour + '小时';
  263. }
  264. if (year <= 0 && month <= 0 && day <= 0 && hour <= 0 && minute > 0) {
  265. str = minute + '分钟';
  266. }
  267. if (year <= 0 && month <= 0 && day <= 0 && hour <= 0 && minute <= 0 && second > 0) {
  268. str += second + '秒';
  269. }
  270. str += '前';
  271. return str;
  272. },
  273. /**提示框
  274. *title(标题)
  275. *icon(图标): success,loading,none
  276. *duration(延时): 0为不关闭, 毫秒数
  277. *options(其它参数)
  278. */
  279. msg(title, duration=2000, mask=false, icon='none'){
  280. //统一提示方便全局修改
  281. if(Boolean(title) === false){
  282. return;
  283. }
  284. uni.showToast({
  285. title,
  286. duration,
  287. mask,
  288. icon
  289. });
  290. }
  291. }