index.js 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828
  1. /* eslint-disable */
  2. //常用方法集合
  3. export default {
  4. countDownClock (time) {
  5. let times = Math.floor(time / 1000);
  6. let secondNum = times % 60;
  7. let minuteNum = Math.floor((times / 60) % 60);
  8. let hourNum = Math.floor((times / (60 * 60)) % 24);
  9. let dayNum = Math.floor(times / (60 * 60 * 24));
  10. let str;
  11. if (dayNum > 0) {
  12. str = dayNum + '天 ' + (hourNum > 9 ? hourNum : '0' + hourNum) + ':' + (minuteNum > 9 ? minuteNum : '0' +
  13. minuteNum) + ':' + (secondNum > 9 ? secondNum : '0' + secondNum);
  14. // console.log(str,1)
  15. return str
  16. } else if (hourNum > 0) {
  17. str = (hourNum > 9 ? hourNum : '0' + hourNum) + ':' + (minuteNum > 9 ? minuteNum : '0' + minuteNum) + ':' +
  18. (secondNum > 9 ? secondNum : '0' + secondNum)
  19. // console.log(str,2)
  20. return str;
  21. } else if (minuteNum > 0) {
  22. str = '00:' + (minuteNum > 9 ? minuteNum : '0' + minuteNum) + ':' + (secondNum > 9 ? secondNum : '0' +
  23. secondNum);
  24. // console.log(minuteNum,str,3)
  25. return str
  26. } else if (secondNum > 0) {
  27. str = '00:00:' + (secondNum > 9 ? secondNum : '0' + secondNum);
  28. // console.log(secondNum,4)
  29. return str
  30. } else {
  31. return '00:00:00'
  32. }
  33. },
  34. formatRichText (html) {
  35. //控制小程序中图片大小
  36. if (!html) {
  37. return "";
  38. }
  39. let newContent = html.replace(/<image[^>]*>/gi, function (match, capture) {
  40. match = match.replace(/style="[^"]+"/gi, '').replace(/style='[^']+'/gi, '');
  41. match = match.replace(/width="[^"]+"/gi, '').replace(/width='[^']+'/gi, '');
  42. match = match.replace(/height="[^"]+"/gi, '').replace(/height='[^']+'/gi, '');
  43. return match;
  44. });
  45. newContent = newContent.replace(/style="[^"]+"/gi, function (match, capture) {
  46. match = match.replace(/width:[^;]+;/gi, 'max-width:100%;').replace(/width:[^;]+;/gi,
  47. 'max-width:100%;');
  48. return match;
  49. });
  50. // newContent = newContent.replace(/<br[^>]*\/>/gi, '');
  51. newContent = newContent.replace(/\<image/gi,
  52. '<image style="max-width:100%;height:auto;display:block;margin-top:10rpx;font-size:0;"');
  53. return newContent;
  54. },
  55. /**
  56. * 时间处理
  57. */
  58. patTime (val) {
  59. var beginTime = new Date()
  60. var time = val - beginTime
  61. var days = Math.floor(time / (24 * 3600 * 1000))
  62. var leave1 = time % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
  63. var hours = Math.floor(leave1 / (3600 * 1000))
  64. //计算相差分钟数
  65. var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
  66. var minutes = Math.floor(leave2 / (60 * 1000))
  67. //计算相差秒数
  68. var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
  69. var seconds = Math.round(leave3 / 1000)
  70. if (days > 0) {
  71. return days + '天' + hours + ':' + minutes + ':' + seconds
  72. } else {
  73. if (hours > 0) {
  74. return hours + ':' + minutes + ':' + seconds
  75. } else {
  76. if (minutes > 0) {
  77. return minutes + ':' + seconds
  78. } else {
  79. if (seconds > 0) {
  80. return seconds + '秒'
  81. } else {
  82. return '00:00'
  83. }
  84. }
  85. }
  86. }
  87. },
  88. /**
  89. * 金额保留两位小数点后,大小
  90. */
  91. priceBigSmall (value = 0, boolean = true) {
  92. // let val = (Math.floor((value || 0) * 100) / 100).toFixed(2);
  93. let val = this.precisionTrue(value, 2)
  94. let splitPrice = val.split(".");
  95. let price =
  96. `<span style="font-size:11px;font-weight: normal;">¥</span>${splitPrice[0]}.<span style="font-size:11px;font-weight: normal;">${splitPrice[1]}</span>`;
  97. // 若boolean 为 false,则不带单位 ¥
  98. if (boolean == false) {
  99. price = price.replace(/¥/g, '')
  100. }
  101. return price
  102. },
  103. priceBigSmallTwo (value = 0) {
  104. // let val = (Math.floor((value || 0) * 100) / 100).toFixed(2);
  105. let val = this.precisionTrue(value, 2)
  106. let splitPrice = val.split(".");
  107. let price =
  108. `<span >¥</span>${splitPrice[0]}.<span style="font-size:11px;font-weight: normal;">${splitPrice[1]}</span>`;
  109. return price
  110. },
  111. // 进度正确
  112. precisionTrue (num, n) {
  113. if (n != undefined && (isNaN(n) || Number(n) > 17 || Number(n) < 0)) {
  114. throw new Error("输入正确的精度范围");
  115. }
  116. // 拆分小数点整数和小数
  117. // var num = this;
  118. var f = '';
  119. num = Number(num)
  120. if (Number(num) < 0) {
  121. num = -Number(num);
  122. f = '-';
  123. }
  124. var numList = num.toString().split(".");
  125. // 整数
  126. var iN = numList[0];
  127. // 小数
  128. var dN = numList[1];
  129. n = parseInt(n);
  130. if (isNaN(n) || Number(n) === 0) {
  131. // 0或者不填的时候,按0来处理
  132. if (dN === undefined) {
  133. return num + '';
  134. }
  135. var idN = Number(dN.toString().substr(0, 1));
  136. if (idN >= 5) {
  137. if (Number(iN) < 0) {
  138. iN = Number(iN) - 1
  139. } else {
  140. iN = Number(iN) + 1
  141. }
  142. }
  143. return iN + '';
  144. } else {
  145. var dNL = dN === undefined ? 0 : dN.length;
  146. if (dNL < n) {
  147. // 如果小数位不够的话,那就补全
  148. var oldN = num.toString().indexOf('.') > -1 ? num : num + '.';
  149. var a = Number(n) - dNL;
  150. while (a > 0) {
  151. oldN += '0';
  152. a--;
  153. }
  154. return oldN;
  155. }
  156. // 正常
  157. var olddN = dN.toString().substring(0, n);
  158. var dN1 = Number(dN.toString().substring(0, n));
  159. var dN2 = Number(dN.toString().substring(n, n + 1));
  160. if (dN2 >= 5) {
  161. dN1 += 1;
  162. if (olddN.length - dN1.toString().length > 0) {
  163. var olddNL = olddN.length - dN1.toString().length
  164. while (olddNL > 0) {
  165. dN1 = '0' + dN1
  166. olddNL--;
  167. }
  168. }
  169. if (dN1.toString().length > n) {
  170. if (Number(iN) < 0) {
  171. iN = Number(iN) - 1
  172. } else {
  173. iN = Number(iN) + 1
  174. }
  175. dN1 = '0';
  176. while (n > 1) {
  177. dN1 += '0'
  178. n--;
  179. }
  180. }
  181. } else {
  182. dN1 = olddN
  183. }
  184. return f + iN + '.' + dN1;
  185. }
  186. },
  187. priceBigSmallTherr (value) {
  188. let val = (Math.floor((value || 0) * 100) / 100).toFixed(2);
  189. let splitPrice = val.split(".");
  190. let price = `<span >¥</span>${splitPrice[0]}.<span>${splitPrice[1]}</span>`;
  191. return price
  192. },
  193. /**
  194. * 金额保留两位小数点
  195. */
  196. priceDecimals (value) {
  197. let val = (Math.floor((value || 0) * 100) / 100).toFixed(2);
  198. return val
  199. },
  200. /**
  201. * toast提示
  202. */
  203. toast (title, duration = 3000, mask = false, icon = 'none') {
  204. if (Boolean(title) === false) {
  205. return;
  206. }
  207. uni.showToast({
  208. title,
  209. duration,
  210. mask,
  211. icon
  212. });
  213. },
  214. getPrevPage () {
  215. var pages = getCurrentPages(); // 获取页面栈
  216. var prevPage = pages[pages.length - 2]; // 上一个页面
  217. return prevPage;
  218. },
  219. // 获取当前页面栈
  220. getCurrentPageFun (url) {
  221. let currentPage = getCurrentPages()
  222. uni.setStorageSync('toUrl', currentPage[currentPage.length - 1].route)
  223. uni.navigateTo({
  224. url: url
  225. })
  226. },
  227. // 清除当前页面栈路由缓存
  228. removeCurrenPage () {
  229. let currentPage = getCurrentPages()
  230. let toUrl = uni.getStorageSync('toUrl')
  231. let backNum = 0
  232. currentPage.map((item, index) => {
  233. if (item.route == toUrl) {
  234. backNum = index
  235. }
  236. })
  237. uni.navigateBack({
  238. delta: currentPage.length - backNum - 1
  239. })
  240. uni.removeStorageSync('toUrl')
  241. },
  242. /**
  243. * 开发环境全局打印日志
  244. * @param {Object} title
  245. */
  246. log (title) {
  247. if (process.env.NODE_ENV === 'development' && Boolean(title) === true) {
  248. console.log(JSON.stringify(title));
  249. }
  250. },
  251. /**
  252. * 异步获取设备信息
  253. */
  254. getInfoAsync () {
  255. return new Promise((resolve, reject) => {
  256. plus.device.getInfo({
  257. success (e) {
  258. resolve(e);
  259. },
  260. fail (e) {
  261. reject(e.message);
  262. }
  263. });
  264. });
  265. },
  266. /**
  267. * 安卓10不支持IMEI,则获取OAID
  268. */
  269. getOaidAsync () {
  270. return new Promise((resolve, reject) => {
  271. plus.device.getOAID({
  272. success (e) {
  273. resolve(e);
  274. },
  275. fail (e) {
  276. reject(e.message);
  277. }
  278. });
  279. });
  280. },
  281. /**
  282. * 获取一个随机数
  283. * @param {Object} min
  284. * @param {Object} max
  285. */
  286. random (min, max) {
  287. switch (arguments.length) {
  288. case 1:
  289. return parseInt(Math.random() * min + 1, 10);
  290. break;
  291. case 2:
  292. return parseInt(Math.random() * (max - min + 1) + min, 10);
  293. break;
  294. default:
  295. return 0;
  296. break;
  297. }
  298. },
  299. /**
  300. * 获取ios的IDFA
  301. */
  302. getIdfa () {
  303. let idfa = '';
  304. try {
  305. if ('iOS' == plus.os.name) {
  306. let manager = plus.ios.invoke('ASIdentifierManager', 'sharedManager');
  307. if (plus.ios.invoke(manager, 'isAdvertisingTrackingEnabled')) {
  308. let identifier = plus.ios.invoke(manager, 'advertisingIdentifier');
  309. idfa = plus.ios.invoke(identifier, 'UUIDString');
  310. plus.ios.deleteObject(identifier);
  311. }
  312. plus.ios.deleteObject(manager);
  313. }
  314. } catch (e) {
  315. console.error('获取idfa失败');
  316. }
  317. return idfa;
  318. },
  319. /*
  320. * obj 转 params字符串参数
  321. * 例子:{a:1,b:2} => a=1&b=2
  322. */
  323. objParseParam (obj) {
  324. let paramsStr = '';
  325. if (obj instanceof Array) return paramsStr;
  326. if (!(obj instanceof Object)) return paramsStr;
  327. for (let key in obj) {
  328. paramsStr += `${key}=${obj[key]}&`;
  329. }
  330. return paramsStr.substring(0, paramsStr.length - 1);
  331. },
  332. /*
  333. * obj 转 路由地址带参数
  334. * 例子:{a:1,b:2} => /pages/research/homepage/index?a=1&b=2
  335. */
  336. objParseUrlAndParam (path, obj) {
  337. let url = path || '/';
  338. let paramsStr = '';
  339. if (obj instanceof Array) return url;
  340. if (!(obj instanceof Object)) return url;
  341. paramsStr = this.objParseParam(obj);
  342. paramsStr && (url += '?');
  343. url += paramsStr;
  344. return url;
  345. },
  346. /*
  347. * 获取url字符串参数
  348. */
  349. getRequestParameters (locationhref) {
  350. let href = locationhref || '';
  351. let theRequest = new Object();
  352. let str = href.split('?')[1];
  353. if (str != undefined) {
  354. let strs = str.split('&');
  355. for (let i = 0; i < strs.length; i++) {
  356. theRequest[strs[i].split('=')[0]] = strs[i].split('=')[1];
  357. }
  358. }
  359. return theRequest;
  360. },
  361. /**
  362. * 加密字符串
  363. */
  364. strEncode (str) {
  365. const key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  366. let l = key.length;
  367. let a = key.split('');
  368. let s = '',
  369. b,
  370. b1,
  371. b2,
  372. b3;
  373. for (let i = 0; i < str.length; i++) {
  374. b = str.charCodeAt(i);
  375. b1 = b % l;
  376. b = (b - b1) / l;
  377. b2 = b % l;
  378. b = (b - b2) / l;
  379. b3 = b % l;
  380. s += a[b3] + a[b2] + a[b1];
  381. }
  382. return s;
  383. },
  384. /**
  385. * 解密字符串
  386. */
  387. strDecode (str) {
  388. const key = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  389. let l = key.length;
  390. let b,
  391. b1,
  392. b2,
  393. b3,
  394. d = 0,
  395. s;
  396. s = new Array(Math.floor(str.length / 3));
  397. b = s.length;
  398. for (let i = 0; i < b; i++) {
  399. b1 = key.indexOf(str.charAt(d));
  400. d++;
  401. b2 = key.indexOf(str.charAt(d));
  402. d++;
  403. b3 = key.indexOf(str.charAt(d));
  404. d++;
  405. s[i] = b1 * l * l + b2 * l + b3;
  406. }
  407. b = eval('String.fromCharCode(' + s.join(',') + ')');
  408. return b;
  409. },
  410. /**
  411. * 比较版本号
  412. */
  413. compareVersion (reqV, curV) {
  414. if (curV && reqV) {
  415. let arr1 = curV.split('.'),
  416. arr2 = reqV.split('.');
  417. let minLength = Math.min(arr1.length, arr2.length),
  418. position = 0,
  419. diff = 0;
  420. while (
  421. position < minLength &&
  422. (diff = parseInt(arr1[position]) - parseInt(arr2[position])) == 0
  423. ) {
  424. position++;
  425. }
  426. diff = diff != 0 ? diff : arr1.length - arr2.length;
  427. if (diff > 0) {
  428. if (position == minLength - 1) {
  429. return 1;
  430. } else {
  431. return 2;
  432. }
  433. } else {
  434. return 0;
  435. }
  436. } else {
  437. return 0;
  438. }
  439. },
  440. /**
  441. * H5复制
  442. */
  443. h5Copy (content) {
  444. let textarea = document.createElement('textarea');
  445. textarea.value = content;
  446. textarea.readOnly = 'readOnly';
  447. document.body.appendChild(textarea);
  448. textarea.select(); // 选择对象
  449. textarea.setSelectionRange(0, content.length); //核心
  450. let result = document.execCommand('Copy'); // 执行浏览器复制命令
  451. textarea.remove();
  452. const msg = result ? '复制成功' : '复制失败';
  453. this.toast(msg);
  454. },
  455. /**
  456. * app分享
  457. */
  458. handleAppShare (shareUrl, shareTitle, shareContent, shareImg) {
  459. let shareData = {
  460. shareUrl,
  461. shareTitle,
  462. shareContent,
  463. shareImg
  464. };
  465. appShare(shareData, res => { });
  466. },
  467. async handleWxH5Share (title, desc, link, imgUrl) {
  468. // #ifdef H5
  469. if ($mPayment.isWechat()) {
  470. if (uni.getSystemInfoSync().platform === 'android') {
  471. await $mPayment.wxConfigH5(link);
  472. }
  473. jweixin.ready(function () {
  474. // eslint-disable-next-line
  475. jweixin.updateAppMessageShareData({
  476. title, // 分享标题
  477. desc, // 分享描述
  478. link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  479. imgUrl, // 分享图标
  480. success: function () {
  481. // 用户确认分享后执行的回调函数
  482. },
  483. cancel: function () {
  484. // 用户取消分享后执行的回调函数
  485. }
  486. });
  487. // eslint-disable-next-line
  488. jweixin.updateTimelineShareData({
  489. title, // 分享标题
  490. desc, // 分享描述
  491. link, // 分享链接,该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
  492. imgUrl, // 分享图标
  493. success: function () {
  494. // 用户确认分享后执行的回调函数
  495. },
  496. cancel: function () {
  497. // 用户取消分享后执行的回调函数
  498. }
  499. });
  500. });
  501. }
  502. // #endif
  503. },
  504. //截取后四位数
  505. cutOut (value) {
  506. if (!value) {
  507. return '';
  508. }
  509. return value.substring(value.length - 4)
  510. },
  511. // 去掉字符串中的空格
  512. trim (str) {
  513. if (!str) {
  514. return '';
  515. }
  516. return str.replace(/\s*/g, '');
  517. },
  518. // 判断两个对象是否相同
  519. isObjectValueEqual (x, y) {
  520. // 指向同一内存时
  521. if (x === y) {
  522. return true;
  523. } else if (
  524. typeof x == 'object' &&
  525. x != null &&
  526. typeof y == 'object' && y != null
  527. ) {
  528. if (Object.keys(x).length != Object.keys(y).length) return false;
  529. for (var prop in x) {
  530. if (y.hasOwnProperty(prop)) {
  531. if (!this.isObjectValueEqual(x[prop], y[prop])) return false;
  532. } else return false;
  533. }
  534. return true;
  535. } else return false;
  536. },
  537. platformGroupFilter () {
  538. let platformGroup = 'tinyShop';
  539. // #ifdef H5
  540. if ($mPayment.isWechat()) {
  541. platformGroup = 'tinyShopWechat';
  542. } else {
  543. platformGroup = 'tinyShopH5';
  544. }
  545. // #endif
  546. // #ifdef MP-QQ
  547. platformGroup = 'tinyShopQqMp';
  548. // #endif
  549. // #ifdef MP-WEIXIN
  550. platformGroup = 'tinyShopWechatMp';
  551. // #endif
  552. // #ifdef MP-ALIPAY
  553. platformGroup = 'tinyShopAliMp';
  554. // #endif
  555. // #ifdef MP-QQ
  556. platformGroup = 'tinyShopQqMp';
  557. // #endif
  558. // #ifdef MP-BAIDU
  559. platformGroup = 'tinyShopBaiduMp';
  560. // #endif
  561. // #ifdef APP-PLUS
  562. switch (uni.getSystemInfoSync().platform) {
  563. case 'android':
  564. platformGroup = 'tinyShopAndroid';
  565. break;
  566. case 'ios':
  567. platformGroup = 'tinyShopIos';
  568. break;
  569. }
  570. // #endif
  571. return platformGroup;
  572. },
  573. countDown (ft, ct) {
  574. var ctime = ct || Math.floor(new Date().getTime())
  575. var time = ft * 1000 - ctime
  576. var days = Math.floor(time / (24 * 3600 * 1000))
  577. var leave1 = time % (24 * 3600 * 1000) //计算天数后剩余的毫秒数
  578. var hours = Math.floor(leave1 / (3600 * 1000))
  579. //计算相差分钟数
  580. var leave2 = leave1 % (3600 * 1000) //计算小时数后剩余的毫秒数
  581. var minutes = Math.floor(leave2 / (60 * 1000))
  582. //计算相差秒数
  583. var leave3 = leave2 % (60 * 1000) //计算分钟数后剩余的毫秒数
  584. var seconds = Math.round(leave3 / 1000)
  585. console.log(days + ':' + hours + ':' + minutes + ':' + seconds)
  586. return days + ':' + hours + ':' + minutes + ':' + seconds
  587. // if(days >0){
  588. // return days+'天'+hours+':'+minutes+':'+seconds
  589. // }else{
  590. // if(hours >0){
  591. // return hours+':'+minutes+':'+seconds
  592. // }else{
  593. // if(minutes >0){
  594. // return minutes+':'+seconds
  595. // }else{
  596. // if(seconds>0){
  597. // return seconds+'秒'
  598. // }else{
  599. // return '00:00'
  600. // }
  601. // }
  602. // }
  603. // }
  604. },
  605. // 保留8位小数
  606. isToFixed (value, num) {
  607. if (value) {
  608. let val = this.precisionTrue(value, num)
  609. let splitPrice = val.split(".");
  610. let price =
  611. `<span style="font-size:16px;font-weight: bold;color:#FF6600">${splitPrice[0]}.</span><span style="font-size:11px;font-weight: normal;color:#FF6600">${splitPrice[1]}</span> 贡献值`;
  612. return price
  613. } else {
  614. return `<span style="font-size:16px;font-weight: bold;color:#FF6600">0.</span><span style="font-size:11px;font-weight: normal;color:#FF6600">00</span> 贡献值`;
  615. }
  616. },
  617. isToFixedNum (value, num) {
  618. if (value) {
  619. let val = this.precisionTrue(value, num)
  620. return val
  621. } else {
  622. return 0
  623. }
  624. },
  625. // 电话隐私保护
  626. phoneChange (tel) {
  627. if (tel) {
  628. let result = tel.replace(/(\d{3})\d{4}(\d{4})/, "$1****$2");
  629. return result
  630. } else {
  631. return tel
  632. }
  633. },
  634. // 打电话
  635. callup (mobile) {
  636. uni.makePhoneCall({
  637. phoneNumber: mobile //仅为示例
  638. });
  639. },
  640. // 导航
  641. jumpLocation (latitude, longitude) {
  642. uni.getLocation({
  643. type: 'gcj02', //返回可以用于uni.openLocation的经纬度
  644. success: function (res) {
  645. uni.openLocation({
  646. latitude: Number(latitude),
  647. longitude: Number(longitude),
  648. success: function () {
  649. console.log('success');
  650. }
  651. });
  652. }
  653. });
  654. },
  655. // banner跳转
  656. imgLink (item) {
  657. let type = item.jumpType
  658. let id = item.model_id
  659. // 内部页面
  660. if(type == 0){
  661. uni.navigateTo({
  662. url: item.innerPageCode,
  663. });
  664. }else if(type == 1){
  665. // 外部链接
  666. }else if(type == 2){
  667. // 内部资源
  668. let url = '';
  669. if(item.resourceModel){
  670. }
  671. }
  672. },
  673. // 一行卡号脱敏
  674. bankAccount (value) {
  675. if (value) {
  676. let reg = /^(.{4})(?:\d+)(.{4})$/
  677. let str = value.replace(reg, "$1 **** **** $2")
  678. return str
  679. } else {
  680. return value
  681. }
  682. },
  683. // 列表分页
  684. pagination (total, currentPageNum, currentPageSize) {
  685. let totalPage = 0
  686. if (total / currentPageSize > parseInt(total / currentPageSize)) {
  687. totalPage = parseInt(total / currentPageSize) + 1
  688. } else {
  689. totalPage = parseInt(total / currentPageSize);
  690. }
  691. if (currentPageNum < totalPage) {
  692. return 'more'
  693. }
  694. return 'noMore'
  695. },
  696. // 处理 微信小程序 图片 视频 表格自适应
  697. // 处理后的内容(优化图片显示)
  698. processedContent (value) {
  699. if (!value) return '';
  700. // 处理富文本内容,优化图片自适应
  701. let content = value;
  702. // 为图片添加样式,确保自适应
  703. content = content.replace(
  704. /<image([^>]*)>/gi,
  705. function (match, attrs) {
  706. // 移除原有的 width 和 height 属性
  707. attrs = attrs.replace(/\s*(width|height)\s*=\s*["'][^"']*["']/gi, '');
  708. // 添加自适应样式
  709. return `<image${attrs} style="max-width: 100%; width: auto; height: auto; display: block; object-fit: contain;" />`;
  710. }
  711. );
  712. // 为视频添加自适应样式
  713. content = content.replace(
  714. /<video([^>]*)>/gi,
  715. function (match, attrs) {
  716. attrs = attrs.replace(/\s*(width|height)\s*=\s*["'][^"']*["']/gi, '');
  717. return `<video${attrs} style="max-width: 100%; width: auto; height: auto; display: block; margin: 16rpx auto;" />`;
  718. }
  719. );
  720. // 处理表格自适应
  721. content = content.replace(
  722. /<table([^>]*)>/gi,
  723. '<table$1 style="width: 100%; border-collapse: collapse; font-size: 24rpx; overflow-x: auto; display: block; white-space: nowrap;" />'
  724. );
  725. return content;
  726. },
  727. /**
  728. * 判断是否登录
  729. * @param {boolean} isTo 是否跳转登录页面
  730. */
  731. isLoginTo (isTo = false) {
  732. let token = uni.getStorageSync('apiToken');
  733. if (token) {
  734. return false;
  735. } else {
  736. if (isTo) {
  737. // #ifdef MP-WEIXIN
  738. console.log('微信小程序特有逻辑');
  739. uni.navigateTo({
  740. url: "/pages/login/wxLogin",
  741. });
  742. // #endif
  743. // #ifndef MP-WEIXIN
  744. console.log('当前非小程序');
  745. // 在此处编写仅在 App 端执行的代码
  746. uni.navigateTo({
  747. url: "/pages/login/otherLogin",
  748. });
  749. // #endif
  750. }
  751. return true;
  752. }
  753. },
  754. // list 转为 tree
  755. buildTree (list, idKey = 'id', parentIdKey = 'parentId', childrenKey = 'children') {
  756. const map = {};
  757. const roots = [];
  758. // 第一步:将所有节点放入 map,初始化 children
  759. for (const node of list) {
  760. map[node[idKey]] = { ...node, [childrenKey]: [] };
  761. }
  762. // 第二步:遍历节点,挂载到父节点的 children 中;若无父节点,则为根节点
  763. for (const node of list) {
  764. const nodeId = node[idKey];
  765. const parentId = node[parentIdKey];
  766. if (parentId === null || parentId === undefined || !(parentId in map)) {
  767. // 根节点:parentId 为 null/undefined 或父节点不存在
  768. roots.push(map[nodeId]);
  769. } else {
  770. // 挂到父节点下
  771. map[parentId][childrenKey].push(map[nodeId]);
  772. }
  773. }
  774. return roots;
  775. }
  776. };
  777. import $config from '@/config/global.config.js';
  778. /***
  779. * 图片地址处理
  780. * @param {string} url 图片地址
  781. *
  782. * */
  783. export const handleImageUrl = (url) => {
  784. // console.log("$config.staticUrl=>>", $config.staticUrl)
  785. if (!url) return;
  786. return $config.staticUrl + url;
  787. }