frontend.js 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. define(['fast', 'template', 'moment'], function (Fast, Template, Moment) {
  2. var Frontend = {
  3. api: {
  4. //发送验证码
  5. sendcaptcha: function (btn, type, data, success, error) {
  6. $(btn).addClass("disabled", true).text("发送中...");
  7. var si = {};
  8. Frontend.api.ajax({url: $(btn).data("url"), data: data}, function (data, ret) {
  9. clearInterval(si[type]);
  10. var seconds = 60;
  11. si[type] = setInterval(function () {
  12. seconds--;
  13. if (seconds <= 0) {
  14. clearInterval(si);
  15. $(btn).removeClass("disabled").text("发送验证码");
  16. } else {
  17. $(btn).addClass("disabled").text(seconds + "秒后可再次发送");
  18. }
  19. }, 1000);
  20. if (typeof success == 'function') {
  21. success.call(this, data, ret);
  22. }
  23. }, function (data, ret) {
  24. $(btn).removeClass("disabled").text('发送验证码');
  25. if (typeof error == 'function') {
  26. error.call(this, data, ret);
  27. }
  28. });
  29. },
  30. //准备验证码
  31. preparecaptcha: function (btn, type, data) {
  32. require(['form'], function (Form) {
  33. Layer.open({
  34. title: '请完成验证',
  35. type: 1,
  36. content: Template("captchatpl", {}),
  37. btnAlign: 'c',
  38. success: function (layero, index) {
  39. var form = $("form", layero);
  40. form.data("validator-options", {
  41. valid: function (ret) {
  42. data.captcha = $("input[name=captcha]", form).val();
  43. Frontend.api.sendcaptcha(btn, type, data, function (data, ret) {
  44. Layer.close(index);
  45. }, function (data, ret) {
  46. $("img.captcha-img", form).trigger("click");
  47. });
  48. return true;
  49. }
  50. })
  51. Form.api.bindevent(form);
  52. }
  53. });
  54. });
  55. }
  56. },
  57. init: function () {
  58. //点击发送验证码
  59. $(document).on("click", ".btn-captcha", function (e) {
  60. var type = $(this).data("type") ? $(this).data("type") : 'mobile';
  61. var btn = this;
  62. if (['mobile', 'email'].indexOf(type) > -1) {
  63. var element = $(this).data("input-id") ? $("#" + $(this).data("input-id")) : $("input[name='" + type + "']", $(this).closest("form"));
  64. var text = type === 'email' ? '邮箱' : '手机号码';
  65. if (element.val() === "") {
  66. Layer.msg(text + "不能为空!");
  67. element.focus();
  68. return false;
  69. } else if (type === 'mobile' && !element.val().match(/^1[3-9]\d{9}$/)) {
  70. Layer.msg("请输入正确的" + text + "!");
  71. element.focus();
  72. return false;
  73. } else if (type === 'email' && !element.val().match(/^[\w\+\-]+(\.[\w\+\-]+)*@[a-z\d\-]+(\.[a-z\d\-]+)*\.([a-z]{2,4})$/)) {
  74. Layer.msg("请输入正确的" + text + "!");
  75. element.focus();
  76. return false;
  77. }
  78. element.isValid(function (v) {
  79. if (v) {
  80. var data = {event: $(btn).data("event"), id: $(btn).data("id")};
  81. data[type] = element.val();
  82. if ($("#captchatpl").length === 0) {
  83. Frontend.api.sendcaptcha(btn, type, data);
  84. } else {
  85. Frontend.api.preparecaptcha(btn, type, data);
  86. }
  87. } else {
  88. Layer.msg("请确认已经输入了正确的" + text + "!");
  89. }
  90. });
  91. } else {
  92. var data = {event: $(btn).data("event")};
  93. Frontend.api.sendcaptcha(btn, type, data, function (data, ret) {
  94. Layer.open({
  95. title: false,
  96. area: [Math.min($(window).width(), 400) + "px", "430px"],
  97. content: "<img src='" + data.image + "' width='400' height='400' /><div class='text-center panel-title'>扫一扫关注公众号获取验证码</div>",
  98. type: 1
  99. });
  100. });
  101. }
  102. return false;
  103. });
  104. //tooltip和popover
  105. if (!('ontouchstart' in document.documentElement)) {
  106. $('body').tooltip({selector: '[data-toggle="tooltip"]'});
  107. }
  108. $('body').popover({selector: '[data-toggle="popover"]'});
  109. // 手机端左右滑动切换菜单栏
  110. if ('ontouchstart' in document.documentElement) {
  111. var startX, startY, moveEndX, moveEndY, relativeX, relativeY, element;
  112. element = $('body', document);
  113. element.on("touchstart", function (e) {
  114. startX = e.originalEvent.changedTouches[0].pageX;
  115. startY = e.originalEvent.changedTouches[0].pageY;
  116. });
  117. element.on("touchend", function (e) {
  118. moveEndX = e.originalEvent.changedTouches[0].pageX;
  119. moveEndY = e.originalEvent.changedTouches[0].pageY;
  120. relativeX = moveEndX - startX;
  121. relativeY = moveEndY - startY;
  122. // 判断标准
  123. //右滑
  124. if (relativeX > 45) {
  125. if ((Math.abs(relativeX) - Math.abs(relativeY)) > 50) {
  126. element.addClass("sidebar-open");
  127. }
  128. }
  129. //左滑
  130. else if (relativeX < -45) {
  131. if ((Math.abs(relativeX) - Math.abs(relativeY)) > 50) {
  132. element.removeClass("sidebar-open");
  133. }
  134. }
  135. });
  136. }
  137. $(document).on("click", ".sidebar-toggle", function () {
  138. $("body").toggleClass("sidebar-open");
  139. });
  140. }
  141. };
  142. Frontend.api = $.extend(Fast.api, Frontend.api);
  143. //将Template渲染至全局,以便于在子框架中调用
  144. window.Template = Template;
  145. //将Moment渲染至全局,以便于在子框架中调用
  146. window.Moment = Moment;
  147. //将Frontend渲染至全局,以便于在子框架中调用
  148. window.Frontend = Frontend;
  149. Frontend.init();
  150. return Frontend;
  151. });