Foundation.js 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259
  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. let navigation = getCurrentPages()[getCurrentPages().length - (getCurrentPages().length ) ];
  78. if (getCurrentPages().length > 1) {
  79. console.log(navigation, getCurrentPages());
  80. if (navigation.route == "pages/passport/login") {
  81. navigationToBack(type);
  82. } else {
  83. if (!navigation.route || navigation.route == "undefined") {
  84. navigationToBack(type);
  85. } else {
  86. uni.navigateBack({
  87. delta: getCurrentPages().length,
  88. });
  89. }
  90. }
  91. } else {
  92. uni.switchTab({
  93. url: "/pages/tabbar/home/index",
  94. });
  95. }
  96. }
  97. /**
  98. * 将unix时间戳转换为指定格式
  99. * @param unix 时间戳【秒】
  100. * @param format 转换格式
  101. * @returns {*|string}
  102. */
  103. export function unixToDate(unix, format) {
  104. if (!unix) return unix;
  105. let _format = format || "yyyy-MM-dd hh:mm:ss";
  106. const d = new Date(unix);
  107. const o = {
  108. "M+": d.getMonth() + 1,
  109. "d+": d.getDate(),
  110. "h+": d.getHours(),
  111. "m+": d.getMinutes(),
  112. "s+": d.getSeconds(),
  113. "q+": Math.floor((d.getMonth() + 3) / 3),
  114. S: d.getMilliseconds(),
  115. };
  116. if (/(y+)/.test(_format))
  117. _format = _format.replace(
  118. RegExp.$1,
  119. (d.getFullYear() + "").substr(4 - RegExp.$1.length)
  120. );
  121. for (const k in o)
  122. if (new RegExp("(" + k + ")").test(_format))
  123. _format = _format.replace(
  124. RegExp.$1,
  125. RegExp.$1.length === 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length)
  126. );
  127. return _format;
  128. }
  129. /**
  130. * 将时间转unix时间戳
  131. * @param date
  132. * @returns {number} 【秒】
  133. */
  134. export function dateToUnix(date) {
  135. let newStr = date.replace(/:/g, "-");
  136. newStr = newStr.replace(/ /g, "-");
  137. const arr = newStr.split("-");
  138. const datum = new Date(
  139. Date.UTC(
  140. arr[0],
  141. arr[1] - 1,
  142. arr[2],
  143. arr[3] - 8 || -8,
  144. arr[4] || 0,
  145. arr[5] || 0
  146. )
  147. );
  148. return parseInt(datum.getTime() / 1000);
  149. }
  150. /**
  151. * 货币格式化
  152. * @param price
  153. * @returns {string}
  154. */
  155. export function formatPrice(price) {
  156. if (typeof price !== "number") return price;
  157. return String(Number(price).toFixed(2)).replace(/\B(?=(\d{3})+(?!\d))/g, ",");
  158. }
  159. /**
  160. * 手机号隐私保护
  161. * 隐藏中间四位数字
  162. * @param mobile
  163. * @returns {*}
  164. */
  165. export function secrecyMobile(mobile) {
  166. mobile = String(mobile);
  167. if (!/\d{11}/.test(mobile)) {
  168. return mobile;
  169. }
  170. return mobile.replace(/(\d{3})(\d{4})(\d{4})/, "$1****$3");
  171. }
  172. /**
  173. * 随机生成指定长度的字符串
  174. * @param length
  175. * @returns {string}
  176. */
  177. export function randomString(length = 32) {
  178. const chars =
  179. "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  180. const maxPos = chars.length;
  181. let _string = "";
  182. for (let i = 0; i < length; i++) {
  183. _string += chars.charAt(Math.floor(Math.random() * maxPos));
  184. }
  185. return _string;
  186. }
  187. /**
  188. * 计算传秒数的倒计时【天、时、分、秒】
  189. * @param seconds
  190. * @returns {{day : *, hours : *, minutes : *, seconds : *}}
  191. */
  192. export function countTimeDown(seconds) {
  193. const leftTime = (time) => {
  194. if (time < 10) time = "0" + time;
  195. return time + "";
  196. };
  197. return {
  198. day: leftTime(parseInt(seconds / 60 / 60 / 24, 10)),
  199. hours: leftTime(parseInt((seconds / 60 / 60) % 24, 10)),
  200. minutes: leftTime(parseInt((seconds / 60) % 60, 10)),
  201. seconds: leftTime(parseInt(seconds % 60, 10)),
  202. };
  203. }
  204. function navigationToBack(type) {
  205. if (type == "wx") {
  206. // console.log(getCurrentPages().length - 3)
  207. uni.navigateBack({
  208. delta: getCurrentPages().length,
  209. });
  210. } else {
  211. uni.switchTab({
  212. url: "/pages/tabbar/home/index",
  213. });
  214. }
  215. }
  216. /**
  217. * 计算当前时间到第二天0点的倒计时[秒]
  218. * @returns {number}
  219. */
  220. export function theNextDayTime() {
  221. const nowDate = new Date();
  222. const time =
  223. new Date(
  224. nowDate.getFullYear(),
  225. nowDate.getMonth(),
  226. nowDate.getDate() + 1,
  227. 0,
  228. 0,
  229. 0
  230. ).getTime() - nowDate.getTime();
  231. return parseInt(time / 1000);
  232. }
  233. module.exports = {
  234. unixToDate,
  235. dateToUnix,
  236. formatPrice,
  237. secrecyMobile,
  238. randomString,
  239. countTimeDown,
  240. theNextDayTime,
  241. whetherNavigate,
  242. checkBankno,
  243. };