提交 1dd4084f 编写于 作者: Yuanzhao.dai's avatar Yuanzhao.dai

校验&联调

上级 66facfa2
......@@ -33,9 +33,13 @@ module.exports = {
// }
// },
context: [ //代理路径
'/test'
/*'/test'*/
'/registers',
'/mobiles',
'/login'
],
proxypath: 'http://localhost:9000',
//proxypath: 'http://localhost:9000',
proxypath: 'https://dev-saas.yunqueyi.com/web/',
cssSourceMap: true
}
}
\ No newline at end of file
}
<?xml version="1.0" encoding="UTF-8"?>
<svg width="18px" height="18px" viewBox="0 0 18 18" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 53.2 (72643) - https://sketchapp.com -->
<title>Shape</title>
<desc>Created with Sketch.</desc>
<g id="页面-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="切图" transform="translate(-462.000000, -267.000000)" fill="#FB5B52">
<path d="M471,267 C466.028906,267 462,271.028906 462,276 C462,280.971094 466.028906,285 471,285 C475.971094,285 480,280.971094 480,276 C480,271.028906 475.971094,267 471,267 L471,267 Z M475.236328,279.362695 C475.457812,279.580664 475.461328,279.935742 475.245117,280.158984 L475.245117,280.158984 C475.027148,280.380469 474.67207,280.383984 474.448828,280.167773 L471,276.7875 L467.551172,280.166016 C467.329687,280.383984 466.972852,280.380469 466.754883,280.157227 L466.754883,280.157227 C466.536914,279.935742 466.54043,279.578906 466.763672,279.360937 L470.19668,276 L466.763672,272.637305 C466.542188,272.419336 466.538672,272.064258 466.754883,271.841016 L466.754883,271.841016 C466.972852,271.619531 467.32793,271.616016 467.551172,271.832227 L471,275.2125 L474.448828,271.833984 C474.670313,271.616016 475.027148,271.619531 475.245117,271.842773 L475.245117,271.842773 C475.463086,272.064258 475.45957,272.421094 475.236328,272.639063 L471.80332,276 L475.236328,279.362695 L475.236328,279.362695 Z" id="Shape"></path>
</g>
</g>
</svg>
\ No newline at end of file
......@@ -153,18 +153,16 @@ module.exports = {
data: para
})
},
// 通用saas-GET请求
saasGET(api, para, callback,str) {
// saas-GET请求
saasGET(api, para) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
let url = api + this.getUrlPara(para)
url = encodeURI(url);
return fetch({
headers: {
sysCode: 9
sysCode: 9,
},
url: getSaasDomain(url),
url: api,
method: 'get',
data: para
params: para
})
},
......@@ -188,7 +186,34 @@ module.exports = {
data: para
})
},
// 通用saas-POST请求
saasPOST(api, para, cType) {
// para.token = para.token || this.token || "343BCABC890349ACAF357FA79122F9FE"
let header = {}
if(cType) {
header['Content-Type'] = cType;
}
return fetch({
headers: {
sysCode: 9,
...header
},
url: api,
method: 'post',
data: para
})
},
// 通用saas-PUT请求
saasPUT(api, para) {
return fetch({
headers: {
sysCode: 9,
},
url: api,
method: 'put',
data: para
})
},
// 从html参数
getUrlKey(name) {
if (decodeURIComponent && location.href) {
......@@ -197,6 +222,7 @@ module.exports = {
return null
}
},
getUrlSearch(url, name) {
if (typeof name == 'undefined') {
name = url
......
......@@ -271,23 +271,29 @@ const detectOS = () => {
// 获取用户浏览器信息
const getBrowser = () => {
// let OsObject = "未知";
// if (navigator.userAgent.indexOf("MSIE") > 0) {
// return "IE";
// }
// if (navigator.userAgent.indexOf("Firefox") > 0) {
// return "Firefox";
// }
// if (navigator.userAgent.indexOf("Chrome") > 0) {
// return "Chrome";
// }
// if (navigator.userAgent.indexOf("Safari") > 0) {
// return "Safari";
// }
// if (navigator.userAgent.indexOf("Gecko") > 0) {
// return "Gecko";
// }
return navigator.userAgent;
let OsObject = "未知";
if (navigator.userAgent.indexOf("MSIE") > 0 && navigator.userAgent.indexOf("compatible") > -1) { //<ie11
return "IE";
}
if (navigator.userAgent.indexOf("Trident") > 0 && navigator.userAgent.indexOf("rv:11.0") > -1) { //ie11
return "IE";
}
if (navigator.userAgent.indexOf("Firefox") > 0) {
return "Firefox";
}
if (navigator.userAgent.indexOf("Chrome") > 0) {
return "Chrome";
}
if (navigator.userAgent.indexOf("Safari") > 0) {
return "Safari";
}
if (navigator.userAgent.indexOf("Gecko") > 0) {
return "Firefox";
}
if (navigator.userAgent.indexOf("360") > 0) {
return "360";
}
return OsObject;
};
const GetLocalIPAddress = () => {
......@@ -306,7 +312,7 @@ const GetLocalIPAddress = () => {
// 获取用户终端信息
const getTerminalType = () => {
let brow = "未知";
let brow = "unknown";
// alert(navigator.userAgent);
if (navigator.userAgent.indexOf('iPad') > -1) {
// alert("iPad");
......@@ -315,25 +321,25 @@ const getTerminalType = () => {
if (navigator.userAgent.indexOf('Android') > -1
|| navigator.userAgent.indexOf('Linux') > -1) {
// alert("Android");
return brow = "android手机";
return brow = "android";
}
if (navigator.userAgent.indexOf('iPhone') > -1
// || navigator.userAgent.indexOf('Mac') > -1
) {
// alert("iPhone");
return brow = "iPhone手机";
return brow = "iPhone";
}
if (navigator.userAgent.indexOf('Trident') > -1) {
// alert("Trident");
return brow = "电脑";
return brow = "PC";
}
if (navigator.userAgent.indexOf('Presto') > -1) {
// alert("Presto");
return brow = "电脑";
return brow = "PC";
}
if (navigator.userAgent.indexOf('Chrome') > -1) {
// alert("Chrome");
return brow = "电脑";
return brow = "PC";
}
if (navigator.userAgent.indexOf('AppleWebKit') > -1) {
// alert("AppleWebKit");
......@@ -342,7 +348,7 @@ const getTerminalType = () => {
if (navigator.userAgent.indexOf('Gecko') > -1
&& navigator.userAgent.indexOf('KHTML') == -1) {
// alert("Gecko");
return brow = "电脑";
return brow = "PC";
}
if (navigator.userAgent.indexOf("Mac OS X") > -1) {
// alert("ios");
......@@ -350,7 +356,7 @@ const getTerminalType = () => {
}
if (navigator.userAgent.indexOf('Safari') == -1) {
// alert("Safari");
return brow = "电脑";
return brow = "PC";
}
return brow;
};
......@@ -449,6 +455,17 @@ export const ssoLogin2 = () => { //单独部署不走saas端登录
initEnvironment();
};
export const getDeviceInfo = () => { //系统信息,获取验证码时有用到
return {
device_brand: localStorage.getItem('terminalType'),
device_type: 1,
system_level: localStorage.getItem('OS'),
device_ip: localStorage.getItem('ipAddress'),
browser_ver: localStorage.getItem('browser')
}
};
//单点登录--end
//退出登录,跳转到登录页面
......
......@@ -9,21 +9,23 @@
<p class="title-input">账号登录</p>
<img src="../assets/image/underline.svg" alt="">
</div>
<el-form ref="loginForm" :model="loginData" >
<el-form-item label="">
<el-input v-model="loginData.mobile" placeholder="手机号" maxlength="11">
<el-form ref="loginForm" :model="loginData">
<el-form-item label="" prop="mobile">
<el-input v-model="loginData.mobile" placeholder="手机号" maxlength="11" :class="{errColor: loginMobileErr}">
<i slot="prefix" class="el-input__icon my-icon mobile-icon"></i>
</el-input>
<p class="err-text" v-show="loginMobileErr"><img src="../assets/image/err-icon.svg" alt="">{{loginMobileErrText}}</p>
</el-form-item>
<el-form-item label="">
<el-input v-model="loginData.password" placeholder="密码" type="password" v-if="!showPSW">
<el-form-item label="" prop="password">
<el-input v-model="loginData.password" placeholder="密码" type="password" v-if="!showPSW" :class="{errColor: loginPWDErr}">
<i slot="prefix" class="el-input__icon my-icon password-icon"></i>
<i @click="showPWSBtn" slot="suffix" class="el-input__icon my-icon open-eyes-icon"></i>
</el-input>
<el-input v-model="loginData.password" placeholder="密码" v-else>
<el-input v-model="loginData.password" placeholder="密码" v-else :class="{errColor: loginPWDErr}">
<i slot="prefix" class="el-input__icon my-icon password-icon"></i>
<i @click="hidePWSBtn" slot="suffix" class="el-input__icon my-icon close-eyes-icon"></i>
</el-input>
<p class="err-text" v-show="loginPWDErr"><img src="../assets/image/err-icon.svg" alt="">{{loginPWDErrText}}</p>
</el-form-item>
</el-form>
<div class="button-div">
......@@ -41,33 +43,36 @@
</div>
<el-form ref="loginForm" :model="resetPassword" >
<el-form-item label="">
<el-input v-model="resetPassword.mobile" placeholder="手机号" maxlength="11">
<el-input v-model="resetPassword.mobile" placeholder="手机号" maxlength="11" :class="{errColor: resetMobileErr}">
<i slot="prefix" class="el-input__icon my-icon mobile-icon"></i>
</el-input>
<p class="err-text" v-show="resetMobileErr"><img src="../assets/image/err-icon.svg" alt="">{{resetMobileErrText}}</p>
</el-form-item>
<el-form-item label="">
<el-input v-model="resetPassword.authCode" placeholder="短信验证码">
<el-input v-model="resetPassword.authCode" placeholder="短信验证码" :class="{errColor: resetCodeErr}">
<i slot="prefix" class="el-input__icon my-icon auth-code-icon"></i>
<i v-if="countDown == 0" @click="getAuthCode" slot="suffix" class="el-input__icon get-auth-code">获取验证码</i>
<i v-else slot="suffix" class="el-input__icon get-auth-warning">{{countDown}}s后重发</i>
</el-input>
<p class="err-text" v-show="resetCodeErr"><img src="../assets/image/err-icon.svg" alt="">{{resetCodeErrText}}</p>
</el-form-item>
<el-form-item label="">
<el-input v-model="resetPassword.password" placeholder="新密码" type="password" v-if="!showPSW">
<el-input v-model="resetPassword.password" placeholder="新密码" type="password" v-if="!showPSW" :class="{errColor: resetPWDErr}">
<i slot="prefix" class="el-input__icon my-icon password-icon"></i>
<i @click="showPWSBtn" slot="suffix" class="el-input__icon my-icon open-eyes-icon"></i>
</el-input>
<el-input v-model="resetPassword.password" placeholder="新密码" v-else>
<el-input v-model="resetPassword.password" placeholder="新密码" v-else :class="{errColor: resetPWDErr}">
<i slot="prefix" class="el-input__icon my-icon password-icon"></i>
<i @click="hidePWSBtn" slot="suffix" class="el-input__icon my-icon close-eyes-icon"></i>
</el-input>
<p class="err-text" v-show="resetPWDErr"><img src="../assets/image/err-icon.svg" alt="">{{resetPWDErrText}}</p>
</el-form-item>
</el-form>
<div class="button-div">
<!--<div class="forget-password">
<p>忘记密码?</p>
</div>-->
<button>重设密码</button>
<button @click="resetPWD">重设密码</button>
<div class="login-now">
<p @click="goToLogin">立即登录</p>
</div>
......@@ -84,7 +89,7 @@
</template>
<script>
import { ssoLogin2, } from '@/utils/utils';
import { ssoLogin2, getDeviceInfo } from '@/utils/utils';
import md5 from 'js-md5';
export default {
......@@ -97,13 +102,49 @@
showVRCode: false,
showPSW: false,
countDown: 0,
timer: null
timer: null,
loginMobileErr: false,
loginMobileErrText: '',
loginPWDErr: false,
loginPWDErrText: '',
resetMobileErr: '',
resetMobileErrText: '',
resetCodeErr: '',
resetCodeErrText: '',
resetPWDErr: '',
resetPWDErrText: ''
}
},
created() {
ssoLogin2() //初始化登录信息
},
methods: {
checkPhone(val) {
if(!(/^1[345678]\d{9}$/.test(val))) {
return false;
} else {
return true;
}
},
checkPwdVal(val) {
if(!/(?=.*\d)/.test(val)){
return false
}
if(!/(?=.*[A-Za-z])/.test(val)){
return false
}
if(!/[`~!@#$%^&*()=|{}_+':]/.test(val)){
return false
}
return true
},
checkPassword(val) {
if(val.length < 8 || val.length > 16){
return false;
} else {
return true;
}
},
goToLogin() {
this.loginFlag = true
},
......@@ -123,32 +164,193 @@
this.showPSW = false
},
getAuthCode() {
const TIME_COUNT = 60;
if (!this.timer) {
this.countDown = TIME_COUNT;
this.timer = setInterval(() => {
if (this.countDown > 0 && this.countDown <= TIME_COUNT) {
this.countDown--;
} else {
this.countDown = 0;
clearInterval(this.timer);
this.timer = null;
}
}, 1000)
if(!this.resetPassword.mobile) {
this.resetMobileErr = true;
this.resetMobileErrText = '请输入手机号';
return;
} else if(!this.checkPhone(this.resetPassword.mobile)) {
this.resetMobileErr = true;
this.resetMobileErrText = '请输入正确的手机号';
return;
} else {
this.resetMobileErr = false;
this.resetMobileErrText = '';
}
let params = {
receiver: this.resetPassword.mobile,
token: localStorage.getItem("token"),
flag: 2, //1表示注册 2表示忘记密码
gaoFlag: 1 ,//1表示saas 2表示高血压项目
deviceInfo: getDeviceInfo()
};
this.saasPOST('/mobiles/sendCaptchaNew',params, 'application/x-www-form-urlencoded;charset=UTF-8').then(data => {
console.log('返回结果', data)
if (data.mobileFlag == 2) {
this.resetMobileErr = true;
this.resetMobileErrText = '该手机号尚未注册!';
return;
} else {
const TIME_COUNT = 60;
if (!this.timer) {
this.countDown = TIME_COUNT;
this.timer = setInterval(() => {
if (this.countDown > 0 && this.countDown <= TIME_COUNT) {
this.countDown--;
} else {
this.countDown = 0;
clearInterval(this.timer);
this.timer = null;
}
}, 1000)
}
}
}).catch( err => {
this.$message({
message: '系统错误!',
type: 'error'
});
})
},
login() {
if(!this.loginData.mobile) {
this.loginMobileErr = true;
this.loginMobileErrText = '请输入手机号';
} else if(!this.checkPhone(this.loginData.mobile)) {
this.loginMobileErr = true;
this.loginMobileErrText = '请输入正确的手机号';
} else {
this.loginMobileErr = false;
this.loginMobileErrText = '';
}
if(!this.loginData.password) {
this.loginPWDErr = true;
this.loginPWDErrText = '请输入密码';
} else {
this.loginPWDErr = false;
this.loginPWDErrText = '';
}
if(!this.loginData.mobile||!this.checkPhone(this.loginData.mobile)||!this.loginData.password) {
return;
}
let params = {
mobile: this.loginData.mobile,
OS: localStorage.getItem("OS"),
browser: localStorage.getItem("browser"),
terminalType: localStorage.getItem("terminalType"),
ipAddress: localStorage.getItem("ipAddress"),
password: md5(this.loginData.password).toUpperCase()
password: md5(this.loginData.password).toUpperCase(),
token: localStorage.getItem("token"),
}
console.log('params',params)
this.saasGET('web/registers/saasLogin',params).then(({data}) => {
this.saasGET('/registers/saasLogin',params).then(data => {
console.log('返回结果', data)
if (data.mobileFlag == 1) {
/*this.$message({
message: '手机号或密码不正确!',
type: 'error'
});*/
this.loginPWDErr = true;
this.loginPWDErrText = '手机号或密码不正确!';
return;
}
if (data.isExist == 2) {
/*this.$message({
message: '该手机号尚未注册!',
type: 'error'
});*/
this.loginMobileErr = true;
this.loginMobileErrText = '该手机号尚未注册!';
return;
}
localStorage.setItem("token", data.token);
localStorage.setItem('doctorId',data.picapDoctor.id);
localStorage.setItem("mobilePhone", params.mobile);
localStorage.setItem("pass", params.password);
sessionStorage.setItem("mobile",params.mobile);
sessionStorage.setItem("pass",params.password);
this.$router.push('/');
}).catch( err => {
this.$message({
message: '系统错误!',
type: 'error'
});
})
},
resetPWD() {
if(!this.resetPassword.mobile) {
this.resetMobileErr = true;
this.resetMobileErrText = '请输入手机号';
} else if(!this.checkPhone(this.resetPassword.mobile)) {
this.resetMobileErr = true;
this.resetMobileErrText = '请输入正确的手机号';
} else {
this.resetMobileErr = false;
this.resetMobileErrText = '';
}
if(!this.resetPassword.authCode) {
this.resetCodeErr = true;
this.resetCodeErrText = '请输入验证码';
} else {
this.resetCodeErr = false;
this.resetCodeErrText = '';
}
if(!this.resetPassword.password) {
this.resetPWDErr = true;
this.resetPWDErrText = '请输入密码';
} else if(!this.checkPassword(this.resetPassword.password)) {
this.resetPWDErr = true;
this.resetPWDErrText = '请输入8-16位的密码';
} else if(!this.checkPwdVal(this.resetPassword.password)) {
this.resetPWDErr = true;
this.resetPWDErrText = '密码须同时包含数字,字母和字符';
} else {
this.resetPWDErr = false;
this.resetPWDErrText = '';
}
if(!this.resetPassword.mobile
||!this.checkPhone(this.resetPassword.mobile)
||!this.resetPassword.authCode
||!this.resetPassword.password
||!this.checkPassword(this.resetPassword.password)
||!this.checkPwdVal(this.resetPassword.password)) {
return;
}
let para = {
mobile: this.resetPassword.mobile,
authCode: this.resetPassword.authCode
}
this.saasGET('/mobiles/checkCaptcha',para).then(data => {
let req = {
mobile: this.resetPassword.mobile,
password: md5(this.resetPassword.authCode).toUpperCase()
}
this.saasPUT('/login/password',req).then(data => {
this.$message({
message: '重设密码成功,请重新登录!',
type: 'success'
});
setTimeout(function () {
window.location.reload();
}, 2000)
}).catch( err => {
this.$message({
message: '系统错误!',
type: 'error'
});
})
}).catch( err => {
/*this.$message({
message: '验证码已过期或不存在!',
type: 'error'
});*/
this.resetCodeErr = true;
this.resetCodeErrText = '验证码已过期或不存在';
return;
})
}
}
......@@ -156,29 +358,42 @@
</script>
<style lang="scss">
.my-icon {
display: inline-block;
height: 20px;
margin-top: 9px;
}
.mobile-icon {
background: url("../assets/image/mobile.svg") no-repeat;
}
.password-icon {
background: url("../assets/image/password.svg") no-repeat;
}
.auth-code-icon {
background: url("../assets/image/auth-code.svg") no-repeat;
}
.open-eyes-icon {
background: url("../assets/image/open-eyes.svg") no-repeat;
cursor: pointer;
}
.close-eyes-icon {
background: url("../assets/image/close-eyes.svg") no-repeat;
cursor: pointer;
}
.login-other {
.my-icon {
display: inline-block;
height: 20px;
margin-top: 9px;
}
.mobile-icon {
background: url("../assets/image/mobile.svg") no-repeat;
}
.password-icon {
background: url("../assets/image/password.svg") no-repeat;
}
.auth-code-icon {
background: url("../assets/image/auth-code.svg") no-repeat;
}
.open-eyes-icon {
background: url("../assets/image/open-eyes.svg") no-repeat;
cursor: pointer;
}
.close-eyes-icon {
background: url("../assets/image/close-eyes.svg") no-repeat;
cursor: pointer;
}
.err-text {
color: #FB5B52;
height: 20px;
line-height: 20px;
margin-top: 4px;
img {
width: 14px;
height: 14px;
margin-right: 3px;
vertical-align: middle;
}
}
display: flex;
height: 100%;
flex-direction: row;
......@@ -242,6 +457,7 @@
.el-form {
.el-form-item {
.el-form-item__content {
position: relative;
.el-input {
.el-input__inner {
border-radius: 0;
......@@ -256,6 +472,15 @@
color: #666666;
}
}
.err-text{
position: absolute;
}
.errColor {
.el-input__inner {
border-color: #FB5B52;
}
}
}
}
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册