frontend.js 7.0 KB

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