Foundation.js 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260
  1. /**
  2. * 一些常用的基础方法
  3. * whetherNavigate 登录后跳转判断
  4. * unixToDate 将unix时间戳转换为指定格式
  5. * dateToUnix 将时间转unix时间戳
  6. * deepClone 对一个对象进行深拷贝
  7. * formatPrice 货币格式化
  8. * secrecyMobile 手机号隐私保护
  9. * randomString 随机生成指定长度的字符串
  10. */
  11. /**
  12. * 验证银行卡号
  13. */
  14. export function checkBankno(bankno) {
  15. var lastNum = bankno.substr(bankno.length - 1, 1); //取出最后一位(与luhm进行比较)
  16. var first15Num = bankno.substr(0, bankno.length - 1); //前15或18位
  17. var newArr = [];
  18. for (var i = first15Num.length - 1; i > -1; i--) {
  19. //前15或18位倒序存进数组
  20. newArr.push(first15Num.substr(i, 1));
  21. }
  22. var arrJiShu = []; //奇数位*2的积 <9
  23. var arrJiShu2 = []; //奇数位*2的积 >9
  24. var arrOuShu = []; //偶数位数组
  25. for (var j = 0; j < newArr.length; j++) {
  26. if ((j + 1) % 2 == 1) {
  27. //奇数位
  28. if (parseInt(newArr[j]) * 2 < 9) arrJiShu.push(parseInt(newArr[j]) * 2);
  29. else arrJiShu2.push(parseInt(newArr[j]) * 2);
  30. } //偶数位
  31. else arrOuShu.push(newArr[j]);
  32. }
  33. var jishu_child1 = []; //奇数位*2 >9 的分割之后的数组个位数
  34. var jishu_child2 = []; //奇数位*2 >9 的分割之后的数组十位数
  35. for (var h = 0; h < arrJiShu2.length; h++) {
  36. jishu_child1.push(parseInt(arrJiShu2[h]) % 10);
  37. jishu_child2.push(parseInt(arrJiShu2[h]) / 10);
  38. }
  39. var sumJiShu = 0; //奇数位*2 < 9 的数组之和
  40. var sumOuShu = 0; //偶数位数组之和
  41. var sumJiShuChild1 = 0; //奇数位*2 >9 的分割之后的数组个位数之和
  42. var sumJiShuChild2 = 0; //奇数位*2 >9 的分割之后的数组十位数之和
  43. var sumTotal = 0;
  44. for (var m = 0; m < arrJiShu.length; m++) {
  45. sumJiShu = sumJiShu + parseInt(arrJiShu[m]);
  46. }
  47. for (var n = 0; n < arrOuShu.length; n++) {
  48. sumOuShu = sumOuShu + parseInt(arrOuShu[n]);
  49. }
  50. for (var p = 0; p < jishu_child1.length; p++) {
  51. sumJiShuChild1 = sumJiShuChild1 + parseInt(jishu_child1[p]);
  52. sumJiShuChild2 = sumJiShuChild2 + parseInt(jishu_child2[p]);
  53. }
  54. //计算总和
  55. sumTotal =
  56. parseInt(sumJiShu) +
  57. parseInt(sumOuShu) +
  58. parseInt(sumJiShuChild1) +
  59. parseInt(sumJiShuChild2);
  60. //计算Luhm值
  61. var k = parseInt(sumTotal) % 10 == 0 ? 10 : parseInt(sumTotal) % 10;
  62. var luhm = 10 - k;
  63. if (lastNum == luhm) {
  64. return true;
  65. } else {
  66. return false;
  67. }
  68. }
  69. /**
  70. * 登录后跳转判断
  71. * 计算出当前router路径
  72. * 1.如果跳转的链接为登录页面或跳转的链接为空页面。则会重新跳转到首页
  73. * 2.都不满足返回跳转页面
  74. * @param type 'default' || 'wx' //返回地址会做判断默认为default
  75. */
  76. export function whetherNavigate(type = "default") {
  77. if (getCurrentPages().length > 1) {
  78. if ((getCurrentPages().length - 2).route == "pages/passport/login") {
  79. navigationToBack(type);
  80. } else {
  81. if (
  82. !(getCurrentPages().length - 2).route ||
  83. (getCurrentPages().length - 2).route == "undefined"
  84. ) {
  85. navigationToBack(type);
  86. } else {
  87. uni.navigateBack({
  88. delta: getCurrentPages().length - 2,
  89. });
  90. }
  91. }
  92. } else {
  93. uni.switchTab({
  94. url: "/pages/tabbar/home/index",
  95. });
  96. }
  97. }
  98. /**
  99. * 将unix时间戳转换为指定格式
  100. * @param unix 时间戳【秒】
  101. * @param format 转换格式
  102. * @returns {*|string}
  103. */
  104. export function unixToDate(unix, format) {
  105. if (!unix) return unix;
  106. let _format = format || "yyyy-MM-dd hh:mm:ss";
  107. const d = new Date(unix);
  108. const o = {
  109. "M+": d.getMonth() + 1,
  110. "d+": d.getDate(),
  111. "h+": d.getHours(),
  112. "m+": d.getMinutes(),
  113. "s+": d.getSeconds(),
  114. "q+": Math.floor((d.getMonth() + 3) / 3),
  115. S: d.getMilliseconds(),
  116. };
  117. if (/(y+)/.test(_format))
  118. _format = _format.replace(
  119. RegExp.$1,
  120. (d.getFullYear() + "").substr(4 - RegExp.$1.length)
  121. );
  122. for (const k in o)
  123. if (new RegExp("(" + k + ")").test(_format))
  124. _format = _format.replace(
  125. RegExp.$1,
  126. RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
  127. );
  128. return _format;
  129. }
  130. /**
  131. * 将时间转unix时间戳
  132. * @param date
  133. * @returns {number} 【秒】
  134. */
  135. export function dateToUnix(date) {
  136. let newStr = date.replace(/:/g, "-");
  137. newStr = newStr.replace(/ /g, "-");
  138. const arr = newStr.split("-");
  139. const datum = new Date(
  140. Date.UTC(
  141. arr[0],
  142. arr[1] - 1,
  143. arr[2],
  144. arr[3] - 8 || -8,
  145. arr[4] || 0,
  146. arr[5] || 0
  147. )
  148. );
  149. return parseInt(datum.getTime() / 1000);
  150. }
  151. /**
  152. * 货币格式化
  153. * @param price
  154. * @returns {string}
  155. */
  156. export function formatPrice(price) {
  157. if (typeof price !== "number") return price;
  158. return String(Number(price).toFixed(2)).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  159. }
  160. /**
  161. * 手机号隐私保护
  162. * 隐藏中间四位数字
  163. * @param mobile
  164. * @returns {*}
  165. */
  166. export function secrecyMobile(mobile) {
  167. mobile = String(mobile);
  168. if (!/\d{11}/.test(mobile)) {
  169. return mobile;
  170. }
  171. return mobile.replace(/(\d{3})(\d{4})(\d{4})/, "$1****$3");
  172. }
  173. /**
  174. * 随机生成指定长度的字符串
  175. * @param length
  176. * @returns {string}
  177. */
  178. export function randomString(length = 32) {
  179. const chars =
  180. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  181. const maxPos = chars.length;
  182. let _string = "";
  183. for (let i = 0; i < length; i++) {
  184. _string += chars.charAt(Math.floor(Math.random() * maxPos));
  185. }
  186. return _string;
  187. }
  188. /**
  189. * 计算传秒数的倒计时【天、时、分、秒】
  190. * @param seconds
  191. * @returns {{day : *, hours : *, minutes : *, seconds : *}}
  192. */
  193. export function countTimeDown(seconds) {
  194. const leftTime = (time) => {
  195. if (time < 10) time = "0" + time;
  196. return time + "";
  197. };
  198. return {
  199. day: leftTime(parseInt(seconds / 60 / 60 / 24, 10)),
  200. hours: leftTime(parseInt((seconds / 60 / 60) % 24, 10)),
  201. minutes: leftTime(parseInt((seconds / 60) % 60, 10)),
  202. seconds: leftTime(parseInt(seconds % 60, 10)),
  203. };
  204. }
  205. function navigationToBack(type) {
  206. if (type == "wx") {
  207. // console.log(getCurrentPages().length - 3)
  208. uni.navigateBack({
  209. delta: getCurrentPages().length,
  210. });
  211. } else {
  212. uni.switchTab({
  213. url: "/pages/tabbar/home/index",
  214. });
  215. }
  216. }
  217. /**
  218. * 计算当前时间到第二天0点的倒计时[秒]
  219. * @returns {number}
  220. */
  221. export function theNextDayTime() {
  222. const nowDate = new Date();
  223. const time =
  224. new Date(
  225. nowDate.getFullYear(),
  226. nowDate.getMonth(),
  227. nowDate.getDate() + 1,
  228. 0,
  229. 0,
  230. 0
  231. ).getTime() - nowDate.getTime();
  232. return parseInt(time / 1000);
  233. }
  234. module.exports = {
  235. unixToDate,
  236. dateToUnix,
  237. formatPrice,
  238. secrecyMobile,
  239. randomString,
  240. countTimeDown,
  241. theNextDayTime,
  242. whetherNavigate,
  243. checkBankno,
  244. };