login.html 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431
  1. <!doctype html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>登录</title>
  6. <meta name="format-detection" content="telephone=no"/>
  7. <meta name="viewport"
  8. content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=0"/>
  9. <meta name="apple-mobile-web-app-capable" content="yes"/>
  10. <meta name="apple-mobile-web-app-status-bar-style" content="black"/>
  11. <link rel="stylesheet" href="../../../css/cross.css" type="text/css"/>
  12. <link rel="stylesheet" href="../../../css/cross.ui.css" type="text/css"/>
  13. <link rel="stylesheet" type="text/css" href="../../../css/ss-style.css">
  14. <link rel="stylesheet" type="text/css" href="../../../iconfont/iconfont.css" />
  15. <style>
  16. .n-list-info{position: relative;}
  17. .searchbar-clear{position: absolute;width: 28px;height: 28px;right: 0;top:8px;opacity:0;pointer-events:none;background-position:center;background-repeat:no-repeat;background-image:url(../../../images/delete01_pre.png);-webkit-background-size:20px 20px;background-size:20px 20px;-webkit-transition-duration:300ms;transition-duration:300ms;cursor:pointer;}
  18. .div-zczh{width:auto;height:29px;border:0;color:#4DCD70;font-size:14px;line-height:29px;text-align:center;border-radius:10px;color:#17b3ec;margin-left: 20px;}
  19. .div-zhmmdl{width:auto;height:29px;border:0;color:#4DCD70;font-size:14px;line-height:29px;text-align:center;border-radius:10px;color:#17b3ec;margin-right: 20px;}
  20. .bgc-fa8888{background-color: #FA8888;}
  21. .tabox{background: #fff;display: flex}
  22. .tabcontent{width: 50%;padding-top: 15px;}
  23. .tabcontent span{padding: 0 5px}
  24. .fc{display: flex;justify-content: center;align-items: center;}
  25. .fjs{display:flex;justify-content:space-between}
  26. .activeTab{border-bottom: 5px solid #ccc}
  27. .display{display: none}
  28. .iconImg{width:26px}
  29. </style>
  30. </head>
  31. <body>
  32. <!--<div class="h45">
  33. <div class="demo-comtop">.
  34. <a class="mui-action-back"></a>
  35. <h1>登录</h1>
  36. </div>
  37. </div>-->
  38. <div class="main">
  39. <!-- <div class="bgc-fa8888 ptb10 plr10">
  40. <span class="c-f14 c-fff">已签约居民可直接使用身份证号及默认密码登录</span>
  41. </div> -->
  42. <div class="tabox">
  43. <div class="tabcontent fc " name="fastLogin"><span class="activeTab">手机号快捷登录</span></div>
  44. <div class="tabcontent fc" name="passwordLogin"><span>账号密码登录</span></div>
  45. </div>
  46. <div>
  47. <ul class="n-list edit-info registered c-border-tb mt15 c-f15 form-register tabList" id="fastLogin">
  48. <li>
  49. <div class="n-list-key" style="width: 2.3em;">
  50. <i class="iconfont icon-shouji1"></i>
  51. </div>
  52. <div class="n-list-info">
  53. <input id="txtMobile" onblur="setPhone()" type="tel" class="width-100 c-f16 c-5b5b5b" maxlength="11" placeholder="请输入手机号码" onkeyup="this.value=this.value.replace(/[^\d]/g,'')" value="15980862610"/>
  54. <a href="#" class="searchbar-clear"></a>
  55. </div>
  56. <div id="messageCode1" class="n-list-key pl15 c-17b3ec" onclick="sendCode()">
  57. <span>获取短信验证码</span>
  58. </div>
  59. <div id="messageCode2" class="n-list-key pl15 c-999999" style="display: none;">
  60. <span id="message"></span>
  61. </div>
  62. </li>
  63. <li>
  64. <div class="n-list-key" style="width: 2.3em;">
  65. <i class="iconfont icon-yanzhengma01"></i>
  66. </div>
  67. <div class="n-list-info">
  68. <input id="txtCode" type="text" class="width-100 c-f16 c-5b5b5b" placeholder="请输入验证码"/>
  69. <a href="#" class="searchbar-clear"></a>
  70. </div>
  71. </li>
  72. </ul>
  73. <ul class="n-list edit-info registered c-border-tb mt15 c-f15 form-register display tabList" id="passwordLogin">
  74. <li>
  75. <div class="n-list-key" style="width: 2.3em;">
  76. <img src="../images/zhanghao_icon.png" style="width: 20px; height: 26px;padding-left: 3px;padding-top: 10px;" />
  77. <!--<i class="iconfont icon-shouji1"></i>-->
  78. </div>
  79. <div class="n-list-info">
  80. <input id="txtMobile2" maxlength="18" minlength="11" type="text" class="width-100 c-f16 c-5b5b5b" placeholder="身份证号/手机号"/>
  81. <a href="#" class="searchbar-clear"></a>
  82. </div>
  83. </li>
  84. <li>
  85. <div class="n-list-key" style="width: 2.3em;">
  86. <i class="iconfont icon-yanzhengma01"></i>
  87. </div>
  88. <div class="n-list-info">
  89. <input id="txtCode2" type="password" class="width-100 c-f16 c-5b5b5b" placeholder="初始密码为身份证后6位"/>
  90. <a href="#" class="searchbar-clear"></a>
  91. </div>
  92. <div class="n-list-key fc" >
  93. <img id="showPass" class="iconImg" src="../images/biyan_icon.png">
  94. <img id="hidePass" class="iconImg display" src="../images/kanjian_icon.png">
  95. </div>
  96. </li>
  97. </ul>
  98. </div>
  99. <div class="fjs">
  100. <div class="div-zczh" onclick="regist()">新注册</div>
  101. <div class="div-zhmmdl" onclick="forgetPwd()">忘记密码?</div>
  102. </div>
  103. <div class="mb15 mlr15 mt20">
  104. <a href="javascript:;" style="font-size: 18px;" class="c-btn c-btn-4dcd70 c-btn-full c-btn-radius c-f16" onclick="commit()">登录</a>
  105. </div>
  106. <!--<p class="c-17b3ec mr15 c-t-right" style="font-size: 16px;" onclick="regist()">立即注册</p>-->
  107. </div>
  108. </body>
  109. <script type="text/javascript" src="../../../js/jquery/2.1.3/jquery.js" ></script>
  110. <script type="text/javascript" src="../../../js/common_http.js" ></script>
  111. <script type="text/javascript" src="../../../js/weixin_common.js?11=11" ></script>
  112. <link rel="stylesheet" type="text/css" href="../../../widget/artDialog/6.0.5/css/ui-dialog.min.css">
  113. <script src="../../../widget/artDialog/6.0.5/js/dialog-plus.js"></script>
  114. <script type="text/javascript" src="../../../js/mui.min.js" ></script>
  115. <script src="../../../js/security.js" type="text/javascript" charset="utf-8"></script>
  116. <script type="text/javascript" src="../../../js/commit_validate.js" ></script>
  117. <script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js"></script>
  118. <script type="text/javascript">
  119. var dd = dialog({contentType:'load', skin:'bk-popup', content:'登录中...'});
  120. var Request = new Object();
  121. Request = GetRequest();
  122. var openid = Request["openid"] || '123456';
  123. var type = Number(Request["type"]) || 4;
  124. var mobile1 = Request["mobile"];
  125. var idcard = Request["idcard"];
  126. var clock = "";
  127. var nums = 60;
  128. var loginParams = Request["loginParams"],
  129. loginType = Request["loginType"] || 'yzm';//选择的登录方式
  130. if(loginParams) {
  131. loginParams = JSON.parse(decodeURIComponent( Request["loginParams"]));
  132. }
  133. $(function (){
  134. if(loginType = 'yzm'){
  135. $('.tabcontent[name="fastLogin"]').click();
  136. }
  137. else if(loginType = 'password'){
  138. $('.tabcontent[name="passwordLogin"]').click();
  139. }
  140. var userAgent = window.localStorage.getItem(agentName);
  141. if(userAgent){
  142. var paurl = "";
  143. if(type == 0){
  144. paurl = "wx/html/home/html/login.html?type=0&openid=" + openid;
  145. }
  146. else{
  147. if(mobile1){
  148. paurl = "wx/html/home/html/login.html?type=" + type + "&openid=" + openid + "&mobile=" + mobile1;
  149. }
  150. else{
  151. paurl = "wx/html/home/html/login.html?type=" + type + "&openid=" + openid;
  152. }
  153. }
  154. //从后台那边获取签名等信息
  155. var params = {};
  156. params.pageUrl = window.location.href;
  157. $.ajax(server + "weixin/getSign", {
  158. data: params,
  159. dataType: "json",
  160. type: "post",
  161. success: function(res){
  162. if (res.status == 200) {
  163. var t = res.data.timestamp;
  164. var noncestr = res.data.noncestr;
  165. var signature = res.data.signature;
  166. wx.config({
  167. //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  168. appId: appId, // 必填,公众号的唯一标识
  169. timestamp: t, // 必填,生成签名的时间戳
  170. nonceStr: noncestr, // 必填,生成签名的随机串
  171. signature: signature,// 必填,签名,见附录1
  172. jsApiList: [
  173. 'closeWindow'
  174. ] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2
  175. });
  176. }
  177. }
  178. });
  179. /*wx.ready(function(){
  180. wx.closeWindow();
  181. });*/
  182. }
  183. else{
  184. if(!openid){
  185. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'openid获取失败'}).show();
  186. }
  187. if(mobile1){
  188. $("#txtMobile").val(mobile1);
  189. $("#txtMobile2").val(mobile1);
  190. }
  191. if(idcard) {
  192. $("#txtMobile2").val(idcard);
  193. }
  194. }
  195. bindEvents();
  196. })
  197. function bindEvents(){
  198. $("input").on("focus",function(){
  199. $(".searchbar-clear").css("pointer-events","none").css("opacity",0);
  200. if($(this).val()){
  201. $(this).next().css("pointer-events","auto").css("opacity",1);
  202. }
  203. }).on("input",function(){
  204. $(this).next().css("pointer-events","auto").css("opacity",1);
  205. });
  206. $(".n-list-info").on("click",".searchbar-clear",function(){
  207. $(this).prev().val("");
  208. $(this).css("pointer-events","none").css("opacity",0);
  209. $(this).prev().focus();
  210. return false;
  211. });
  212. $('.tabcontent').click(function(){
  213. var id = $(this).attr('name');
  214. $('#'+id).removeClass('display').siblings().addClass('display');
  215. $(this).children().addClass('activeTab');
  216. $(this).siblings().children().removeClass('activeTab');
  217. switch (id){
  218. case 'fastLogin':loginType = 'yzm';break;
  219. case 'passwordLogin':loginType = 'password';break;
  220. }
  221. })
  222. $('#showPass').click(function(){
  223. $(this).hide().siblings().show();
  224. $('#txtCode2').prop('type','text');
  225. })
  226. $('#hidePass').click(function(){
  227. $(this).hide().siblings().show();
  228. $('#txtCode2').prop('type','password');
  229. })
  230. }
  231. function sendCode(){
  232. var mobile = document.getElementById("txtMobile").value;
  233. if(!mobile){
  234. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'请输入手机号'}).show();
  235. return;
  236. }
  237. if(!isphone(mobile)){
  238. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'手机号格式不正确'}).show();
  239. return;
  240. }
  241. $("#messageCode1").hide();
  242. document.getElementById("message").innerHTML = nums+'秒后可重新获取';
  243. $("#messageCode2").show();
  244. clock = setInterval(doLoop, 1000); //一秒执行一次
  245. var data = {};
  246. data.mobile = mobile;
  247. data.type = 4;
  248. sendPost("common/captcha", data, "json", "post", sendFailed, sendSuccesss);
  249. }
  250. //失败
  251. function sendFailed(res) {
  252. clearInterval(clock); //清除js定时器
  253. $("#messageCode1").show();
  254. $("#messageCode2").hide();
  255. nums = 60; //重置时间
  256. if(res && res.msg=="该手机号未注册!" && res.status == -1){
  257. dialog({
  258. title: "",
  259. content: '您的手机尚未注册<br>请完善信息再登录',
  260. okValue: "去注册",
  261. ok: function() {
  262. regist()
  263. },
  264. cancelValue: "取消",
  265. cancel: function(){}
  266. }).showModal();
  267. return
  268. }
  269. if (res && res.msg) {
  270. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:res.msg}).show();
  271. } else {
  272. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'获取失败'}).show();
  273. }
  274. }
  275. function sendSuccesss(res){
  276. if (res.status == 200) {
  277. }
  278. else{
  279. sendFailed(res);
  280. }
  281. }
  282. function doLoop(){
  283. nums--;
  284. if(nums > 0){
  285. document.getElementById("message").innerHTML = nums+'秒后可重新获取';
  286. }else{
  287. clearInterval(clock); //清除js定时器
  288. $("#messageCode1").show();
  289. $("#messageCode2").hide();
  290. nums = 60; //重置时间
  291. }
  292. }
  293. function commit(){
  294. if(loginType =='yzm'){
  295. commitYzm()
  296. }
  297. else if(loginType =='password'){
  298. commitPassword()
  299. }
  300. }
  301. function commitYzm(){
  302. var mobile = document.getElementById("txtMobile").value;
  303. var captcha = document.getElementById("txtCode").value;
  304. if (!mobile || !captcha) {
  305. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'手机号和验证码不能为空'}).show();
  306. return;
  307. }
  308. if(!isphone(mobile)){
  309. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'手机号格式不正确'}).show();
  310. return;
  311. }
  312. dd.showModal();
  313. //拼请求内容
  314. var data = {};
  315. data.mobile = mobile;
  316. data.captcha = captcha;
  317. data.openid = openid;
  318. sendPost("weixin/login", data, "json", "post", operateFailed, operateSuccesss);
  319. }
  320. function commitPassword(){
  321. var mobile = $.trim(document.getElementById("txtMobile2").value);
  322. if(mobile.length!=15&&mobile.length!=18&&mobile.length!=11){
  323. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'请输入正确的手机号/身份证号'}).show();
  324. return;
  325. }
  326. if(mobile.length==11&&!isphone(mobile)){
  327. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'请输入正确的手机号'}).show();
  328. return;
  329. }
  330. if((mobile.length==18||mobile.length==15)&&!isIdcard(mobile)){
  331. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'请输入正确的身份证号'}).show();
  332. return;
  333. }
  334. var captcha = document.getElementById("txtCode2").value;
  335. if (!mobile || !captcha) {
  336. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'账号和密码不能为空'}).show();
  337. return;
  338. }
  339. dd.showModal();
  340. //加密设置:获取公钥
  341. var encryURL = server + "login/public_key";
  342. var key = RSAUtils.getKeyFromServer(encryURL);
  343. //拼请求内容
  344. var data = {};
  345. data.mobile = mobile;
  346. data.password = RSAUtils.encryStr(key, captcha);
  347. if(openid == "undefined"){
  348. var openidObj = window.localStorage.getItem(OpenidAgent);
  349. if(openidObj){
  350. openidObj = JSON.parse(openidObj);
  351. openid = openidObj.openid
  352. }else{
  353. openid = "undefined";
  354. }
  355. }
  356. data.openid = openid;
  357. sendPost("weixin/login", data, "json", "post", operateFailed, operateSuccesss);
  358. }
  359. //失败
  360. function operateFailed(res) {
  361. dd.close();
  362. if (res && res.msg) {
  363. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:res.msg}).show();
  364. } else {
  365. dialog({contentType:'tipsbox',bottom:true, skin:'bk-popup' , content:'登录失败'}).show();
  366. }
  367. }
  368. //成功调用登录接口
  369. function operateSuccesss(res) {
  370. if (res.status == 200) {
  371. var id = res.data.id;
  372. var uid = res.data.uid;
  373. var name = res.data.name;
  374. var photo = res.data.photo;
  375. var token = res.data.token;
  376. //保存用户信息
  377. wxSaveUserAgent(id, uid, openid, token);
  378. wxSaveUserAgent1(uid, name, photo);
  379. saveAgentOpenid(openid);
  380. window.location.href = pageUrl[type];
  381. dd.close();
  382. // 缓存第一个人的uid和名字,后面账号切换需要用
  383. window.localStorage.removeItem("firstUid");
  384. window.localStorage.setItem("firstUid", uid);
  385. window.localStorage.removeItem("firstName");
  386. window.localStorage.setItem("firstName", name);
  387. } else {
  388. if(res.status == -2){
  389. dd.close();
  390. dialog({
  391. content: res.msg,
  392. okValue: "我知道了",
  393. ok: function(){
  394. }
  395. }).showModal()
  396. }else{
  397. //非200则为失败
  398. operateFailed(res);
  399. }
  400. }
  401. }
  402. //注册
  403. function regist(){
  404. window.location.href = "regist-info.html?type=" + type + "&openid=" + openid;
  405. }
  406. //忘记密码
  407. function forgetPwd(){
  408. window.location.href = "forgetPwd.html?type=" + type + "&openid=" + openid;
  409. }
  410. //将第一个inpput的值同步到第二个Input
  411. function setPhone(){
  412. $('#txtMobile2').val($('#txtMobile').val())
  413. }
  414. </script>
  415. </html>