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

Merge branch 'release' into dev-stage3-20191212

# Conflicts:
#	package-lock.json
#	service/index.js
@import './common.scss';
@import 'common.less';
//定位
.relative{
......
.in-activity-wrap{
position: relative;
width: 100%; height: auto; overflow: hidden;
background: #F5663F;
.ellipsis{
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
ul,li{ list-style: none; };
img{ border:0; display: block; }
.top-process-bar{
width: 100%; height: 42px;
overflow: hidden;
li{
width: 25%; height: 42px;
float: left; overflow: hidden;
background: #E35D5B;
box-sizing: border-box;
border-right: 1PX solid #B50300;
&:nth-child(4){ border-right: 0; }
color:rgba(255,181,179,1);
border-bottom: 2px solid #D80D0A;
background: linear-gradient(to bottom, #E53935, #E35D5B);
&.over{
color:rgba(224,100,97,1); border-bottom: 2px solid #7D1716;
background: linear-gradient(to bottom, #B32B29, #9C2A29);
border-right: 1PX solid #900300;
}
&.active{
color:rgba(173,14,59,1); border-bottom: 2px solid #CA6507;
background: linear-gradient(to bottom, #FFE578, #FFC643);
border-right: 0;
}
p{
text-align: center;
&.title{
font-size: 12px; font-weight: 700; line-height: 12px;
margin-top: 6px;
}
&.date{
font-size: 12px; line-height: 12px;
margin-top: 4px;
}
}
}
}
.award-wrap{
width: 100%; height: 214px; overflow: hidden;
background: url('../img/stage-two/top-stage-bg.png') no-repeat left top;
background-size: 100% 100%;
.stage-rule{
width: 100%; height: 52px; overflow: hidden;
.stage-text{
float: left;
width: 170px; height: 19px; margin: 11px 0 0 23px;
}
.rule-btn{
float: right;
width: 69px; height: 25px; margin-top: 8px;
}
}
.reward-pic{
margin: 0 auto;
width: 330px; height: 96px;
}
}
.user-info-wrap{
position: relative;
width: 355px; height: 480px;
margin: 35px auto 0;
background: url('../img/stage-two/user-info-bg.png') no-repeat left top;
background-size: 100% 100%;
.gold-coin{
position: absolute; right: -20px; top: -32px;
width: 63px; height: 65px; border:0; display: block;
}
.basic-info{
width: 355px; height: 80px; overflow: hidden;
padding: 16px 15px 0; box-sizing: border-box;
.head-icon{
float: left;
width: 50px; height: 50px; overflow: hidden; border: 0; display: block;
border-radius: 50px;
// border: 1PX solid red;
img{
width: 50px; height: 50px;
}
}
.name-info{
float: left;
width: 190px; height: 50px; overflow: hidden;
margin-left: 14px;
color:#373839;
.name{
width: 100%;
font-size: 18px; line-height: 28px; font-weight: 700;
.ellipsis;
}
.company{
width: 100%;
font-size: 14px; line-height: 18px; margin-top: 5px;
.ellipsis;
}
}
.detail{
position: relative;
float: left; box-sizing: border-box; font-weight: 700;
width: 68px; height: 25px; overflow: hidden; border-radius: 25px; border: 1PX solid #FD5A2F;
font-size: 12px; color: #FD5A2F; line-height: 26px; text-indent: 5px;
margin-top: 18px;
img{
position: absolute; right: 5px; top: 50%; margin-top:-5px;
width: 6px; height: 11px;
}
}
}
.billboard-wrap{
width: 325px; height: 137px; overflow: hidden;
padding: 0 15px;
li{
width: 160px; height: 137px; overflow: hidden; float: left;
background: #FFE2D9; border-radius: 8px;
box-sizing: border-box;
padding: 15px 4px 0 15px;
&.organ{
margin-left: 5px;
}
.title{
width: 142px; height: 14px; font-size: 14px; line-height: 14px; color: #373839;
}
.score{
width: 142px; height: 26px; font-size: 26px; line-height: 26px; color: #FD5A2F; margin-top: 6px;
}
.rank{
position: relative;
width: 142px; height: 13px; font-size: 13px; line-height: 16px; color: #996B3D; margin-top: 10px;
font-weight: 700;
text-indent: 14px;
img{
position: absolute; left: 0; top: 50%; margin-top: -5px;
width: 10px; height: 11px;
}
}
.billboard-btn{
position: relative;
width: 99px; height: 25px; border: 1PX solid #FD5A2F; border-radius: 25px;
margin-top: 15px;
font-size: 12px; font-weight: 700; line-height: 28px; color: #FD5A2F; text-indent: 10px;
img{
position: absolute; right: 8px; top: 50%; margin-top:-5px;
width: 6px; height: 11px;
}
}
}
}
.score-tips{
width: 325px; height: 25px; overflow: hidden; margin: 0 auto;
background:#FFF1D0; color: #FD5A2F; text-indent: 10px; font-size: 12px; line-height: 25px;
border-radius: 8px; margin-top: 5px;
}
.bean-wrap{
width: 325px; height: 27px; overflow: hidden;
margin: 30px auto 0; padding-bottom: 16px;
border-bottom: 1px solid #FFDBD0;
.personal-total-get{
float: left; margin: 5px 0 0 6px;
font-size: 16px; color: #373839; font-weight: 700; line-height: 16px;
span{ color: #FD5A2F; }
}
.bean-center{
position: relative;
float: right;
width: 81px; height: 25px;
border: 1PX solid #FD5A2F; border-radius: 25px;
line-height: 25px; text-indent: 8px; font-size: 12px; line-height: 28px; color: #FD5A2F; font-weight: 700;
img{
position: absolute; right: 5px; top: 50%; margin-top:-5px;
width: 6px; height: 11px;
}
}
}
.bean-tips{
width: 325px; height: 46px; margin: 0 auto;
color: #996B3D; font-size: 15px; line-height: 40px; text-indent: 6px; font-weight: 700;
}
.bean-stage{
position: relative;
width: 355px; height: 75px;
img{
width: 355px; height: 75px; overflow: hidden;
}
.score-list{
position: absolute; left:0; bottom: -7px;
width: 345px; height: 12px; overflow: hidden;
padding-left: 10px;
li{
float: left;
width: 60px; height:12px; font-size: 12px; color: #373839; line-height: 12px;
text-align: center;
margin-right: 32px;
&:nth-child(4){
margin: 0;
}
}
}
}
}
// 未登录
.not-login-wrap{
position: relative;
width: 325px; height: 50px; margin: 35px auto 0;
padding: 20px 15px;
border-radius: 13px;
background: #FFF;
.gold-coin{
position: absolute; right: -20px; top: -32px;
width: 63px; height: 65px; border:0; display: block;
}
.head-icon{
width: 50px; height: 50px; display: block; border: 0;
float: left; border-radius: 50px;
}
.content-info{
float: left;
width: 177px; height: 50px; overflow: hidden;
margin-left: 15px;
.not-login-text{
width: 202px; height: 28px;
color: #373839; font-size: 18px; line-height: 28px; font-weight: 700;
}
.tips{
width: 202px; height: 18px;
color: #676869; font-size: 14px; line-height: 18px;
}
}
.go-login{
position: relative;
float: left;
width: 56px; height: 25px; margin: 14px 0 0 24px;
border: 1PX solid #FD5A2F;
border-radius: 25px; font-size: 12px; line-height: 27px; text-indent: 8px;
color: #FD5A2F; font-weight: 700;
&.login-but-nojoin{
width: 70px; height: 25px;
margin: 14px 0 0 10px;
}
img{
position: absolute; right: 5px; top: 50%; margin-top:-5px;
width: 6px; height: 11px;
}
}
}
// 邀请医生好友学课程
.invite-doctor-wrap{
position: relative;
width: 355px; height: 242px;
margin: 0 auto 0;
background: #FFF; border-radius: 13px;
.top-head-icon{
position: absolute; left:50%; top:-32px; margin-left: -158px; z-index:200;
width: 316px; height: 48px; border:0; display: block;
}
.invite-tips{
width: 100%; height: 55px; line-height: 55px;
font-size: 12px; color: #FD6037; text-align: center;
}
.invite-list-wrap{
width: 315px; height: 90px;
padding: 0 20px;
.invite-list{
width: 350px; height: 90px;
li{
position: relative;
width: 45px; height: 90px; margin-right: 23px; float: left;
.add-btn{
position: relative;
width: 45px; height: 45px; border-radius: 45px; background: #FFD9CD;
img{
position: absolute; left: 50%; top: 50%; margin-left: -10px; margin-top: -10px;
width: 20px; height: 20px;
&.right-icon-big{
width: 10px; height: 18px;
margin-left: -5px; margin-top: -9px;
}
}
}
.doctor-icon{
width: 45px; height: 45px; border-radius: 45px; border: 0; display: block;
}
.text{
position: absolute; left: 50%; top: 58px;
width: 60px; margin-left: -30px;
height: 12px; font-size: 12px; color: #676869; text-align: center; line-height: 14px;
.ellipsis;
&.see-more{
color: #FD5D33;
}
}
}
}
}
.invite-btn{
position: relative;
width: 331px; height: 69px; overflow: hidden; margin: 0 auto;
img{
width: 331px; height: 69px;
}
.text{
position: absolute; left: 0; top: 0;
width: 331px; height: 50px;
color: #B42F00; font-size: 22px; line-height: 53px;
text-align: center; font-weight: 700; letter-spacing: 1px;
}
}
.login-tips{
width: 355px; height: 17px; overflow: hidden;
font-size: 12px; line-height: 17px; text-align: center;
color: #FF8929;
}
}
// 每日任务
.daily-task{
width: 325px; height: 278px; margin: 35px auto 0;
background: #FFF; border-radius: 13px;
padding: 0 15px;
.top-center-bar{
width: 325px; height: 58px; overflow: hidden;
background: url('../img/stage-two/daily-task-bar.png') no-repeat center center;
background-size: 128px 12px;
font-size: 18px; color: #F05D30; font-weight: 700; text-align: center; line-height: 58px;
}
.task-list{
width: 325px; height: 200px; overflow: hidden;
li{
width: 325px; height: 50px; overflow: hidden; margin-bottom: 20px;
.left-icon{
width: 50px; height: 50px; display: block; border: 0; float: left;
}
.center-wrap{
width: 184px; height: 50px; display: block; float: left;
padding: 0 15px;
.title{
width: 184px; height: 30px;
font-size: 16px; color: #373839; font-weight: 700; line-height: 30px;
}
.detail-text{
width: 184px; height: 12px; line-height: 12px;
font-size: 12px; color: #676869;
}
}
.right-btn{
margin-top: 11px;
width: 60px; height: 30px; border-radius: 30px;
overflow: hidden; float: left;
font-weight: 700; color: #FFF;
font-size: 13px; line-height: 32px; text-align: center;
background: linear-gradient(to right, #FEA356, #FF5824);
&.done{
color: #EE5C2E; background: #FFD9CD;
}
}
}
}
}
// 底部logo
.bottom-logo{
width: 100%; height: 92px;
background: url('../img/stage-two/bottom-logo.png') no-repeat center center;
background-size: 36px 45px;
}
// 弹窗
.toast-wrap{
position: fixed; left: 0; top: 0; z-index: 500;
width: 100%; height: 100%; overflow: hidden;
.full-screen-mask{
width: 100%; height: 100%;
background: #000000; opacity: 0.5;
}
.content-wrap{
position: absolute; left: 50%; top: 50%; z-index: 1000;
margin-left: -140px; margin-top: -150px;
width: 280px; height: 300px;
// 活动结束 弹窗
&.activity-end{
width: 300px; height: 144px; overflow: hidden;
margin-left: -150px; margin-top: -87px;
background: #FFF; border-radius: 3px;
padding-top: 30px;
.content-text{
width: 240px; height: 63px; padding: 0 30px;
color: #676869;
font-size: 14px; line-height: 21px;
}
.btn-list{
width: 300px; height: 50px; overflow: hidden; margin-top: 30px;
li{
width: 50%; height: 50px; overflow: hidden; float: left;
color: #979899; font-size: 17px; line-height: 50px; text-align: center;
&.high-light{
color: #449284;
}
}
}
}
.back-image{
position: absolute; left: 0; top: 0; z-index: -1;
width: 280px; height: 300px;
}
.title{
width: 280px; height: 21px;
font-size: 21px; line-height: 21px; font-weight: 700; color: #333333;
margin-top: 167px;
text-align: center;
}
.message{
width: 280px; height: 14px;
font-size: 14px; line-height: 14px; text-align: center;
color: #676869; margin-top: 15px;
span{
color: #F46235;
}
}
.bottom-btn{
width: 209px; height: 44px;
font-size: 17px; line-height: 44px; text-align: center; color: #FFF;
margin: 0 auto; border-radius: 44px; margin-top: 20px;
background: linear-gradient(to right, #FEA356, #FF5824);
}
.close-btn{
position: absolute; left: 50%; bottom: -50px; margin-left: -17px;
width: 34px; height: 34px;
background: url('../img/stage-two/close-toast-icon.png') no-repeat center center;
background-size: 30px; height: 30px;
}
}
}
}
\ No newline at end of file
.index-wrap{
.index-wrap {
width: 100%;
position: relative;
div{
div {
width: 100%;
img{
img {
width: 100%;
display: block;
}
}
.wrap-join{
.wrap-join {
height: 72.5px;
background: url(../img/img4.png) no-repeat center center;
background-size: 100% 100%;
margin-bottom: -.5px;
.wrap-count{
.wrap-count {
width: 325px;
height: 72.5px;
display: flex;
margin: 0 auto;
h1{
h1 {
margin-top: 9px;
font-size:23px;
font-weight:700;
color:rgba(255,255,255,1);
line-height:32.5px;
font-size: 23px;
font-weight: 700;
color: rgba(255, 255, 255, 1);
line-height: 32.5px;
text-align: center;
}
h5{
font-size:14px;
font-weight:400;
color:rgba(255,255,255,0.59);
line-height:20px;
h5 {
font-size: 14px;
font-weight: 400;
color: rgba(255, 255, 255, 0.59);
line-height: 20px;
text-align: center;
}
}
}
.btn-app-share{
.btn-img{
.btn-app-share {
.btn-img {
width: 312px;
height: 51.5px;
margin: 0 auto;
}
}
.btn-appoint{
height: 96px;
.btn-appoint {
height: 94.5px;
background: url(../img/img5.png) no-repeat center center;
background-size: 100% 100%;
margin-bottom: -.5px;
img{
img {
padding-top: 15px;
}
.seted-btn{
width: 312px;
margin: 0 auto;
}
.appoint-time{
.appoint-time {
margin-top: 5px;
text-align: center;
font-size:12px;
color:rgba(237,90,44,1);
line-height:16.5px;
font-size: 12px;
color: rgba(237, 90, 44, 1);
line-height: 16.5px;
}
}
.btn-share{
width: 100%;
position: relative;
......@@ -76,48 +79,388 @@
bottom: 18%;
}
}
.rule-show{
background:rgba(254,124,86,1);
.bird{
.rule-show {
background: rgba(254, 124, 86, 1);
.bird {
width: 22.5px;
height: 28.5px;
margin: 0 auto;
padding: 24px 0;
}
.rule-bg{
width:92%;
margin:0 auto;
.rule-bg {
width: 345px;
margin: 0 auto;
box-sizing: border-box;
background:rgba(236,107,69,1);
border-radius:12px;
background: rgba(236, 107, 69, 1);
border-radius: 12px;
padding: 15px;
section{
h1{
section {
h1 {
font-size: 16px;
font-weight: 700;
color: rgba(255, 234, 136, 1);
line-height: 18px;
margin-bottom: 12px;
}
p {
font-size: 14px;
font-weight: 500;
color: rgba(255, 246, 202, 1);
line-height: 19px;
margin-bottom: 9px;
span {
font-weight: 700;
}
}
}
.margin-top-20 {
margin-top: 20px;
}
.line {
margin-top: 20px;
width: 309.5px;
height: .5px;
background: #FFF6CA;
}
.btn-rule {
width: 110px;
// height: 15px;
font-size: 15px;
color: rgba(255, 255, 255, 1);
line-height: 15px;
margin: 0 auto;
padding: 16.5px 0 1.5px 0;
img {
width: 7px;
height: 12px;
display: inline;
vertical-align: middle;
padding-left: 5px;
}
}
}
}
.fix-btn {
width: 100%;
height: 50px;
position: fixed;
left: 0;
bottom: 0;
z-index: 10;
background: #fff;
div {
width: 345px;
height: 40px;
background: linear-gradient(270deg, rgba(255, 88, 36, 1) 0%, rgba(254, 163, 86, 1) 100%);
border-radius: 20px;
margin: 5px auto 0 auto;
font-size: 15px;
color: rgba(255, 255, 255, 1);
line-height: 40px;
text-align: center;
}
}
.abs-btn {
width: 69px;
height: 25px;
position: absolute;
right: 0;
top: 260px;
img {
width: 69px;
height: 25px;
}
}
}
.padbtm50 {
padding-bottom: 50px;
}
// 微信分享助力活动
.wx-share-wrap {
width: 100%;
height: 100vh;
button,input{
appearance: none;
border: none;
outline: none;
}
section {
width: 100%;
padding-bottom: 27.5px;
background: url(../img/bgtop.png) no-repeat;
background-size: 100% 100%;
margin-bottom: -.5px;
.invite-info{
padding-top: 20px;
img{
width: 50px;
height: 50px;
display: block;
border-radius: 50%;
margin: 0 auto;
}
.title1{
margin-top: 12px;
margin-bottom: 8px;
text-align: center;
font-size:20px;
font-weight:700;
color:rgba(255,255,255,1);
line-height:20px;
text-shadow:0px 2px 10px rgba(222,77,16,1);
}
.title2{
margin-bottom: 23px;
text-align: center;
font-size:13px;
color:rgba(255,255,255,1);
line-height:13px;
text-shadow:0px 2px 10px rgba(231,93,48,1);
}
}
.page-info{
width:345px;
height:162px;
padding: 20px 25px;
box-sizing: border-box;
margin: 0 auto 16px auto;
background:rgba(255,255,255,1);
border-radius:6px;
.title1{
margin-bottom: 8px;
text-align: center;
font-size:16px;
font-weight:700;
color:rgba(255,234,136,1);
line-height:18px;
margin-bottom: 12px;
color:rgba(55,56,57,1);
line-height:16px;
}
.title2{
margin-bottom: 16px;
text-align: center;
font-size:12px;
color:rgba(248,94,71,1);
line-height:12px;
}
.imgs-wrap{
display: flex;
justify-content: space-between;
div{
border-radius: 6px;
img{
width: 50px;
height: 50px;
display: block;
margin: 0 auto;
}
.img-txt{
margin-top: 8px;
font-size:12px;
color:rgba(103,104,105,1);
line-height:12px;
}
}
}
}
p{
.form-info{
width:345px;
// height:162px;
padding: 15px;
box-sizing: border-box;
margin: 0 auto 16px auto;
background:rgba(255,255,255,1);
border-radius:6px;
.field-wrap{
display: flex;
justify-content: flex-start;
width: 315px;
height: 45px;
line-height: 45px;
padding: 0 20px;
box-sizing: border-box;
background:rgba(248,249,250,1);
border-radius:22.5px;
margin-bottom: 10px;
position: relative;
.cap-box{
width: 90px;
height: 35px;
top: 5px;
right: 5px;
position: absolute;
img{
width: 100%;
height: 100%;
display: block;
border-radius:22.5px;
}
}
button{
width:60px;
height:40px;
top: 2.5px;
right: 20px;
position: absolute;
font-size:14px;
color:rgba(151,152,153,1);
line-height:40px;
background: none;
}
label{
margin-top: 2.5px;
font-size:14px;
font-weight:500;
color:rgba(255,246,202,1);
line-height:19px;
margin-bottom: 9px;
span{
font-weight:700;
display: block;
width: 112px;
height: 40px;
line-height: 40px;
color:rgba(55,56,57,1);
}
input{
margin-top: 2.5px;
font-size:14px;
width: 130px;
height: 40px;
line-height:40px;
background: none;
}
::-webkit-input-placeholder { /* WebKit, Blink, Edge */
color:rgba(199,200,201,1);
height: 40px;
line-height:40px;
}
.margin-top-20{
margin-top: 20px;
:-moz-placeholder { /* Mozilla Firefox 4 to 18 */
color:rgba(199,200,201,1);
height: 40px;
line-height:40px;
}
::-moz-placeholder { /* Mozilla Firefox 19+ */
color:rgba(199,200,201,1);
height: 40px;
line-height:40px;
}
:-ms-input-placeholder { /* Internet Explorer 10-11 */
color:rgba(199,200,201,1);
height: 40px;
line-height:40px;
}
}
.btn-post{
width: 315px;
height: 45px;
margin-top: 10px;
background:linear-gradient(270deg,rgba(255,88,36,1) 0%,rgba(254,163,86,1) 100%);
border-radius:22.5px;
font-size:15px;
font-weight:700;
color:rgba(255,255,255,1);
line-height:15px;
}
}
}
}
.wx-share-result{
width: 100%;
position: relative;
section{
width: 100%;
padding-top: 40px;
.res-wrap{
img{
width: 70px;
height: 60px;
display: block;
margin: 0 auto;
}
h1{
font-size:20px;
font-weight:700;
color:rgba(55,56,57,1);
line-height:20px;
margin: 20px 0;
text-align: center;
}
h3{
font-size:13px;
line-height:13px;
text-align: center;
margin-bottom: 30px;
color:rgba(151,152,153,1);
}
}
.btn-app{
width: 335px;
height: 40px;
line-height:40px;
border-radius:22.5px;
font-size:16px;
font-weight:700;
text-align: center;
margin: 0 auto;
}
.down-app{
background:linear-gradient(270deg,rgba(255,88,36,1) 0%,rgba(254,163,86,1) 100%);
color:rgba(255,255,255,1);
}
.has-app{
margin-top: 12px;
margin-bottom: 40px;
border:1px solid rgba(151,152,153,1);
color:rgba(103,104,105,1);
}
.line{
width: 100%;
height: 5px;
background:rgba(248,249,250,1);
}
.more-course{
padding: 30px 15px;
header{
font-size:18px;
font-weight:700;
color:rgba(51,51,51,1);
line-height:18px;
}
.course-list{
width: 345px;
.course-item{
width: 345px;
margin-top: 20px;
width:309.5px;
height:.5px;
background: #FFF6CA;
display: flex;
justify-content: space-between;
div{
h1{
font-size:16px;
font-weight:700;
color:rgba(55,56,57,1);
line-height:16px;
}
h3{
font-size:13px;
color:rgba(151,152,153,1);
line-height:13px;
}
}
.course-txt{
width: 240px;
border-bottom: .5px solid rgba(240,241,242,1);
h3{
margin-top: 12px;
}
.btn-rule{
width: 110px;
......@@ -136,6 +479,17 @@
}
}
}
.course-img{
width: 90px;
height: 60px;
img{
width: 90px;
height: 60px;
display: block;
}
}
}
}
}
.fix-btn{
width: 100%;
......@@ -168,7 +522,20 @@
height: 25px;
}
}
}
.padbtm50{
padding-bottom: 50px;
}
.mask-div{
width: 100%;
height: 100%;
background:rgba(0,0,0,0.8);
position: absolute;
left: 0;
top: 0;
img{
width: 340px;
height: 279px;
margin: 0 auto;
padding-left: 17.5px;
display: block;
}
}
}
\ No newline at end of file
@import './global.scss';
@import 'global.less';
$blue: #3190e8;
$bc: #e4e4e4;
$fc:#fff;
......
.remind-success{
.remind-success {
width: 300px;
border-radius: 3px;
.van-dialog__header{
font-size:18px;
color:rgba(51,51,51,1);
line-height:18px;
.van-dialog__header {
font-size: 18px;
color: rgba(51, 51, 51, 1);
line-height: 18px;
padding-top: 30px;
}
.van-dialog__content{
.van-dialog__message{
.van-dialog__content {
.van-dialog__message {
padding: 14px 24px 30px 24px;
text-align: left;
font-size:14px;
color:rgba(103,104,105,1);
line-height:21px;
span{
font-size:14px;
color:#449284;
line-height:21px;
font-size: 14px;
color: rgba(103, 104, 105, 1);
line-height: 21px;
span {
font-size: 14px;
color: #449284;
line-height: 21px;
}
}
}
.van-dialog__footer{
.van-dialog__cancel{
.van-button__text{
font-size:17px;
color:rgba(151,152,153,1);
line-height:24px;
.van-dialog__footer {
.van-dialog__cancel {
.van-button__text {
font-size: 17px;
color: rgba(151, 152, 153, 1);
line-height: 24px;
}
}
.van-dialog__confirm{
.van-button__text{
font-size:17px;
color:rgba(68,146,132,1);
line-height:24px;
.van-dialog__confirm {
.van-button__text {
font-size: 17px;
color: rgba(68, 146, 132, 1);
line-height: 24px;
}
}
}
}
.version-toast{
.version-toast {
width: 320px;
.van-dialog__header{
font-size:18px;
color:rgba(51,51,51,1);
line-height:18px;
.van-dialog__header {
font-size: 18px;
color: rgba(51, 51, 51, 1);
line-height: 18px;
padding-top: 30px;
}
.van-dialog__content{
.van-dialog__message{
font-size:14px;
color:rgba(103,104,105,1);
line-height:21px;
.van-dialog__content {
.van-dialog__message {
font-size: 14px;
color: rgba(103, 104, 105, 1);
line-height: 21px;
}
}
.van-dialog__footer{
border: .5px solid rgba(0,0,0,.3);
.van-dialog__cancel{
.van-button__text{
font-size:17px;
color:rgba(151,152,153,1);
line-height:24px;
.van-dialog__footer {
border: .5px solid rgba(0, 0, 0, .3);
.van-dialog__cancel {
.van-button__text {
font-size: 17px;
color: rgba(151, 152, 153, 1);
line-height: 24px;
}
}
.van-dialog__confirm{
.van-button__text{
font-size:17px;
color:rgba(68,146,132,1);
line-height:24px;
.van-dialog__confirm {
.van-button__text {
font-size: 17px;
color: rgba(68, 146, 132, 1);
line-height: 24px;
}
}
}
}
.wx-share-wrap {
.van-count-down {
line-height: 45px;
right: 20px;
position: absolute;
}
}
\ No newline at end of file
<template>
<section class="footer-btn-wrap">
<div class="footer-btn" :style="{height: `${50+homeIndicatorHeight}` + 'Px'}">
<div class="btn" @click="handlerMethod">{{btnText}}</div>
</div>
</section>
</template>
<script>
export default {
name: "footer-button",
props: {
btnText: {
type: String,
default: () => {
return '确定'
}
},
btnType: {
type: Boolean,
default: () => {
return true
}
}
},
methods: {
handlerMethod() {
if(this.btnType) {
this.$router.push('/activityPage')
} else {
this.$emit('sureBtn')
}
}
}
}
</script>
<style lang="less" scoped>
.footer-btn-wrap {
.footer-btn {
width: 100%;
min-height: 50Px;
box-shadow:0px -1px 0px 0px rgba(237,237,237,1);
position: fixed;
bottom: 0;
background: #fff;
.btn {
width: 345px;
height: 40Px;
margin: 5Px auto;
line-height: 40Px;
text-align: center;
background: linear-gradient(270deg,rgba(255,88,36,1) 0%,rgba(254,163,86,1) 100%);
border-radius: 20Px;
color: #FFFFFF;
font-weight: 700;
font-size: 15px;
}
}
}
</style>
\ No newline at end of file
......@@ -3,12 +3,14 @@ header{
position: fixed;
left: 0;
top: 0;
z-index: 100;
z-index: 300;
.status{
width: 100%;
}
.head-wrap{
width: 100%;
height: 44Px;
line-height: 44Px;
box-sizing: border-box;
padding: 0 20px 0 16px;
display: flex;
......
<template>
<header>
<div class="status" :class="{'bgfff': isScroll}" :style="{height: statusBarHeight + 'px', background: bgColor}"></div>
<div class="head-wrap" :class="{'bgfff': isScroll}" :style="{height: titleHeight + 'px'}">
<div class="status" :class="{'bgfff': isScroll}" :style="{height: statusBarHeight + 'Px', background: bgColor}"></div>
<!-- <div class="head-wrap" :class="{'bgfff': isScroll}" :style="{height: titleHeight + 'px'}"> -->
<div class="head-wrap" :class="{'bgfff': isScroll}">
<img @click="goBack" :src="leftIcon">
<span v-if="isScroll">{{title}}</span>
<img @click="goShare" :src="rightIcon">
......@@ -18,6 +19,10 @@
export default {
name: 'h5header',
props: {
isOpacity: { // 是否需要透明背景
type: Boolean,
default: true
},
scrollVal: { // 实际滚动的距离
type: Number,
default: 25
......@@ -42,7 +47,15 @@
setedScroll: { // 是否使用外部父组件的scroll事件
type: Boolean,
default: false
}
},
isCheckAuth: { // 是否校驗權限
type: Boolean,
default: false
},
isStageTwoHomePage: { // 是否是二期主页面
type: Boolean,
default: false
},
},
data(){
return {
......@@ -55,6 +68,7 @@
}
},
mounted(){
this.isScroll = !this.isOpacity;
this.setHeaderHeight();
if(!this.setedScroll){
this.scrollHandleOwn();
......@@ -63,35 +77,59 @@
watch: {
scrollVal(val){
this.setScrollHandle(val);
},
isScroll(val){
if(val){
this.leftIcon = leftimg2;
this.rightIcon = rightimg2;
}
}
},
methods: {
// 从APP获取电池栏高度并设置高度
setHeaderHeight(){
// this.statusBarHeight = 20 * window.devicePixelRatio; // 给一个默认值,20 * 2
// this.titleHeight = 44 * window.devicePixelRatio; // title高度默认是44px
this.$rocNative.getStatusBarHeight().then(res=>{
const dpr = window.devicePixelRatio;
if(this.$rocNative.isIOS){
this.statusBarHeight = res.statusBarHeight * dpr;
this.titleHeight = this.titleHeight * dpr;
// this.statusBarHeight = res.statusBarHeight * dpr;
// this.titleHeight = this.titleHeight * dpr;
this.statusBarHeight = res.statusBarHeight;
}else{
this.bgColor = '#ccc';
this.statusBarHeight = res.statusBarHeight / dpr;
}
this.$emit('getHeaderHeight', this.statusBarHeight + 44);
})
},
goBack(){
if(this.isStageTwoHomePage){
this.$sendBuriedData({
component_tag: `302#302002`
});
}else{
this.$sendBuriedData({
component_tag: `301#301002`
});
}
this.$rocNative.goBack();
},
goShare(){
if(this.isStageTwoHomePage){
this.$sendBuriedData({
component_tag: `302#302001`
});
}else{
this.$sendBuriedData({
component_tag: `301#301001`
});
}
if(this.isCheckAuth){
this.$emit('checkAuth', ()=>{
this.$rocNative.shareWechat(this.shareObj);
})
}else{
this.$rocNative.shareWechat(this.shareObj);
}
},
// 默认滚动事件
scrollHandleOwn(){
......@@ -103,13 +141,14 @@
if(document.documentElement){
documentScrollTop = document.documentElement.scrollTop;
}
const heightVal = imgHeight1 + imgHeight2 + imgHeight3;
// const heightVal = imgHeight1 + imgHeight2 + imgHeight3;
const scrollVal = bodyScrollTop || documentScrollTop;
this.setScrollHandle(scrollVal);
}
},
// 交互事件
setScrollHandle(instval){
if(this.isOpacity){
if (instval >= this.baseShowHeight) {
this.isScroll = true;
this.leftIcon = leftimg2;
......@@ -119,6 +158,11 @@
this.leftIcon = leftimg1;
this.rightIcon = rightimg1;
}
}else{
this.isScroll = true;
this.leftIcon = leftimg2;
this.rightIcon = rightimg2;
}
}
}
}
......
<template>
<section class="header-section" >
<div class="navBar" :style="{height: `${statusBarHeight}Px`,backgroundColor: statusBarColor}"></div>
<header class="header-container">
<img @click="goBack" src="~/assets/img/icon-back.png" alt="">
{{title}}
<div class="btn-right" v-if="rightText" @click="rightBtnClick">{{rightText}}</div>
</header>
</section>
</template>
<script>
export default {
name: "normal-header",
props: {
title: {
type: String,
default: function () {
return ''
}
},
rightText: {
type: String,
default: function () {
return ''
}
},
backType: {
type: Number,
default: function () {
return 1
}
},
},
data() {
return {}
},
methods: {
goBack() {
if (this.backType == 1) {
this.$router.go(-1)
} else if(this.backType == 2) {
this.$emit('selfGoBack')
}else {
this.$rocNative.goBack()
}
},
rightBtnClick() {
this.$emit('handleRightBtn')
}
}
}
</script>
<style lang="less" scoped>
.header-section {
width: 100%;
position: fixed;
top: 0;
z-index: 2;
.navBar {
background: #CCCCCC;
}
.header-container {
width: 100%;
height: 44Px;
background: #ffffff;
color: #333333;
font-size: 18px;
/*display: flex;
align-items: center;*/
line-height: 44Px;
text-align: center;
position: relative;
img {
display: block;
width: 25px;
height: 25px;
position: absolute;
left: 13px;
top: 9px
}
/* .title {
margin: 0 auto;
}*/
.btn-right {
position: absolute;
right: 14.5px;
bottom: 13px;
font-size: 13px;
line-height: 14px;
color: #373839;
}
}
}
</style>
\ No newline at end of file
<template>
<section class="header-section" >
<div class="navBar" :style="{height: `${statusBarHeight}Px`,backgroundColor: statusBarColor}"></div>
<header class="header-container">
<img @click="goBack" src="~/assets/img/icon-back.png" alt="">
<div class="head-btn">
<div
class="btn left"
:class="{'active-btn':activeBtnType}"
@click="headBtnClick(true)">
{{headBtn.leftName}}
</div>
<div class="line"></div>
<div
class="btn right"
:class="{'active-btn':!activeBtnType}"
@click="headBtnClick(false)">
{{headBtn.rightName}}
</div>
</div>
<div class="right-btn" v-if="rightBtn" @click="rightBtnClick">{{rightBtn}}</div>
</header>
</section>
</template>
<script>
export default {
name: "normal-header",
props: {
title: {
type: String,
default: function () {
return ''
}
},
rightBtn: {
type: String,
default: function () {
return ''
}
},
backType: {
type: Number,
default: function () {
return 1
}
},
headBtn: {
type: Object,
default: function () {
return {
leftName: '',
rightName: ''
}
}
},
activeBtnType: {
type: Boolean,
default: function () {
return true
}
}
},
data() {
return {}
},
methods: {
goBack() {
if (this.backType == 1) {
this.$router.go(-1)
} else if(this.backType == 2) {
this.$emit('selfGoBack')
}else {
this.$rocNative.goBack()
}
},
headBtnClick(val) {
this.$emit('handleBtn', val)
},
rightBtnClick() {
this.$emit('handleRightBtn')
}
}
}
</script>
<style lang="less" scoped>
.header-section {
width: 100%;
position: fixed;
top: 0;
z-index: 2;
.navBar {
background: #CCCCCC;
}
.header-container {
width: 100%;
height: 44Px;
background: #ffffff;
color: #333333;
font-size: 18px;
display: flex;
align-items: center;
line-height: 44Px;
position: relative;
img {
width: 25px;
height: 25px;
position: absolute;
left: 13px;
top: 10px;
}
.head-btn {
width: 193px;
height: 30px;
display: flex;
margin: 0 auto;
.btn {
padding: 0 15px;
font-size: 13px;
font-weight: 700;
height: 30px;
text-align: center;
line-height: 31px;
color: #373839;
position: relative;
}
.btn:after {
position: absolute;
content: " ";
top: 0;
left: 0;
bottom: 0;
right: 0;
width: 200%;
height:200%;
border: 1PX solid #C7C8C9;
//border-radius: 40px;
color: #C7C8C9;
-webkit-transform-origin: 0 0;
transform-origin: 0 0;
-webkit-transform: scale(.5, .5);
transform: scale(.5, .5);
}
.left {
border-bottom-left-radius: 15px;
border-top-left-radius: 15px;
}
.right {
border-bottom-right-radius: 15px;
border-top-right-radius: 15px;
}
.left:after {
border-bottom-left-radius: 40px;
border-top-left-radius: 40px;
border-right: none;
}
.right:after{
border-bottom-right-radius: 40px;
border-top-right-radius: 40px;
border-left: none;
}
.active-btn {
background: #F8F9FA;
}
.line {
width: 0.5px;
height: 31px;
background: #C7C8C9;
}
}
.right-btn {
color: #373839;
font-size: 13px;
position: absolute;
right: 14.5px;
}
}
}
</style>
\ No newline at end of file
......@@ -43,7 +43,7 @@ export default {
</script>
<style lang="scss" scoped>
@import '../assets/style/mixin.scss';
@import '../assets/style/mixin.less';
.top-title-new{
//height:px2rem(45px);
line-height:px2rem(25px);
......
export const wxShare = {
shareUrl: '',
title1: '您的好友邀请您领取医学课程',
title2: '参与云鹊奖活动,领取免费课程,赢取iphone11等丰厚奖品',
shareImageUrl: 'https://file.yunqueyi.com/h5/nzhd19/share2.png'
}
\ No newline at end of file
......@@ -53,6 +53,14 @@ module.exports = {
src: '~/plugins/vueComponent',
ssr: false
},
{
src: '~plugins/vue-infinite-scroll',
ssr: false
},
{
src: '~plugins/mixins',
ssr: false
}
],
/*
** Nuxt.js modules
......
因为 它太大了无法显示 源差异 。您可以改为 查看blob
<template>
<div class="in-activity-wrap">
<div :style="{width: '100%',height: padTop + 'px', background: '#fff'}"></div>
<h5header
v-if="!isWeb"
title="云鹊奖2019"
:isOpacity="false"
:shareObj="shareObj"
:isCheckAuth="true"
:isStageTwoHomePage="true"
@checkAuth="handleLoginCheck"
@getHeaderHeight="getHeaderHeight"
/>
<!-- 顶部的四个阶段 进度条 -->
<ul class="top-process-bar">
<li v-for="(item, index) in stageDateList" :class="returnStageClass(item, index)" :key="index">
<p class="title">{{ item.title }}</p>
<p class="date">{{ item.date }}</p>
</li>
</ul>
<div class="award-wrap">
<div class="stage-rule">
<img class="stage-text" :src="returnStageText()" alt="">
<img class="rule-btn" src="../assets/img/stage-two/rule-btn.png" alt="" @click="handleRuleBtnClick">
</div>
<img class="reward-pic" :src="returnAwardPic()" alt="">
</div>
<!-- 邀请医生好友学课程 -->
<div class="invite-doctor-wrap">
<img class="top-head-icon" src="../assets/img/stage-two/invite-doctor-top.png" alt="">
<p class="invite-tips">每邀请1位医生好友领取课程,+{{ eachInviteAward.mark }}勤奋分 +{{ eachInviteAward.bean }}云鹊豆</p>
<div class="invite-list-wrap">
<ul class="invite-list">
<template v-if="!isLogin || !isJoin">
<li>
<div class="add-btn" @click="eachDoctorClick">
<img src="../assets/img/stage-two/add-pic-icon.png" alt="">
<p class="text">昵称</p>
</div>
</li>
<li>
<div class="add-btn" @click="eachDoctorClick">
<img src="../assets/img/stage-two/add-pic-icon.png" alt="">
<p class="text">昵称</p>
</div>
</li>
<li>
<div class="add-btn" @click="eachDoctorClick">
<img src="../assets/img/stage-two/add-pic-icon.png" alt="">
<p class="text">昵称</p>
</div>
</li>
<li>
<div class="add-btn" @click="eachDoctorClick">
<img src="../assets/img/stage-two/add-pic-icon.png" alt="">
<p class="text">昵称</p>
</div>
</li>
</template>
<template v-if="isLogin && isJoin">
<!-- 已邀请的 -->
<li v-for="(item, index) in inviteList" :key="index">
<img @click="eachDoctorClick" v-if="item.avatarImageUrl" class="doctor-icon" :src="item.avatarImageUrl" alt="">
<img @click="eachDoctorClick" v-else class="doctor-icon" src="../assets/img/stage-two/default-doctor-icon.png" alt="">
<p class="text">{{ returnInviteName(item) }}</p>
</li>
<!-- 未邀请的 -->
<template v-if="inviteList && inviteList.length < 4">
<li v-for="(item, index) in notInviteShowList" :key="index">
<div class="add-btn" @click="eachDoctorClick">
<img src="../assets/img/stage-two/add-pic-icon.png" alt="">
<p class="text">昵称</p>
</div>
</li>
</template>
</template>
<!-- 查看更多 -->
<li>
<div @click="eachDoctorClick(1)" class="add-btn">
<img class="right-icon-big" src="../assets/img/stage-two/right-icon-big.png" alt="">
</div>
<p class="text see-more">查看更多</p>
</li>
</ul>
</div>
<div class="invite-btn">
<img src="../assets/img/stage-two/invite-btn.png" alt="" class="invite-btn">
<p @click="handleInviteClick" class="text">去邀请</p>
</div>
<div class="login-tips">被邀请好友登录APP,收益X9倍</div>
</div>
<!-- 每日任务 -->
<div class="daily-task">
<div class="top-center-bar">每日任务</div>
<ul class="task-list">
<!-- taskList -->
<li v-for="(item, index) in taskList" :key="index">
<img class="left-icon" :src="returnEachTaskIcon(item)" alt="">
<div class="center-wrap">
<p class="title">{{ item.ruleName }}</p>
<p class="detail-text">{{returnUnderAwardTips(item)}}</p>
</div>
<div @click="goToFinish(item)" :class="returnEachTaskStatus(item)">{{ returnIconText(item) }}</div>
</li>
</ul>
</div>
<!-- 未登录 -->
<div v-if="!isLogin" class="not-login-wrap">
<img class="head-icon" src="../assets/img/stage-two/default-login-icon.png" alt="">
<div class="content-info">
<p class="not-login-text">您还未登录</p>
<p class="tips">登录并加入机构参加活动</p>
</div>
<div class="go-login login-but-no-join" @click="goToLogin">去登录<img src="../assets/img/stage-two/right-icon-small.png" alt=""></div>
</div>
<!-- 已登录,但没有加入机构 -->
<div v-if="isLogin && !isJoin" class="not-login-wrap ">
<img class="head-icon" v-if="doctorInfo.avatarImageUrl" :src="doctorInfo.avatarImageUrl" alt="">
<img class="head-icon" v-else src="../assets/img/stage-two/default-login-icon.png" alt="">
<div class="content-info">
<p class="not-login-text">{{ doctorInfo.name }}</p>
<p class="tips">尚未加入一个机构</p>
</div>
<div class="go-login login-but-nojoin" @click="goToJoin">加入机构<img src="../assets/img/stage-two/right-icon-small.png" alt=""></div>
</div>
<!-- 已登录 且 已加入机构 -->
<div v-if="isLogin && isJoin" class="user-info-wrap">
<div class="basic-info">
<div class="head-icon">
<img v-if="doctorInfo.avatarImageUrl" :src="doctorInfo.avatarImageUrl" alt="">
<img v-else src="../assets/img/stage-two/default-login-icon.png" alt="">
</div>
<div class="name-info">
<p class="name">{{ doctorInfo.name }}</p>
<p class="company">{{ doctorInfo.hospital }}</p>
</div>
<div @click="goToUserDetail" class="detail">个人明细<img src="../assets/img/stage-two/right-icon-small.png" alt=""></div>
</div>
<ul class="billboard-wrap">
<li>
<p class="title">个人今日勤奋分</p>
<p class="score">{{doctorInfo.userDayScore}}</p>
<p class="rank"><img src="../assets/img/stage-two/billboard-flag.png" alt="">今日排名{{doctorInfo.userDayRank ? doctorInfo.userDayRank : '-'}}</p>
<div @click="goToUserBoard" class="billboard-btn">查看个人榜单<img src="../assets/img/stage-two/right-icon-small.png" alt=""></div>
</li>
<li class="organ">
<p class="title">机构累计勤奋分</p>
<p class="score">{{doctorInfo.hospitalScore}}</p>
<p class="rank"><img src="../assets/img/stage-two/billboard-flag.png" alt="">累计排名{{doctorInfo.hospitalRank ? doctorInfo.hospitalRank : '-'}}</p>
<div @click="goToOrganBoard" class="billboard-btn">查看机构榜单<img src="../assets/img/stage-two/right-icon-small.png" alt=""></div>
</li>
</ul>
<p class="score-tips">{{ scoreAwardTips }}</p>
<div class="bean-wrap">
<p class="personal-total-get">累计个人获得:<span>{{doctorInfo.userTotalBonus}}云鹊豆</span></p>
<div @click="goToBeanCenter" class="bean-center">云鹊豆中心<img src="../assets/img/stage-two/right-icon-small.png" alt=""></div>
</div>
<p class="bean-tips">机构勤奋分达成目标,全员可获云鹊豆</p>
<div class="bean-stage">
<img :src="returnBeanImg" alt="">
<ul class="score-list">
<li v-for="(item, index) in doctorInfo.hospitalLevelScore" :key="index">达{{item}}分</li>
<li>12月30日</li>
</ul>
</div>
</div>
<!-- 底部云鹊logo -->
<div class="bottom-logo"></div>
<!-- 打卡成功 弹窗 -->
<div v-if="clockSuccessVisible" class="toast-wrap" @touchmove.prevent>
<div class="full-screen-mask"></div>
<div class="content-wrap">
<img class="back-image" src="../assets/img/stage-two/clock-success-bg.png" alt="">
<p class="title">打卡成功</p>
<p class="message">已获得: <span>{{clockAward.mark}}</span>勤奋分, <span>{{clockAward.bean}}</span>云鹊豆</p>
<div @click="hideClockModal" class="bottom-btn">我知道了</div>
</div>
</div>
<!-- 获奖弹窗 -->
<div v-if="awardModalShow" class="toast-wrap" @touchmove.prevent>
<div class="full-screen-mask"></div>
<div class="content-wrap">
<img class="back-image" src="../assets/img/stage-two/win-award-bg.png" alt="">
<p class="title" style="color: #EC592B;">昨日个人排名获奖啦!</p>
<p class="message">恭喜您获得了{{yestodayAwards}}</p>
<div @click="goQuest" class="bottom-btn">领奖</div>
<div class="close-btn" @click="awardModalShow=false"></div>
</div>
</div>
<!-- 活动结束 弹窗-->
<div v-if="!awardModalShow && activityEndVisible" class="toast-wrap" @touchmove.prevent>
<div class="full-screen-mask"></div>
<div class="content-wrap activity-end">
<p class="content-text">本次活动已结束,感谢您的参与,最终获奖排名将于12月30日10点公布,届时查看</p>
<ul class="btn-list">
<li @click="goBack">我知道了</li>
<li @click="goToYesterdayPrize" class="high-light">查看昨日获奖</li>
</ul>
</div>
</div>
</div>
</template>
<script>
import { getActivityId, getBEServerTime, getUserScoreInfo, getInviteList, getClockStatus, goToUpdateClock, getTimsActivityInfo, selectAppModuleParam, checkToken, getRole, sayHello, getEncryptId } from '@/service/activityMainpage';
import { checkHospitalStatus } from '@/service';
import h5header from '@/components/h5header';
import { getShareUrl } from '@/utils/index';
import { Toast } from 'vant';
import { setEventByModuleCode, getFirstAwards } from '@/utils';
import { ENV_CONFIG } from '@/utils/enumerate';
import { wxShare } from '@/configs/wxShare';
const cookies = require('cookie-universal')();
import { Base64 } from 'js-base64';
import { setCookie, getCookie, delCookie } from '@/utils/cookieFun';
let vm = null;
export default {
data () {
return {
canClick: true, // 课程、smo防止连续点击
canClockClick: true, // 打卡防止多次点击
hospital: '', // 加入机构审核中 显示的机构名称
awardModalShow: false, // 根据排名是否显示中奖弹窗
showAwadModal: true, // 根据活动时间是否展示中奖弹层以及查看昨日榜单逻辑
yestodayAwards: '', // 昨日可获得
token: '',
activityId: '', // 上线前等产品通知修改默认值
scoreAwardTips: '',
encryptId: '', // 加密后的id,(分享传参用)
serverTime: '',
isLogin: false, // 是否 已登录
isJoin: false, // 是否 已加入机构 默认为false
joinStatus: 3, // 1-已加入机构 2-机构在审核中状态 3-未加入机构
currentStage: 0, // 当前处于第几阶段 0表示不在四个阶段里,1-4表示对应阶段,取图片地址用
stageDateList: [
{ date: '12月16至19日', beginDate: '2019/12/16 00:00:00', endDate: '2019/12/19 23:59:59', title: '高血压学习', award: '小米电视' },
{ date: '12月20至23日', beginDate: '2019/12/20 00:00:00', endDate: '2019/12/23 23:59:59', title: '糖尿病学习', award: '米家洗衣机' },
{ date: '12月24至26日', beginDate: '2019/12/24 00:00:00', endDate: '2019/12/26 23:59:59', title: '中医学习', award: '米家两门冰箱' },
{ date: '12月27至29日', beginDate: '2019/12/27 00:00:00', endDate: '2019/12/29 23:59:59', title: '全科学习', award: '荣耀手机' },
],
awardList: {
No1: '',
No3: '欧姆龙血压计',
No10: '欧姆龙体温计',
},
appUserInfo: {
userName: '',
userMobile: '',
doctorId: '',
userToken: '',
},
eachInviteAward: { // 每邀请1位医生好友领取课程,+??勤奋分 +??云鹊豆 (默认均为20)
mark: 10, // 勤奋分
bean: 10, // 云鹊豆
taskId: '',
activityId: '',
},
doctorInfo: {
name: '', // 接口返回用户名字或者手机号带遮掩
hospital: '', // 机构名称
avatarImageUrl: '', // 头像URL
userDayScore: '', // 用户当日勤奋分
userDayRank: '', // 用户当日排名
hospitalScore: '', // 机构累计勤奋分
hospitalRank: '', // 机构累计排名
userTotalBonus: '', // 个人累计获得云鹊豆
hospitalLevelScore: [], // 三阶段达标分值, 数组返回
targetRequiredScore: '', // 再获得多少分 // 再获得10勤奋分即可上升到前10名获得欧姆龙温度计
targetRank: '', // 上升到多少名
todayDate: 0, // 今日服务器时间(用来展示对应奖项)
yesterdayDate: 0, // 昨日服务器时间(用来展示对应奖项)
userYesterdayRank: 0, // 用戶昨日排名
},
clockSuccessVisible: false, // 是否显示 打卡成功 弹窗
activityEndVisible: false, // 是否显示 活动结束 弹窗
yesterdayWinVisible: false,
inviteList: [], // 已邀请的用户列表
notInviteShowList: [], // 未邀请的默认显示
taskList: [], // 打卡、课程、SMO
taskObj: {
clock: null, // 打卡
lesson: null, // 课程
smo: null, // 患者招募
},
isClockFinish: false, // 是否打卡
clockAward: { // 打卡的奖励 默认都是5
mark: 5,
bean: 5,
activityId: '',
id: '',
},
isWeb: false,
shareObj: wxShare,
padTop: 0
}
},
components: {
h5header,
},
computed: {
returnBeanImg() {
let hospitalScore = vm.doctorInfo.hospitalScore;
let arr = vm.doctorInfo.hospitalLevelScore;
if(arr && arr.length < 1){
return;
}
if( hospitalScore < arr[0]){
return require(`../assets/img/stage-two/bean-stage-0.png`);
}else if( (arr[0] <= hospitalScore) && (hospitalScore < arr[1]) ){
return require(`../assets/img/stage-two/bean-stage-1.png`);
}else if( (arr[1] <= hospitalScore) && (hospitalScore < arr[2]) ){
return require(`../assets/img/stage-two/bean-stage-2.png`);
}else if( arr[2] <= hospitalScore ){
return require(`../assets/img/stage-two/bean-stage-3.png`);
}else{
return require(`../assets/img/stage-two/bean-stage-0.png`);
}
},
},
created() {
vm = this;
},
mounted() {
vm.isWeb = vm.$rocNative.isWeb;
// 取服务器时间,切换不同时间段的显示
vm.getServerTime();
// 请求接口获取activityId (经与后端产品确认,默认没传id的话,就取接口;默认有的话就不取接口)
vm.handleGetActivityId();
// vm.returnScoreAwardTips(); //返回 个人信息模块下面的提示文案
vm.$rocNative.appInit();
vm.getUserInfo(); // 判断是否登录
if (process.client) {
window.__refresh = function(params) {
vm.getUserInfo(); // 判断是否登录
}
}
},
methods: {
// 获取服务器时间
getServerTime(cb) {
// 调取接口获取服务器时间
getBEServerTime().then(res => {
// alert('服务器时间');
// alert(JSON.stringify(res))
if(res && res.code == '000000' ){
vm.serverTime = res.data;
}else{
vm.serverTime = new Date().getTime();
}
cb && cb(vm.serverTime);
})
},
hideClockModal() {
vm.clockSuccessVisible = false;
},
returnInviteName(item) {
if( item.doctorName ){
if(item.doctorName.length >= 11){
return item.mobile;
}else{
return item.doctorName;
}
}else{
return item.mobile;
}
},
returnScoreAwardTips() {
let award = '';
if( vm.doctorInfo ) {
// 16号之前或者30号之后 提示:不在活动期间内
let msecSixteen = new Date('2019/12/16 00:00:00').getTime();
let msecThirty = new Date('2019/12/29 23:59:59').getTime();
let notInActivityTips = (msec) => {
if( msec < msecSixteen || msec > msecThirty ){
// alert('不在活动期间内')
vm.scoreAwardTips = '不在活动期间内';
}else{
// alert('在活动期间内')
vm.scoreAwardTips = '';
let userDayRank = vm.doctorInfo.userDayRank;
if( userDayRank == 0 ){
vm.scoreAwardTips = `再获${vm.doctorInfo.targetRequiredScore}分即可上升到第${vm.doctorInfo.targetRank}名并可获得${vm.awardList.No10}`;
}else if( userDayRank == 1 ){
vm.scoreAwardTips = `今日保持第1名,即可获得${vm.awardList.No1}`;
}else{
if( userDayRank > 1 && userDayRank < 4 ){ // 2-3 提示 再获得X勤奋分即可上升到前Y名获得 第1名奖品
award = vm.awardList.No1;
}else if( userDayRank > 3 && userDayRank < 11 ){ // 4-10 提示 再获得X勤奋分即可上升到前Y名获得 第3名奖品
award = vm.awardList.No3;
}else if( userDayRank > 10 ){ // 10名以后 提示:再获得X勤奋分即可上升到前Y名获得 第10名奖品
award = vm.awardList.No10;
}
vm.scoreAwardTips = `再获${vm.doctorInfo.targetRequiredScore}分即可上升到第${vm.doctorInfo.targetRank}名并可获得${award}`
}
}
}
vm.getServerTime(notInActivityTips)
}
},
handleGetActivityId(cb){
if( !vm.activityId ){
getActivityId().then(res => {
if(res && res.code == '000000' ){
let data = res.data ;
for(let i in data){
if(data[i] == 'ID'){
vm.activityId = i;
}
}
cb && cb();
}
})
}
},
goQuest(){
// window.location.href = 'https://wj.qq.com/s2/5112128/18be/';
// let url = 'https://wj.qq.com/s2/5112128/18be/';
let url = 'https://www.wenjuan.com/s/BVVnueb/';
let paramList = [
{
"key":"pageUrl",
"value": url,
"type":4,
"seqNo":1
},{
"key":"showTitle",
"value": true,
"type":1,
"seqNo":2
},{
"key":"title",
"value": '',
"type":1,
"seqNo":3
}
]
vm.$rocNative.dispatchEventByModuleCode && vm.$rocNative.dispatchEventByModuleCode({
modeCode: 'M300',
jsonString: paramList
})
},
returnStageText() {
if(vm.currentStage == 0){
return require(`../assets/img/stage-two/stage-01-text.png`);
}else{
return require(`../assets/img/stage-two/stage-0${vm.currentStage}-text.png`);
}
},
returnAwardPic() {
if(vm.currentStage == 0){
return require(`../assets/img/stage-two/award-01-pic.png`)
}else{
return require(`../assets/img/stage-two/award-0${vm.currentStage}-pic.png`)
}
},
returnStageClass(item, index){ // 返回顶部四个时间进度条状态
// debugger;
// 获取当前服务器时间 获取失败则用本地时间 ***************************************************
let currentTime = vm.serverTime || new Date().getTime();
let beginTime = new Date(item.beginDate).getTime();
let endTime = new Date(item.endDate).getTime();
let status = '';
if( currentTime < beginTime ){ // 未开始
status = '';
}else if( (currentTime == beginTime) || (beginTime < currentTime && currentTime < endTime) || (currentTime == endTime) ){ // 活动中
status = 'active';
vm.awardList.No1 = item.award; // 根据时间段来设置第1名奖品
vm.currentStage = index + 1; // 决定显示第几张图片
}else{ // 已结束
status = 'over';
};
return status;
},
// 判断用户是否登录?
getUserInfo() {
// cookies.remove('token'); // 部分手机这个cookie会存两次,所以先移除
delCookie('token');
vm.$rocNative
.getUserInfo()
.then(params => {
// _seft.userToken = params.userToken; // 存到store里
if(params && params.userToken){
setCookie('token', params.userToken);
vm.token = params.userToken;
}
// alert(JSON.stringify(params));
if(params && params.userMobile){ // 已登录 (有手机号表示 已登录,无手机号表示 未登录)
vm.isLogin = true;
vm.appUserInfo = params;
vm.loginCallback();
}else{ // 未登录
vm.isLogin = false;
}
// 登录状态确定后,再调任务接口,以便获取打卡状态
if(vm.activityId){
vm.getTasks();
}else{
vm.handleGetActivityId(vm.getTasks);
}
});
},
// 调用APP登录弹窗
appLogin() {
vm.$rocNative.gotoLogin();
},
// 登陆ok后 回调: 获取邀请的医生列表 & 检查是否加入机构
loginCallback() {
vm.getUserActivityInfo();
vm.goToCheckJoin();
getEncryptId().then(res => {
if( res && res.code && res.code == '000000' ){
vm.encryptId = res.data;
}else{
vm.$toast(res.message);
}
})
},
getUserActivityInfo() { // 获取用户及参加活动的具体信息
getUserScoreInfo().then(res => {
if(res && res.code && res.code == '000000'){
vm.doctorInfo = res.data;
vm.returnScoreAwardTips();
// alert('getUserScoreInfo'); alert(JSON.stringify(res));
// 添加当天弹出一次后,就不再弹出 "昨日弹窗"
let isYesterdayRankShow = getCookie('isYesterdayRankShow');
// alert(isYesterdayRankShow); alert(res.data.nowToTodayEndMillis)
if( isYesterdayRankShow ){
return;
}
if(vm.doctorInfo.userYesterdayRank==1){
vm.awardModalShow = true;
vm.yestodayAwards = getFirstAwards(vm.doctorInfo.yesterdayDate) + '*1台';
}else if(vm.doctorInfo.userYesterdayRank>=2 && vm.doctorInfo.userYesterdayRank<=3){
vm.awardModalShow = true;
vm.yestodayAwards = vm.awardList.No3 + '*1支';
}else if(vm.doctorInfo.userYesterdayRank>=4 && vm.doctorInfo.userYesterdayRank<=10){
vm.awardModalShow = true;
vm.yestodayAwards = vm.awardList.No10 + '*1支';
}else{
vm.awardModalShow = false;
}
if(vm.awardModalShow){
if(res.data && res.data.nowToTodayEndMillis){
setCookie('isYesterdayRankShow', 1, 7, '.yunqueyi.com', res.data.nowToTodayEndMillis);
}
}
}else{
vm.$toast(res.message);
}
});
},
goToCheckJoin() { // 检查是否加入结构
checkHospitalStatus(vm.appUserInfo.userToken).then(res => {
// alert('检查是否加入结构')
// alert(JSON.stringify(res))
if(res && res.code == '000000' ){
const status = res.data.status;
// const status = 15; // test。。。。。。。。。。。。。。。。。
if (status && status == 1) { // 机构状态正常
vm.isJoin = true;
vm.joinStatus = 1;
// *******************************************
vm.handleGetInviteList(); //登录且已加入机构才获取医生邀请了的列表
}else if (status && status == 15) { // 15创建机构审核中
vm.hospital = '默认机构名称';
if (res.data && res.data.hospital) {
vm.hospital = res.data.hospital
}
vm.isJoin = false;
vm.joinStatus = 2;
}else { // 除了1,15 都是未加入机构
vm.isJoin = false;
vm.joinStatus = 3;
}
}else{
vm.$toast(res.message);
}
});
},
handleGetInviteList() {
getInviteList().then(res => {
// alert(JSON.stringify('获取邀请的列表 OK'));
// alert(JSON.stringify(res));
if(res && res.code == '000000'){
if(res.data && res.data.list){
vm.inviteList = res.data.list;
vm.notInviteShowList = [];
if( vm.inviteList.length > 4 || vm.inviteList.length == 4 ){
vm.inviteList.length = 4;
}else{
let notInviteLength = 4 - vm.inviteList.length;
for(let i=0; i<notInviteLength; i++){
vm.notInviteShowList.push({
notInvite: true
})
}
}
}else{
vm.inviteList = [];
}
}else{
vm.$toast(res.message);
}
})
},
// 活动规则
handleRuleBtnClick() {
vm.$sendBuriedData({
component_tag: `302#302003`
});
let url = 'https://phome.yunqueyi.com/template_v2/?id=599&token=9D4E3E66DC214776A523752AC26D4329&wx_code=7519926147';
// alert(url)
let paramList = [
{
"key":"pageUrl",
"value": url,
"type":4,
"seqNo":1
},{
"key":"showTitle",
"value": false,
"type":1,
"seqNo":2
},{
"key":"title",
"value": '',
"type":1,
"seqNo":3
}
]
vm.$rocNative.dispatchEventByModuleCode && vm.$rocNative.dispatchEventByModuleCode({
modeCode: 'M300',
jsonString: paramList
})
},
// 去登录
goToLogin() {
vm.appLogin();
},
// 去加入机构
goToJoin() {
// 用户点击【加入机构】,继续判断用户是否有创建机构在审核状态,若有,则弹出弹窗提示。若无则跳转加入机构页面
if( vm.joinStatus == 2 ){ // 机构审核中
this.$dialog.confirm({
title: '提醒',
message: `抱歉,您创建的机构【${vm.hospital}】正在审核中,审核通过后可参与活动<br/><br/>如有疑问可联系客:<span>400-920-8877</span><br/>(周一至周五9:00-18:00)`,
confirmButtonText: '查看进度',
cancelButtonText: '我知道了',
className: 'remind-success',
}).then(() => {
this.checkVersion(()=>{
if (this.$rocNative.isAndroid) {
this.$rocNative.setNeedClearUrl({ url: 'year_end_ssr' });
}
this.$rocNative.gotoInstitutionalReview({ url: window.location.href });
});
});
}else if( vm.joinStatus == 3 ){ // 未加入机构
this.checkVersion(()=>{
if (this.$rocNative.isAndroid) {
this.$rocNative.setNeedClearUrl({ url: 'year_end_ssr' });
}
this.$rocNative.gotoActivityHospital({ url: window.location.href });
})
}
},
checkVersion(callback){
this.$rocNative.getAppVersionCode().then(res => {
const appVersion = parseFloat(res.versionCode.replace(/\./g, ''));
if(appVersion>=317){
callback();
}else{
this.$dialog.alert({
message: '当前app版本过低,请升级版本后继续操作',
className: 'version-toast'
});
}
});
},
handleLoginCheck(cb, taskItem) { // taskItem: 只有是打卡、课程、SMO任务时才传
vm.shareObj.shareUrl = vm.shareWxUrl();
if( !this.isLogin ){ // 未登录 >>> 去登录
this.goToLogin();
}else if( this.isLogin && !this.isJoin ){ // 已登录 && 未加入机构 >>>> 去加入机构 ; 已完成情况不触发
if( taskItem && taskItem.resourceType == 6 ){ // 打卡
if( vm.isClockFinish ){ // 已打卡,不执行
return;
}
}else{ // 去课程或者患者招募
if(taskItem && taskItem.isFinish == 1){ // 已完成 不可点
return;
}
}
this.goToJoin();
}else if( this.isLogin && this.isJoin ){ // 已登录 && 已加入机构
cb && cb();
}
},
// 跳转至 个人明细
goToUserDetail() {
vm.$sendBuriedData({
component_tag: `302#302004`
});
this.$router.push({
name: 'person-detail',
query: {
activityId: vm.activityId
}
});
},
// 查看个人榜单
goToUserBoard() {
vm.$sendBuriedData({
component_tag: `302#302005`
});
this.$router.push({
name: 'person-ranking',
});
},
// 查看机构榜单
goToOrganBoard() {
vm.$sendBuriedData({
component_tag: `302#302006`
});
this.$router.push({
name: 'hospital-ranking',
});
},
goBack(){
this.$rocNative.goBack();
},
// 昨日获奖
goToYesterdayPrize() {
if(!this.showAwadModal){
return;
}else{
this.$router.push({
name: 'yesterday-prize',
});
}
},
// 云鹊豆中心
goToBeanCenter() {
vm.$sendBuriedData({
component_tag: `302#302007`
});
let url = getShareUrl() + 'integral/#/chirpCenter';
// alert(url)
let paramList = [
{
"key":"pageUrl",
"value": url,
"type":4,
"seqNo":1
},{
"key":"showTitle",
"value": false,
"type":1,
"seqNo":2
},{
"key":"title",
"value": '',
"type":1,
"seqNo":3
}
]
vm.$rocNative.dispatchEventByModuleCode && vm.$rocNative.dispatchEventByModuleCode({
modeCode: 'M300',
jsonString: paramList
})
},
// “邀请医生好友学课程” 列表中的每一个医生点击事件 跳转至邀请详情页
eachDoctorClick(isSeeMore) {
if(isSeeMore && isSeeMore == 1){
vm.$sendBuriedData({
component_tag: `302#302009`
});
}
let cb = this.goToDoctorPage;
this.handleLoginCheck(cb);
},
// 跳转至邀请详情页
goToDoctorPage() { //“被邀请的用户模块“点击逻辑,点击用户头像、“+“或者查看更多,都跳转至邀请详情页
// alert('跳转至邀请详情页')
// alert(vm.encryptId+'-'+vm.eachInviteAward.taskId+'-'+vm.eachInviteAward.activityId)
this.$router.push({
name: 'invite-details',
query: {
encryptId: vm.encryptId,
taskId: vm.eachInviteAward.taskId,
activityId: vm.eachInviteAward.activityId
}
});
},
shareWxUrl() {
let obj = {
encryptId: vm.encryptId,
taskId: vm.eachInviteAward.taskId,
activityId: vm.eachInviteAward.activityId
};
// alert(JSON.stringify(obj))
const paramstr = Base64.encode(`id=${vm.encryptId}&taskId=${vm.eachInviteAward.taskId}&activityId=${vm.eachInviteAward.activityId}&`)
return `${getShareUrl()}year_end_ssr/shareActive?${paramstr}`
// return `${getShareUrl()}year_end_ssr/shareActive?id=${vm.encryptId}&taskId=${vm.eachInviteAward.taskId}&activityId=${vm.eachInviteAward.activityId}`
},
// 去邀请 按钮
handleInviteClick() {
vm.$sendBuriedData({
component_tag: `302#302008`
});
vm.shareObj.shareUrl = vm.shareWxUrl();
let cb = this.goToShare;
this.handleLoginCheck(cb);
},
goToShare() {
// 调用APP分享
this.$rocNative.shareWechat(this.shareObj);
},
// 去完成任务 按钮
goToFinish(item) {
let cb = () => {
vm.goToFinishCB(item);
};
this.handleLoginCheck(cb, item);
},
goToFinishCB(item) {
// resourceType 业务类型 1.课程 2.考试 3.调查问卷 4.患者招募 5.宣教漫画 6.打卡 7.邀请
if( item.resourceType == 6 ){
// 执行打卡接口
if( vm.isClockFinish ){ // 已打卡,不执行,未打卡,去调用打卡接口
// 已打卡,不处理
}else{ // 未打卡,去打卡
if(vm.canClockClick){
vm.$sendBuriedData({
component_tag: `302#302010`
});
let params = {
activityId: item.activityId,
taskId: item.id,
};
setTimeout(() => {
if(!vm.clockSuccessVisible){
vm.$toast({
duration: 3000, // 持续展示 toast
forbidClick: true,
message: '网络错误,请检查网络'
});
}
}, 15000)
goToUpdateClock(params).then(res => {
if(res && res.code == '000000'){
if(res.data){ // 打卡成功
vm.clockSuccessVisible = true;
vm.isClockFinish = true;
}else{
vm.$toast(res.message);
}
}else{
vm.$toast('打卡发生错误,请重新进入活动,再次尝试打卡');
}
})
vm.canClockClick = false;
}
setTimeout(() => {
vm.canClockClick = true;
}, 2000)
}
}else{ // 非打卡,直接走积木tims跳转逻辑
// alert('去课程或者患者招募 。。。。。。')
if(item.isFinish == 1){ // 已完成 不可点
return;
}else{
if(vm.canClick){
if(item.resourceType == 1){ // 课程
vm.$sendBuriedData({
component_tag: `302#302011`
});
}else if(item.resourceType == 4){ // SMO
vm.$sendBuriedData({
component_tag: `302#302012`
});
}
vm.jumpPage(item.linkId);
vm.canClick = false;
}
setTimeout(() => {
vm.canClick = true;
}, 2000)
}
}
},
// 每个任务的跳转点击
handleTaskClick() {
let cb = this.goToTask;
this.handleLoginCheck(cb);
},
goToTask() {
console.log('do每个任务的跳转逻辑')
},
// 获取每日任务 及 邀请医生好友学课程里的 邀请1位医生的勤奋分及云鹊豆个数
getTasks() {
getTimsActivityInfo(vm.activityId).then(res => {
// alert('^^^^^获取任务信息…………………………')
// alert(JSON.stringify(res))
if(res && res.code == '000000'){
if(!vm.checkTimeStatus(res.data)){
this.activityEndVisible = true;
}
let data = res.data;
let taskRuleData = data.taskRuleData || [];
for(let i=0; i<taskRuleData.length; i++){
let item = taskRuleData[i];
let rewardList = [];
// 获取 邀请节点,进行中 此时获取邀请1个医生对应的 分数 和 豆子
if( item.resourceType == 7 && item.resourceId == 1){
vm.eachInviteAward.taskId = item.id;
vm.eachInviteAward.activityId = item.activityId;
if( item.timeStatus == 1 ){
rewardList = JSON.parse(item.rewardJsonInfo) || [];
for( let j=0; j<rewardList.length; j++ ){
if( rewardList[j].rewardType == 3 ){ // 勤奋分
vm.eachInviteAward.mark = rewardList[j].rewardQuantity;
}else if( rewardList[j].rewardType == 1 ){ // 云鹊豆
vm.eachInviteAward.bean = rewardList[j].rewardQuantity;
}
}
}
}else if( item.resourceType == 6 && item.timeStatus == 1 ){ // 打卡 默认奖励 5分 5豆
item.eachInviteAwardMark = 5;
item.eachInviteAwardBean = 5;
item = vm.formatEachTaskAward(item);
vm.clockAward = {
mark: item.eachInviteAwardMark,
bean: item.eachInviteAwardBean,
activityId: item.activityId,
id: item.id,
};
vm.taskObj.clock = item;
if(vm.isLogin){ // 登录后,获取打卡状态
vm.goToGetClockStatus(vm.clockAward);
}
}else if( item.resourceType == 1 && item.timeStatus == 1 ){ // 课程 默认奖励 20分 20豆
item.eachInviteAwardMark = 20;
item.eachInviteAwardBean = 20;
item = vm.formatEachTaskAward(item);
vm.taskObj.lesson = item;
}else if( item.resourceType == 4 && item.timeStatus == 1 ){ // smo 没奖励分 默认奖励100豆
item.eachInviteAwardBean = 100;
item = vm.formatEachTaskAward(item);
vm.taskObj.smo = item;
}
};
vm.taskList = [];
if( vm.taskObj.clock ){
vm.taskList.push( vm.taskObj.clock );
}
if( vm.taskObj.lesson ){
vm.taskList.push( vm.taskObj.lesson );
}
if( vm.taskObj.smo ){
vm.taskList.push( vm.taskObj.smo );
}
}else{
vm.$toast(res.message);
}
})
},
// 校验活动是否结束
checkTimeStatus(data){
const { timeStatus } = data.activityData;
// timeStatus 活动时间状态 1:在活动时间范围 2.已经结束 3.未开始
if(timeStatus==2){
return false;
}
return true;
},
goToGetClockStatus(params) {
vm.isClockFinish = false;
getClockStatus(params).then(res => {
if(res && res.code == '000000'){
vm.isClockFinish = !!res.data;
}else{
vm.$toast(res.message);
}
})
},
returnUnderAwardTips(item) {
if( typeof item.eachInviteAwardMark != 'undefined' && item.eachInviteAwardMark != '0' ){
return `+${item.eachInviteAwardMark}勤奋分 +${item.eachInviteAwardBean}云鹊豆`;
}else{
return `+${item.eachInviteAwardBean}云鹊豆`;
}
},
// 格式化数据
formatEachTaskAward(item) {
let rewardList = JSON.parse(item.rewardJsonInfo) || [];
for( let j=0; j<rewardList.length; j++ ){
if( rewardList[j].rewardType == 3 ){ // 勤奋分
item.eachInviteAwardMark = rewardList[j].rewardQuantity;
}else if( rewardList[j].rewardType == 1 ){ // 云鹊豆
item.eachInviteAwardBean = rewardList[j].rewardQuantity;
}
};
return item;
},
// ddd
// 返回每个任务 icon
returnEachTaskIcon(item) { // resourceType 业务类型 1.课程 2.考试 3.调查问卷 4.患者招募 5.宣教漫画 6.打卡 7.邀请
if( item.resourceType == 6 ){
return require('../assets/img/task-icon/daily-clock-icon.png');
}else if( item.resourceType == 1 ) {
return require('../assets/img/task-icon/lesson-icon.png');
}else if( item.resourceType == 4 ){
return require('../assets/img/task-icon/smo-icon.png');
}else{
return require('../assets/img/task-icon/daily-clock-icon.png');
}
},
returnEachTaskStatus(item) {
if( item.resourceType == 6 ){
return vm.isClockFinish ? 'right-btn done' : 'right-btn'
}else{
return item.isFinish == 1 ? 'right-btn done' : 'right-btn'
}
},
// 返回任务右边的按钮文案
returnIconText(item) {
let text = '去完成';
if( item.resourceType == 6 ){
return vm.isClockFinish ? '已打卡' : '去打卡';
}
if( item.resourceType == 1 ){ // 1-课程
text = item.isFinish == 1 ? '已完成' : '去学习'; // isFinish 最终确定为:1-已完成 0-未完成
}else if( item.resourceType == 4 ){ // 4-smo
text = item.isFinish == 1 ? '已完成' : '去完成';
}
return text;
},
async jumpPage(url, id) {
const _this = this;
if (!!url) {
// 判断是否有跳转
const { token } = _this;
const { data } = await selectAppModuleParam({
id: url,
token
});
// alert('inJumpage'); alert(JSON.stringify(data))
const itemData = data.model;
// 增加点击图片时候,是否有loginFlag参数,有,则校验并登录。如未登录去登录,已登录,老逻辑。
const loginFlag = this.checkLoginFlag(itemData.paramList);
if(loginFlag){
_this.refreshFlag = true;
_this.$rocNative.getToken().then(res => {
const { userToken } = res;
// alert('APP拿到的token=:'+userToken)
checkToken({ token: userToken }).then(res=>{
if(res.code == '200000' || res.code == '200006') {
_this.$rocNative.gotoLogin();
}else{
_this.oldJumpHandle(itemData, userToken);
}
})
});
}else{
_this.oldJumpHandle(itemData, _this.token);
}
}
},
// 增加一个点击图片请求selectAppModuleParam这个接口时候的 loginFlag 字段校验
checkLoginFlag(paramList){
let flag = false;
for(let i=0;i<paramList.length;i++){
if(paramList[i].key === 'loginFlag' && paramList[i].value === '1'){
flag = true;
break;
}
}
return flag;
},
// 原先的点击图片跳转逻辑
oldJumpHandle(itemData, token){
// 不改动原先逻辑
if (itemData.code == 'M301') {
itemData.code = 'M300';
//鉴权 自己调用token
delCookie('token');
delCookie('headToken');
this.$rocNative.getToken().then(res => {
const { userToken } = res;
setCookie('token', userToken);
setCookie('headToken', userToken);
});
} else {
const paramList = setEventByModuleCode(
itemData,
token
);
this.$rocNative.dispatchEventByModuleCode({
modeCode: itemData.code,
jsonString: paramList
});
}
},
getHeaderHeight(val){
this.padTop = val;
},
// 校验活动结束后1天还是2天,用以判断是否展示【昨日弹层】以及【昨日榜单】逻辑
checkActiveOver() {
const time2 = new Date('2019-12-31 00:00:00').getTime(); // 活动结束 二天
const nowTime = new Date().getTime(); // 当前时间戳
if(nowTime >= time2){ // 活动结束2天以上
this.showAwadModal = false;
}
}
},
}
</script>
<style lang="less">
@import '../assets/style/in-activity.less';
</style>
<style lang="less">
@import '../assets/style/revant.less';
</style>
\ No newline at end of file
.hospital-ranking-wrap {
position: relative;
.info-container {
width: 100%;
height: 130px;
background: url(../../assets/img/person-detail/detail-top-bg.png) no-repeat;
background-size: cover;
overflow: hidden;
.info {
display: flex;
align-items: center;
padding: 0 15px;
margin-top: 20px;
img {
width: 50px;
height: 50px;
border-radius: 100%;
}
.content {
display: flex;
margin-left: 10px;
flex-flow: column;
align-items: flex-start;
.main-name {
color: #fff;
font-size: 18px;
font-weight: 700;
}
.main1-name {
color: #fff;
font-size: 12px;
margin-top: 8px;
}
.details {
display: flex;
align-items: center;
margin-top: 8px;
.item {
font-size: 14px;
font-weight: 700;
.label {
color: #fff;
}
.value {
color: #FFDD58;
}
}
}
.details-d {
margin-top: 0;
}
.line {
display: inline-block;
width: 0.5px;
height: 10px;
background: #fff;
margin: 0 6px;
}
}
.not-join {
margin-left: 10px;
.main-name {
color: #fff;
font-size: 14px;
font-weight: 700;
line-height: 14px;
}
.details {
color: #fff;
font-size: 12px;
line-height: 12px;
margin-top: 8px;
}
}
}
}
.main-content {
width: 100%;
border-radius: 20px 20px 0px 0px;
position: absolute;
top: 90px;
background: #fff;
.description {
height: 40px;
line-height: 40px;
color: #FD6037;
font-size: 13px;
display: flex;
align-items: center;
span {
display: inline-block;
color: #373839;
font-size: 16px;
font-weight: 700;
margin: 0 6px 0 20px;
}
}
.description-d {
justify-content: center;
}
.ranking-title {
display: flex;
align-items: center;
height: 40px;
background: #FFF7F2;
color: #979899;
font-size: 14px;
padding: 0 25px 0 13px;
margin-bottom: 3px;
.marginL {
margin-left: 11px;
}
.marginAuto {
margin-left: auto;
}
}
.ranking-list {
padding: 0 25px;
.item {
display: flex;
align-items: center;
padding: 13.5px 0;
.ranking-icon {
width: 25px;
height: 30px;
}
.icon-num {
width: 25px;
color: #373839;
font-size: 15px;
font-weight: 700;
text-align: center;
}
.doctor-photo {
width: 35px;
height: 35px;
border-radius: 100%;
margin-left: 25px;
}
.doctor-name {
color: #333333;
font-size: 16px;
font-weight: 700;
margin-left: 10px;
width: 130px;
}
.hospital-name {
color: #333333;
font-size: 16px;
font-weight: 700;
margin-left: 25px;
width: 200px;
}
.num {
color: #373839;
font-weight: 700;
font-size: 18px;
margin-left: auto;
}
}
}
}
.no-more {
height: 62px;
display: flex;
justify-content: center;
align-items: center;
.line {
display: inline-block;
width: 84px;
height: 1px;
background:#F7F7F7;
}
.text {
color: #BEC2CC;
font-size: 13px;
margin: 0 8px;
}
}
.no-data {
margin-top: 112px;
img {
width: 150px;
height: 150px;
display: block;
margin: 0 auto;
}
p {
color: #999999;
font-size: 15px;
line-height: 21px;
margin-top: 5px;
margin-bottom: 30px;
text-align: center;
}
.button {
color: #fff;
font-size: 15px;
font-weight: 700;
width: 180px;
height: 45px;
line-height: 45px;
text-align: center;
background: linear-gradient(270deg,rgba(255,88,36,1) 0%,rgba(254,163,86,1) 100%);
border-radius: 22.5px;
margin: 0 auto;
}
}
.textOverflow {
width: 285px;
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;
}
}
\ No newline at end of file
<template>
<section class="hospital-ranking-wrap">
<ranking-header
:headBtn="headBtn"
:activeBtnType="activeBtnType"
@handleBtn="changeRanking">
</ranking-header>
<div class="info-container" :style="{ marginTop: `${44+statusBarHeight}Px`}">
<div class="info info-hospital" v-if="activeBtnType">
<img src="~/assets/img/hospital-ranking/icon-hospital.png" alt="">
<div class="content" v-if="hospitalRanking.score">
<div class="con main-name textOverflow">{{hospitalRanking.name}}</div>
<div class="con details">
<p class="item">
<span class="label">累计排名</span>
<span class="value">{{hospitalRanking.rank}}</span>
</p>
<p class="line"></p>
<p class="item">
<span class="label">累计勤奋分 </span>
<span class="value">{{hospitalRanking.score}}</span>
</p>
</div>
</div>
<div class="not-join" v-else>
<div class="con main-name textOverflow">{{hospitalRanking.name}}</div>
<div class="con details">您的机构还未参与活动</div>
</div>
</div>
<div class="info info-doctor" v-else>
<img :src="contributionRanking.avatarImageUrl" alt="">
<div class="content" v-if="contributionRanking.score">
<div class="con details details-d">
<p class="item">
<span class="label">累计排名</span>
<span class="value">{{contributionRanking.rank}}</span>
</p>
<p class="line"></p>
<p class="item">
<span class="label">累计勤奋分 </span>
<span class="value">{{contributionRanking.score}}</span>
</p>
</div>
<div class="con main1-name">{{contributionRanking.hospital}}</div>
</div>
<div class="not-join" v-else>
<div class="con main-name">您还未参加活动</div>
<div class="con details">赶快参加为您的机构争取荣誉吧</div>
</div>
</div>
</div>
<div class="main-content" v-if="!noContributionRanking">
<div class="description description-h" v-if="activeBtnType"><span>{{dealRankName(hospitalRanking.hospitalType)}}</span>排行实时刷新,部分原因存在几分钟延迟</div>
<div class="description description-d" v-else>排行实时刷新,部分原因存在几分钟延迟</div>
<div class="ranking-title">
<span>TOP100</span>
<!--<span class="marginL">机构名称</span>
<span class="marginAuto">机构勤奋分</span>-->
<span class="marginL">{{activeBtnType?'机构名称':'机构成员'}}</span>
<span class="marginAuto">{{activeBtnType?'机构勤奋分':'贡献勤奋分'}}</span>
</div>
<div class="ranking-list" :style="{marginBottom: `${50+homeIndicatorHeight}` + 'Px'}">
<div class="item" v-if="activeBtnType" v-for="(itemH,indexH) in topRankListH" :key="indexH">
<img v-if="indexH<=2" :src="dealRankIcon(indexH)" alt="" class="ranking-icon">
<p v-else class="icon-num" >{{indexH+1}}</p>
<p class="hospital-name">{{itemH.name}}</p>
<p class="num">{{itemH.score}}</p>
</div>
<div class="item" v-if="!activeBtnType" v-for="(itemD,indexD) in topRankListC" :key="indexD">
<img v-if="indexD<=2" :src="dealRankIcon(indexD)" alt="" class="ranking-icon">
<p v-else class="icon-num" >{{indexD+1}}</p>
<img :src="itemD.avatarImageUrl" alt="" class="doctor-photo">
<p class="doctor-name">{{itemD.name}}</p>
<p class="num">{{itemD.score}}</p>
</div>
<div class="no-more" v-if="activeBtnType&&topRankListH.length>=10">
<span class="line"></span>
<span class="text">到底啦</span>
<span class="line"></span>
</div>
<div class="no-more" v-if="!activeBtnType&&topRankListC.length>=10">
<span class="line"></span>
<span class="text">到底啦</span>
<span class="line"></span>
</div>
</div>
</div>
<div class="main-content" v-if="noContributionRanking">
<div class="no-data">
<img src="~/assets/img/icon-nodata.png" alt="">
<p>您的机构还没有人参加活动</p>
<div class="button" @click="goInActivity">立即参加</div>
</div>
</div>
<footer-button
v-if="!noContributionRanking"
:btnText="btnText"
:btnType="btnType">
</footer-button>
</section>
</template>
<script>
import RankingHeader from '@/components/ranking-header';
import FooterButton from '@/components/footer-button';
import { getContributionRanking, getHospitalRanking} from '@/service/detailsAndRanking'
export default {
name: 'hospital-ranking',
components: {
RankingHeader,
FooterButton
},
data() {
return {
showPop: false,
title: '个人明细',
headBtn: {
leftName: '机构排行榜',
rightName: '人员贡献榜'
},
activeBtnType: true, //true机构,false人员
hospitalRanking: {},
topRankListH: [],//机构排行
contributionRanking: {},
topRankListC: [], //贡献排行
btnText: '助力机构 创造佳绩',
btnType: true,
noContributionRanking: false //是否有人员贡献榜单数据
};
},
computed: {
},
mounted() {
this.getRankData();
},
methods: {
goInActivity() {
this.$router.push('/activityPage')
},
changeRanking(val) {
this.activeBtnType = val;
this.getRankData()
},
dealRankName(hospitalType) {
if(hospitalType == 0) {
return '星火榜';
} else if(hospitalType == 1) {
return '萌芽榜';
} else if(hospitalType == 2) {
return '奋进榜';
} else if(hospitalType == 3) {
return '超越榜';
}
},
dealRankIcon(index) {
if(index == 0) {
return require('../../assets/img/icon-gold.png')
} else if(index == 1) {
return require('../../assets/img/icon-silver.png')
} else if(index == 2) {
return require('../../assets/img/icon-copper.png')
}
},
getHospitalRanking() {
this.noContributionRanking = false;
getHospitalRanking().then(res => {
if(res.code == '000000') {
this.hospitalRanking = res.data;
this.topRankListH = res.data.topRankList
}
})
},
getContributionRanking() {
getContributionRanking().then(res => {
if(res.code == '000000') {
this.contributionRanking = res.data;
this.topRankListC = res.data.topRankList
if(this.contributionRanking.topRankList.length) {
this.noContributionRanking = false;
} else {
this.noContributionRanking = true;
}
}
})
},
getRankData() {
if(this.activeBtnType) {
this.getHospitalRanking();
} else {
this.getContributionRanking()
}
}
},
};
</script>
<style lang="less" scoped>
@import 'index.less';
</style>
<template>
<section class="index-wrap">
<div id="imgHeight1">
<img src="../assets/img/img1.png"/>
<img src="../assets/img/img2.png"/>
<img src="../assets/img/img3.png"/>
</div>
<div class="wrap-join" id="imgHeight2">
<div class="wrap-count">
<div>
<h1>2394847</h1>
<h5>已参与人数</h5>
</div>
<div>
<h1>23948</h1>
<h5>已参与机构</h5>
</div>
</div>
</div>
<div class="btn-appoint btn-app-share" id="imgHeight3" @click="setRemind"><img src="../assets/img/btn_appoint.png"/>
</div>
<div>
<img src="../assets/img/img6.png"/>
<img src="../assets/img/img7.png"/>
<img src="../assets/img/img8.png"/>
<img src="../assets/img/img9.png"/>
<img src="../assets/img/img10.png"/>
</div>
<div class="btn-share btn-app-share"><img src="../assets/img/btn_share.png"/></div>
<div class="rule-show">
<img src="../assets/img/rule_title.png"/>
<div class="rule-bg">
<section>
<h1>每日任务,攒勤奋分</h1>
<p><span>比赛时间:</span>2019.12.16 10:00-2019.12.30 00:00</p>
<p><span>医生机构:</span>根据机构内注册医生的勤奋分总额排名,活动结束后机构榜单指定名次可获得云鹊豆,榜单第一可获得云鹊机构奖荣誉。</p>
<p><span>医生个人:</span>完成每日学习任务可积攒勤奋分和云鹊豆,每日个人排行榜前十可获得相应实物奖品,个人累计排行第一获得云鹊勤奋之星荣誉、iphone11(64G)一台及云鹊豆奖品。</p>
</section>
<section class="margin-top-20">
<h1>公布排名</h1>
<p><span>公布时间:</span>2019.12.30 10:00-2020.1.5</p>
<p>公布个人获奖名单和机构获奖名单</p>
</section>
<div class="line"></div>
<div class="btn-rule">查看规则详情</div>
</div>
<img class="bird" src="../assets/img/bird.png">
</div>
<div v-if="showFixed" @click="setRemind" class="fix-btn">
<div>开赛时提醒我</div>
</div>
</section>
</template>
<script>
// import { Toast } from 'vant';
// import { mapMutations } from 'vuex'
// import request from '@/service/api';
import {remind, getRemindStatus, checkHospitalStatus} from '@/service';
// import popAll from '../components/popAll.vue';
// import { getBaseMainUrl, getCookie, delCookie, setCookie } from '../utils/index';
const cookies = require('cookie-universal')();
const token = '3D093CC8931C4F73A938CD8939E1A640';
export default {
head() {
return {
title: '云鹊医-赋能基层医生',
};
},
async asyncData({query}) {
const {data} = await getRemindStatus(token);
console.log('服务端', data)
const remindStatus = data;
return {
remindStatus
}
},
data() {
return {
showFixed: false,
}
},
created() {
},
mounted() {
console.log('愉悦状态', this.remindStatus)
this.scrollHandle();
},
methods: {
// 处理滚动按钮悬浮事件
scrollHandle() {
const _self = this;
const imgHeight1 = document.getElementById('imgHeight1').offsetHeight;
const imgHeight2 = document.getElementById('imgHeight2').offsetHeight;
const imgHeight3 = document.getElementById('imgHeight3').offsetHeight;
let bodyScrollTop = 0, documentScrollTop = 0;
window.onscroll = () => {
if (document.body) {
bodyScrollTop = document.body.scrollTop;
}
if (document.documentElement) {
documentScrollTop = document.documentElement.scrollTop;
}
const heightVal = imgHeight1 + imgHeight2 + imgHeight3;
const scrollVal = bodyScrollTop || documentScrollTop;
if (scrollVal >= heightVal) {
_self.showFixed = true;
} else {
_self.showFixed = false;
}
}
},
setRemind() {
checkHospitalStatus(token).then(res => {
console.log(res)
// status : 0无机构 1正常 2机构已关闭 5退出 10移除 15创建机构审核中 20创建机构审核不通过 25创建机构未提交
if (res.data.status == 1) {
}
if (!res.data.status) { // 0无机构
// native gotoActivityHospital
} else if (res.data.status == 15) { // 15创建机构审核中
// native gotoInstitutionalReview
} else {
remind({token}).then(res => {
console.log('res=>', res)
})
}
})
}
},
}
</script>
<style lang="less">
@import '../assets/style/index.less';
</style>
\ No newline at end of file
.invite-details-wrap {
.main-container {
overflow: hidden;
.invite-explain {
padding: 0 15px;
margin: 20px 0 30px 0;
.title {
color: #333333;
font-size: 18px;
font-weight: 700;
}
.picture-explain {
display: flex;
justify-content: space-between;
margin-top: 18px;
.left {
width: 18px;
display: flex;
flex-flow: column;
align-items: center;
margin-top: 13px;
.step-num {
width: 18px;
height: 18px;
line-height: 18px;
text-align: center;
border-radius: 100%;
background: #F36F55;
color: #fff;
font-size: 12px;
}
.dotted-line {
border-left: 1px dashed #F36F55;
height:38px;
width: 1px;
}
.height50 {
height: 50px!important;
}
}
.right {
.bubble_diailog{
width: 275px;
padding: 12px 15px;
position: relative;
background: #FFF4F2;
border-radius: 6px;
color: #373839;
font-size: 14px;
font-weight: 700;
i,.bubble_diailog b{
position: absolute;
width: 0;
height: 0;
overflow: hidden;
border-width:5px;
display:block;
}
i.l,.bubble_diailog b.l{
border-style:dashed solid dashed dashed;
}
i.l{
top:0;
bottom: 0;
margin-top: auto;
margin-bottom: auto;
left:-10px;
border-color:transparent #FFF4F2 transparent transparent;
}
b.l{
top:0;
bottom: 0;
margin-top: auto;
margin-bottom: auto;
left:-9px;
border-color:transparent #FFF4F2 transparent transparent;
}
p {
line-height: 14px;
}
.text {
color: #373839;
font-size: 14px;
font-weight: 700;
}
.awards {
color: #979899;
font-size: 12px;
font-weight: 400;
margin-top: 6px;
}
};
.marginTop16 {
margin-top: 8px;
}
.marginTop20 {
margin-top: 10px;
}
}
}
}
.gray-line {
width: 100%;
height: 5px;
background: #F8F9FA;
}
.record-details {
width: 100%;
min-height: 294px;
background: #fff;
.tab-nav {
width: 100%;
background: #fff;
height: 52px;
display: flex;
align-items: center;
justify-content: space-between;
border-bottom: 1px solid #E7E8E9;
.item {
height: 52px;
line-height: 52px;
position: relative;
font-size: 16px;
color: #676869;
.active-line {
width: 20px;
height: 3px;
background: #F36F55;
border-radius: 1.5px;
position: absolute;
bottom: 0;
left: 0;
right: 0;
margin-left: auto;
margin-right: auto;
}
}
.left-item {
margin-left: 53.5px;
}
.right-item {
margin-right: 53.5px;
}
.activeItem {
color: #373839;
font-weight: 700;
}
}
.record-list {
padding: 15px;
.sum {
color: #676869;
font-size: 14px;
}
.loadMore {
overflow-y: auto;
.record-item {
padding: 20px 0;
display: flex;
align-items: center;
.person-photo {
width: 35px;
height: 35px;
border-radius: 100%;
}
.person-info {
margin-left: 15px;
.phone {
color: #373839;
font-size: 16px;
line-height: 16px;
}
.time {
color: #979899;
font-size: 13px;
line-height: 13px;
margin-top: 8px;
}
}
.awards {
margin-left: auto;
.item {
font-size: 13px;
font-weight: 700;
height: 13px;
margin-bottom: 9px;
.num {
color: #FD5A2F;
}
.award-name {
color: #373839;
}
}
.item:last-child {
margin-bottom: 0;
}
}
}
.no-more {
height: 62px;
display: flex;
justify-content: center;
align-items: center;
.line {
display: inline-block;
width: 84px;
height: 1px;
background:#F7F7F7;
}
.text {
color: #BEC2CC;
font-size: 13px;
margin: 0 8px;
}
}
}
}
}
.no-data {
img {
width: 150px;
height: 150px;
display: block;
margin: 5px auto;
}
p {
width: 180px;
height: 42px;
font-size: 15px;
color: #999999;
line-height: 21px;
margin: 0 auto;
text-align: center;
}
.text-get {
width: 300px;
}
}
}
}
\ No newline at end of file
<template>
<section class="invite-details-wrap">
<normal-header
:title="title"
:backType="1">
</normal-header>
<div class="main-container" :style="{ marginTop: `${44+statusBarHeight}Px`}">
<div class="invite-explain">
<p class="title">邀请形式</p>
<div class="picture-explain">
<div class="left">
<div class="step-num">1</div>
<div class="dotted-line" />
<div class="step-num">2</div>
<div class="dotted-line height50" />
<div class="step-num">3</div>
</div>
<div class="right">
<div class="bubble_diailog">
<i class="l"></i>
<b class="l"></b>
邀请医生好友
</div>
<div class="bubble_diailog marginTop16">
<i class="l"></i>
<b class="l"></b>
<p class="text">输入手机号领取课程</p>
<p class="awards">
<span v-for="(item, index) in dealJsonData(this.node1)" :key="index">
+{{item.rewardQuantity}}{{changeAwardsName(item.rewardType)}}
</span>
</p>
</div>
<div class="bubble_diailog marginTop20">
<i class="l"></i>
<b class="l"></b>
<p class="text">使用手机号登录云鹊医APP</p>
<p class="awards">
<span v-for="(item, index) in dealJsonData(this.node2)" :key="index">
+{{item.rewardQuantity}}{{changeAwardsName(item.rewardType)}}
</span>
</p>
</div>
</div>
</div>
</div>
<div class="gray-line"></div>
<div class="record-details" :style="{marginBottom: `${50+homeIndicatorHeight}Px`}">
<div class="tab-nav">
<div class="item left-item" :class="{activeItem:recordType==1}" @click="changeRecordType">
领取课程的好友
<p class="active-line" v-if="recordType==1"></p>
</div>
<div class="item right-item" :class="{activeItem:recordType==2}" @click="changeRecordType">
登录APP的好友
<p class="active-line" v-if="recordType==2"></p>
</div>
</div>
<div class="record-list" >
<div class="no-data" v-if="!inviteList.length" >
<img src="~/assets/img/icon-nodata.png" alt="">
<p v-if="recordType==1">提醒您的医生好友领取课程您将获得奖励哦!</p>
<p v-if="recordType==2" class="text-get">提醒您的医生好友领取课程后登录云鹊医APP您将再获得奖励哦!</p>
</div>
<p class="sum" v-if="inviteList.length">{{recordTotal}}</p>
<div class="loadMore" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy"
infinite-scroll-distance="10">
<div class="record-item" v-if="inviteList.length" v-for="(item, index) in inviteList" :key="index">
<img :src="item.avatarImageUrl" alt="" class="person-photo">
<div class="person-info">
<p class="phone">{{item.mobile}}</p>
<p class="time">{{item.inviteDate}}</p>
</div>
<div class="awards">
<p class="item" v-for="(item1, index1) in dealJsonData(item.rewardJsonInfo)" :key="index1">
<span class="num">+{{item1.rewardQuantity}}</span>
<span class="award-name">{{changeAwardsName(item1.rewardType)}}</span>
</p>
</div>
</div>
<div class="no-more" v-if="noMore&&inviteList.length>=8">
<span class="line"></span>
<span class="text">到底啦</span>
<span class="line"></span>
</div>
</div>
</div>
</div>
</div>
<footer-button
:btnText="btnText"
:btnType="btnType"
@sureBtn="goInvite">
</footer-button>
</section>
</template>
<script>
import NormalHeader from '@/components/normal-header';
import FooterButton from '@/components/footer-button';
import { getOneInviteDetails,getTwoInviteDetails,getInviteDetailAward } from '@/service/detailsAndRanking';
import { wxShare } from '@/configs/wxShare';
import { getShareUrl } from '@/utils/index';
import { Base64 } from 'js-base64';
export default {
name: "index",
components: {
NormalHeader,
FooterButton,
},
data() {
return {
showPop: false,
title: '邀请明细',
inviteList: [],
recordTotal: 0,
recordType: 1,
busy: true, //分页参数--start
pageNo: 0,
pageSize: 10,
noMore: false,//分页参数--end
btnText: '去邀请',
btnType: false,
node1: '',
node2: ''
};
},
async asyncData ({query}) {
return {
encryptId: query.encryptId,
taskId: query.taskId,
activityId: query.activityId
}
},
mounted() {
this.pageNo++
this.getOneInviteDetails();
this.getInviteDetailAward();
const _this = this
window.addEventListener('scroll', function (e) {
let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;
//获取recordDetails到顶部距离
const recordDetails = document.getElementsByClassName('record-details')[0];
let recordDetailsHeight = recordDetails.getBoundingClientRect().top;
//获取headDiv部分高度
const headDiv = document.getElementsByClassName('header-container')[0];
let headDivHeight = headDiv.offsetHeight;
//获取窗口高度
const lastHeight = window.innerHeight;
/*console.log('recordDetailsHeight',recordDetailsHeight);
console.log('headDivHeight',headDivHeight);*/
const tabNab=document.getElementsByClassName('tab-nav')[0];
if(recordDetailsHeight<=headDivHeight) {
tabNab.setAttribute('style',`position:fixed;top: ${44+_this.statusBarHeight}px;`);
} else {
tabNab.removeAttribute('style');
}
});
},
methods: {
getInviteDetailAward() {
getInviteDetailAward({
activityId: this.activityId,
taskId: this.taskId
}).then(res => {
const node1 = res.data.filter(item => {
return item.resourceId == "1"
});
const node2 = res.data.filter(item => {
return item.resourceId == "2"
})
this.node1 = node1[0].rewardJsonInfo;
this.node2 = node2[0].rewardJsonInfo;
console.log(this.node1,this.node2)
})
},
goInvite() { // 去邀请
this.$sendBuriedData({
component_tag: `308#308001`
});
let shareObj = wxShare;
//处理分享链接需要的参数
const paramstr = Base64.encode(`id=${this.encryptId}&taskId=${this.taskId}&activityId=${this.activityId}`);
shareObj.shareUrl = `${getShareUrl()}year_end_ssr/shareActive?${paramstr}`
this.$rocNative.shareWechat(shareObj);
},
getOneInviteDetails() { //领取记录数据
getOneInviteDetails({
pageNo: this.pageNo,
pageSize: this.pageSize
}).then(res => {
if(res.code == '000000') {
this.recordTotal = res.data.total;
if(res.data.list.length>0) {
if(this.pageNo ==1) {
this.inviteList = res.data.list
} else {
this.inviteList = this.inviteList.concat(res.data.list);
}
this.busy = false;
this.noMore = false;
}else {
if(this.pageNo ==1) {
this.noMore = false;
} else {
this.noMore = true;
}
}
}
})
},
getTwoInviteDetails() { //登记记录数据
getTwoInviteDetails({
pageNo: this.pageNo,
pageSize: this.pageSize
}).then(res => {
if(res.code == '000000') {
this.recordTotal = res.data.total
if(res.data.list.length>0) {
if(this.pageNo ==1) {
this.inviteList = res.data.list
} else {
this.inviteList = this.inviteList.concat(res.data.list);
}
this.busy = false;
this.noMore = false;
}else {
if(this.pageNo ==1) {
this.noMore = false;
} else {
this.noMore = true;
}
}
}
})
},
dealJsonData(data) {
if(data) {
return JSON.parse(data)
}
},
changeAwardsName(type) {
if(type == 1) {
return '云鹊豆'
} else if(type == 2) {
return '现金'
} else if(type == 3) {
return '勤奋分'
} else if(type == 4) {
return '短信额度'
}
},
changeRecordType() {
this.recordType = this.recordType==1?2:1;
this.pageNo = 1;
this.inviteList = [];
this.noMore = false;
this.getData()
},
getData() {
if(this.recordType == 1) {
this.getOneInviteDetails();
} else if(this.recordType == 2) {
this.getTwoInviteDetails();
}
},
loadMore() {
this.busy = true;
this.pageNo++
//this.changeRecordType();
this.getData()
},
},
}
</script>
<style scoped lang="less">
@import 'index.less';
</style>
\ No newline at end of file
.person-detail-wrap {
position: relative;
.info-container {
width: 100%;
height: 130px;
background: url(../../assets/img/person-detail/detail-top-bg.png) no-repeat;
background-size: cover;
overflow: hidden;
.info {
display: flex;
align-items: center;
padding: 0 15px;
margin-top: 20px;
img {
width: 50px;
height: 50px;
border-radius: 100%;
}
.content {
display: flex;
margin-left: 10px;
align-items: center;
.item {
font-size: 14px;
.label {
color: #fff;
}
.value {
color: #FFDD58;
}
}
.line {
display: inline-block;
width: 0.5px;
height: 10px;
background: #fff;
margin: 0 6px;
}
}
}
}
.main-content {
width: 100%;
border-radius: 20px 20px 0px 0px;
position: absolute;
top: 90px;
background: #fff;
.get-container {
padding: 15px;
background: #FFF7F2;
height: 68px;
border-radius: 20px 20px 0px 0px;
.top {
display: flex;
justify-content: space-between;
align-items: center;
.title {
font-size: 18px;
color: #373839;
font-weight: 700;
}
.how-to-get {
color: #676869;
font-weight: 700;
font-size: 12px;
height: 33px;
display: flex;
align-items: center;
img {
width: 6px;
height: 11px;
margin-left: 2px;
}
}
}
.awards-details {
font-size: 14px;
font-weight: 700;
color: #FD663F;
line-height: 20px;
}
}
.detail-list {
padding: 0 15px;
overflow-y: auto;
.item {
display: flex;
align-items: center;
padding: 15px 0 14px 0;
position: relative;
.left {
margin-right: 15px;
img {
width: 50px;
height: 50px;
}
}
.right {
flex: 1;
display: flex;
justify-content: space-between;
align-items: center;
.r-left {
.detail-name {
color: #373839;
font-size: 16px;
font-weight: 700;
line-height: 16px;
}
.time {
color: #676869;
font-size: 13px;
line-height: 13px;
margin-top: 8px;
}
}
.r-right {
.award-item {
font-size: 13px;
font-weight: 700;
height: 13px;
margin-bottom: 9px ;
text-align: right;
.num {
color: #FD5A2F;
}
.award-name {
color: #373839;
}
}
.award-item:last-child {
margin-bottom: 0;
}
}
}
}
.item:after {
position: absolute;
content: " ";
left: 0;
bottom: 0;
right: 0;
height: 1PX;
border-bottom: 1PX solid #F0F1F2;
color: #F0F1F2;
-webkit-transform-origin: 0 100%;
-ms-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5);
}
.no-more {
height: 62px;
display: flex;
justify-content: center;
align-items: center;
.line {
display: inline-block;
width: 84px;
height: 1px;
background:#F7F7F7;
}
.text {
color: #BEC2CC;
font-size: 13px;
margin: 0 8px;
}
}
}
.no-data {
margin-top: 112px;
img {
width: 150px;
height: 150px;
display: block;
margin: 0 auto;
}
p {
color: #999999;
font-size: 15px;
line-height: 21px;
margin-top: 5px;
margin-bottom: 30px;
text-align: center;
}
.button {
color: #fff;
font-size: 15px;
font-weight: 700;
width: 180px;
height: 45px;
line-height: 45px;
text-align: center;
background: linear-gradient(270deg,rgba(255,88,36,1) 0%,rgba(254,163,86,1) 100%);
border-radius: 22.5px;
margin: 0 auto;
}
}
}
}
\ No newline at end of file
<template>
<section class="person-detail-wrap">
<normal-header
:title="title"
:backType="1">
</normal-header>
<div class="info-container" :style="{ marginTop: `${44+statusBarHeight}Px`}">
<div class="info">
<img :src="avatarImageUrl" alt="">
<div class="content">
<p class="item">
<span class="label">累计排名</span>
<span class="value">{{userRank?userRank.rank:'-'}}</span>
</p>
<p class="line"></p>
<p class="item">
<span class="label">累计勤奋分 </span>
<span class="value">{{userRank?userRank.score:'0'}}</span>
</p>
</div>
</div>
</div>
<div class="main-content">
<!--<div class="get-container">
<div class="top">
<div class="title">累计获得奖励</div>
<div class="how-to-get">如何领取<img src="~/assets/img/person-detail/icon-right.png" alt=""></div>
</div>
<div class="awards-details">血压计 1 支/温度计 1 支/小米电视4C 2 台/米家洗衣机 1 台/米家冰箱 2 台/华为荣耀Play3 2 部</div>
</div>-->
<div class="detail-list" v-infinite-scroll="loadMore" infinite-scroll-disabled="busy" infinite-scroll-distance="10">
<div class="item" v-for="(item, index) in personDetails" v-if="personDetails.length" :key="index">
<div class="left">
<img :src="detailTaskIcon(item.resourceType)" alt="">
</div>
<div class="right">
<div class="r-left">
<p class="detail-name">{{item.taskName}}</p>
<p class="time">{{item.finishTime}}</p>
</div>
<div class="r-right">
<div class="award-item" v-for="(item1, index1) in item.timsRewardResp" :key="index1">
<span class="num">+{{item1.rewardQuantity}}</span>
<span class="award-name">{{detailAwardsName(item1.rewardType)}}</span>
</div>
</div>
</div>
</div>
<div class="no-more" v-if="noMore&&personDetails.length>=10">
<span class="line"></span>
<span class="text">到底啦</span>
<span class="line"></span>
</div>
</div>
<div class="no-data" v-if="!personDetails.length">
<img src="~/assets/img/icon-nodata.png" alt="">
<p>暂无记录,您还没有参加活动</p>
<div class="button" @click="goInActivity">立即参加</div>
</div>
</div>
</section>
</template>
<script>;
import NormalHeader from '@/components/normal-header';
import { getPersonDetails } from '@/service/detailsAndRanking'
export default {
name: 'person-detail',
components: {
NormalHeader
},
data() {
return {
showPop: false,
title: '个人明细',
personDetails: [],
busy: true, //分页参数--start
pageNo: 0,
noMore: false,//分页参数--end
userRank: null,
avatarImageUrl: ''
};
},
computed: {
},
mounted() {
this.pageNo++;
this.getPersonDetails();
},
methods: {
goInActivity() {
this.$router.push('/activityPage')
},
detailTaskIcon(taskType) {
if(taskType == 4) { //smo
return require('../../assets/img/task-icon/smo-icon.png')
} else if(taskType == 1) { //课程
return require('../../assets/img/task-icon/lesson-icon.png')
} else if(taskType == 6) { //打卡
return require('../../assets/img/task-icon/daily-clock-icon.png')
} else if(taskType == 7) { //邀请
return require('../../assets/img/task-icon/invite-icon.png')
} else if(taskType == 0) { //机构
return require('../../assets/img/task-icon/ranking-icon.png')
}
},
detailAwardsName(type) {
//type 1.云鹊豆 2.现金 3.勤奋分 4.短信额度
if(type == 1) {
return '云鹊豆'
} else if(type == 2) {
return '现金'
} else if(type == 3) {
return '勤奋分'
} else if(type == 4) {
return '短信额度'
}
},
getPersonDetails() {
getPersonDetails({
pageNo: this.pageNo,
activityId: this.$route.query.activityId
}).then(res => {
console.log(res)
if(res.code == '000000') {
this.userRank = res.data.userRank;
this.avatarImageUrl = res.data.avatarImageUrl;
if(res.data.personalDetails) {
if(this.pageNo ==1) {
this.personDetails = res.data.personalDetails
if(res.data.hasNextPage) {
this.busy = false;
} else {
this.noMore = true;
}
} else {
this.personDetails = this.personDetails.concat(res.data.personalDetails);
if(res.data.hasNextPage) {
this.busy = false;
} else {
this.noMore = true
}
}
} else {
this.personDetails = []
}
}
})
},
loadMore() {
this.busy = true;
this.pageNo++
//this.changeRecordType();
this.getPersonDetails()
}
},
};
</script>
<style lang="less" scoped>
@import 'index.less';
</style>
.person-ranking-wrap {
position: relative;
.info-container {
width: 100%;
height: 130px;
background: url(../../assets/img/person-detail/detail-top-bg.png) no-repeat;
background-size: cover;
overflow: hidden;
.info {
display: flex;
align-items: center;
padding: 0 15px;
margin-top: 20px;
img {
width: 50px;
height: 50px;
border-radius: 100%;
}
.right {
margin-left: 10px;
.content {
display: flex;
align-items: center;
.item {
font-size: 14px;
.label {
color: #fff;
}
.value {
color: #FFDD58;
}
}
.line {
display: inline-block;
width: 0.5px;
height: 10px;
background: #fff;
margin: 0 6px;
}
}
.not-join {
margin-left: 10px;
.main-name {
color: #fff;
font-size: 14px;
font-weight: 700;
line-height: 14px;
}
.details {
color: #fff;
font-size: 12px;
line-height: 12px;
margin-top: 8px;
}
}
p.text {
color: #FFFFFF;
font-size: 12px;
line-height: 12px;
margin-top: 8px;
}
}
}
}
.main-content {
width: 100%;
border-radius: 20px 20px 0px 0px;
position: absolute;
top: 90px;
background: #fff;
.description {
height: 40px;
line-height: 40px;
text-align: center;
color: #FD6037;
font-size: 13px;
}
.ranking-title {
display: flex;
align-items: center;
height: 40px;
background: #FFF7F2;
color: #979899;
font-size: 14px;
padding: 0 25px 0 13px;
margin-bottom: 3px;
.marginL {
margin-left: 11px;
}
.marginAuto {
margin-left: auto;
}
}
.ranking-list {
padding: 0 25px;
.item {
display: flex;
align-items: center;
padding: 13.5px 0;
.ranking-icon {
width: 25px;
height: 30px;
}
.icon-num {
width: 25px;
color: #373839;
font-size: 15px;
font-weight: 700;
text-align: center;
}
.doctor-photo {
width: 35px;
height: 35px;
border-radius: 100%;
margin-left: 25px;
}
.doctor-name {
color: #333333;
font-size: 16px;
font-weight: 700;
margin-left: 10px;
width: 130px;
}
.num {
color: #373839;
font-weight: 700;
font-size: 18px;
margin-left: auto;
}
}
}
.no-more {
height: 62px;
display: flex;
justify-content: center;
align-items: center;
.line {
display: inline-block;
width: 84px;
height: 1px;
background:#F7F7F7;
}
.text {
color: #BEC2CC;
font-size: 13px;
margin: 0 8px;
}
}
}
}
\ No newline at end of file
<template>
<section class="person-ranking-wrap">
<ranking-header
:rightBtn="rightBtn"
:headBtn="headBtn"
:activeBtnType="activeBtnType"
@handleBtn="changeRanking"
@handleRightBtn="handleRightBtn">
</ranking-header>
<div class="info-container" :style="{ marginTop: `${44+statusBarHeight}Px`}">
<div class="info">
<img :src="rankData.avatarImageUrl" alt="">
<div class="right">
<div class="content" v-if="rankData.score">
<p class="item">
<span class="label">{{activeBtnType?'今日':'累计'}}排名</span>
<span class="value">{{rankData.rank}}</span>
</p>
<p class="line"></p>
<p class="item">
<span class="label">{{activeBtnType?'今日':'累计'}}勤奋分 </span>
<span class="value">{{rankData.score}}</span>
</p>
</div>
<div class="not-join" v-else>
<div class="con main-name">{{activeBtnType?'今日您还未参加活动':'您还未参加活动'}}</div>
<div class="con details">赶快参与活动赢每日奖品</div>
</div>
<p class="text" v-if="activeBtnType&&rankData.score">{{rankAwards}}</p>
</div>
</div>
</div>
<div class="main-content">
<div class="description">排行实时刷新,部分原因存在几分钟延迟</div>
<div class="ranking-title">
<span>TOP100</span>
<span class="marginL">用户名称</span>
<span class="marginAuto">{{activeBtnType?'今日':'累计'}}勤奋分</span>
</div>
<div class="ranking-list" :style="{marginBottom: `${50+homeIndicatorHeight}Px`}">
<div class="item" v-for="(item,index) in topRankList" :key="index">
<img v-if="index<=2" :src="dealRankIcon(index)" alt="" class="ranking-icon">
<p v-else class="icon-num" >{{index+1}}</p>
<img :src="item.avatarImageUrl" alt="" class="doctor-photo">
<p class="doctor-name">{{item.name}}</p>
<p class="num">{{item.score}}</p>
</div>
<div class="no-more" v-if="topRankList.length>=10">
<span class="line"></span>
<span class="text">到底啦</span>
<span class="line"></span>
</div>
</div>
<footer-button
:btnText="btnText"
:btnType="btnType">
</footer-button>
</div>
</section>
</template>
<script>
import RankingHeader from '@/components/ranking-header';
import FooterButton from '@/components/footer-button';
import { getTodayUserRanking, getAllUserRanking} from '@/service/detailsAndRanking'
import { getFirstAwards } from '@/utils'
export default {
name: 'person-ranking',
components: {
RankingHeader,
FooterButton
},
data() {
return {
showPop: false,
title: '个人明细',
rankData: {},
topRankList: [], //排行榜list
rightBtn: '',
headBtn: {
leftName: '今日排行榜',
rightName: '累计排行榜'
},
activeBtnType: true, //true今日,false累计
btnText: '获得更多勤奋分',
btnType: true,
rankAwards: '',
todayDate: ''
};
},
computed: {
},
mounted() {
this.getData();
},
watch: {
todayDate(val) {
if(Date.parse(new Date(val.replace(/-/g, "/")))<=Date.parse(new Date(('2019-12-16 23:59:59').replace(/-/g, "/")))) {
this.rightBtn = ''
} else {
this.rightBtn = '昨日获奖'
}
}
},
methods: {
changeRanking(val) {
this.activeBtnType = val;
this.getData();
},
handleRightBtn() {
this.$router.push({
path: '/yesterday-prize'
})
},
dealRankIcon(index) {
if(index == 0) {
return require('../../assets/img/icon-gold.png')
} else if(index == 1) {
return require('../../assets/img/icon-silver.png')
} else if(index == 2) {
return require('../../assets/img/icon-copper.png')
}
},
getData() {
if(this.activeBtnType) {
this.getTodayRankingList();
} else {
this.getUserRankingList();
}
},
getRankAwards(rankData,firstTime) {
if(rankData.targetRank == 0) {
this.rankAwards = `今日保持第1名,即可获得${getFirstAwards(firstTime)}`;
} else if(rankData.targetRank == 1) {
this.rankAwards = `再获${rankData.targetRequiredScore}分即可上升到第1名并可获得${getFirstAwards(firstTime)}`;
} else if(rankData.targetRank == 3) {
this.rankAwards = `再获${rankData.targetRequiredScore}分即可上升到第3名并可获得欧姆龙血压计`;
} else if(rankData.targetRank == 10) {
this.rankAwards = `再获${rankData.targetRequiredScore}分即可上升到第10名并可获得欧姆龙体温计`;
}
},
getTodayRankingList() {
getTodayUserRanking().then(res => {
if(res.code == '000000') {
this.rankData = res.data;
this.topRankList = res.data.topRankList
this.getRankAwards(this.rankData,res.data.todayDate);
this.todayDate = res.data.todayDate;
if(this.rankData.score) {
this.btnText = '获得更多勤奋分'
} else {
this.btnText = '参与活动得勤奋分'
}
}
})
},
getUserRankingList() {
getAllUserRanking().then(res => {
if(res.code == '000000') {
this.rankData = res.data;
this.topRankList = res.data.topRankList
if(this.rankData.score) {
this.btnText = '获得更多勤奋分'
} else {
this.btnText = '参与活动得勤奋分'
}
}
})
}
},
};
</script>
<style lang="less" scoped>
@import 'index.less';
</style>
......@@ -72,7 +72,6 @@ import { Toast } from 'vant';
import { remind, getRemindStatus, checkHospitalStatus, getCnt, checkToken } from '@/service';
import h5header from '@/components/h5header';
import shareContainer from '@/components/share-container';
import { BASE_URL } from '@/utils/enumerate';
export default {
// head() {
......@@ -157,16 +156,8 @@ export default {
this.scrollHandle();
// 微信分享
this.$picaWxShare({
baseUrl: BASE_URL[process.env.NUXT_ENV_APP],
// baseUrl: 'https://test1-sc.yunqueyi.com', // 非生产环境需要用test和type=15的配置
// type: 15,
authUrl: window.location.href,
isDebug: false,
jsApiList: [
'checkJsApi',
'onMenuShareTimeline',
'onMenuShareAppMessage'
]
type: (process.env.NUXT_ENV_APP != 'prod') ? 15 : '',
authUrl: this.shareObj.shareUrl
},(wx)=>{
const title = this.shareObj.title1;
const desc = this.shareObj.title2;
......
<template>
<div class="wx-share-wrap">
<section>
<div class="invite-info">
<img :src="avatarImageUrl" />
<p class="title1">{{ name }}邀请您领取医学课程</p>
<p class="title2">参与云鹊奖活动,学习课程赢iphone11等奖品</p>
</div>
<div class="page-info">
<p class="title1">资深医生讲师、精选专业课程</p>
<p class="title2">已有超过20,000+的医生领取以下课程</p>
<div class="imgs-wrap">
<div>
<img src="../assets/img/ico1.png" />
<div class="img-txt">高血压课程</div>
</div>
<div>
<img src="../assets/img/ico2.png" />
<div class="img-txt">糖尿病课程</div>
</div>
<div>
<img src="../assets/img/ico3.png" />
<div class="img-txt">中医课程</div>
</div>
<div>
<img src="../assets/img/ico4.png" />
<div class="img-txt">全科课程</div>
</div>
</div>
</div>
<div class="form-info">
<div class="field-wrap">
<label>联系方式</label>
<input v-model="mobilePhone" type="tel" maxlength="11" placeholder="请输入手机号">
</div>
<div class="field-wrap">
<label>图形验证码</label>
<input v-model="captchaAnswer" type="text" maxlength="6" placeholder="请输入">
<div class="cap-box"><img :src="captchaImg" @click="getCaptcha"></div>
</div>
<div class="field-wrap">
<label>短信验证码</label>
<input v-model="authCode" type="tel" maxlength="6" placeholder="请输入">
<button v-if="notSend" @click="sendSms">{{btnMsg}}</button>
<van-count-down v-if="!notSend" :time="time" @finish="finishCount" :format="'ss' + 's'" />
</div>
<button class="btn-post" @click="getCourse">领取课程</button>
</div>
</section>
</div>
</template>
<script>
import { getInviteInfo, getCourseById, getCaptchaGet, getAuthCode } from '@/service';
import { wxShare } from '@/configs/wxShare';
import { Base64 } from 'js-base64';
const queryString = require('query-string');
const TIMEALL = 60000; // 倒计时常量 60 秒
export default {
data(){
return {
notSend: true,
regMobile: /^1[3456789]\d{9}$/,
mobilePhone: '',
authCode: '', // 短信验证码
flag: 0,
captchaImg: '', // 图形验证码图片字段
captchaToken: '', // captchaToken
captchaAnswer: '', // 输入的图形验证码
time: TIMEALL,
btnMsg: '点击获取',
isReq: false,
}
},
async asyncData({ query }){
// 注释中间的代码请注意:
// queryString 这个npm会把字符串中的 + 变成空格,因此这里需要手动转一下 !!!
let parsed = queryString.parse(Base64.decode(Object.keys(query)[0]));
parsed.id = parsed.id.replace(' ', '+');
// 如果还有问题,可能需要换一个qs的包代替 queryString !!!
const { id, taskId, activityId } = parsed;
let avatarImageUrl = '', name = '', captchaImg = '', captchaToken = '';
const res = await getInviteInfo(id);
if(res.code === '000000'){
const data = res.data;
avatarImageUrl = data.avatarImageUrl;
name = data.name ? data.name : data.mobilePhone;
}
const resCapt = await getCaptchaGet();
if(resCapt.code === '000000'){
captchaImg = `data:image/png;base64,${resCapt.data.content}`;
captchaToken = resCapt.data.token;
}
return {
avatarImageUrl, name, id, taskId, activityId, captchaImg, captchaToken,parsed
}
},
mounted(){
document.querySelector('body').setAttribute('style', 'background: #FE9A51;');
this.checkCache();
// 微信分享
wxShare.shareUrl = window.location.href;
window.localStorage.setItem('shareUrl', wxShare.shareUrl);
this.$picaWxShare({
type: (process.env.NUXT_ENV_APP != 'prod') ? 15 : '',
authUrl: wxShare.shareUrl,
},(wx)=>{
const title = wxShare.title1;
const desc = wxShare.title2;
const link = window.localStorage.getItem('shareUrl') || window.location.href;
const imgUrl = wxShare.shareImageUrl;
// 分享给朋友
wx.onMenuShareAppMessage({
title,desc,link,imgUrl
});
// 分享到朋友圈
wx.onMenuShareTimeline({
title,desc,link,imgUrl
});
})
},
methods: {
// 校验用户浏览器是否有登录缓存,此缓存为纯前端缓存,与token之类的无关
checkCache(){
const mobilePhoneCache = window.localStorage.getItem('mobilePhone');
const statusCache = window.localStorage.getItem('status');
const status = 'false';
// 如果有缓存则是第二次进入,就要显示已领取,也就是false
if(mobilePhoneCache && statusCache){
window.localStorage.setItem('status', status);
this.$router.push({
name: 'shareResult',
query: {
status
}
})
}
// 如果没有缓存,则停留当前页面
},
// 点击刷新验证码
getCaptcha(){
getCaptchaGet().then(res=>{
if(res.code === '000000'){
this.captchaImg = `data:image/png;base64,${res.data.content}`;
this.captchaToken = res.data.token;
}else{
this.$toast(res.message);
}
})
},
// 领取课程事件
getCourse(){
this.$sendBuriedData({
component_tag: `309#309001`
});
if(this.isReq){
this.$toast('您的登录操作过于频繁,请稍后再试');
return;
}
const { regMobile, mobilePhone, authCode, id, taskId, activityId } = this;
const mobileTrue = regMobile.test(mobilePhone);
if(!mobileTrue){
this.$toast('请输入正确的手机号');
return;
}
// 校验图形验证码
if(this.captchaAnswer==''){
this.$toast('请输入图形验证码');
return;
}
if(this.authCode==''){
this.$toast('请输入短信验证码');
return;
}
this.isReq = true;
// 调用领取课程接口
getCourseById({
mobile: mobilePhone,
authCode,
id,
taskId,
activityId
}).then(res=>{
this.isReq = false;
// res.data true 登记成功 、 false 登记失败
if(res.code === '000000'){
// 将手机号和状态存入浏览器缓存,用户再次进来就能直接进入领取结果页面
// 注意,如果清除微信或者浏览器缓存,则将停留在当前这个页面并且再次填写手机号以做登录
window.localStorage.setItem('mobilePhone', mobilePhone);
window.localStorage.setItem('status', res.data);
this.$router.push({
name: 'shareResult',
query: {
status: res.data
}
})
}else {
this.$toast(res.message);
}
})
},
// 发送获取短信验证码
sendSms(){
const { regMobile, mobilePhone, flag, captchaToken, captchaAnswer } = this;
const mobileTrue = regMobile.test(mobilePhone);
if(!mobileTrue){
this.$toast('请输入正确的手机号');
return;
}
// 校验图形验证码
if(this.captchaAnswer==''){
this.$toast('请输入图形验证码');
return;
}
getAuthCode({mobilePhone, flag, captchaToken, captchaAnswer}).then(res=>{
// 发送成功
if(res.code === '000000'){
this.notSend = false;
}else{
this.$toast(res.message);
this.getCaptcha();
}
})
},
// 倒计时结束
finishCount(){
this.time = TIMEALL;
this.notSend = true;
this.btnMsg = '重新获取';
}
}
}
</script>
<style lang="less" scoped>
@import '../assets/style/index.less';
</style>
<style lang="less">
@import '../assets/style/revant.less';
</style>
<template>
<div class="wx-share-result">
<section>
<div class="res-wrap">
<img src="../assets/img/resimg0.png">
<h1>{{statusTxt}}</h1>
<h3>登录云鹊医APP立即开始学习</h3>
</div>
<div class="btn-app down-app" @click="downApp(1)">下载APP</div>
<div class="btn-app has-app" @click="tipOpenApp">已有APP</div>
<div class="line"></div>
<div class="more-course">
<header>更多精彩好课推荐</header>
<div class="course-list">
<div class="course-item" @click="goLink(1)">
<div class="course-txt">
<h1>高血压系列课程</h1>
<h3>《高血压的发病机制》等总计4门课程</h3>
</div>
<div class="course-img"><img src="../assets/img/resimg1.png"></div>
</div>
<div class="course-item" @click="goLink(2)">
<div class="course-txt">
<h1>糖尿病系列课程</h1>
<h3>《胰岛素的选择和管理》等总计4门课程</h3>
</div>
<div class="course-img"><img src="../assets/img/resimg2.png"></div>
</div>
<div class="course-item" @click="goLink(3)">
<div class="course-txt">
<h1>中医系列课程</h1>
<h3>《慢性鼻炎的中医治疗》等总计3门课程</h3>
</div>
<div class="course-img"><img src="../assets/img/resimg3.png"></div>
</div>
<div class="course-item" @click="goLink(4)">
<div class="course-txt">
<h1>全科系列课程</h1>
<h3>《胸痛原因待查》等总计3门课程</h3>
</div>
<div class="course-img"><img src="../assets/img/resimg4.png"></div>
</div>
</div>
</div>
</section>
<div v-if="showMask" @click="showMask=false" class="mask-div"><img src="../assets/img/mask.png"></div>
</div>
</template>
<script>
import { wxShare } from '@/configs/wxShare';
export default {
data(){
return {
statusTxt: '',
showMask: false,
}
},
mounted(){
this.statusTxt = (this.$route.query.status.toString()=='true') ? '领取成功' : '您已领取';
document.querySelector('body').setAttribute('style', 'background: "";');
// 微信分享
wxShare.shareUrl = window.location.href;
this.$picaWxShare({
type: (process.env.NUXT_ENV_APP != 'prod') ? 15 : '',
authUrl: wxShare.shareUrl
},(wx)=>{
const title = wxShare.title1;
const desc = wxShare.title2;
const link = window.localStorage.getItem('shareUrl') || window.location.href;
const imgUrl = wxShare.shareImageUrl;
// 分享给朋友
wx.onMenuShareAppMessage({
title,desc,link,imgUrl
});
// 分享到朋友圈
wx.onMenuShareTimeline({
title,desc,link,imgUrl
});
})
},
methods: {
downApp(id){
if(id==1){
this.$sendBuriedData({
component_tag: `310#310001`
});
}else{
this.$sendBuriedData({
component_tag: `310#310002`
});
}
// 延迟跳转以防埋点未发送成功页面就跳转了
setTimeout(()=>{
window.location.href = 'https://android.myapp.com/myapp/detail.htm?apkName=com.picahealth.yunque&ADTAG=mobile';
}, 800);
},
tipOpenApp(){
this.$sendBuriedData({
component_tag: `310#310002`
});
this.showMask = true;
},
goLink(id){
let link = '';
if(id==1){
link = 'https://phome.yunqueyi.com/template_v2/?id=609';
this.$sendBuriedData({
component_tag: `310#310003`
});
}else if(id==2){
link = 'https://phome.yunqueyi.com/template_v2/?id=610';
this.$sendBuriedData({
component_tag: `310#310004`
});
}else if(id==3){
link = 'https://phome.yunqueyi.com/template_v2/?id=611';
this.$sendBuriedData({
component_tag: `310#310005`
});
}else if(id==4){
link = 'https://phome.yunqueyi.com/template_v2/?id=612';
this.$sendBuriedData({
component_tag: `310#310006`
});
}
// 延迟跳转以防埋点未发送成功页面就跳转了
setTimeout(()=>{
window.location.href = link;
}, 800);
}
}
}
</script>
<style lang="less" scoped>
@import '../assets/style/index.less';
</style>
<style lang="less">
@import '../assets/style/revant.less';
</style>
\ No newline at end of file
.yesterday-prize-wrap {
.prize-list {
padding-left: 25px ;
.item {
display: flex;
align-items: center;
// padding: 21px 0;
.ranking-icon {
width: 25px;
height: 30px;
}
.icon-num {
width: 25px;
color: #373839;
font-size: 15px;
font-weight: 700;
text-align: center;
}
.item-right {
flex: 1;
display: flex;
align-items: center;
position: relative;
padding: 21px 15px 21px 20px;
margin-left: 5px;
.icon-num {
width: 25px;
color: #373839;
font-size: 15px;
font-weight: 700;
text-align: center;
}
.doctor-photo {
width: 35px;
height: 35px;
border-radius: 100%;
}
.doctor-info {
margin-left: 10px;
.name {
color: #333333;
font-size: 16px;
font-weight: 700;
width: 130px;
line-height: 16px;
}
.grade {
font-size: 13px;
color: #979899;
line-height: 13px;
margin-top: 8px;
span {
color: #FD6239;
}
}
}
.awards {
color: #373839;
font-weight: 700;
font-size: 13px;
margin-left: auto;
}
}
.item-right:after {
position: absolute;
content: " ";
left: 0;
bottom: 0;
right: 0;
height: 1PX;
border-bottom: 1PX solid #F0F1F2;
color: #F0F1F2;
-webkit-transform-origin: 0 100%;
-ms-transform-origin: 0 100%;
transform-origin: 0 100%;
-webkit-transform: scaleY(0.5);
-ms-transform: scaleY(0.5);
transform: scaleY(0.5);
}
}
.no-more {
height: 62px;
display: flex;
justify-content: center;
align-items: center;
.line {
display: inline-block;
width: 84px;
height: 1px;
background:#F7F7F7;
}
.text {
color: #BEC2CC;
font-size: 13px;
margin: 0 8px;
}
}
}
}
\ No newline at end of file
<template>
<section class="yesterday-prize-wrap">
<normal-header
:title="title"
:rightText="rightText"
:backType="1"
@handleRightBtn="rightBtn">
</normal-header>
<div class="prize-list" :style="{ marginTop: `${44+statusBarHeight}Px`,marginBottom: `${50+homeIndicatorHeight}Px`}">
<div class="item" v-for="(item, index) in rewardsList" :key="index">
<img v-if="index<=2" :src="dealRankIcon(index)" alt="" class="ranking-icon">
<p v-else class="icon-num" >{{index+1}}</p>
<div class="item-right">
<img :src="item.avatarImageUrl" alt="" class="doctor-photo">
<div class="doctor-info">
<p class="name">{{item.name}}</p>
<p class="grade">昨日勤奋分:<span>{{item.score}}</span></p>
</div>
<p class="awards" v-if="index==0">{{firstAwards}}*1台</p>
<p class="awards" v-if="1<=index&&index<=2">血压计*1支</p>
<p class="awards" v-if="index>2">体温计*1支</p>
</div>
</div>
<div class="no-more" v-if="rewardsList.length>=10">
<span class="line"></span>
<span class="text">到底啦</span>
<span class="line"></span>
</div>
</div>
<footer-button
:btnText="btnText"
:btnType="btnType">
</footer-button>
</section>
</template>
<script>
import NormalHeader from '@/components/normal-header';
import FooterButton from '@/components/footer-button';
import { getYesterdayRanking } from '@/service/detailsAndRanking'
import { getFirstAwards } from '@/utils'
export default {
name: "index",
components: {
NormalHeader,
FooterButton
},
data() {
return {
showPop: false,
title: '昨日获奖名单',
rightText: '如何领奖',
rewardsList: [],
btnText: '今日我要拿奖',
btnType: true,
yesterdayDate: '',
firstAwards: ''
};
},
mounted() {
this.getRewardList();
},
methods: {
dealRankIcon(index) {
if(index == 0) {
return require('../../assets/img/icon-gold.png')
} else if(index == 1) {
return require('../../assets/img/icon-silver.png')
} else if(index == 2) {
return require('../../assets/img/icon-copper.png')
}
},
rightBtn() {
let url = 'https://phome.yunqueyi.com/template_v2/?id=599';
let paramList = [
{
"key":"pageUrl",
"value": url,
"type":4,
"seqNo":1
}/*,{
"key":"showTitle",
"value": false,
"type":1,
"seqNo":2
},{
"key":"title",
"value": '',
"type":1,
"seqNo":3
}*/
]
this.$rocNative.dispatchEventByModuleCode({
modeCode: 'M300',
jsonString: paramList
});
},
getRewardList() {
getYesterdayRanking().then(res => {
if(res.code == '000000') {
this.rewardsList = res.data.topRankList;
this.yesterdayDate = res.data.yesterdayDate;
this.firstAwards = getFirstAwards(this.yesterdayDate);
}
})
}
},
}
</script>
<style scoped lang="less">
@import 'index.less';
</style>
\ No newline at end of file
import Vue from 'vue';
// 设置电池栏高度
const mixins = {
data() {
return {
statusBarHeight: 0,
homeIndicatorHeight: 0,
statusBarColor: '#fff'
}
},
created() {
const _this = this;
if (!_this.$rocNative.isWeb) {
_this.statusBarColor = _this.$rocNative.isAndroid?'#5C5C5C':'#fff'
_this.$rocNative.getStatusBarHeight().then(res => {
// resolve(data)
let height = _this.$rocNative.isIOS ? res.statusBarHeight : res.statusBarHeight / window.devicePixelRatio;
_this.statusBarHeight = height;
// 刘海屏底部高度
if(res.homeIndicatorHeight) {
let homeIndicatorHeight = _this.$rocNative.isIOS ? res.homeIndicatorHeight : res.homeIndicatorHeight / window.devicePixelRatio;
_this.homeIndicatorHeight = homeIndicatorHeight;
}
})
}
},
mounted() {
},
};
Vue.mixin(mixins);
import Vue from 'vue'
const infiniteScroll = require('vue-infinite-scroll');
Vue.use(infiniteScroll)
import Vue from 'vue'
import { BASE_URL } from '@/utils/enumerate';
import {
BASE_URL
} from '@/utils/enumerate';
import PicaWxShare from 'pica-wx-share';
Vue.prototype.$picaWxShare = PicaWxShare;
import PicaH5Login from 'pica-h5-login';
import { Dialog, Toast, Checkbox,Popup ,CheckboxGroup ,RadioGroup, Radio, Progress,ImagePreview ,Uploader,Overlay,Loading } from 'vant';
import WebBuriedPoint, { sendBuriedData } from 'web-buried-point';
import {
CountDown,
Field,
Cell,
CellGroup,
Button,
Dialog,
Toast,
Checkbox,
Popup,
CheckboxGroup,
RadioGroup,
Radio,
Progress,
ImagePreview,
Uploader,
Overlay,
Loading
} from 'vant';
import WebBuriedPoint, {
sendBuriedData
} from 'web-buried-point';
Vue.use(Popup).use(Checkbox).use(CheckboxGroup).use(RadioGroup).use(Radio).use(Progress).use(ImagePreview).use(Uploader).use(Overlay).use(Loading);
Vue.use(CountDown).use(Field).use(Cell).use(CellGroup).use(Button).use(Popup).use(Checkbox).use(CheckboxGroup).use(RadioGroup).use(Radio).use(Progress).use(ImagePreview).use(Uploader).use(Overlay).use(Loading);
Vue.use(PicaH5Login);
Vue.use(Toast)
Vue.use(Dialog)
const { NUXT_ENV_APP } = process.env;
const {
NUXT_ENV_APP
} = process.env;
Vue.use(WebBuriedPoint, {
class_name: `year_end_ssr`,
url: `${BASE_URL[NUXT_ENV_APP]}/file/log/trace1`
});
});
Vue.prototype.$sendBuriedData = sendBuriedData;
\ No newline at end of file
Vue.prototype.$sendBuriedData = sendBuriedData;
\ No newline at end of file
// 年终活动第二期 主页面请求
import request from './api';
// 获取用户信息
// /ranking/user_info
export const getUserScoreInfo = () => {
return request({
url: `campaign/ranking/user_info`,
method: 'post',
withCredentials: true,
// headers: {
// token: 'D3FFA515261C48478773C0BA17C11F52'
// }
})
}
// 获取服务器时间
//
export const getBEServerTime = () => {
return request({
url: `campaign/tims/getTodayDate`,
method: 'get',
})
}
// 获取已邀请的医生列表
export const getInviteList = () => {
return request({
url: `campaign/inviteDetail/initList?pageNo=1&pageSize=4`, // new
method: 'get',
withCredentials: true,
// headers: {
// token: token
// }
})
}
// 获取打卡状态
export const getClockStatus = (params) => {
return request({
url: `campaign/clock/${params.activityId}/status/${params.id}`,
method: 'get',
withCredentials: true,
})
}
// 去打卡状态
export const goToUpdateClock = (params) => {
return request({
url: `campaign/clock/clock`,
method: 'post',
data: params,
withCredentials: true,
})
}
// 获取activityId
export const getActivityId = () => {
return request({
url: `contents/commonComstant/selectByTypeCode?code=C015`,
method: 'get',
// withCredentials: true,
})
}
// 获取任务列表
export const getTimsActivityInfo = (id) => {
return request({
url: `campaign/tims/timsActivityInfo?activityId=${id}`,
method: 'get',
withCredentials: true,
})
}
export const selectAppModuleParam = async ({id, token }) => {
return request({
url: `/contents/contentAppModule/selectAppModuleParam?id=${id}&token=${token}&setEntry=true`,
withCredentials: true
});
}
export const checkToken = async({token}) => {
return request({
url: `campaign/admin/task/checkToken?token=${token}`,
withCredentials: true
})
}
export const getRole = async ({ token }) => {
return request({
url: `/contents/template/getRole?token=${token}`,
headers: {
token
}
// withCredentials: true
});
}
export const sayHello = async ({ token }) => {
return request({
method: 'POST',
// withCredentials: true,
headers: {
token
},
data: { token },
url: `/diplomat/oauth/sayhello?app_id=pica-crrs`
});
}
// 获取加密过后的id
export const getEncryptId = () => {
return request({
url: `campaign/inviteDetail/vinci`,
method: 'get',
withCredentials: true,
})
}
......@@ -3,17 +3,19 @@ import { Toast } from 'vant';
import { API_CONFIG, REPONSE_CODE } from '@/utils/enumerate';
const { VUE_ENV } = process.env; // server or client
const cookies = require('cookie-universal')();
import { getCookie } from '@/utils/cookieFun';
Axios.interceptors.request.use(
config => {
// 0. Do something before request is sent
// 1. can be add loading
// 2. make sure if need token
console.log('config>>>>>> ', config)
const method = config.method.toLocaleLowerCase();
if (method === 'post' || method === 'put' || method === 'delete') {}
if (config.withCredentials) {
config.headers.token = cookies.get('token') || sessionStorage.getItem('token');
config.headers.token = getCookie('token') || sessionStorage.getItem('token');
}
return config;
},
......
// 明细页排名也接口
import request from './api';
// 获取领取记录列表
export const getOneInviteDetails = (params) => {
return request({
url: `campaign/inviteDetail/oneList`,
params: params,
withCredentials: true
})
}// 获取领取记录列表
export const getTwoInviteDetails = (params) => {
return request({
url: `campaign/inviteDetail/twoList`,
params: params,
withCredentials: true
})
}
// 获取个人明细列表
export const getPersonDetails = (params) => {
return request({
url: `/campaign/tims/personalDetails`,
params: params,
withCredentials: true
})
}
// 获取今日个人排行榜
export const getTodayUserRanking = (data) => {
return request({
url: `/campaign/ranking/today_user_ranking`,
method: 'post',
data: data,
withCredentials: true
})
}
// 获取累计排行榜
export const getAllUserRanking = (data) => {
return request({
url: `/campaign/ranking/user_ranking`,
method: 'post',
data: data,
withCredentials: true
})
}
// 获取个人贡献榜
export const getContributionRanking = (data) => {
return request({
url: `/campaign/ranking/contribution_ranking`,
method: 'post',
data: data,
withCredentials: true
})
}
// 获取机构排行榜
export const getHospitalRanking = (data) => {
return request({
url: `/campaign/ranking/hospital_ranking`,
method: 'post',
data: data,
withCredentials: true
})
}
// 获取昨日获奖名单
export const getYesterdayRanking = (data) => {
return request({
url: `/campaign/ranking/yesterday_user_ranking`,
method: 'post',
data: data,
withCredentials: true
})
}
// 邀请明细页节点奖励
export const getInviteDetailAward = (params) => {
return request({
url: `/campaign/inviteDetail/tims`,
params: params,
withCredentials: true
})
}
\ No newline at end of file
......@@ -42,6 +42,7 @@ export const getRemindStatus = async (token) => {
})
}
// 校验token是否有效
export const checkToken = async (token) => {
return request({
url: `campaign/admin/task/checkToken?token=${token}`,
......@@ -51,6 +52,48 @@ export const checkToken = async (token) => {
}
})
}
// 获取邀请人的头像和名字信息
export const getInviteInfo = async (id) => {
return request({
url: `campaign/inviteOne/info`,
method: 'get',
params: {
id
}
})
}
// 领取课程 POST
export const getCourseById = ({ mobile, authCode, id, taskId, activityId }) => {
return request({
url: `campaign/inviteOne/invited`,
method: 'post',
data: {
mobile, authCode, id, taskId, activityId
},
})
}
// 获取图形验证码
export const getCaptchaGet = async () => {
return request({
url: `account/account/captcha`,
method: 'get'
})
}
// 获取短信验证码
export const getAuthCode = ({ mobilePhone, flag, captchaToken, captchaAnswer }) => {
return request({
url: `account/account/authCode`,
method: 'get',
params: {
mobilePhone, flag, captchaToken, captchaAnswer
},
})
}
/*获取三阶段主要数据*/
export const getThirdMainInfo = async (params) => {
return request({
......
const { NUXT_ENV_APP } = process.env;
export const setCookie = (cname,cvalue, exdays = 7, domain = '.yunqueyi.com', validMsec) => { //yunqueyi.com
let d = new Date(), expires = '';
 
if (NUXT_ENV_APP === 'dev') {
domain = window.location.hostname;
}
if(validMsec){
d.setTime(d.getTime() + validMsec);
}else{
d.setTime(d.getTime() + (exdays * 24 * 60 * 60 * 1000));
}
expires = `expires=${d.toUTCString()}`;
 
document.cookie = `${cname}=${cvalue};path=/;${expires};domain=${domain}`;
}
export const getCookie = (cname) => {
const reg = new RegExp('(^| )' + cname + '=([^;]*)(;|$)');
const arr = document.cookie.match(reg);
return arr ? unescape(arr[2]) : null;
}
export const delCookie = (cname) => {
var exp = new Date();
exp.setTime(exp.getTime() - 1);
var cval = getCookie(cname);
if(cval!=null){
document.cookie = 'token=; path=/; expires=' + new Date(0).toUTCString();
document.cookie = 'token=; path=/; domain=.yunqueyi.com; expires=' + new Date(0).toUTCString();
//document.cookie= name + "="+cval+";path=/;expires="+exp.toGMTString() + ";domain=" + domain;
}
}
......@@ -179,11 +179,24 @@ function getUrlParmByCode(paramList, token) {
list.push(paramList[i].key + '=' + encodeURI(paramList[i].value));
}
dataStr = list.join('&');
s
if (dataStr !== '') return `${str}${dataStr}&token=${token}`;
return `${str}token=${token}`;
}
export const getFirstAwards = (awardsDate) => {
const awardsTime = Date.parse(new Date(awardsDate.replace(/-/g, "/")))
if (Date.parse(new Date(('2019-12-16 00:00:00').replace(/-/g, "/")))<=awardsTime&&Date.parse(new Date(('2019-12-19 23:59:59').replace(/-/g, "/")))>=awardsTime) {
return '小米电视';
} else if (Date.parse(new Date(('2019-12-20 00:00:00').replace(/-/g, "/")))<=awardsTime&&Date.parse(new Date(('2019-12-23 23:59:59').replace(/-/g, "/")))>=awardsTime) {
return '米家洗衣机';
} else if (Date.parse(new Date(('2019-12-24 00:00:00').replace(/-/g, "/")))<=awardsTime&&Date.parse(new Date(('2019-12-26 23:59:59').replace(/-/g, "/")))>=awardsTime) {
return '米家两门冰箱';
} else if (Date.parse(new Date(('2019-12-27 00:00:00').replace(/-/g, "/")))<=awardsTime/*&&Date.parse(new Date('2019-12-29 23:59:59'))>=awardsTime*/) {
return '荣耀手机';
};
}
// 根据不同环境获取topic的URL
// export function getTopicUrl() {
// return getConfigByEvtType('topicUrl')
......
......@@ -23,7 +23,6 @@ export const JsBridgeOptions = {
'gotoLogin',
'shareWechat',
'showNativeToast',
'dispatchEventByModuleCode',
'appBuryingPointEntrust',
'webLoadSuccess',
'WfileImageCallBack',
......
Markdown 格式
0% or
您添加了 0 到此讨论。请谨慎行事。
先完成此消息的编辑!
想要评论请 注册