sms.ejs 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. <% include ./sub_menu.ejs %>
  2. <div class="panel-content" id="app">
  3. <div class="panel-title">
  4. <div class="title-main">
  5. <h2>认证手机</h2>
  6. </div>
  7. </div>
  8. <div class="content-wrap">
  9. <div class="c-body">
  10. <div class="sjs-height-0">
  11. <div class="row m-0 mt-3">
  12. <div class="col-6">
  13. <div class="card mb-3 ">
  14. <div class="card-body pt-3">
  15. <h6 class="card-title">认证手机</h6>
  16. <% if (accountData.auth_mobile !== '') { %>
  17. <!--已绑定手机-->
  18. <div class="form-group">
  19. <label><%- accountData.auth_mobile %></label>
  20. <% if (accountData.dsk_account) { %>
  21. <a href="javascript:void(0);" class="btn btn-sm btn-outline-secondary" data-container="body" data-toggle="popover" data-placement="bottom" data-content="先解绑大司空账号才能解绑认证手机" data-trigger="focus">解绑</a>
  22. <% } else { %>
  23. <a href="#remove-auth-mobile" class="btn btn-sm btn-outline-primary" data-toggle="modal" data-target="#remove-auth-mobile">解绑</a>
  24. <% } %>
  25. <a href="javascript:void(0);" class="btn btn-sm btn-outline-warning ml-2" id="change-mobile">修改手机</a>
  26. </div>
  27. <% } %>
  28. <!--绑定手机-->
  29. <% if (accountData.auth_mobile === '') { %><div class="alert alert-warning">认证手机用户找回密码操作,请优先设置。</div><% } %>
  30. <form id="mobile-form" <% if (accountData.auth_mobile !== '') { %>style="display: none" <% } %>>
  31. <div class="form-group">
  32. <label>认证手机</label>
  33. <div class="input-group mb-3">
  34. <input class="form-control form-control-sm" placeholder="输入11位手机号码" value="" name="auth_mobile" maxlength="11"/>
  35. <div class="input-group-append">
  36. <button class="btn btn-outline-secondary btn-sm" type="button" id="get-code">获取验证码</button>
  37. </div>
  38. </div>
  39. </div>
  40. <div class="form-group">
  41. <div class="input-group mb-3">
  42. <input class="form-control form-control-sm" type="text" readonly="readonly" name="code" placeholder="输入短信中的6位验证码" />
  43. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  44. </div>
  45. </div>
  46. <button type="button" class="btn btn-secondary btn-sm disabled" id="bind-btn">确认绑定</button>
  47. <% if (accountData.auth_mobile !== '') { %><button type="button" class="btn btn-outline-secondary btn-sm" id="hide-bind-btn">取消</button><% } %>
  48. </form>
  49. <% if (accountData.auth_mobile !== '' && false) { %>
  50. <!--短信通知开关(已有认证手机后显示)-->
  51. <div class="mt-5">
  52. <h4>通知类型</h4>
  53. <p class="text-muted">勾选您需要接收的短信类型。</p>
  54. <form id="sms-form" method="post" action="/profile/sms/type?csrf=<%- ctx.csrf %>">
  55. <input type="hidden" name="_csrf_j" value="<%= ctx.csrf %>">
  56. <% const user_smsType = accountData.sms_type !== '' ? JSON.parse(accountData.sms_type) : null; %>
  57. <% for (const s in smsType) { %>
  58. <% if (smsType[s].sms) { %>
  59. <div class="form-group row">
  60. <label class="col-auto col-form-label"><%= smsType[s].name %>
  61. <!--<a href="#sms-view" data-toggle="modal" data-target="#sms-view" class="ml-2"><i class="fa fa-info-circle"></i></a>-->
  62. </label>
  63. <div class="col-5">
  64. <% for (const c of smsType[s].children) { %>
  65. <div class="form-check ">
  66. <input class="form-check-input" id="<%= s %>_<%- c.value %>" type="checkbox" name="<%= s %>[]" value="<%= c.value %>" <% if (user_smsType !== null && user_smsType[s] !== undefined && user_smsType[s].indexOf(c.value.toString()) !== -1) { %>checked<% } %>>
  67. <label class="form-check-label" for="<%= s %>_<%- c.value %>"><%= c.title %></label>
  68. </div>
  69. <% } %>
  70. </div>
  71. </div>
  72. <% } %>
  73. <% } %>
  74. <input name="type" value="1" type="hidden">
  75. <button type="submit" class="btn btn-primary btn-sm">确认修改</button>
  76. </form>
  77. </div>
  78. <% } %>
  79. </div>
  80. </div>
  81. <div class="card mb-3 ">
  82. <div class="card-body pt-3">
  83. <h6 class="card-title">大司空账号</h6>
  84. <div class="mb-3">
  85. <% if (!accountData.auth_mobile) { %>
  86. <div class="mb-3"><label for="">请先认证手机,再绑定大司空账号。</label></div>
  87. <% } else { %>
  88. <div <% if (accountData.dsk_account) { %>style="display: none"<% } %>>
  89. <div class="form-group">
  90. <div class="input-group mb-3">
  91. <input class="form-control form-control-sm" id="dak-mobile" readonly="" value="<%= accountData.auth_mobile %>">
  92. <div class="input-group-append">
  93. <button class="btn btn-outline-secondary btn-sm" id="change-dsk-mobile">更改账号</button>
  94. <button class="btn btn-outline-secondary btn-sm" style="display: none" id="reset-dsk-mobile">重置</button>
  95. </div>
  96. </div>
  97. </div>
  98. <div class="form-group mb-1">
  99. <div>
  100. <div class="form-check form-check-inline">
  101. <input class="form-check-input" type="radio" id="radio1" value="password" name="dskradio" checked>
  102. <label class="form-check-label" for="radio1" name="radio33">密码</label>
  103. </div>
  104. <div class="form-check form-check-inline">
  105. <input class="form-check-input" type="radio" id="radio2" value="code" name="dskradio">
  106. <label class="form-check-label" for="radio2">手机验证码</label>
  107. </div>
  108. </div>
  109. </div>
  110. <div class="form-group mb-3" id="dsk-pwd-div">
  111. <input class="form-control form-control-sm" name="dsk_pwd" value="" placeholder="请输入密码">
  112. </div>
  113. <div class="input-group mb-3" id="dsk-code-div" style="display: none">
  114. <input class="form-control form-control-sm" placeholder="输入短信中的6位验证码" value="" name="dsk_code" maxlength="6"/>
  115. <div class="input-group-append">
  116. <button class="btn btn-outline-secondary btn-sm" type="button" id="get-dsk-code">获取验证码</button>
  117. </div>
  118. </div>
  119. <button class="btn btn-sm btn-primary" id="dsk-bind-btn">确认绑定</button>
  120. <a class="btn btn-sm btn-outline-primary ml-2" href="//dsk.smartcost.com.cn/register" target="_blank">注册大司空账号</a>
  121. </div>
  122. <div class="form-group show-dsk-account" <% if (!accountData.dsk_account) { %>style="display: none"<% } %>>
  123. <label><%- accountData.dsk_account ? accountData.dsk_account.mobile : '' %></label>
  124. <a href="#remove-dsk-account" class="btn btn-sm btn-outline-primary" data-toggle="modal" data-target="#remove-dsk-account">解绑</a>
  125. </div>
  126. </div>
  127. <% } %>
  128. </div>
  129. </div>
  130. </div>
  131. </div>
  132. </div>
  133. </div>
  134. </div>
  135. </div>
  136. <script type="text/javascript">
  137. const csrf = '<%= ctx.csrf %>';
  138. </script>
  139. <script type="text/javascript" src="/public/js/profile.js"></script>
  140. <script>
  141. $(function () {
  142. // 更改账号
  143. $('#change-dsk-mobile').click(function () {
  144. $('#dak-mobile').attr('readonly', false);
  145. $('#change-dsk-mobile').hide();
  146. $('#reset-dsk-mobile').show();
  147. });
  148. // 重置账号
  149. $('#reset-dsk-mobile').click(function () {
  150. $('#dak-mobile').val('<%= accountData.auth_mobile %>');
  151. });
  152. // 切换密码/验证码
  153. $('input[name="dskradio"]').on('change', function () {
  154. if ($(this).val() === 'password') {
  155. $('#dsk-pwd-div').show();
  156. $('#dsk-code-div').hide();
  157. } else {
  158. $('#dsk-pwd-div').hide();
  159. $('#dsk-code-div').show();
  160. }
  161. });
  162. // 获取验证码
  163. $("#get-dsk-code").click(function() {
  164. // if (isPosting2) {
  165. // return false;
  166. // }
  167. const mobile = $('#dak-mobile').val();
  168. if (!mobile) {
  169. toastr.error('请输入手机号');
  170. return false;
  171. }
  172. // 手机号验证
  173. if (!/^1[3456789]\d{9}$/.test(mobile)) {
  174. toastr.error('请输入正确的手机号');
  175. return false;
  176. }
  177. const btn = $(this);
  178. postData('/profile/dsk/api', { type: 'sms', mobile: mobile }, function (response) {
  179. codeSuccess(btn);
  180. });
  181. // $.ajax({
  182. // url: '/profile/dsk/api?_csrf_j=' + csrf,
  183. // type: 'post',
  184. // data: { type: 'code', mobile: mobile },
  185. // dataTye: 'json',
  186. // error: function() {
  187. // isPosting2 = false;
  188. // },
  189. // beforeSend: function() {
  190. // isPosting2 = true;
  191. // },
  192. // success: function(response) {
  193. // isPosting2 = false;
  194. // if (response.err === 0) {
  195. // codeSuccess(btn);
  196. // } else {
  197. // toastr.error(response.msg);
  198. // }
  199. // }
  200. // });
  201. });
  202. $('#dsk-bind-btn').click(function () {
  203. const mobile = $('#dak-mobile').val();
  204. const pwd = $('#dsk-pwd-div input').val();
  205. const code = $('#dsk-code-div input').val();
  206. const type = $('input[name="dskradio"]:checked').val();
  207. if (!mobile) {
  208. toastr.error('请输入手机号');
  209. return false;
  210. }
  211. if (type !== 'password' && type !== 'code') {
  212. toastr.error('请选择验证方式');
  213. return false;
  214. }
  215. if (type === 'password' && !pwd) {
  216. toastr.error('请输入密码');
  217. return false;
  218. }
  219. if (type === 'code' && !code) {
  220. toastr.error('请输入验证码');
  221. return false;
  222. }
  223. const data = {
  224. type: 'bind',
  225. mobile,
  226. method: type === 'password' ? 1 : 2,
  227. value: type === 'password' ? pwd : code,
  228. }
  229. postData('/profile/dsk/api', data, function (response) {
  230. toastr.success('绑定大司空账号成功');
  231. setTimeout(function () {
  232. location.reload();
  233. }, 1000);
  234. });
  235. });
  236. $('#del-dsk-btn').click(function () {
  237. postData('/profile/dsk/api', { type: 'unbind' }, function (response) {
  238. toastr.success('解绑大司空账号成功');
  239. setTimeout(function () {
  240. location.reload();
  241. }, 1000);
  242. });
  243. });
  244. });
  245. </script>