userLogin.js 23 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534
  1. (function ($) {
  2. $.fn.userLogin = function (param) {
  3. var html = '<div id="userLogin">' +
  4. '<div class="cover-content">' +
  5. '<div class="login">' +
  6. '<div class="left"><p class="loginBg"></p></div>' +
  7. '<ul class="right">' +
  8. '<li class="head">' +
  9. '<span class="passWay active">密码登录</span>' +
  10. '<span class="msgWay">短信登录</span>' +
  11. '<p class="weixin">微信</p>' +
  12. '<p class="qq">QQ</p>' +
  13. '<p class="weibo">微博</p>' +
  14. // '<img src="../userLogin/images/wx.png" alt="微信" class="weixin">' +
  15. // '<img src="../userLogin/images/qq.png" alt="QQ" class="qq">' +
  16. // '<img src="../userLogin/images/weibo.png" alt="微博" class="weibo">' +
  17. '<button class="close"></button>' +
  18. '</li>' +
  19. '<li><input type="text" placeholder="请输入用户名" class="user"></li>' +
  20. '<li class="passShow show"><input type="password" placeholder="请输入密码" class="lock"></li>' +
  21. '<li class="msgShow"><input type="text" placeholder="请输入验证码" class="yzm"><button class="getYzm">获取短信验证码</button><div class="btn_cov"></div></li>' +
  22. '<li><button class="loginBtn">登录</button></li>' +
  23. '<li class="other"><button class="fl forgetPass">忘记密码</button><button class="openReg fr">免费注册</button></li>' +
  24. '</ul>' +
  25. '</div>' +
  26. '<div class="regist">' +
  27. '<li class="para"><span class="menu">用户名</span><span class="redAlert">请输入用户名</span><input type="text" placeholder="请输入用户名" class="regName"></li>' +
  28. '<li class="para"><span class="menu">手机号</span><span class="redAlert">请输入手机号</span><input type="text" placeholder="可用于登录和找回密码" class="regNum"></li>' +
  29. '<li class="para"><span class="menu">密码</span><span class="redAlert">请输入密码</span><input type="password" placeholder="请设置登录密码" class="regPass"></li>' +
  30. '<li class="para li_cover"><span class="menu">验证码</span><span class="redAlert">请输入验证码</span><input type="text" placeholder="请输入验证码" class="yzm"><button class="getYzm">获取短信验证码</button><div class="btn_cov"></div></li>' +
  31. '<li class="xieyi"><span class="check"></span>阅读并接受《<a href="yonghuXieyi.html" target="_blank">MAPPLUS用户协议</a>》<span class="redAlert">请阅读协议及声明</span></li>' +
  32. '<li class="zhuce"><button class="regBtn">注册</button></li>' +
  33. '<li class="queding"><button class="queding">确定</button></li>' +
  34. '<li class="other">我已注册,现在去<button class="openLogin">登录</button></li>' +
  35. '<li class="back"><button class="openLogin">返回登录</button></li>' +
  36. '</div>' +
  37. '<div class="tip"></div>' +
  38. '</div>' +
  39. '</div>';
  40. $(this).append(html);
  41. //当前正在浏览的方式: pc/mobile
  42. var curNumCode = "sinup";
  43. function setTip(type, str) {
  44. $("#userLogin .tip").html(str)
  45. $("#userLogin .tip").addClass(type)
  46. $("#userLogin .tip").show()
  47. setTimeout(function () {
  48. $("#userLogin .tip").hide()
  49. $("#userLogin .tip").removeClass(type)
  50. $("#userLogin .tip").html("")
  51. }, 4000);
  52. }
  53. var cookie = {
  54. /**
  55. * 设置cookie
  56. * @type {Function}
  57. * @param name {String} 名称
  58. * @param value {String} 值
  59. * @param days {Number} 过期时间(天)
  60. * @example
  61. */
  62. set: function (name, value, days) {
  63. document.cookie = name + "=" + value;
  64. },
  65. /**
  66. * 获取cookie
  67. * @type {Function}
  68. * @param name {String} 名称
  69. * @returns {null|String} 返回值
  70. * @example
  71. */
  72. get: function (name) {
  73. var arr, reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
  74. arr = document.cookie.match(reg);
  75. if (arr) {
  76. return arr[2];
  77. } else {
  78. return null;
  79. }
  80. },
  81. /**
  82. * 删除cookie
  83. * @type {Function}
  84. * @param name {String} 名称
  85. * @example
  86. */
  87. del: function (name) {
  88. var exp = new Date();
  89. exp.setTime(exp.getTime() - 1);
  90. var cval = this.get(name);
  91. if (cval !== null) document.cookie = name + "=" + cval + ";expires=" + exp.toGMTString();
  92. }
  93. }
  94. function uuid4() {
  95. var text = "";
  96. var length = [8, 4, 4, 4, 12];
  97. var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
  98. for (var j = 0; j < 5; j++) {
  99. for (var i = 0; i < length[j]; i++) {
  100. text += possible.charAt(Math.floor(Math.random() * possible.length));
  101. }
  102. if (j < 3) {
  103. text += "-"
  104. }
  105. }
  106. return text;
  107. }
  108. function getQueryString(name) {
  109. var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
  110. var r = window.location.search.substr(1).match(reg);
  111. if (r != null) return decodeURI(r[2]);
  112. return '';
  113. };
  114. //判断接口中是否有session,如果有设置session
  115. if (getQueryString('session')) {
  116. session = getQueryString('session');
  117. cookie.del('session');
  118. cookie.set('session', session);
  119. var href = window.location.origin;
  120. window.location.replace(href);
  121. } else {
  122. session = uuid4();
  123. }
  124. var isLoad = false
  125. $.ajax({
  126. type: "get",
  127. dataType: 'jsonp',
  128. url: param.userServer + '/v1.0/user/me',
  129. success: function (data) {
  130. if (data.status == 401) {
  131. isLoad = false
  132. cookie.del('session');
  133. cookie.set('session', session);
  134. var callData = {
  135. isLoad: isLoad,
  136. userInfo: data.data
  137. }
  138. if (param.callback)
  139. param.callback(callData)
  140. } else {
  141. //$("#userLogin").addClass('hide');
  142. isLoad = true
  143. if (param.callback)
  144. var callData = {
  145. isLoad: isLoad,
  146. userInfo: data.data
  147. }
  148. getCurUserJWT(callData)
  149. }
  150. },
  151. error: function (data) {
  152. console.log(data)
  153. }
  154. });
  155. /**
  156. * [getCurUserJWT description]
  157. * 获取当前用户的jwt
  158. * @return {[type]} [description]
  159. */
  160. function getCurUserJWT(calldata) {
  161. $.ajax({
  162. type: "post",
  163. url: param.userServer + '/v1.0/user/jwt',
  164. success: function (data) {
  165. if (data.status == 0) {
  166. calldata.jwt = data.data;
  167. param.callback(calldata)
  168. }
  169. },
  170. error: function (data) {
  171. console.log(data)
  172. }
  173. });
  174. }
  175. /**
  176. * 交互
  177. */
  178. $("#userLogin .close").bind('click', function () {
  179. // $("#userLogin").addClass("hide");
  180. $("#userLogin").hide("hide");
  181. })
  182. //注册
  183. $("#userLogin .openReg").bind('click', function () {
  184. $("#userLogin .login").hide();
  185. $("#userLogin .regist").show();
  186. $("#userLogin .regist li.queding").hide();
  187. $("#userLogin .regist .zhuce, #userLogin .regist .xieyi, #userLogin .regist .other").show();
  188. $("#userLogin .regist .para").eq(0).show();
  189. $("#userLogin .regist .back").hide();
  190. curNumCode = "sinup";
  191. })
  192. //忘记密码
  193. $("#userLogin .forgetPass").bind('click', function () {
  194. $("#userLogin .regist").show();
  195. $("#userLogin .login").hide();
  196. $("#userLogin .regist li.queding").show();
  197. $("#userLogin .regist .zhuce, #userLogin .regist .xieyi, #userLogin .regist .other").hide();
  198. $("#userLogin .regist .para").eq(0).hide();
  199. $("#userLogin .regist .back").show();
  200. curNumCode = "forgetPass";
  201. })
  202. //登录
  203. $("#userLogin .openLogin").bind('click', function () {
  204. $("#userLogin .login").show();
  205. $("#userLogin .regist").hide();
  206. })
  207. //复选框
  208. $("#userLogin .autoLogin,#userLogin .check").bind('click', function () {
  209. if ($(this).hasClass('active')) {
  210. $(this).removeClass('active');
  211. } else {
  212. $(this).addClass('active');
  213. }
  214. })
  215. //登录方式
  216. $("#userLogin .head .passWay").bind('click', function () {
  217. $("#userLogin .head span").removeClass('active');
  218. $(this).addClass('active');
  219. $("#userLogin .passShow").addClass('show');
  220. $("#userLogin .msgShow").removeClass('show');
  221. $("#userLogin .login .user").attr("placeholder", "请输入用户名");
  222. })
  223. $("#userLogin .head .msgWay").bind('click', function () {
  224. $("#userLogin .head span").removeClass('active');
  225. $(this).addClass('active');
  226. $("#userLogin .msgShow").addClass('show');
  227. $("#userLogin .passShow").removeClass('show');
  228. $("#userLogin .login .user").attr("placeholder", "请输入手机号").text("");
  229. })
  230. // 协议
  231. $("#userLogin .regist li.xieyi a").bind('click', function () {
  232. $("#xieyi").addClass('active')
  233. })
  234. $("#xieyi .close").bind('click', function () {
  235. $("#xieyi").removeClass('active')
  236. })
  237. /**
  238. * 交互结束
  239. */
  240. /**
  241. * 请求开始
  242. */
  243. //重置密码
  244. $("#userLogin .regist button.queding").bind('click', function () {
  245. var shouji = $("#userLogin .regist .regNum").val();
  246. var mima = $("#userLogin .regist .regPass").val();
  247. var yanzhengma = $("#userLogin .regist .yzm").val();
  248. if (shouji.length > 0 && mima.length > 0 && yanzhengma.length > 0) {
  249. $.ajax({
  250. url: param.userServer + '/v1.0/user/mobile/reset_password',
  251. method: 'POST',
  252. dataType: 'json',
  253. data: {
  254. mobile: shouji,
  255. password: mima,
  256. code: yanzhengma
  257. }
  258. }).done(function (data) {
  259. console.log(data);
  260. if (data.status == 0) {
  261. setTip("success", "重置密码成功")
  262. $("#userLogin .regist").hide();
  263. $("#userLogin .login").show();
  264. $("#userLogin .regist li").show();
  265. $("#userLogin .regist li.queding").hide();
  266. } else {
  267. setTip("warning", data.message)
  268. }
  269. })
  270. } else {
  271. setTip("warning", '请填写正确信息')
  272. }
  273. })
  274. //注册获取验证码
  275. $("#userLogin .regist .getYzm").bind('click', function () {
  276. var num = $("#userLogin .regist .regNum").val();
  277. //验证手机号
  278. var reg = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;
  279. if (!reg.test(num)) {
  280. setTip("warning", '请输入正确的手机号')
  281. } else {
  282. if (curNumCode == "sinup") {
  283. var url = param.userServer + '/v1.0/user/mobile/register/code';
  284. } else {
  285. var url = param.userServer + '/v1.0/user/mobile/reset_password/code';
  286. }
  287. $.ajax({
  288. url: url,
  289. method: 'POST',
  290. dataType: 'json',
  291. data: {
  292. mobile: num
  293. }
  294. }).done(function (data) {
  295. console.log(data);
  296. if (data.status == 0) {
  297. showNumCover();
  298. setTip("success", '获取成功')
  299. } else {
  300. setTip("warning", data.message)
  301. }
  302. })
  303. }
  304. })
  305. //注册
  306. $("#userLogin .regist .regBtn").bind('click', function () {
  307. var check = $("#userLogin .regist .check").hasClass('active');
  308. if (!check) {
  309. $("#userLogin .regist .xieyi .redAlert").addClass('show');
  310. } else {
  311. $("#userLogin .regist .xieyi .redAlert").removeClass('show');
  312. }
  313. var redAlert = $("#userLogin .regist .para .redAlert");
  314. for (let i = 0; i < redAlert.length; i++) {
  315. if (redAlert.eq(i).next().val().length < 1) {
  316. redAlert.eq(i).addClass('show');
  317. } else {
  318. redAlert.eq(i).removeClass('show');
  319. }
  320. if (redAlert.eq(i).next().hasClass('regNum') && redAlert.eq(i).next().val().length < 11) {
  321. redAlert.eq(i).text('请输入正确的手机号').addClass('show');
  322. } else if (redAlert.eq(i).next().hasClass('regNum') && redAlert.eq(i).next().val().length >= 11) {
  323. var reg = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;
  324. if (!reg.test(redAlert.eq(i).next().val())) {
  325. setTip("warning", '请输入正确的手机号')
  326. } else {
  327. redAlert.eq(i).text('请输入手机号').removeClass('show');
  328. }
  329. }
  330. if (redAlert.eq(i).next().hasClass('regPass') && redAlert.eq(i).next().val().length < 6) {
  331. redAlert.eq(i).text('密码不得少于6位').addClass('show');
  332. } else if (redAlert.eq(i).next().hasClass('regPass') && redAlert.eq(i).next().val().length >= 6) {
  333. redAlert.eq(i).text('请输入密码').removeClass('show');
  334. }
  335. }
  336. if (!redAlert.hasClass('show') && check) {
  337. $.ajax({
  338. url: param.userServer + '/v1.0/user/mobile/register',
  339. method: 'POST',
  340. dataType: 'json',
  341. data: {
  342. username: $("#userLogin .regist .regName").val(),
  343. mobile: $("#userLogin .regist .regNum").val(),
  344. password: $("#userLogin .regist .regPass").val(),
  345. code: $("#userLogin .regist .yzm").val(),
  346. referer_src: document.title
  347. }
  348. }).done(function (data) {
  349. console.log(data);
  350. if (data.status == 0) {
  351. // ONEMAP.C.publisher.publish({
  352. // type: 'success',
  353. // message: '获取成功'
  354. // }, 'noteBar::add');
  355. setTip("success", '获取成功')
  356. } else {
  357. // ONEMAP.C.publisher.publish({
  358. // type: 'warning',
  359. // message: data.message
  360. // }, 'noteBar::add');
  361. setTip("warning", data.message)
  362. }
  363. })
  364. }
  365. })
  366. function showNumCover() {
  367. $("#userLogin .btn_cov").show();
  368. var i = 60;
  369. $("#userLogin .btn_cov").html(i + '秒后再次发送');
  370. setTimeout(function () {
  371. $("#userLogin .btn_cov").hide();
  372. clearInterval(interval);
  373. }, 60000)
  374. var interval = setInterval(function () {
  375. i--;
  376. $("#userLogin .btn_cov").html(i + '秒后再次发送');
  377. }, 1000)
  378. }
  379. //登录获取验证码
  380. $("#userLogin .login .getYzm").bind('click', function () {
  381. var phoneNum = $("#userLogin .login .user").val();
  382. //验证手机号
  383. var reg = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;
  384. if (!reg.test(phoneNum)) {
  385. // ONEMAP.C.publisher.publish({
  386. // type: 'warning',
  387. // message: '请输入正确的手机号'
  388. // }, 'noteBar::add');
  389. setTip("warning", "请输入正确的手机号!")
  390. } else {
  391. $.ajax({
  392. url: param.userServer + '/v1.0/user/mobile/login/code',
  393. method: 'POST',
  394. dataType: 'json',
  395. data: {
  396. mobile: phoneNum
  397. }
  398. }).done(function (data) {
  399. console.log(data);
  400. if (data.status == 0) {
  401. // ONEMAP.C.publisher.publish({
  402. // type: 'success',
  403. // message: '获取成功'
  404. // }, 'noteBar::add');
  405. showNumCover();
  406. setTip("success", "获取成功!")
  407. } else {
  408. // ONEMAP.C.publisher.publish({
  409. // type: 'warning',
  410. // message: data.message
  411. // }, 'noteBar::add');
  412. setTip("warning", data.message)
  413. }
  414. })
  415. }
  416. })
  417. $("#userLogin .login .lock").bind('keydown', function (e) {
  418. if (e.keyCode === 13) {
  419. userLogin();
  420. }
  421. });
  422. //登录
  423. $("#userLogin .login .loginBtn").bind('click', function () {
  424. userLogin();
  425. })
  426. function userLogin() {
  427. // 通过验证码
  428. if ($("#userLogin .msgShow").hasClass('show')) {
  429. var phoneNum = $("#userLogin .login .user").val();
  430. var yzm = $("#userLogin .login .yzm").val();
  431. //验证手机号
  432. var reg = /^1([38][0-9]|4[579]|5[0-3,5-9]|6[6]|7[0135678]|9[89])\d{8}$/;
  433. if (!reg.test(phoneNum)) {
  434. // ONEMAP.C.publisher.publish({
  435. // type: 'warning',
  436. // message: '请输入正确的手机号'
  437. // }, 'noteBar::add');
  438. setTip("warning", "请输入正确的手机号")
  439. } else if (yzm.length < 1) {
  440. // ONEMAP.C.publisher.publish({
  441. // type: 'warning',
  442. // message: '请输入验证码'
  443. // }, 'noteBar::add');
  444. setTip("warning", "请输入验证码")
  445. } else {
  446. $.ajax({
  447. url: param.userServer + '/v1.0/user/mobile/login',
  448. method: 'POST',
  449. dataType: 'json',
  450. headers: {
  451. "Cookie": session,
  452. },
  453. data: {
  454. mobile: phoneNum,
  455. code: yzm
  456. }
  457. }).done(function (data) {
  458. console.log(data);
  459. if (data.status == 0) {
  460. setTip("warning", '登录成功');
  461. window.location.reload();
  462. } else {
  463. // ONEMAP.C.publisher.publish({
  464. // type: 'warning',
  465. // message: data.message
  466. // }, 'noteBar::add');
  467. setTip("warning", data.message)
  468. }
  469. })
  470. }
  471. } else if ($("#userLogin .passShow").hasClass('show')) {
  472. var userEmail = $("#userLogin .login .user").val();
  473. var psd = $("#userLogin .login .lock").val();
  474. // shell示例
  475. // curl -v -XPOST 'http://202.107.245.52:3010/account/login' -H "Content-Type: application/json" -d '{"username": "admin", "password": "admin888"}'
  476. // curl -v 'http://202.107.245.52:3010/v1.0/user/me' -H 'Cookie: session=08eb5ff4-49a8-4efa-b725-228ceb24cda2'
  477. $.ajax({
  478. type: "POST",
  479. dataType: 'json',
  480. url: param.userServer + '/account/login', //3010
  481. contentType: 'application/json',
  482. headers: {
  483. "Cookie": session,
  484. },
  485. data: JSON.stringify({
  486. "username": userEmail,
  487. "password": psd
  488. })
  489. }).done(function (data) {
  490. if (data.meta.code == 400) {
  491. setTip("warning", '用户名或密码错误');
  492. return false;
  493. }
  494. window.location.reload();
  495. }).error(function (data) {
  496. // ONEMAP.C.publisher.publish({
  497. // type: 'warning',
  498. // message: '该用户尚未注册'
  499. // }, 'noteBar::add');
  500. setTip("warning", '该用户尚未注册!')
  501. })
  502. }
  503. }
  504. //微信登录
  505. $("#userLogin .login p.weixin").bind('click', function () {
  506. window.location.replace(param.userServer + '/oauth_client/weixin/login?next=' + param.system);
  507. })
  508. $("#userLogin .login p.qq").bind('click', function () {
  509. window.location.replace(param.userServer + '/oauth_client/qq/login?next=' + param.system);
  510. })
  511. $("#userLogin .login p.weibo").bind('click', function () {
  512. window.location.replace(param.userServer + '/oauth_client/weibo/login?next=' + param.system);
  513. })
  514. this.logout = function () {
  515. cookie.del('session');
  516. window.location.reload();
  517. }
  518. return this;
  519. }
  520. })(jQuery)