Comm.js 23 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018
  1. import IDCard from "../vendor/IDCard.js";
  2. const dialog = uni.requireNativePlugin("CL-Dialog");
  3. /**
  4. * @param {string} text 提示内容
  5. * @param {int} time 多少时间消失
  6. * @return {function} fn 函数
  7. *
  8. */
  9. const Tip = (text, time = 2000, fn = null) => {
  10. uni.showToast({
  11. 'title': text,
  12. duration: time,
  13. icon: 'none'
  14. });
  15. if (fn != null) setTimeout(() => {
  16. fn();
  17. }, time);
  18. }
  19. /**
  20. * 加载数据
  21. */
  22. const loadIng = (title = false, mask = false) => {
  23. uni.showLoading({
  24. title: title ? title : "加载中...",
  25. mask: mask
  26. });
  27. }
  28. //询问框
  29. const showModal = (title, success = null, fail = null) => {
  30. if (dialog != null) {
  31. let options = {
  32. title: "系统提示", //标题 (可选)
  33. con: title, //内容(可选)但是标题和内容至少选择一个
  34. okTitle: "确认", //确认按钮文字(可选)
  35. cancleTitle: "取消", //取消按钮文字(可选)
  36. okTextColor: "#f1851e", //确认按钮颜色(可选)
  37. cancleTextColor: "#999999", //取消按钮颜色(可选)
  38. singer: false, //是否只显示确认按钮,默认false(可选
  39. textAlign: "center", //对齐方式 //left居左,center居中 ,right 居右 默认居中
  40. conColor: "",
  41. bgColor: "#ffffff", //自定义弹框颜色
  42. titleColor: "#3d3d3d" //自定义title颜色
  43. //提示框内容颜色;
  44. }
  45. dialog.show(options, () => {
  46. if (success != null) success();
  47. }, () => {
  48. if (fail != null) fail();
  49. });
  50. } else {
  51. uni.showModal({
  52. title: "系统提示",
  53. content: title,
  54. confirmText: "确定",
  55. cancelText: "取消",
  56. success: function(res) {
  57. if (res.confirm && success != null) {
  58. success();
  59. return;
  60. }
  61. if (!res.confirm && fail != null) {
  62. fail();
  63. return;
  64. }
  65. }
  66. })
  67. }
  68. }
  69. /**
  70. * 提示框
  71. */
  72. const showAlert = (ob, success = null) => {
  73. var oAr = {};
  74. if (ob instanceof Object) {
  75. oAr = ob;
  76. if (oAr['title'] == null || oAr['title'] == '') {
  77. oAr['title'] = "系统提示";
  78. }
  79. } else {
  80. oAr['title'] = "系统提示";
  81. oAr['content'] = ob;
  82. }
  83. if (dialog != null) {
  84. let options = {
  85. title: oAr['title'], //标题 (可选)
  86. con: oAr['content'], //内容(可选)但是标题和内容至少选择一个
  87. okTitle: oAr['btn'] == null ? '确认' : oAr['btn'], //确认按钮文字(可选)
  88. okTextColor: "#f1851e", //确认按钮颜色(可选)
  89. singer: true, //是否只显示确认按钮,默认false(可选
  90. textAlign: "center", //对齐方 式 //left居左,center居中 ,right 居右 默认居中
  91. conColor: "",
  92. bgColor: "#ffffff", //自定义弹框颜色
  93. titleColor: "#3d3d3d" //自定义title颜色
  94. //提示框内容颜色;
  95. }
  96. // console.log(dialog);
  97. dialog.show(options, () => {
  98. if (success != null) success();
  99. });
  100. } else {
  101. uni.showModal({
  102. title: oAr['title'],
  103. content: oAr['content'],
  104. confirmText: oAr['btn'] == null ? '确认' : oAr['btn'],
  105. showCancel: false,
  106. success: function() {
  107. if (success != null) success();
  108. }
  109. });
  110. }
  111. }
  112. /**
  113. * 判断是否微信
  114. * @return {bool} 是否微信
  115. */
  116. function isWeiXin() {
  117. var ua = window.navigator.userAgent.toLowerCase();
  118. if (ua.match(/MicroMessenger/i) == 'micromessenger') {
  119. return true;
  120. } else {
  121. return false;
  122. }
  123. }
  124. /**
  125. * 判断是否存在
  126. * @param {Object} value
  127. */
  128. function isDefine(value) {
  129. if (value == null || value == "" || value == "undefined" || value == undefined || value == "null" || value ==
  130. "(null)" || value == 'NULL' || typeof(value) == 'undefined') {
  131. return false;
  132. } else {
  133. value = value + "";
  134. value = value.replace(/\s/g, "");
  135. if (value == "") {
  136. return false;
  137. }
  138. return true;
  139. }
  140. }
  141. /**
  142. * 时间戳11位
  143. */
  144. function timest() {
  145. var tmp = Date.parse(new Date()).toString();
  146. tmp = tmp.substr(0, 10);
  147. return tmp;
  148. }
  149. /**
  150. * 时间戳格式化函数
  151. * @param {string} format 格式
  152. * @param {int} timestamp 要格式化的时间 默认为当前时间
  153. * @return {string} 格式化的时间字符串
  154. */
  155. function date(format, timestamp) {
  156. var a, jsdate = ((timestamp) ? new Date(timestamp * 1000) : new Date());
  157. var pad = function(n, c) {
  158. n = n + "";
  159. if (n.length < c) {
  160. var i = c - n.length;
  161. var v = '';
  162. for (var j = 0; j < i; j++) {
  163. v += '0';
  164. }
  165. return v + n;
  166. } else {
  167. return n;
  168. }
  169. };
  170. var txt_weekdays = ["周日", "周一", "周二", "周三", "周四", "周五", "周六"];
  171. var txt_ordin = {
  172. "1": "st",
  173. "2": "nd",
  174. "3": "rd",
  175. "21": "st",
  176. "22": "nd",
  177. "23": "rd",
  178. "31": "st"
  179. };
  180. var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September",
  181. "October", "November", "December"
  182. ];
  183. var f = {
  184. // Day
  185. d: function() {
  186. return pad(f.j(), 2)
  187. },
  188. D: function() {
  189. return f.l().substr(0, 3)
  190. },
  191. j: function() {
  192. return jsdate.getDate()
  193. },
  194. l: function() {
  195. return txt_weekdays[f.w()]
  196. },
  197. N: function() {
  198. return f.w() + 1
  199. },
  200. S: function() {
  201. return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'
  202. },
  203. w: function() {
  204. return jsdate.getDay()
  205. },
  206. // Week
  207. W: function() {
  208. var a = f.z(),
  209. b = 364 + f.L() - a;
  210. var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;
  211. if (b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b) {
  212. return 1;
  213. } else {
  214. if (a <= 2 && nd >= 4 && a >= (6 - nd)) {
  215. nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");
  216. return date("W", Math.round(nd2.getTime() / 1000));
  217. } else {
  218. return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
  219. }
  220. }
  221. },
  222. // Month
  223. F: function() {
  224. return txt_months[f.n()]
  225. },
  226. m: function() {
  227. return pad(f.n(), 2)
  228. },
  229. M: function() {
  230. return f.F().substr(0, 3)
  231. },
  232. n: function() {
  233. return jsdate.getMonth() + 1
  234. },
  235. t: function() {
  236. var n;
  237. if ((n = jsdate.getMonth() + 1) == 2) {
  238. return 28 + f.L();
  239. } else {
  240. if (n & 1 && n < 8 || !(n & 1) && n > 7) {
  241. return 31;
  242. } else {
  243. return 30;
  244. }
  245. }
  246. },
  247. //o not supported yet
  248. Y: function() {
  249. return jsdate.getFullYear()
  250. },
  251. y: function() {
  252. return (jsdate.getFullYear() + "")
  253. },
  254. // Time
  255. a: function() {
  256. return jsdate.getHours() > 11 ? "pm" : "am"
  257. },
  258. A: function() {
  259. return f.a().toUpperCase()
  260. },
  261. B: function() {
  262. // peter paul koch:
  263. var off = (jsdate.getTimezoneOffset() + 60) * 60;
  264. var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() +
  265. off;
  266. var beat = Math.floor(theSeconds / 86.4);
  267. if (beat > 1000) beat -= 1000;
  268. if (beat < 0) beat += 1000;
  269. if ((String(beat)).length == 1) beat = "00" + beat;
  270. if ((String(beat)).length == 2) beat = "0" + beat;
  271. return beat;
  272. },
  273. g: function() {
  274. return jsdate.getHours() % 12 || 12
  275. },
  276. G: function() {
  277. return jsdate.getHours()
  278. },
  279. h: function() {
  280. return pad(f.g(), 2)
  281. },
  282. H: function() {
  283. return pad(jsdate.getHours(), 2)
  284. },
  285. i: function() {
  286. return pad(jsdate.getMinutes(), 2)
  287. },
  288. s: function() {
  289. return pad(jsdate.getSeconds(), 2)
  290. },
  291. //u not supported yet
  292. // Timezone
  293. //e not supported yet
  294. //I not supported yet
  295. O: function() {
  296. var t = pad(Math.abs(jsdate.getTimezoneOffset() / 60 * 100), 4);
  297. if (jsdate.getTimezoneOffset() > 0) t = "-" + t;
  298. else t = "+" + t;
  299. return t;
  300. },
  301. P: function() {
  302. var O = f.O();
  303. return (O.substr(0, 3) + ":" + O.substr(3, 2))
  304. },
  305. //T not supported yet
  306. //Z not supported yet
  307. // Full Date/Time
  308. c: function() {
  309. return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()
  310. },
  311. //r not supported yet
  312. U: function() {
  313. return Math.round(jsdate.getTime() / 1000)
  314. }
  315. };
  316. return format.replace(/[\\]?([a-zA-Z])/g, function(t, s) {
  317. var ret = '';
  318. if (t != s) {
  319. ret = s;
  320. } else if (f[s]) {
  321. ret = f[s]();
  322. } else {
  323. ret = s;
  324. }
  325. return ret;
  326. });
  327. }
  328. /**
  329. * strtotime()函数
  330. * strtotime('2012-07-27 12:43:43') OR strtotime('2012-07-27')
  331. * @return 时间戳
  332. */
  333. function strtotime(str = '') {
  334. if (str == '') {
  335. var _temp = new Date();
  336. return parseInt(_temp.getTime() / 1000);
  337. }
  338. var _arr = str.split(' ');
  339. var _day = _arr[0].split('-');
  340. _arr[1] = (_arr[1] == null) ? '0:0:0' : _arr[1];
  341. var _time = _arr[1].split(':');
  342. for (var i = _day.length - 1; i >= 0; i--) {
  343. _day[i] = isNaN(parseInt(_day[i])) ? 0 : parseInt(_day[i]);
  344. };
  345. for (var i = _time.length - 1; i >= 0; i--) {
  346. _time[i] = isNaN(parseInt(_time[i])) ? 0 : parseInt(_time[i]);
  347. };
  348. var _temp = new Date(_day[0], _day[1] - 1, _day[2], _time[0], _time[1], _time[2]);
  349. return parseInt(_temp.getTime() / 1000);
  350. }
  351. /**
  352. * 小数保留默认2位
  353. */
  354. function returnFloat(value) {
  355. var value = Math.round(parseFloat(value) * 100) / 100;
  356. var xsd = value.toString().split(".");
  357. if (xsd.length == 1) {
  358. value = value.toString() + ".00";
  359. return value;
  360. }
  361. if (xsd.length > 1) {
  362. if (xsd[1].length < 2) {
  363. value = value.toString() + "0";
  364. }
  365. return value;
  366. }
  367. }
  368. /**
  369. * 百分比
  370. */
  371. function percentage(value, value2) {
  372. return returnFloat((value / value2) * 100);
  373. }
  374. /**
  375. * 倒计时【验证码】
  376. * @time 倒计时 秒
  377. * @结束
  378. */
  379. function CountDowm(time, fe = null) {
  380. var id = setInterval(() => {
  381. time--;
  382. if (fe != null) fe(time, 0);
  383. if (time <= 0) {
  384. clearInterval(id);
  385. fe(0, 1);
  386. }
  387. }, 1000);
  388. }
  389. /**
  390. * 远程获取[GET同步返回]
  391. * @parm url 地址
  392. * @parm data get数据
  393. * @parm fn 异步返回
  394. */
  395. const httpGet = (url, data, fn, fe) => {
  396. // if (fe == null) { fe = () => { Tip("网络错误,请稍等尝试..."); wx.hideLoading() } };
  397. if (data == null) data = {
  398. time: Math.round(new Date().getTime() / 1000)
  399. };
  400. uni.request({
  401. url: url,
  402. data: post,
  403. success: res => {
  404. if (res.statusCode == 200)
  405. if (fn != null) fn(res.data);
  406. else fe();
  407. },
  408. fail: () => {
  409. fe();
  410. }
  411. });
  412. }
  413. /**
  414. * 远程获取[GET异步返回]
  415. * @parm url 地址
  416. * @parm data get数据
  417. */
  418. const httpGetAsy = (url, data) => {
  419. return new Promise((resolve, reject) => {
  420. if (data == null) data = {
  421. time: Math.round(new Date().getTime() / 1000)
  422. };
  423. uni.request({
  424. url: url,
  425. data: data,
  426. success: res => {
  427. if (res.statusCode == 200) resolve(res.data);
  428. else reject();
  429. },
  430. fail: () => {
  431. reject();
  432. }
  433. });
  434. });
  435. };
  436. /**
  437. * 判断手机号码是否准确
  438. */
  439. const isPoneAvailable = (tel) => {
  440. var myreg = /^[1][3,4,5,6,7,8,9][0-9]{9}$/;
  441. if (!myreg.test(tel)) {
  442. return false;
  443. } else {
  444. return true;
  445. }
  446. };
  447. /**
  448. * 远程获取[POST异步操作]
  449. * @parm url 地址
  450. * @parm post post数据
  451. */
  452. const httpPostAsy = (url, post) => {
  453. return new Promise((resolve, reject) => {
  454. uni.request({
  455. url: url,
  456. method: 'POST',
  457. data: post,
  458. header: {
  459. "content-type": "application/x-www-form-urlencoded"
  460. },
  461. success: res => {
  462. if (res.statusCode == 200) resolve(res.data);
  463. else reject();
  464. },
  465. fail: () => {
  466. reject();
  467. }
  468. });
  469. });
  470. };
  471. /**
  472. * 广告跳转页面
  473. * @param {Object} url
  474. */
  475. function navigateTo(url) {
  476. if (url == '#' || url == '') {
  477. return;
  478. }
  479. var switchAr = [
  480. '/pages/cart/index'
  481. ];
  482. for (var i in switchAr) {
  483. if (switchAr[i] == url) {
  484. uni.switchTab({
  485. url: url
  486. });
  487. }
  488. }
  489. if (url.indexOf("http://") >= 0 || url.indexOf("https://") >= 0) {
  490. location.href = url;
  491. return;
  492. }
  493. uni.navigateTo({
  494. url: url
  495. });
  496. }
  497. /**
  498. * 阿拉伯数字转中文数字
  499. * @param {Object} num
  500. */
  501. function noToChinese(num) {
  502. if (!/^\d*(\.\d*)?$/.test(num)) {
  503. alert("Number is wrong!");
  504. return "Number is wrong!";
  505. }
  506. var AA = new Array("零", "一", "二", "三", "四", "五", "六", "七", "八", "九");
  507. var BB = new Array("", "十", "百", "千", "万", "亿", "点", "");
  508. var a = ("" + num).replace(/(^0*)/g, "").split("."),
  509. k = 0,
  510. re = "";
  511. for (var i = a[0].length - 1; i >= 0; i--) {
  512. switch (k) {
  513. case 0:
  514. re = BB[7] + re;
  515. break;
  516. case 4:
  517. if (!new RegExp("0{4}\\d{" + (a[0].length - i - 1) + "}$").test(a[0]))
  518. re = BB[4] + re;
  519. break;
  520. case 8:
  521. re = BB[5] + re;
  522. BB[7] = BB[5];
  523. k = 0;
  524. break;
  525. }
  526. if (k % 4 == 2 && a[0].charAt(i + 2) != 0 && a[0].charAt(i + 1) == 0) re = AA[0] + re;
  527. if (a[0].charAt(i) != 0) re = AA[a[0].charAt(i)] + BB[k % 4] + re;
  528. k++;
  529. }
  530. if (a.length > 1) //加上小数部分(如果有小数部分)
  531. {
  532. re += BB[6];
  533. for (var i = 0; i < a[1].length; i++) re += AA[a[1].charAt(i)];
  534. }
  535. return re;
  536. };
  537. /**
  538. * 字节转换
  539. */
  540. function bytesToSize(bytes) {
  541. if (bytes === 0) return '0 B';
  542. var k = 1024;
  543. var sizes = ['B', 'KB', 'M', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
  544. var i = Math.floor(Math.log(bytes) / Math.log(k));
  545. return toDecimal(bytes / Math.pow(k, i)) + ' ' + sizes[i];
  546. }
  547. /**
  548. * 星座
  549. */
  550. function constellation(strBirthday) {
  551. if (strBirthday == '0') return '无';
  552. var strBirthdayArr = strBirthday.split("-");
  553. var month = strBirthdayArr[1];
  554. var date = strBirthdayArr[2];
  555. if (month == 1 && date >= 20 || month == 2 && date <= 18) {
  556. return "水瓶座";
  557. }
  558. if (month == 2 && date >= 19 || month == 3 && date <= 20) {
  559. return "双鱼座";
  560. }
  561. if (month == 3 && date >= 21 || month == 4 && date <= 19) {
  562. return "白羊座";
  563. }
  564. if (month == 4 && date >= 20 || month == 5 && date <= 20) {
  565. return "金牛座";
  566. }
  567. if (month == 5 && date >= 21 || month == 6 && date <= 21) {
  568. return "双子座";
  569. }
  570. if (month == 6 && date >= 22 || month == 7 && date <= 22) {
  571. return "巨蟹座";
  572. }
  573. if (month == 7 && date >= 23 || month == 8 && date <= 22) {
  574. return "狮子座";
  575. }
  576. if (month == 8 && date >= 23 || month == 9 && date <= 22) {
  577. return "室女座";
  578. }
  579. if (month == 9 && date >= 23 || month == 10 && date <= 22) {
  580. return "天秤座";
  581. }
  582. if (month == 10 && date >= 23 || month == 11 && date <= 21) {
  583. return "天蝎座";
  584. }
  585. if (month == 11 && date >= 22 || month == 12 && date <= 21) {
  586. return "人马座";
  587. }
  588. if (month == 12 && date >= 22 || month == 1 && date <= 19) {
  589. return "摩羯座";
  590. }
  591. }
  592. /**
  593. * 消息时间值转化
  594. * @param {int} timestamp 要格式化的时间 默认为当前时间
  595. * @return {string} 格式化的时间字符串
  596. */
  597. function timeLastdate(timestamp, isWeekTime = false) {
  598. //判断是否今天
  599. var stoday = strtotime(date('Y-m-d 00:00:00'));
  600. if (timestamp > stoday) {
  601. var h = date('H');
  602. if (h <= 12)
  603. return '早上' + date('H:i', timestamp);
  604. else
  605. return '下午' + date('H:i', timestamp);
  606. }
  607. //昨天
  608. var day = new Date();
  609. day.setTime(day.getTime() - 24 * 60 * 60 * 1000);
  610. var ytoday = day.getTime() / 1000;
  611. var s_yesterday = strtotime(date('Y-m-d 0:0:0', ytoday));
  612. var e_yesterday = strtotime(date('Y-m-d 23:59:59', ytoday));
  613. if (timestamp > s_yesterday && timestamp < e_yesterday) {
  614. return '昨天' + date('H:i', timestamp);
  615. }
  616. //获取周一时间
  617. var dayInWeek = day.getDay();
  618. dayInWeek == 0 && (dayInWeek = 7);
  619. var beginWeek = strtotime(date('Y-m-d 0:0:0', (day.getTime() - (dayInWeek - 1) * 86400000) / 1000));
  620. if (timestamp >= beginWeek) {
  621. return date('l', timestamp) + (isWeekTime == true ? date('h:i', timestamp) : '');
  622. }
  623. //判断是否今年
  624. var y = day.getFullYear();
  625. var y1 = date('Y', timestamp);
  626. if (y == y1) {
  627. return isWeekTime ? date('m月d日 H:i', timestamp) : date('m月d日', timestamp);
  628. }
  629. return date('Y年m月d日 H:i', timestamp);
  630. }
  631. function countdown(time, isAr) {
  632. var str = "";
  633. var day = parseInt(time / (3600 * 24));
  634. var day_yusu = time % (3600 * 24);
  635. var housr = parseInt(day_yusu / 3600);
  636. var housr_yusu = day_yusu % 3600;
  637. var minutes = parseInt(housr_yusu / 60);
  638. var seconds = housr_yusu % 60;
  639. if (isAr) {
  640. return [day,
  641. (housr > 9 ? housr : ('0' + housr)),
  642. (minutes > 9 ? minutes : ('0' + minutes)),
  643. (seconds > 9 ? seconds : ('0' + seconds))
  644. ];
  645. }
  646. if (day > 0) {
  647. str = day + '天';
  648. }
  649. console.log(seconds);
  650. str += (housr > 9 ? housr : ('0' + housr)) + ':' +
  651. (minutes > 9 ? minutes : ('0' + minutes)) + ':' +
  652. (seconds > 9 ? seconds : ('0' + seconds));
  653. return str;
  654. }
  655. /**
  656. * 金钱单位模拟
  657. * @param {Object} str
  658. */
  659. function moneyUnit(str) {
  660. let money = parseFloat(str);
  661. if (money < 1000) {
  662. return money + "元";
  663. }
  664. if (money >= 1000) {
  665. return Math.floor(money / 1000) + "K";
  666. }
  667. }
  668. /**
  669. * 返回薪水
  670. * @param {Object} min_price 最小金额
  671. * @param {Object} max_price 最大金额
  672. * @param {Object} salary_type 薪水类型
  673. */
  674. function nxMoney(min_price, max_price, salary_type) {
  675. var tls = "";
  676. if (min_price == max_price && min_price == 0) {
  677. return '面议';
  678. }
  679. if (min_price == max_price && min_price > 0) {
  680. tls = (min_price) + "元";
  681. }
  682. //以上
  683. if (min_price > 0 && max_price == 0) {
  684. tls = (min_price) + "元以上";
  685. }
  686. //区间
  687. if (min_price > 0 && max_price > 0) {
  688. tls = (min_price) + "元-" + (max_price) + "元";
  689. }
  690. //小时制
  691. if (salary_type == 2) {
  692. tls += "/每小时";
  693. }
  694. //天制
  695. if (salary_type == 3) {
  696. tls += "/每天";
  697. }
  698. return tls;
  699. }
  700. /**
  701. * 最小年龄 | 最大年龄
  702. * @param {Object} min_age
  703. * @param {Object} max_age
  704. */
  705. function nxAge(min_age, max_age) {
  706. if (min_age > 0 && max_age > 0 && max_age != min_age) {
  707. return min_age + "岁-" + max_age + "岁";
  708. }
  709. if (min_age > 0 && max_age > 0 && max_age == min_age) {
  710. return min_age + "岁";
  711. }
  712. if (min_age > 0 && max_age == 0) {
  713. return min_age + "岁以上";
  714. }
  715. if (min_age == 0 && max_age > 0) {
  716. return max_age + "岁以下";
  717. }
  718. if (min_age == 0 && max_age == 0) {
  719. return "不限年龄";
  720. }
  721. }
  722. function toH5ml(str) {
  723. if (str == null || str.length == 0)
  724. return '';
  725. //#ifdef H5
  726. var newStr = str.replace(/\n/g, '_@').replace(/\r/g, '_#');
  727. newStr = newStr.replace(/_#_@/g, '<br/>'); //IE7-8
  728. newStr = newStr.replace(/_@/g, '<br/>'); //IE9、FF、chrome
  729. newStr = newStr.replace(/\s/g, '&nbsp;'); //空格处理
  730. return newStr;
  731. //#endif
  732. //#ifndef H5
  733. str = str.replace(/\n/g, '<br/>'); //替换HTML空格
  734. //#endif
  735. return str;
  736. }
  737. function bankCode(code) {
  738. if (code.length <= 12) {
  739. return code;
  740. }
  741. var len = parseInt(code.length / 4) + (code.length % 4 > 0 ? 1 : 0);
  742. var reStr = "";
  743. for (var i = 0; i < len; i++) {
  744. var llen = ((i * 4) + 4) >= code.length ? code.length : (i * 4);
  745. reStr += code.substr((i * 4), 4) + " ";
  746. }
  747. return reStr;
  748. }
  749. /**
  750. * 标题搜索突出关键词
  751. * @param {Object} title1
  752. * @param {Object} title2
  753. */
  754. function titleTag(title1, title2) {
  755. var dAr = [];
  756. for (var i in title2) {
  757. if (title1.indexOf(title2[i]) >= 0) {
  758. dAr.push({
  759. name: title2[i],
  760. type: 's'
  761. });
  762. } else {
  763. dAr.push({
  764. name: title2[i],
  765. type: 'e'
  766. });
  767. }
  768. }
  769. return dAr;
  770. }
  771. /**
  772. * 检验18位身份证号码(15位号码可以只检测生日是否正确即可)
  773. * @author wolfchen
  774. * @param cid 18为的身份证号码
  775. * @return Boolean 是否合法
  776. **/
  777. function isCnNewID(cid) {
  778. return IDCard(cid);
  779. }
  780. /**
  781. * 自动计算高度 | 宽度
  782. * @param width 原始
  783. * @param height 原始
  784. * @param mWidth 现在 0不参与计算
  785. * @param mHeight 现在
  786. */
  787. function getAotuWidth(width, height, mWidth, mHeight = 0) {
  788. if (mWidth > 0 && mHeight == 0) {
  789. return (height / width) * mWidth;
  790. }
  791. if (mWidth == 0 && mHeight > 0) {
  792. return (width / height) * mHeight;
  793. }
  794. return 0;
  795. }
  796. function getAvatar(img, type) {
  797. if (isDefine(img) && img != "") {
  798. return img;
  799. }
  800. return type == 'chat' ? '/static/chat/user-avatar.png' : '/static/chat/group_chat.png';
  801. }
  802. /**
  803. * 销售量
  804. * @param {Object} count
  805. */
  806. function sales(count) {
  807. if (isNaN(count)) return 0;
  808. if (count < 100) return count + "";
  809. if (count > 100 && count < 1000) return parseInt(count / 100) * 100 + "+";
  810. if (count >= 1000 && count < 10000) return parseInt(count / 1000) * 1000 + "+";
  811. if (count >= 10000) return parseInt(count / 10000) + "万+";
  812. }
  813. /**
  814. * 数字转化文字
  815. * @param {Object} num
  816. */
  817. function numberToChinese(num) {
  818. var cnNums = ["零", "一", "二", "三", "四", "五", "六", "七", "八", "九"];
  819. var cnIntRadice = ["", "十", "百", "千"];
  820. var cnIntUnits = ["", "万", "亿", "兆"];
  821. var integerNum = Math.floor(num);
  822. var decimalNum = Math.round((num - integerNum) * 100);
  823. function convertToChinese(num) {
  824. var cnStr = "";
  825. var numStr = num.toString();
  826. var length = numStr.length;
  827. var lastNonZero = false; // 用于处理连续的零
  828. for (var i = 0; i < length; i++) {
  829. var digit = numStr.charAt(i);
  830. if (digit === "0") {
  831. lastNonZero = false;
  832. if (i === length - 1 || numStr.charAt(i + 1) !== "0") {
  833. cnStr += cnNums[parseInt(digit)];
  834. }
  835. } else {
  836. cnStr += cnNums[parseInt(digit)] + cnIntRadice[length - i - 1];
  837. lastNonZero = true;
  838. }
  839. }
  840. return cnStr;
  841. }
  842. var chineseStr = "";
  843. var zeroCount = 0;
  844. while (integerNum > 0) {
  845. var section = integerNum % 10000;
  846. if (zeroCount > 0) {
  847. chineseStr = cnNums[0] + chineseStr; // 处理连续的零
  848. }
  849. chineseStr = convertToChinese(section) + cnIntUnits[zeroCount] + chineseStr;
  850. integerNum = Math.floor(integerNum / 10000);
  851. zeroCount++;
  852. }
  853. chineseStr += convertToChinese(decimalNum);
  854. chineseStr = chineseStr.replace(/(零.)*零$/, "").replace(/^$/, "零");
  855. if (chineseStr[chineseStr.length - 1] == '零') {
  856. chineseStr = chineseStr.substring(0, chineseStr.length - 1);
  857. }
  858. return chineseStr;
  859. }
  860. /**
  861. * 取小数位0
  862. * @param {Object} num
  863. */
  864. function removeTrailingZeros(num) {
  865. let str = num.toString();
  866. if (str.indexOf('.') !== -1) {
  867. let parts = str.split('.');
  868. let decimalPart = parts[1].replace(/0+$/, '');
  869. if (decimalPart.length === 0) {
  870. return parseInt(parts[0]);
  871. } else {
  872. return parts[0] + '.' + decimalPart;
  873. }
  874. } else {
  875. return str;
  876. }
  877. }
  878. function isJSON(str) {
  879. if (typeof str == 'string') {
  880. try {
  881. var obj = JSON.parse(str);
  882. if (typeof obj == 'object' && obj) {
  883. return true;
  884. } else {
  885. return false;
  886. }
  887. } catch (e) {
  888. return false;
  889. }
  890. }
  891. }
  892. const uuidv4 = function() {
  893. return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
  894. let r = Math.random() * 16 | 0,
  895. v = c == 'x' ? r : (r & 0x3 | 0x8);
  896. return v.toString(16)
  897. })
  898. }
  899. const getAppStore =()=>{
  900. return new Promise((resolve,reject)=>{
  901. const getPageApp = ()=> {
  902. try {
  903. const app = getApp()
  904. if (app.$store) {
  905. resolve(app)
  906. }
  907. } catch (err) {
  908. setTimeout(() => {
  909. getPageApp()
  910. }, 200)
  911. }
  912. }
  913. getPageApp()
  914. })
  915. }
  916. export default {
  917. getAppStore:getAppStore,
  918. uuidv4: uuidv4,
  919. Tip: Tip, //
  920. sales: sales, //销售数量
  921. loadIng: loadIng, //加载效果
  922. showModal: showModal, //确认框
  923. showAlert: showAlert, //提示框
  924. date: date, //时间戳解析时间
  925. strtotime: strtotime, //日期解析时间戳
  926. returnFloat: returnFloat, //小数保留二位
  927. CountDowm: CountDowm, //倒计时
  928. isDefine: isDefine, //判断是否空
  929. httpGet: httpGet, //同步获取GET
  930. timest: timest, //获取11位时间戳
  931. httpGetAsy: httpGetAsy, //异步GET
  932. httpPostAsy: httpPostAsy, //异步POST
  933. isPoneAvailable: isPoneAvailable, //判断手机号码
  934. navigateTo: navigateTo, //页面跳转
  935. noToChinese: noToChinese, //数字转为中文数字
  936. timeLastdate: timeLastdate,
  937. moneyUnit: moneyUnit, //金钱单位
  938. bankCode: bankCode, //银行卡hide
  939. toH5ml: toH5ml, //格式化
  940. nxAge: nxAge, //年龄格式化
  941. nxMoney: nxMoney, //金钱格式化
  942. titleTag: titleTag, //标题tag
  943. countdown: countdown,
  944. isCnNewID: isCnNewID,
  945. getAotuWidth: getAotuWidth,
  946. percentage: percentage,
  947. getAvatar: getAvatar,
  948. isJSON: isJSON,
  949. numberToChinese: numberToChinese, //数字转化中文
  950. removeTrailingZeros: removeTrailingZeros,
  951. navigateBack: () => {
  952. const pages = getCurrentPages();
  953. pages.length > 1 ? uni.navigateBack() : uni.reLaunch({
  954. url: "/pages/index/home"
  955. });
  956. }
  957. }