提交 4768d314 编写于 作者: 张敬贤's avatar 张敬贤

add

上级 cf121fb2
...@@ -35,3 +35,38 @@ export const getPubKey = (param) => { ...@@ -35,3 +35,38 @@ export const getPubKey = (param) => {
}, },
}); });
}; };
// /tis/insurance / login
export const insuranceLogin = (data) => {
return request({
method: 'post',
url: '/tis/insurance/login',
data: data,
withCredentials: true,
});
};
// / 获取type=的协议名称
export const getProtocolContentByType = (type) => {
return request({
method: 'get',
url: `/smartcontract/protocol/content?type=${type}`,
withCredentials: true,
});
};
// 获取type=的协议内容
export const getProtocolNameByType = (type) => {
return request({
method: 'get',
url: `/smartcontract/protocol/name?type=${type}`,
withCredentials: true,
});
};
//
export const getPrototypes = (projectEquityNo) => {
return request({
method: 'get',
url: `tis/insurance/prototypes?projectEquityNo=${projectEquityNo}`,
withCredentials: true,
});
};
...@@ -25,65 +25,46 @@ export default { ...@@ -25,65 +25,46 @@ export default {
}) })
}, },
mounted() { mounted() {
const _this = this; console.log(this.imgCodeData);
const imgScode = $('#imgScode'); // const {slidingImage, backImage, yHeight} = this.imgCodeData;
console.log(imgScode); this.initImgCode(this.imgCodeData);
$('#imgScode').imgcode({
frontimg: 'data:image/png;base64,' + _this.imgCodeData.slidingImage,
backimg: 'data:image/png;base64,' + _this.imgCodeData.backImage,
yHeight: _this.imgCodeData.yHeight,
refreshcallback: function () {
// 刷新验证码
console.log('refreshcallback');
_this.refreshImg(undefined);
},
closecallback: function () {
// 关闭弹框
console.log('closecallback');
_this.$emit('closeSlideCheckpageDialog');
},
callback: function (msg) {
console.log('callback');
const $this = this;
_this.getMsgCode($this, msg, _this.imgCodeData, undefined);
}
});
}, },
methods: { methods: {
...mapActions('home', ['setNeedTimer']), ...mapActions('home', ['setNeedTimer']),
getImg(type) { getImg(type) {
//
const _this = this;
const data = { const data = {
mobile: this.mobile, mobile: this.mobile,
jigsawVersion: 'v1' jigsawVersion: 'v1'
}; };
sendEncryptRequest(data, params => { sendEncryptRequest(data, params => {
checkNeedImgCode(params).then(res => { checkNeedImgCode(params).then(res => {
// eslint-disable-next-line this.initImgCode(res.data, type);
$('#imgScode').imgcode({ });
frontimg: 'data:image/png;base64,' + res.data.slidingImage, });
backimg: 'data:image/png;base64,' + res.data.backImage, },
yHeight: res.data.yHeight, initImgCode(data, type) {
const _this = this;
$('#imgScode').imgcode({
frontimg: 'data:image/png;base64,' + data.slidingImage,
backimg: 'data:image/png;base64,' + data.backImage,
yHeight:data.yHeight,
refreshcallback: function () { refreshcallback: function () {
// 刷新验证码 // 刷新验证码
_this.refreshImg(type); _this.getImg(type);
}, },
closecallback: function () { closecallback: function () {
// 关闭弹框 // 关闭弹框
_this.$emit('closeSlideCheckpageDialog'); _this.$emit('closeSlideCheckpageDialog');
}, },
callback: function (msg) { callback: function (msg) {
const $this = this;
_this.getMsgCode($this, msg, res.data, type); _this.getMsgCode(_this, msg, data, type);
} }
}); });
});
});
}, },
refreshImg(type) { refreshImg(type) {
const _this = this; // const _this = this;
const data = { const data = {
mobile: this.mobile, mobile: this.mobile,
jigsawVersion: 'v1' jigsawVersion: 'v1'
...@@ -91,23 +72,24 @@ export default { ...@@ -91,23 +72,24 @@ export default {
sendEncryptRequest(data, params => { sendEncryptRequest(data, params => {
checkNeedImgCode(params).then(res => { checkNeedImgCode(params).then(res => {
// eslint-disable-next-line // eslint-disable-next-line
$('#imgScode').imgcode({ this.initImgCode(res.data, type);
frontimg: 'data:image/png;base64,' + res.data.slidingImage, // $('#imgScode').imgcode({
backimg: 'data:image/png;base64,' + res.data.backImage, // frontimg: 'data:image/png;base64,' + res.data.slidingImage,
yHeight: res.data.yHeight, // backimg: 'data:image/png;base64,' + res.data.backImage,
refreshcallback: function () { // yHeight: res.data.yHeight,
// 刷新验证码 // refreshcallback: function () {
_this.getImg(type); // // 刷新验证码
}, // _this.getImg(type);
closecallback: function () { // },
// 关闭弹框 // closecallback: function () {
_this.$emit('closeSlideCheckpageDialog'); // // 关闭弹框
}, // _this.$emit('closeSlideCheckpageDialog');
callback: function (msg) { // },
const $this = this; // callback: function (msg) {
_this.getMsgCode($this, msg, res.data, type); // const $this = this;
} // _this.getMsgCode($this, msg, res.data, type);
}); // }
// });
}); });
}); });
}, },
......
...@@ -126,6 +126,11 @@ const routerConfig = [ ...@@ -126,6 +126,11 @@ const routerConfig = [
name: 'login', name: 'login',
component: () => import('@/views/login/index.vue'), component: () => import('@/views/login/index.vue'),
}, },
{
path: '/protocol',
name: 'protocol',
component: () => import('@/views/login/protocol.vue'),
},
]; ];
router.beforeEach(async (to, from, next) => { router.beforeEach(async (to, from, next) => {
headerConfigByMeta(to); headerConfigByMeta(to);
......
<template> <template>
<div class="insurance-login"> <div class="insurance-login">
<van-form @submit="onSubmit"> <van-form
<van-field class="insurance-login-form"
v-model="formData.mobile" >
name="手机号" <template v-if="!need">
label="手机号" <div>
placeholder="手机号" <div class="login-form-label">
:rules="[{ required: true, message: '请填写手机号' }]" <span>*</span>领取人手机号
/> </div>
<van-field <div class="login-form-tips">
v-model="formData.sms" <van-icon name="warning-o" />为保证筛查准确性,请本人填写相关信息和联系方式
center </div>
clearable <van-field
label="短信验证码"
placeholder="请输入短信验证码" v-model="formData.mobilePhone"
> name="手机号"
<template #button> clearable
<van-button placeholder="手机号"
size="small" :rules="[{ required: true, message: '请输入手机号' }]"
type="primary" />
native-type="button" <div
@click="getCode" class="login-form-message"
> >
发送验证码 <van-field
</van-button> v-model="formData.checkCode"
</template> center
</van-field> clearable
<van-field placeholder="请输入验证码"
v-model="formData.username" :rules="[{ required: true, message: '请输入验证码' }]"
name="领取人姓名" />
label="领取人姓名" <van-button
placeholder="请输入领取人姓名" size="small"
:rules="[{ required: true, message: '请输入领取人姓名' }]" type="primary"
/> class="message-btn"
<van-field :class="{'send-btn' : isSend}"
v-model="formData.idcard" native-type="button"
name="身份证" @click="getCode"
label="身份证" >
placeholder="请输入领取人身份证" {{ isSend ? `${second}S后重发` : "获取验证码" }}
:rules="[{ required: true, message: '请输入领取人身份证' }]" </van-button>
/> </div>
<div style="margin: 16px;"> </div>
<van-button </template>
round <template v-else>
block <div>
type="info" <div class="login-form-label">
native-type="submit" <span>*</span>领取人姓
> </div>
提交 <van-field
</van-button> v-if="need"
v-model="formData.patientName"
clearable
name="领取人姓名"
placeholder="请输入领取人姓名"
:rules="[{ required: true, message: '请输入领取人姓名' }]"
/>
<div class="login-form-label">
<span>*</span>领取人身份
</div>
<van-field
v-if="need"
v-model="formData.idCard"
clearable
name="领取人身份证"
placeholder="请输入领取人身份证"
:rules="[{ required: true, message: '请输入领取人身份证' }]"
/>
</div>
</template>
<div
class="login-form-submit"
@click="submit"
>
领取/查看权益
</div> </div>
</van-form> </van-form>
<slideToCheck <slideToCheck
v-if="showCheckDialog" v-if="showCheckDialog"
:mobile="formData.mobile" :mobile="formData.mobilePhone"
@closeSlideCheckpageDialog="closeSlideCheckpageDialog"
@refreshGetMsg="refreshGetMsg"
/> />
<div
v-if="need"
class="insurance-login-agreement"
>
<van-checkbox
v-model="checked"
>
我已阅读并同意 <span @click="goProtocol(42)">《云鹊健康用户协议》</span> 和 <span @click="goProtocol(5)">《云鹊隐私声明》</span>
</van-checkbox>
</div>
</div> </div>
</template> </template>
<script> <script>
import { mapActions } from 'vuex'; import { mapActions } from 'vuex';
import { sendEncryptRequest } from '@/utils/encrypt'; import { sendEncryptRequest } from '@/utils/encrypt';
import { checkNeedImgCode, getMessageCode } from '@/api/login'; import { checkNeedImgCode, getMessageCode, insuranceLogin, getPrototypes } from '@/api/login';
import { signDetection} from '@/api/detection.js';
import slideToCheck from '@/components/slide-check/index'; import slideToCheck from '@/components/slide-check/index';
export default { export default {
components: { components: {
...@@ -70,38 +109,73 @@ export default { ...@@ -70,38 +109,73 @@ export default {
data() { data() {
return { return {
formData: { formData: {
username: '', patientName: '',
mobile: '13783339953', mobilePhone: '13783339933',
idcard: '', idCard: '',
sms:'' checkCode:''
}, },
need:false,
checked:false,
timer:null,
isSend: false, isSend: false,
showCheckDialog:false second: 60,
sixThen: 60,
showCheckDialog: false,
prototypeId:'',
prototypeLogId:'',
}; };
}, },
computed: { computed: {
},
mounted() {
const {projectEquityNo} = this.$route.query;
this.projectEquityNo = projectEquityNo;
this.getPrototypes(projectEquityNo);
}, },
methods: { methods: {
...mapActions('home', ['setImgCodeData', 'setNeedTimer']), ...mapActions('home', ['setImgCodeData', 'setNeedTimer']),
closeSlideCheckpageDialog() {
this.showCheckDialog = false;
},
getPrototypes(projectEquityNo) {
getPrototypes(projectEquityNo).then(res => {
console.log(res);
});
},
getCode() { getCode() {
// if (this.isSend) {
// return;
// }
// if (!this.formData.mobile) {
// this.$toast('手机号不能为空');
// return;
// }
// if (!phoneFun(this.formData.mobile)) {
// this.$toast('手机号不正确');
// return;
// }
// this.showLoading = true;
this.checkControlStatus(); this.checkControlStatus();
}, },
refreshGetMsg() {
this.$toast({
message: '验证码已发送',
icon: 'passed',
});
this.isSend = true;
this.second--;
this.timer = setInterval(() => {
this.second--;
if (this.second <= 0) {
clearInterval(this.timer);
this.second = this.sixThen;
this.isSend = false;
}
}, 1000);
},
signDetection(protocolType, patientId) {
const obj = {
protocolType,
patientId
};
signDetection(obj).then(res => {
if (res.code !== '000000') {
return this.$toast(res.message);
}
});
},
checkControlStatus() { checkControlStatus() {
const data = { const data = {
mobile: this.formData.mobile, mobile: this.formData.mobilePhone,
jigsawVersion: 'v1', jigsawVersion: 'v1',
}; };
sendEncryptRequest(data, (params) => { sendEncryptRequest(data, (params) => {
...@@ -121,8 +195,51 @@ export default { ...@@ -121,8 +195,51 @@ export default {
}); });
}); });
}, },
submit() {
if (this.need && !this.checked) {
this.$toast('请勾选同意底部协议后进行登录');
return;
}
// {
// "checkCode": "string",
// "idCard": "string",
// "mobilePhone": "string",
// "patientName": "string",
// "projectEquityNo": "string",
// "prototypeId": 0,
// "prototypeLogId": 0
// }
const data = {
checkCode: this.formData.checkCode,
idCard: this.formData.checkCidCardode,
mobilePhone: this.formData.mobilePhone,
patientName: this.formData.patientName,
projectEquityNo:this.projectEquityNo,
};
insuranceLogin(data).then(res => {
if (res.code == '000000') {
if (res.data.status == '0') {
this.need = true;
this.$dialog.alert({
title: '温馨提示',
message: '您尚未领取过本权益,需要完善相关信息',
theme: 'round-button',
confirmButtonColor:'#00bda5'
});
}
}
});
},
phoneFun() { phoneFun() {
},
goProtocol(type) {
this.$router.push({
path: '/protocol',
query: {
type
}
});
} }
} }
}; };
...@@ -131,5 +248,135 @@ export default { ...@@ -131,5 +248,135 @@ export default {
<style lang="scss" scoped> <style lang="scss" scoped>
.insurance-login{ .insurance-login{
height: 100vh; height: 100vh;
overflow: hidden;
background-image: url('~@/assets/images/bg-login.png');
background-repeat: no-repeat;
background-size: 100% 276px;
.insurance-login-form{
margin:246px auto 160px auto;
padding: 24px 19px;
background: #fff;
width: 317px;
background: linear-gradient(180deg, #FFFFFF 0%, #FFFFFF 100%);
box-shadow: 0px 18px 12px 0px #EBF9F8;
border-radius: 40px;
border: 1px solid rgba(0,189,165,0.33);
.login-form-label{
display: flex;
align-items: center;
height: 16px;
font-size: 15px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 600;
color: #02120F;
line-height: 16px;
margin-bottom: 10px;
span{
margin-right: 3px;
color: #FB602D;
}
}
.login-form-tips{
height: 16px;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
line-height: 16px;
margin-bottom: 18px;
.van-icon{
margin-right: 4px;
}
}
.login-form-bottom{
height: 10px;
}
.login-form-message{
display: flex;
justify-content: space-between;
.van-field{
width: 170px;
}
.message-btn{
width: 130px;
height: 44px;
border-radius: 6px;
background: #00BDA5 ;
border: 1px solid #00BDA5;
font-size: 16px;
line-height: 44px;
}
}
.login-form-submit{
width: 240px;
height: 64px;
margin: 0 auto;
background: linear-gradient(271deg, #15CBB6 0%, #19C6B2 44%, #32ECCD 100%);
box-shadow: 0px 7px 7px 0px rgba(43,225,197,0.26), inset 0px 3px 7px 0px rgba(243,255,255,0.48), inset 0px -3px 8px 0px rgba(97,184,169,0.5);
border-radius: 66px;
border-image: linear-gradient(274deg, rgba(157, 254, 239, 1), rgba(226, 255, 250, 1)) 2 2;
font-size: 21px;
font-family: PingFangSC-Semibold, PingFang SC;
text-align: center ;
font-weight: 600;
color: #FFFFFF;
line-height: 64px;
margin-bottom: 15px;
}
.van-field {
overflow: visible;
padding: 0;
margin-bottom: 15px;
/deep/.van-field__value{
}
/deep/ .van-field__body{
height: 44px;
background: #F7F8F9;
align-items: center;
padding: 0 12px;
border-radius: 6px;
}
/deep/ .van-field__error-message{
padding-left: 12px;
}
&::after{
display: none;
}
}
}
.insurance-login-agreement{
display: flex;
justify-content: center;
align-items: center;
height: 21px;
font-size: 12px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #999999;
line-height:21px;
span{
color: #00BDA5;
}
/deep/ .van-checkbox__icon{
height: 12px;
width: 12px;
}
/deep/ .van-checkbox__icon .van-icon{
height: 12px;
width: 12px;
font-size: 12px;
line-height: 12px;
}
/deep/ .van-checkbox__icon--checked .van-icon{
background: #00BDA5;
border-color: #00BDA5
}
/deep/ .van-checkbox__label{
margin-left: 4px;
}
}
} }
</style> </style>
<template>
<div class="protocol">
<div class="protocol-name">
{{ name }}
</div>
<div
class="protocol-content"
v-html="content"
/>
</div>
</template>
<script>
import { getProtocolContentByType, getProtocolNameByType} from '@/api/login';
export default {
data() {
return {
name: '',
content: '',
title:''
};
},
mounted() {
const { type } = this.$route.query;
this.title = type == 5 ? '云鹊隐私声明' : '云鹊健康用户协议';
document.querySelector('title').innerHTML = this.title;
this.getProtocolNameByType(type);
this.getProtocolContentByType(type);
},
methods: {
getProtocolContentByType(type) {
getProtocolContentByType(type).then(res => {
console.log(res);
this.content = res.data;
console.log('1 ', this.content);
});
},
getProtocolNameByType(type) {
getProtocolNameByType(type).then(res => {
console.log(res);
this.name = res.data;
});
},
}
};
</script>
<style lang="scss" scoped>
.protocol{
height: 100vh;
overflow: auto;
background: #fff;
}
.protocol-name{
height: 20px;
font-size: 20px;
font-family: PingFangSC-Medium, PingFang SC;
font-weight: 600;
color: #02120F;
line-height: 20px;
text-align: center;
margin: 15px 0;
}
.protocol-content{
font-size: 15px;
font-family: PingFangSC-Regular, PingFang SC;
font-weight: 400;
color: #02120F;
line-height: 23px;
width: 345px;
margin: 0 auto 50px auto;
}
</style>
...@@ -36,7 +36,7 @@ module.exports = { ...@@ -36,7 +36,7 @@ module.exports = {
port: 8083, port: 8083,
proxy: { proxy: {
'/proxy': { '/proxy': {
target: 'https://test1-sc.yunqueyi.com/', target: 'https://dev-sc.yunqueyi.com/',
// target: 'https://test1-sc.yunqueyi.com/', // target: 'https://test1-sc.yunqueyi.com/',
// target: 'https://uat-sc.yunqueyi.com/', // target: 'https://uat-sc.yunqueyi.com/',
// http://10.241.65.90:3000/mock/1071/cs/route/removeUser // http://10.241.65.90:3000/mock/1071/cs/route/removeUser
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册