util.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. // #ifdef H5
  2. var clipboardJS = require('./clipboardJS');
  3. // #endif
  4. /**
  5. * 预览图片。
  6. @param {Object} url 必填 当前预览的图片链接。
  7. @param {Object} list 可以是url数组,也可以是对象,数据比如:["http:url"] or [{url:"https:url",...}]
  8. @param {Object} rangKey 如果list是对象数组,需要提供url字段。
  9. */
  10. import { previewImg } from "./preview.js"
  11. /**
  12. * 数据分组
  13. * @param {Array} oArr - 原数组列表
  14. * @param {Number} length - 单个数组长度
  15. * @return {Array} arr - 分组后的新数组
  16. */
  17. function splitData(oArr = [], length = 1) {
  18. let arr = [];
  19. let minArr = [];
  20. oArr.forEach(c => {
  21. if (minArr.length === length) {
  22. minArr = [];
  23. }
  24. if (minArr.length === 0) {
  25. arr.push(minArr);
  26. }
  27. minArr.push(c);
  28. });
  29. return arr;
  30. }
  31. /**
  32. * 剩余时间格式化
  33. * @param {Number} t - 剩余多少秒
  34. * @return {Object} format - 格式后的天时分秒对象
  35. */
  36. function timeMuch(t) {
  37. let format = {
  38. d: '00',
  39. h: '00',
  40. m: '00',
  41. s: '00'
  42. };
  43. if (t > 0) {
  44. let d = Math.floor(t / 86400);
  45. let h = Math.floor((t / 3600) % 24);
  46. let m = Math.floor((t / 60) % 60);
  47. let s = Math.floor(t % 60);
  48. format.d = d < 10 ? '0' + d : d;
  49. format.h = h < 10 ? '0' + h : h;
  50. format.m = m < 10 ? '0' + m : m;
  51. format.s = s < 10 ? '0' + s : s;
  52. }
  53. return format;
  54. }
  55. /**
  56. * 打电话
  57. * @param {String<Number>} phoneNumber - 数字字符串
  58. * @return {Promise}
  59. */
  60. function callPhone(phoneNumber = '') {
  61. let num = phoneNumber.toString()
  62. return new Promise((rs,rj)=>{
  63. uni.makePhoneCall({
  64. phoneNumber: num,
  65. success:()=> rs(),
  66. fail:(err)=> rj(err)
  67. });
  68. })
  69. }
  70. /**
  71. * 调起客户端相机扫码。
  72. * @param {Boolean} onlyFromCamera true 是否只允许相机扫码识别
  73. * @param {Array<string>} scanType ['barCode', 'qrCode', 'datamatrix','datamatrix']
  74. * @returns Promise 成功返回相关数据结构
  75. */
  76. function scanCode(onlyFromCamera = true, scanType = ['barCode', 'qrCode', 'datamatrix','datamatrix']){
  77. // #ifdef H5
  78. return Promise.reject('不支持H5');
  79. // #endif
  80. return new Promise((rs,rj)=>{
  81. uni.scanCode({
  82. onlyFromCamera: onlyFromCamera,
  83. scanType: scanType,
  84. success: (res) => rs(res),
  85. fail:(error)=>rj(error)
  86. });
  87. })
  88. }
  89. /**
  90. * 设置剪切板内容。
  91. * @param {String} data
  92. * @returns Promise true/false
  93. */
  94. function setClipboardData(data){
  95. // #ifndef H5
  96. return new Promise((rs,rj)=>{
  97. uni.setClipboardData({
  98. data: data,
  99. success:()=>rs(true),
  100. fail:(error)=>rj(error)
  101. });
  102. })
  103. // #endif
  104. // #ifdef H5
  105. return new Promise((rs,rj)=>{
  106. let btn = document.createElement('button');
  107. btn.style.display = 'none';
  108. btn.className='hi-test-hi';
  109. document.body.appendChild(btn);
  110. clipboardJS = clipboardJS.bind(window);
  111. let cb = new clipboardJS('.hi-test-hi', {
  112. text: () => data
  113. })
  114. cb.on('success', function (res) {
  115. rs(true);
  116. })
  117. cb.on('error', function (err) {
  118. rj(err)
  119. })
  120. btn.click = btn.click.bind(window.document.body.querySelector('.hi-test-hi'))
  121. btn.click()
  122. })
  123. // #endif
  124. }
  125. /**
  126. * 获取剪切板内容
  127. * @returns Promise 剪切板内容
  128. */
  129. function getClipboardData(){
  130. // #ifndef H5
  131. return new Promise((rs, rj) => {
  132. uni.getClipboardData({
  133. success: (res) => rs(res.data),
  134. fail: (error) => rj(error)
  135. });
  136. })
  137. // #endif
  138. // #ifdef H5
  139. return Promise.reject('H5无法获取剪切板内容')
  140. // #endif
  141. }
  142. /**
  143. * 设置cookie数据
  144. * @param {String} key 键值
  145. * @param {String} data 值
  146. * @returns Boolean
  147. */
  148. function setCookie(key, data) {
  149. try {
  150. uni.setStorageSync(key, data);
  151. return true;
  152. } catch (e) {
  153. return false;
  154. }
  155. }
  156. /**
  157. * 删除一个本地cookie
  158. * @param {String} key 键值
  159. * @returns Boolean
  160. */
  161. function delCookie(key) {
  162. try {
  163. uni.removeStorageSync(key);
  164. return true;
  165. } catch (e) {
  166. return false;
  167. }
  168. }
  169. /**
  170. * 获取一个cookie数据
  171. * 如果存入的是对象,返回的也是对象。如果是string返回的也是字符串。
  172. * @param {String} key 键
  173. * @returns json/string
  174. */
  175. function getCookie(key) {
  176. try {
  177. const value = uni.getStorageSync(key);
  178. try {
  179. let val = JSON.parse(value)
  180. return val;
  181. } catch (e) {
  182. return value;
  183. }
  184. } catch (e) {
  185. return undefined;
  186. }
  187. }
  188. /**
  189. * 向地址连接追加参数。
  190. * @param {string} uri 网址
  191. * @param {string} key 字段
  192. * @param {string} value 字段值
  193. * @returns
  194. */
  195. function httpUrlAddKey(uri, key, value) {
  196. if (!value) {
  197. return uri;
  198. }
  199. var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
  200. var separator = uri.indexOf("?") !== -1 ? "&" : "?";
  201. if (uri.match(re)) {
  202. return uri.replace(re, "$1" + key + "=" + value + "$2");
  203. } else {
  204. return uri + separator + key + "=" + value;
  205. }
  206. }
  207. export default {
  208. previewImg,//预览图片。
  209. splitData,//数据分组
  210. timeMuch,//剩余时间格式化
  211. callPhone,//打电话
  212. scanCode,//调起客户端相机扫码。
  213. setClipboardData, //设置剪切板内容。
  214. getClipboardData,//获取剪切板内容
  215. setCookie,//设置cookie数据
  216. delCookie,//删除一个本地cookie
  217. getCookie,//获取一个cookie数据
  218. httpUrlAddKey,//向地址连接追加参数
  219. }