common.js 14 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541
  1. export default {
  2. //根据年份和月份获取当月天数
  3. getDaysByYearAndMonth(year, month) {
  4. switch (month) {
  5. case 1:
  6. case 3:
  7. case 5:
  8. case 7:
  9. case 8:
  10. case 10:
  11. case 12:
  12. return 31;
  13. case 4:
  14. case 6:
  15. case 9:
  16. case 11:
  17. return 30;
  18. case 2:
  19. return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? 29 : 28;
  20. default:
  21. return 0;
  22. }
  23. },
  24. // 删除url中的参数
  25. funcUrlDel: function(name){
  26. var loca = window.location
  27. var baseUrl = loca.origin + loca.pathname + "?"
  28. var query = loca.search.substr(1)
  29. if(query.indexOf(name)>-1){
  30. var obj = {}
  31. var arr = query.split("&")
  32. for(var i = 0;i<arr.length;i++){
  33. arr[i] = arr[i].split("=")
  34. obj[arr[i][0]] = arr[i][1]
  35. }
  36. delete obj[name]
  37. var url = baseUrl+JSON.stringify(obj).replace(/[\"\{\}]/g,"").replace(/\:/g,"=").replace(/\,/g,"&")
  38. return url
  39. }
  40. },
  41. //获取当前时间UNIX时间缀
  42. GetUnixTime: function() {
  43. var timestamp = Date.parse(new Date()) / 1000;
  44. return timestamp;
  45. },
  46. //年月日时间比较
  47. dateCompare: function(start, end) {
  48. let time1 = Date.parse(new Date(start)) / 1000
  49. let time2 = Date.parse(new Date(end)) / 1000
  50. let result = time1 - time2
  51. if (result < 0) {
  52. return true
  53. } else if (result >= 0) {
  54. return false
  55. }
  56. },
  57. //unix时间戳转换成普通时间
  58. MyDate: function(time, type = 0) {
  59. if (time <= 0) {
  60. var d = new Date();
  61. } else {
  62. var d = new Date(time * 1000);
  63. }
  64. var Y = d.getFullYear();
  65. var M = d.getMonth() + 1;
  66. var D = d.getDate();
  67. var H = d.getHours();
  68. var Mi = d.getMinutes();
  69. var S = d.getSeconds();
  70. if (M < 10) {
  71. M = '0' + M;
  72. };
  73. if (D < 10) {
  74. D = '0' + D;
  75. };
  76. if (H < 10) {
  77. H = '0' + H;
  78. };
  79. if (Mi < 10) {
  80. Mi = '0' + Mi;
  81. };
  82. if (S < 10) {
  83. S = '0' + S;
  84. };
  85. if (type == 0) {
  86. return Y + '-' + M + '-' + D + ' ' + H + ':' + Mi + ':' + S;
  87. } else if (type == 1) {
  88. return Y + '.' + M + '.' + D;
  89. } else if (type == 2) {
  90. return H + ':' + Mi + ':' + S;
  91. } else if (type == 3) {
  92. return H + ':' + Mi
  93. } else if (type == 4) {
  94. return M + '/' + D
  95. } else if (type == 5) {
  96. return Y + '-' + M + '-' + D;
  97. }
  98. },
  99. GetWeek() {
  100. var d = new Date()
  101. var ww = d.getDay();
  102. if (ww == 0) ww = "星期日";
  103. if (ww == 1) ww = "星期一";
  104. if (ww == 2) ww = "星期二";
  105. if (ww == 3) ww = "星期三";
  106. if (ww == 4) ww = "星期四";
  107. if (ww == 5) ww = "星期五";
  108. if (ww == 6) ww = "星期六";
  109. return ww;
  110. },
  111. //获得随机数
  112. GetRandom: function(max) {
  113. return Math.floor(Math.random() * max);
  114. },
  115. /**
  116. * 随机生成字符串
  117. * len 指定生成字符串长度
  118. */
  119. getRandomString(len) {
  120. let _charStr = 'abacdefghjklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789',
  121. min = 0,
  122. max = _charStr.length - 1,
  123. _str = ''; //定义随机字符串 变量
  124. //判断是否指定长度,否则默认长度为15
  125. len = len || 15;
  126. //循环生成字符串
  127. for (var i = 0, index; i < len; i++) {
  128. index = (function(randomIndexFunc, i) {
  129. return randomIndexFunc(min, max, i, randomIndexFunc);
  130. })(function(min, max, i, _self) {
  131. let indexTemp = Math.floor(Math.random() * (max - min + 1) + min),
  132. numStart = _charStr.length - 10;
  133. if (i == 0 && indexTemp >= numStart) {
  134. indexTemp = _self(min, max, i, _self);
  135. }
  136. return indexTemp;
  137. }, i);
  138. _str += _charStr[index];
  139. }
  140. return _str;
  141. },
  142. //判断手机号
  143. IsMobile: function(mobile) {
  144. let preg = "^(0|86|17951)?(16[0-9]|17[0-9]|13[0-9]|15[012356789]|18[0-9]|19[0-9]|14[57])[0-9]{8}$";
  145. let valid = new RegExp(preg, "gim").test(mobile);
  146. return valid;
  147. },
  148. //判断联系方式是否是手机号码或座机号码
  149. CheckContact: function(number) {
  150. let valid = false
  151. let tel = /^0\d{2,3}-?\d{7,8}$/;
  152. let phone = /^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$/;
  153. if (number.length == 11) { //手机号码
  154. if (phone.test(number)) {
  155. valid = true
  156. }
  157. } else if (number.indexOf("-") != -1) { //电话号码
  158. if (tel.test(number)) {
  159. valid = true
  160. }
  161. } else if (number.indexOf("-") == -1 && number.length == 7) {
  162. valid = true
  163. }
  164. return valid
  165. },
  166. //判断座机号
  167. IsLandline: function(number) {
  168. let preg = "/^0\d{2,3}-?\d{7,8}$/"
  169. let valid = new RegExp(preg).test(number)
  170. return valid
  171. },
  172. //验证身份证号码
  173. IsIDcard: function(num) {
  174. num = num.toUpperCase();
  175. var len, re;
  176. len = num.length;
  177. if (len == 0) return true;
  178. //身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X。
  179. if (!(/(^\d{15}$)|(^\d{17}([0-9]|X)$)/.test(num))) {
  180. return false;
  181. }
  182. //验证前两位地区是否有效
  183. var aCity = {
  184. 11: "北京",
  185. 12: "天津",
  186. 13: "河北",
  187. 14: "山西",
  188. 15: "内蒙古",
  189. 21: "辽宁",
  190. 22: "吉林",
  191. 23: "黑龙江",
  192. 31: "上海",
  193. 32: "江苏",
  194. 33: "浙江",
  195. 34: "安徽",
  196. 35: "福建",
  197. 36: "江西",
  198. 37: "山东",
  199. 41: "河南",
  200. 42: "湖北",
  201. 43: "湖南",
  202. 44: "广东",
  203. 45: "广西",
  204. 46: "海南",
  205. 50: "重庆",
  206. 51: "四川",
  207. 52: "贵州",
  208. 53: "云南",
  209. 54: "西藏",
  210. 61: "陕西",
  211. 62: "甘肃",
  212. 63: "青海",
  213. 64: "宁夏",
  214. 65: "新疆",
  215. 71: "台湾",
  216. 81: "香港",
  217. 82: "澳门",
  218. 91: "国外"
  219. }
  220. if (aCity[parseInt(num.substr(0, 2))] == null) {
  221. return false;
  222. }
  223. //当身份证为15位时的验证出生日期。
  224. if (len == 15) {
  225. re = new RegExp(/^(\d{6})(\d{2})(\d{2})(\d{2})(\d{3})$/);
  226. var arrSplit = num.match(re);
  227. //检查生日日期是否正确
  228. var dtmBirth = new Date('19' + arrSplit[2] + '/' + arrSplit[3] + '/' + arrSplit[4]);
  229. var bGoodDay;
  230. bGoodDay = (dtmBirth.getYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(arrSplit[
  231. 3])) && (
  232. dtmBirth.getDate() == Number(arrSplit[4]));
  233. if (!bGoodDay) {
  234. return false;
  235. }
  236. }
  237. //当身份证号为18位时,校验出生日期和校验位。
  238. if (len == 18) {
  239. re = new RegExp(/^(\d{6})(\d{4})(\d{2})(\d{2})(\d{3})([0-9]|X)$/);
  240. var arrSplit = num.match(re);
  241. //检查生日日期是否正确
  242. var dtmBirth = new Date(arrSplit[2] + "/" + arrSplit[3] + "/" + arrSplit[4]);
  243. var bGoodDay;
  244. bGoodDay = (dtmBirth.getFullYear() == Number(arrSplit[2])) && ((dtmBirth.getMonth() + 1) == Number(
  245. arrSplit[3])) &&
  246. (dtmBirth.getDate() == Number(arrSplit[4]));
  247. if (!bGoodDay) {
  248. return false;
  249. } else {
  250. //检验18位身份证的校验码是否正确。
  251. //校验位按照ISO 7064:1983.MOD 11-2的规定生成,X可以认为是数字10。
  252. var valnum;
  253. var arrInt = new Array(7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2);
  254. var arrCh = new Array('1', '0', 'X', '9', '8', '7', '6', '5', '4', '3', '2');
  255. var nTemp = 0,
  256. i;
  257. for (i = 0; i < 17; i++) {
  258. nTemp += num.substr(i, 1) * arrInt[i];
  259. }
  260. valnum = arrCh[nTemp % 11];
  261. if (valnum != num.substr(17, 1)) {
  262. return false;
  263. }
  264. }
  265. }
  266. return true;
  267. },
  268. //浮点数判断,货币判断len1小数点前位数len2小数点后位数
  269. IsFloat: function(float, len1, len2) {
  270. var preg = "^([0-9]{1," + len1 + "}\.{0,1}[0-9]{0," + len2 + "})$";
  271. var valid = new RegExp(preg, "gim").test(float);
  272. return valid;
  273. },
  274. //邮箱判断
  275. IsEmail: function(email) {
  276. var preg = "^\\w+((-\\w+)|(\.\\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$";
  277. var valid = new RegExp(preg, "gim").test(email);
  278. return valid;
  279. },
  280. //判断正常名称类的字符串
  281. IsStrName: function(str, len1, len2) {
  282. var preg = "^(\\w|[\\u4E00-\\u9FA5\\uF900-\\uFA2D]|[\\uFF00-\\uFFEF]){" + len1 + "," + len2 + "}$";
  283. var valid = new RegExp(preg, "gim").test(str);
  284. return valid;
  285. },
  286. //判断中文字符串
  287. IsStrZH: function(str, len1, len2) {
  288. var preg = "^([\\u4E00-\\u9FA5\\uF900-\\uFA2D]|[\\uFF00-\\uFFEF]){" + len1 + "," + len2 + "}$";
  289. var valid = new RegExp(preg, "gim").test(str);
  290. return valid;
  291. },
  292. //判断英文字符串
  293. IsStrEN: function(str, len1, len2) {
  294. var preg = "^([A-Za-z0-9]){" + len1 + "," + len2 + "}$";
  295. var valid = new RegExp(preg, "gim").test(str);
  296. return valid;
  297. },
  298. //判断整型数字
  299. IsNumeric: function(num, min, max) {
  300. var preg = "^(\\d){" + min + "," + max + "}$";
  301. var valid = new RegExp(preg, "gim").test(num);
  302. return valid;
  303. },
  304. //去左右空格;
  305. Trim: function(s) {
  306. return s.replace(/(^\s*)|(\s*$)/g, "");
  307. },
  308. //提取字符串中的img标签 生成自适应图片的字符串
  309. getImgSrcfromString: function(str) {
  310. let new_str = str
  311. let img_reg = /<img.*?(?:>|\/>)/gi
  312. let src_reg = /src=[\'\"]?([^\'\"]*)[\'\"]?/i
  313. let imgs = str.match(img_reg)
  314. if (imgs != null) {
  315. for (let i = 0; i < imgs.length; i++) {
  316. let src = imgs[i].match(src_reg)[1]
  317. new_str = new_str.replace(imgs[i],
  318. `<img style="width:100%;height:auto;margin:10px 0;" src=${src} />`)
  319. }
  320. }
  321. return new_str
  322. },
  323. //获得今天的日期
  324. GetNowTime: function() {
  325. var now = new Date();
  326. var year = now.getFullYear();
  327. var month = now.getMonth() + 1;
  328. var day = now.getDate();
  329. if (month < 10) {
  330. month = '0' + month;
  331. };
  332. if (day < 10) {
  333. day = '0' + day;
  334. };
  335. // 如果需要时分秒,就放开
  336. // var h = now.getHours();
  337. // var m = now.getMinutes();
  338. // var s = now.getSeconds();
  339. var formatDate = year + '-' + month + '-' + day;
  340. return formatDate;
  341. },
  342. //获得当前月份
  343. GetNowMonth: function() {
  344. var now = new Date();
  345. var year = now.getFullYear();
  346. var month = now.getMonth() + 1;
  347. if (month < 10) {
  348. month = '0' + month;
  349. };
  350. var formatDate = year + '-' + month;
  351. return formatDate;
  352. },
  353. //获得当前时间加指定秒数
  354. GetTimeAdd: function(second) {
  355. // 如果需要时分秒,就放开
  356. var now = new Date();
  357. var time = now.getTime() + 1000 * second;
  358. var n2 = new Date(time);
  359. return n2.getHours() + ':' + n2.getMinutes();
  360. },
  361. //获得多少天以后的日期
  362. GetDateStr: function(addDayCount) {
  363. var dd;
  364. dd = new Date();
  365. dd.setDate(dd.getDate() + addDayCount); //获取AddDayCount天后的日期
  366. var y = dd.getFullYear();
  367. var m = dd.getMonth() + 1; //获取当前月份的日期
  368. var d = dd.getDate();
  369. if (m < 10) {
  370. m = '0' + m;
  371. };
  372. if (d < 10) {
  373. d = '0' + d;
  374. };
  375. return y + "-" + m + "-" + d;
  376. },
  377. //数组中重复元素删除
  378. RepeatArrayClear: function(array) {
  379. var arr = [];
  380. for (var i = 0; i < array.length; i++) {
  381. if (arr.indexOf(array[i]) == -1) {
  382. arr.push(array[i]);
  383. }
  384. }
  385. return arr;
  386. },
  387. //提示信息框
  388. Toast: function(title, duration = 2000) {
  389. uni.showToast({
  390. icon: 'none',
  391. title: title,
  392. duration: duration
  393. });
  394. },
  395. //显示模态框
  396. Modal(title, content, type) {
  397. var promise = new Promise(function(resolve, reject) {
  398. if (type == 1) {
  399. uni.showModal({
  400. showCancel: false,
  401. title: title,
  402. content: content,
  403. success: function(e) {
  404. if (e.confirm) {
  405. resolve(true);
  406. } else {
  407. resolve(false);
  408. }
  409. }
  410. });
  411. } else {
  412. uni.showModal({
  413. title: title,
  414. content: content,
  415. success: function(e) {
  416. if (e.confirm) {
  417. resolve(true);
  418. } else {
  419. resolve(false);
  420. }
  421. }
  422. });
  423. }
  424. });
  425. return promise;
  426. },
  427. /**获取url地址中的指定参数值*/
  428. getUrlParams(name) {
  429. return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.href) || [,
  430. ''])[1].replace(/\+/g, '%20')) || null
  431. },
  432. // 打电话
  433. call(num) {
  434. uni.makePhoneCall({
  435. phoneNumber: num
  436. });
  437. },
  438. // 导航
  439. toMap(info,name='') {
  440. // uni.getLocation({
  441. // type: 'wgs84', //返回可以用于uni.openLocation的经纬度
  442. // // 用户允许获取定位
  443. // success: function(res) {
  444. // console.log('getLocation', res)
  445. // if (res.errMsg == "getLocation:ok") {
  446. uni.openLocation({
  447. // 传入你要去的纬度
  448. latitude: Number(info['lat']),
  449. // 传入你要去的经度
  450. longitude: Number(info['lng']),
  451. // 要去位置的名称
  452. name:name,
  453. // 缩放大小
  454. scale: 18,
  455. success: function() {
  456. console.log('成功的回调success');
  457. }
  458. });
  459. // }
  460. // },
  461. // // 用户拒绝获取定位后 再次点击触发
  462. // fail: function(res) {
  463. // console.log(res)
  464. // if (res.errMsg == "getLocation:fail auth deny") {
  465. // uni.showModal({
  466. // content: '检测到您没打开获取信息功能权限,是否去设置打开?',
  467. // confirmText: "确认",
  468. // cancelText: '取消',
  469. // success: (res) => {
  470. // if (res.confirm) {
  471. // uni.openSetting({
  472. // success: (res) => {
  473. // console.log('确定');
  474. // }
  475. // })
  476. // } else {
  477. // return false;
  478. // }
  479. // }
  480. // })
  481. // }
  482. // }
  483. // });
  484. },
  485. // 设置自定义导航栏 页面滚动调整导航的透明度
  486. // e 滚动事件对象, headerStatus 是否显示自定义导航栏背景色
  487. initOnPageScroll(e, _this, headerStatus = true) {
  488. if (e.scrollTop > 100) {
  489. _this.backButtonStyle = 'color:#323232;';
  490. _this.headerStyle = headerStatus ? 'background-color:rgba(255,255,255,0.9)' :
  491. 'background-color:rgba(255,255,255,0)';
  492. _this.titleStyle = 'opacity:1';
  493. // 设置页面导航栏颜色
  494. uni.setNavigationBarColor({
  495. frontColor: '#000000',
  496. backgroundColor: 'rgba(255,255,255,0)'
  497. })
  498. } else {
  499. _this.backButtonStyle = 'color:#FFFFFF;',
  500. _this.headerStyle = 'background-color:rgba(255,255,255,0)';
  501. _this.titleStyle = 'opacity:0';
  502. // 设置页面导航栏颜色
  503. uni.setNavigationBarColor({
  504. frontColor: '#ffffff',
  505. backgroundColor: 'rgba(255,255,255,0)'
  506. })
  507. }
  508. },
  509. // 加载自定义字体文件
  510. getFontFamily() {
  511. uni.loadFontFace({
  512. family: 'ysbth',
  513. source: 'url("/static/font/ysbth.ttf")',
  514. success() {
  515. console.log('字体加载成功')
  516. },
  517. fail(err) {
  518. console.log('字体加载失败',err)
  519. }
  520. })
  521. },
  522. }