Selaa lähdekoodia

登录注册页面合一

zyz 7 vuotta sitten
vanhempi
commit
bd638cfe15
5 muutettua tiedostoa jossa 308 lisäystä ja 109 poistoa
  1. 9 5
      api/http-request.js
  2. 21 0
      api/login-api.js
  3. 242 74
      component/login-register/login.js
  4. 34 29
      page/login/login.css
  5. 2 1
      page/login/login.html

+ 9 - 5
api/http-request.js

@ -1,8 +1,8 @@
(function($) {
    var publish_version = true;
    var publish_version = false;
    var isInner = false; //发布线上后有内外网的配置
    var agentName = "wlyyAgentForDoc";
    var server, userAgent, loginUrl, imserver, socketUrl, imgServer;
    var server, userAgent, loginUrl, imserver, socketUrl, imgServer, grant_type, client_id;
    var IMEI = localStorage.getItem('WLYY_IMEI') || uuid(16, 16)
    localStorage.setItem('WLYY_IMEI', IMEI)
@ -20,11 +20,13 @@
            loginUrl = "../../login/login.html";
            imgServer = "http://10.95.22.10:8011/";
        }
    } else { // 测试环境配置
        server = "http://172.19.103.88:9092/wlyy/"
    } else {// 测试环境配置
    	grant_type = "password";
        client_id = "WYo0l73F8e";
    	server = "http://172.19.103.73:10001";
//      server = "http://172.19.103.88:9092/wlyy/"
        imserver = "http://172.19.103.88:3000/api/v2";
        socketUrl = "http://172.19.103.88:3000";
        
//      server = "http://192.168.131.133:8080/";
//      server = "http://192.168.131.127:8060/"; //逸祥
@ -241,6 +243,8 @@
        imHttpGet: imHttpGet,
        imHttpPost: imHttpPost,
        getImgUrl: getImgUrl,
        grant_type: grant_type,
        client_id: client_id,
        imgServer:imgServer,
        failCodeHandle: failCodeHandle,
        loginIm: function(data){

+ 21 - 0
api/login-api.js

@ -0,0 +1,21 @@
(function(exports) {
    var loginAPI = {
        //获取accessToken
        accessToken: function(data) {
			return httpRequest.post("/authentication/oauth/accessToken",{data: data})
		},
        //查询用户信息
        getUserInfo: function(data){
        	return httpRequest.get("/basic/api/v1.0/users/"+data.userName,{data: data})
        },
        //获取居民权限接口
		findByUserId:function(data){
			return httpRequest.get("/basic/api/v1.0/roles/findByUserId",{data: data})
		},
		registe:function(data){
			return httpRequest.post("/basic/api/v1.0/usersOfApp",{data: data})
       }
    }
    exports.loginAPI = loginAPI;
})(window)

+ 242 - 74
component/login-register/login.js

@ -1,83 +1,116 @@
(function() {
	Vue.component('login-form', {
		template: `<div><div id="head">
			<div class="hlogo ptb15">
				<img src="../../images/LOGO.png" />
				<span class="fr" style="margin-top:-5px;">
					<img src="../../images/qr_code.png" width="65" height="65" class="box-border" />
					<p class="c-f12 text-center"><b>下载APP</b></p>
				</span>
		template: `<div><div class="container-fluid">
				<div class="container" id="head">
					<div class="ptb15 top-banner">
						<img src="../../images/LOGO.png" class="hlogo" />
						<span class="qr-container">
							<img src="../../images/qr_code.png" class="qr_code" />
							<p class="c-f12 text-center">下载APP</p>
						</span>
					</div>
				</div>
			</div>
		</div>
		<div class="mainbox">
			<div id="main">
				<img src="../../images/chahua.png" />
				<div id="loginForm" class="fr">
					<div class="tabs-container no-borders mtb30 plr30">
						<ul class="nav nav-tabs c-border-b">
							<li :class="{'active': type==1}" @click="changeType(1)">
								<a style="padding:10px 0px;margin-left:35px;margin-right: 35px;font-size: 20px;">密码登录</a>
							</li>
							<li :class="{'active': type==2}" @click="changeType(2)">
								<a style="padding:10px 0px;margin-left:25px;margin-right: 25px;font-size: 20px;">验证码登录</a>
							</li>
						</ul>
						<div class="tab-content">
							<div class="tab-pane" :class="{'active': type==1}">
								<div class="panel-body  no-borders" style="padding: 0px;">
									<form id="form1" class="m-t" role="form" onsubmit="return false;">
										<div class="form-group">
											<input class="form-control" type="text"  v-model="account" placeholder="请输入身份证号或者手机号码">
										</div>
										<div class="form-group">
											<input class="form-control" v-model="password" placeholder="请输入密码">
										</div>
										<div class="text-right c-323232" style="margin-top:-10px;">忘记密码</div>
										<button type="submit" class="btn btn-theme block full-width m-b" @click="login">登 录</button>
										<a type="button" class="btn btn-default block full-width m-b" href="../register/register.html">注 册</a>
									</form>
			<div class="container-fluid chahua-bg">
				<div class="chahua container">
					<div class="loginForm fr" :class="{'loginForm-active':!registerFlag}">
						<div class="tabs-container no-borders mtb20 plr30">
							<ul class="nav nav-tabs c-border-b">
								<li :class="{'active': type==1}" @click="changeType(1)">
									<a style="padding:10px 0px;margin-left:35px;margin-right: 35px;font-size: 20px;">密码登录</a>
								</li>
								<li :class="{'active': type==2}" @click="changeType(2)">
									<a style="padding:10px 0px;margin-left:25px;margin-right: 25px;font-size: 20px;">验证码登录</a>
								</li>
							</ul>
							<div class="tab-content">
								<div class="tab-pane" :class="{'active': type==1}">
									<div class="panel-body  no-borders" style="padding: 0px;">
										<form id="form1" class="m-t" role="form" onsubmit="return false;">
											<div class="form-group">
												<input class="form-control" type="text"  v-model="account" placeholder="请输入身份证号或者手机号码">
											</div>
											<div class="form-group">
												<input class="form-control" type="password" v-model="password" placeholder="请输入密码">
											</div>
											<div class="text-right c-323232" style="margin-top:-10px;">忘记密码</div>
											<button type="submit" class="btn btn-theme block full-width m-b" @click="login">登 录</button>
											<a type="button" class="btn btn-default block full-width m-b"  @click="toggleRegister">注 册</a>
										</form>
									</div>
								</div>
							</div>
							<div class="tab-pane" :class="{'active': type==2}">
								<div class="panel-body no-borders" style="padding: 0px;">
									<form id="form2" class="m-t" role="form" onsubmit="return false;">
										<div class="form-group">
											<input class="form-control" type="text" maxlength="11" v-model="mobile" placeholder="请输入手机号码">
										</div>
										<div class="form-group">
											<input class="form-control" type="text" v-model="imgcaptcha" placeholder="请输入图形验证码">
											<a class="getCaptcha" :class="{'disabled': countdown}" @click="getCaptcha">{{infoText}}</a>
										</div>
										<div class="form-group">
											<input class="form-control" type="text" v-model="captcha" placeholder="请输入短信验证码">
											<a class="getCaptcha" :class="{'disabled': countdown}" @click="getCaptcha">{{infoText}}</a>
										</div>
										<button type="submit" class="btn btn-theme block full-width m-b" @click="login">登 录</button>
										<a type="button" class="btn btn-default block full-width m-b" href="../register/register.html">注 册</a>
									</form>
								<div class="tab-pane" :class="{'active': type==2}">
									<div class="panel-body no-borders" style="padding: 0px;">
										<form id="form2" class="m-t" role="form" onsubmit="return false;">
											<div class="form-group">
												<input class="form-control" type="text" maxlength="11" v-model="mobile" placeholder="请输入手机号码">
											</div>
											<div class="form-group">
												<input class="form-control" type="text" v-model="imgcaptcha" placeholder="请输入图形验证码">
												<a class="getCaptcha" :class="{'disabled': countdown}" @click="getCaptcha">{{infoText}}</a>
											</div>
											<div class="form-group">
												<input class="form-control" type="text" v-model="captcha" placeholder="请输入短信验证码">
												<a class="getCaptcha" :class="{'disabled': countdown}" @click="getCaptcha">{{infoText}}</a>
											</div>
											<button type="submit" class="btn btn-theme block full-width m-b" @click="login">登 录</button>
											<a type="button" class="btn btn-default block full-width m-b"  @click="toggleRegister">注 册</a>
										</form>
									</div>
								</div>
							</div>
						</div>
					</div>
					<div class="registerForm fr" :class="{'registerForm-active':registerFlag}">
						<div class="ptb10 plr30 c-border-b c-f26">注册<span class="fr c-909090 c-f14 fhdl" @click="toggleRegister">返回登录</span></div>
						<form id="form" class="m-t plr30" role="form" onsubmit="return false;">
							<div class="form-group">
								<select class="form-control codeType" v-model="codeType">
									<option value="1">身份证</option>
									<option value="2">手机</option>
								</select>
							</div>
							<div class="form-group">
								<input class="form-control" type="text" :maxlength="maxLength" placeholder="请输入身份证号" v-model="idCardNo" id="IDCard">
							</div>
							<div class="form-group">
								<input class="form-control" placeholder="请输入登录密码" v-model="rPassword" type="password" minlength="6" maxlength="16">
							</div>
							<div class="form-group">
								<input class="form-control" placeholder="请确认登录密码" v-model="confirmPassword" type="password" minlength="6" maxlength="16">
							</div>
							<p class="c-909090" style="margin-top:-10px;">密码格式为6-16位,不允许有空格</p>
							<div class="checkbox">
								<label><input type="checkbox"
	  v-model="toggle"> 阅读并接受<a href="#" target="_blank">《健康之路用户协议》</a>及<a href="#" target="_blank">《健康之路隐私保护声明》</a></label>
							</div>
							<button type="submit" class="btn btn-theme block full-width m-b" :class="{'disabled':!toggle}" @click="register">完成注册并登录</button>
						</form>
					</div>
				</div>
			</div>
		</div>
		<div id="foot">
			<p>主办方:上饶市卫生与计划生育委员会&nbsp;&nbsp;&nbsp;技术支持:健康之路(中国)信息技术有限公司&nbsp;&nbsp;&nbsp;备案号登记号:赣ICP98273877号-1</p>
			<p>上饶市卫生信息中心 Copyright&nbsp;<span class="glyphicon glyphicon-copyright-mark"></span>&nbsp;2009-2017 All Rights Reserved</p>
		</div>
		</div>`,
			<div id="foot">
				<p>主办方:上饶市卫生与计划生育委员会&nbsp;&nbsp;&nbsp;技术支持:健康之路(中国)信息技术有限公司&nbsp;&nbsp;&nbsp;备案号登记号:赣ICP98273877号-1</p>
				<p>上饶市卫生信息中心 Copyright&nbsp;<span class="glyphicon glyphicon-copyright-mark"></span>&nbsp;2009-2017 All Rights Reserved</p>
			</div></div>`,
		props: [],
		data: function() {
			return {
				type: 1, //记录选择的登录方式,1-手机号登录,2-验证码登录
				account: '',
				account: '17500000001',
				mobile: '',
				password: '',
				password: '123456',
				imgcaptcha: '',
				captcha: '',
				infoText: '获取验证码',
				countdown: false //是否在倒计时
				countdown: false ,//是否在倒计时
				codeType: 1,
				idCardNo: "350526199501142015",
				rPassword: 'a123123',
				confirmPassword: "a123123",
				toggle: true,
				registerFlag:false,
				maxLength:18,
			}
		},
		methods: {
@ -99,34 +132,151 @@
				var vm = this
				if(this.type == 1) {
					if(!vm.account) {
						alert("账号不能为空!");
						console.log("账号不能为空!");
						return false;
					}
					if(!vm.password) {
						alert("登录密码不能为空!");
						console.log("登录密码不能为空!");
						return false;
					}
					// getPublicKey(this);
					console.log(httpRequest)
					var data={
						grant_type: httpRequest.grant_type,
						client_id: httpRequest.client_id,
						username: vm.account,
						password: vm.password
					}
					console.log(data)
					loginAPI.accessToken(data).then(function(oauthInfo) {
						storage.setItem("oauthInfo", JSON.stringify(oauthInfo));
						var data1={
							userName:oauthInfo.user,
							accessToken: oauthInfo.accessToken
						}
						loginAPI.getUserInfo(data1).then(function(res) {
							console.log("登录成功");
							loginedList = [res.telephone]
							storage.setItem("loginedList", JSON.stringify(loginedList));
							storage.setItem("userAgent", JSON.stringify(res));
							vm.getJueSeData(res);
						}), function error(xhr, type, errorThrown) {
							if(type == "timeout" || type == "abort" || type == "error") {
								console.log("账号或密码错误");
							}
						}
					}).catch(function(e) {
						console.log("账号或密码错误")
					})
				} else {
					if(!vm.mobile) {
						alert("手机号不能为空!");
						console.log("手机号不能为空!");
						return false;
					}
					if(!vm.imgcaptcha) {
						alert("图形验证码不能为空!");
						console.log("图形验证码不能为空!");
						return false;
					}
					if(!vm.captcha) {
						alert("手机验证码不能为空!");
						console.log("手机验证码不能为空!");
						return false;
					}
					//					login({
					//						mobile: this.mobile,
					//						captcha: this.captcha,
					//						platform: 4
					//					})
				}
			},
			getJueSeData: function(userAgent) {
				var vm = this;
				//获取居民权限接口
				loginAPI.findByUserId({
					userId: userAgent.id
				}).then(function(data) {
					storage.setItem("roleList",JSON.stringify(data.detailModelList));//缓存角色列表
//					app.openWebviewExtras("../../home/html/home.html");//跳转到主页面
				})
			},
			register: function() {
				var vm = this
				if(!isCardNo(vm.idCardNo, vm.codeType)) {
					return
				}
				if(!vm.rPassword) {
					alert("登录密码不能为空!");
					return false;
				}
				if(!vm.confirmPassword) {
					alert("确认密码不能为空!");
					return false;
				}
				if(vm.rPassword.length < 6 && vm.rPassword.length > 16) {
					alert("登录密码需6-16位");
					return false;
				}
				if(vm.confirmPassword.length < 6 && vm.confirmPassword.length > 16) {
					alert("确认密码需6-16位");
					return false;
				}
				if(vm.rPassword != vm.confirmPassword) {
					alert("新密码和确认密码必须一致");
					return false;
				}
				if(!vm.toggle) {
					alert("未确认是否阅读并接受条款");
					return false;
				}
//				location.href = "../login/login.html"
				//连接注册后台接口
				var data={
					demographicId: vm.idCardNo,
					codeType:vm.codeType,
                    telephone: vm.tel,
                    password: vm.password,
				}
				var params = 	{
					userJsonData:JSON.stringify(data),
					appId: httpRequest.client_id
				}
				loginAPI.registe(params).then(function (res) {
                    if (res.successFlg) {
                        alert("注册成功");
                        vm.login();
                    } else {
                        alert(res.errorMsg);
                    }
                }).catch(function (err) {
                    alert(err.errorMsg);
                })
				
			},
			toggleRegister:function(){
				var vm=this;
				vm.registerFlag=!vm.registerFlag
			}
		},
		watch: {
			Password: function(newVal, oldVal) {
				var val = newVal.toString();
				var reg = /\s+/g; //去除空格
				if(reg.test(val)) {
					this.Password = oldVal;
				}
			},
			confirmPassword: function(newVal, oldVal) {
				var val = newVal.toString();
				var reg = /\s+/g; //去除空格
				if(reg.test(val)) {
					this.confirmPassword = oldVal;
				}
			},
			codeType: function(newVal) {
				var vm=this;
				var val = newVal.toString();
				if(val == 1) {
					$("#IDCard").attr("placeholder", "请输入身份证号")
					vm.maxLength=18
				} else if(val == 2) {
					$("#IDCard").attr("placeholder", "请输入手机号码")
					vm.maxLength=11
				}
			}
		}
	})
@ -147,7 +297,25 @@
			vm.infoText = seconds + "s后重新获取";
		}, 1000)
	}
	function isCardNo(card, codeType) {
		var isidcard = false
		if(codeType == 1) { // 身份证号码为15位或者18位,15位时全为数字,18位前17位为数字,最后一位是校验位,可能为数字或字符X 
			var reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
			if(!reg.test(card)) {
				alert("身份证号输入不合法");
			} else {
				isidcard = true
			}
		}else{
			var reg = /0?(13|14|15|18|17)[0-9]{9}/;
			if(!reg.test(card)) {
				alert("手机号码输入不合法");
			} else {
				isidcard = true
			}
		}
		return isidcard
	}
	function sendToGetCaptcha(vm) {
		var url = "common/captcha",
			params = {

+ 34 - 29
page/login/login.css

@ -5,42 +5,32 @@ body {
.mainbox{	
	background: url("../../images/BG.jpg") no-repeat 100% 100%;
}
#main {
	margin: 0 auto;
	width: 1294px;
	padding-bottom: 200px;
	padding-top: 100px;
}
#head{
	background:#fff;
}
.hlogo{	
	margin: 0 auto;
	width: 1294px;
	transition: all 0.6s;
.top-banner{position: relative;}
.qr-container{position: absolute;right: -5px;height: 100%;display: block;top: 7%;}
.hlogo{width: 30%;height: auto;display: block;}
.qr_code{
	height: 70%;
	width: auto;
	display: block;
	border: 3px solid #38D1CB;
	transform-origin: 100% 0;
	transition: all .5s cubic-bezier(0.68, -0.55, 0.27, 1.55);
	cursor: pointer;
}
.hlogo span img:hover {
.qr_code:hover {
	transform: scale(2);
	position: relative;
	z-index: 2;
	top: 30px;
	right: 30px;
	box-shadow: 0 4px 8px 0 rgba(255,255,255,0.2),0 6px 20px 0 rgba(255,255,255,0.19);
}
.box-border{
	border: 3px solid #38D1CB;
}
.chahua-bg{position: relative;background: url(../../images/BG.jpg) no-repeat center;background-size: 100% 100%;height: 700px;}
.chahua{background: url(../../images/chahua.png) no-repeat 5% 46.5%;background-size: auto 50%;position: absolute;left: 0;right: 0;top: 0;bottom: 0;}
#foot{
	background:#fff;
	text-align: center;
	font-size: 14px;
	padding: 34px 0 34px;
	padding: 30px 0;
	color:#909090;	
}
@ -80,13 +70,17 @@ button[type="submit"] {
	height: 50px;	
	background: #F5FAFA;
}	
	
.fhdl{margin-top: 5px;padding: 10px 10px;cursor: pointer;margin-right: -10px;}
.fhdl:hover{color: #0AD8C8;}
.getCaptcha {
	position: absolute;
	top: 8px;
	top: 6px;
	bottom: 6px;
	right: 10px;
	line-height: 38px;
}
.c-f26{font-size: 26px;}
.getCaptcha.disabled{
	cursor: not-allowed;
@ -95,12 +89,23 @@ button[type="submit"] {
	box-shadow: none;
	opacity: .65;
}
#loginForm{	
.checkbox input[type='checkbox']{margin-top: 4px;}
.disabled{opacity: .5;pointer-events: none;cursor: default;}
.loginForm,.registerForm{
	margin-top: 100px;
	width: 400px;
	margin-right: -5px;
	border: 5px solid rgba(75, 202, 208, 0.7);
	background-color: #fff;
	margin-right: -1000px;
	transition: all .5s ease-in-out;
}
.loginForm-active{
	margin-right: 0;
}
.registerForm-active{
	margin-right: 0;
}
.btn-theme{
	color:#fff;

+ 2 - 1
page/login/login.html

@ -10,7 +10,7 @@
		<meta name="keywords" content="登录">
		<meta name="description" content="登录">
		<link rel="shortcut icon" href="../../favicon.ico">
		<link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css" />
		<!--<link rel="stylesheet" type="text/css" href="../../css/font-awesome.min.css" />-->
		<link rel="stylesheet" type="text/css" href="../../css/bootstrap.min.css" />
		<link rel="stylesheet" type="text/css" href="../../plugins/artDialog/6.0.5/api/css/ui-dialog.css" />
		<link rel="stylesheet" type="text/css" href="../../css/style.min.css" />
@ -32,6 +32,7 @@
		<script src="../../js/underscore.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../js/util.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../api/http-request.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../api/login-api.js" type="text/javascript" charset="utf-8"></script>
		<script src="../../plugins/artDialog/6.0.5/api/js/dialog-plus.js" type="text/javascript" charset="utf-8"></script>		
		<script src="../../component/login-register/login.js"></script>
		<script src="login.js"></script>