Просмотр исходного кода

Merge branch 'dev-4.9.3' of http://192.168.32.253:3000/Software/android-cloud-H5 into dev-4.9.3

huangxiaojing лет назад: 4
Родитель
Сommit
7eda291d85

+ 109 - 6
microserviceUserH5/static/css/doubleChristmasActivity.css

@@ -54,18 +54,19 @@ ul, li {
   color: #FFFFFF;
 }
 .rest-time{
-  width: 3.44rem;
   height: 0.5rem;
   line-height: 0.5rem;
   text-align: center;
   position: absolute;
   bottom: 1.12rem;
-  left: 2.04rem;
+  left: 50%;
+  transform: translateX(-50%);
   background: #000000;
   border-radius: 0.29rem;
   opacity: 0.49;
   font-size: 0.22rem;
-        color: #FFFFFF;
+  color: #FFFFFF;
+  padding: 0 0.06rem;
 }
 .limit{
   position: absolute;
@@ -229,6 +230,40 @@ ul, li {
   margin: 0 auto;
   margin-top: 0.2rem;
   padding: 0.2rem;
+  position: relative;
+}
+.activity-finish{
+  width: 100%;
+  height: 100%;
+  position: absolute;
+  top: 0;
+  left: 0;
+  z-index: 101;
+  background: rgba(0, 0, 0, 0.6);
+  border-radius: 0.2rem;
+  display: none;
+}
+.finish-text{
+  width: 1.76rem;
+  height: 1.76rem;
+  line-height: 1.76rem;
+  text-align: center;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  z-index: 999;
+  transform: translate(-50%,-50%);
+  border-radius: 50%;
+  font-size: 0.24rem;
+  color: #333333;
+  background-color: #FFFFFF;
+}
+.no-time-data{
+  height: 3.2rem;
+  line-height: 3.2rem;
+  text-align: center;
+  font-size: 0.32rem;
+  color: #999999;
 }
 .reward-time{
   width: 6.5rem;
@@ -279,14 +314,26 @@ ul, li {
   top: 40%;
   left: -0.1rem;
   transform: translate(-50%,-50%);
+  animation: mymove 1s infinite;
 }
 .right-ear{
   width: 0.16rem;
   height: 0.24rem;
   position: absolute;
   top: 40%;
-  right: -0.26rem;
+  right: -0.2rem;
   transform: translate(-50%,-50%);
+  animation: mymove2 1s infinite;
+}
+@keyframes mymove {
+  0%   {transform: translateX(-3px);}
+  50% {transform: translateX(-4px);}
+  100% {transform: translateX(-3px);}
+}
+@keyframes mymove2 {
+  0%   {transform: translateX(0);}
+  50% {transform: translateX(-2px);}
+  100% {transform: translateX(0);}
 }
 .time-row{
   display: flex;
@@ -381,7 +428,7 @@ input:focus{
   padding: 0 0.22rem 0 0.1rem;
   position: absolute;
   top: 0;
-  z-index: 999;
+  z-index: 99;
 }
 .reward-img{
   width: 1.06rem;
@@ -482,7 +529,7 @@ input:focus{
 .time-content-row{
   display: flex;
   justify-content: space-between;
-  padding: 0.2rem 0.26rem;
+  padding: 0.2rem 0.36rem 0.2rem 0.26rem;
   font-size: 0.24rem;
   font-weight: 600;
   color: #333333;
@@ -574,6 +621,9 @@ input:focus{
   transition:all .6s;
 }
 .no-slider{
+  height: 2.6rem;
+  line-height: 2.6rem;
+  text-align: center;
   font-size: 0.32rem;
   color: #999999;
 }
@@ -588,4 +638,57 @@ input:focus{
 }
 .slider-item{
   width: 100%;
+}
+
+.sure-distribution-wrap{
+  width: 100vw;
+  height: 100vh;
+  position: fixed;
+  top: 0;
+  left: 0;
+  background-color: rgba(0, 0, 0, 0.24);
+  z-index: 999;
+  display: none;
+}
+.sure-distribution-box{
+  width: 6.22rem;
+  height: 2.28rem;
+  background: #FFFFFF;
+  border-radius: 0.2rem;
+  position: absolute;
+  top: 50%;
+  left: 50%;
+  transform: translate(-50%,-50%);
+}
+.sure-distribution-title{
+  text-align: center;
+  padding: 0.48rem;
+  font-size: 0.32rem;
+        color: #333333;
+}
+.sure-distribution-btn-list{
+  width: 100%;
+  height: 0.86rem;
+  display: flex;
+  justify-content: space-between;
+  border-top: 0.01rem solid #E5E5E5;
+  font-size: 0.28rem;
+}
+.sure-distribution-btn{
+  height: 0.86rem;
+  line-height: 0.86rem;
+  text-align: center;
+  flex: 1;
+}
+.sure-distribution-sure{
+  border-left: 0.01rem solid #b4bbc5;
+  color: #3B7FFF;
+}
+.sure-distribution-cannel:active{
+  background-color: #E5E5E5;
+  border-bottom-left-radius: 0.2rem;
+}
+.sure-distribution-sure:active{
+  background-color: #E5E5E5;
+  border-bottom-right-radius: 0.2rem;
 }

+ 10 - 11
microserviceUserH5/static/js/vender/move.js

@@ -9,14 +9,12 @@ var sliderData = (function(cb){
   
   var width = document.documentElement.clientWidth - 50;
   var startX =0;
-  var index = 0;
   var translateX = 0;
   var startTime;
   var newTranslateX;
   var distance = 0;
   var startTranslate;
   var isSlide = false;
-  var sliderNumber = 4;//滑块是数量,控制溢出不能滑动
   
   function touchstart(e){
     startX = e.touches[0].clientX;
@@ -52,7 +50,6 @@ var sliderData = (function(cb){
       } else {
         newTranslateX = startTranslate
       }
-      console.log(cb)
     } else {
       // 向右划
       if (Math.abs(distance) > width / 3 || (Math.abs(distance) > 40 && duration < 600)) {
@@ -60,20 +57,22 @@ var sliderData = (function(cb){
       } else {
         newTranslateX = startTranslate
       }
-      cb();
+      pageNum = Math.abs(newTranslateX / width)
+      if(Math.abs(distance) > 40){
+        cb();
+      }
     }
-  
     translateX = newTranslateX;
     isSlide = false;
     distance = 0;
-    index = Math.abs(newTranslateX / width)
+    pageNum = Math.abs(newTranslateX / width)
   
     document.getElementById("slider-list").style.transform = "translateX("+translateX+"px)"
     lineMove();
   }
   //点击左耳朵
   leftEarDom.addEventListener('click',() => {
-    if (index == 0) return;
+    if (pageNum == 0) return;
     startTranslate = translateX;
     newTranslateX = startTranslate + width;
     translateX = newTranslateX;
@@ -82,7 +81,7 @@ var sliderData = (function(cb){
   })
 	//点击右耳朵
   rightEarDom.addEventListener('click',() => {
-    if (index === sliderNumber - 1) return;
+    if (pageNum === sliderNumber - 1) return;
     startTranslate = translateX;
     newTranslateX = startTranslate - width;
     translateX = newTranslateX;
@@ -92,11 +91,11 @@ var sliderData = (function(cb){
   })
   //下方进度条移动
   function lineMove(){
-    index = Math.abs(newTranslateX / width);
+    pageNum = Math.abs(newTranslateX / width);
     let oneSlider = 36/sliderNumber,
-        transformSlider = oneSlider*index;
+        transformSlider = oneSlider*pageNum;
     scheduleChildLine.style.width = `${oneSlider}px`;
     scheduleChildLine.style.transform = `translateX(${transformSlider}px)`;
-    pageDom.innerText = `${index + 1}/${sliderNumber}页`
+    pageDom.innerText = `${pageNum + 1}/${sliderNumber}页`
   }
 })(getLists)

+ 30 - 1
microserviceUserH5/static/js/vender/vue/api.js

@@ -21,6 +21,16 @@
     method: 'get',
   })
 }
+//获取活动数据
+function getActDetailList(token) {
+  return service({
+    url: `/api/public/v4/actFissionAward/getActDetail`,
+    method: 'get',
+    headers:{
+      'Authorization': token
+    },
+  })
+}
 //跑马灯
 function getMarquee() {
   return service({
@@ -58,4 +68,23 @@ function getStrategy() {
     method: 'get',
   
   })
-}
+}
+//新用户使用激活码
+function getActivationCode(data) {
+  return service({
+    url: `/api/public/v4/actFissionAward/getActivationCode?username=${data}`,
+    method: 'get',
+
+  
+  })
+}
+//数据埋点
+function systemBuriedPoint(data) {
+  return service({
+    url: `/api/public/v1/systemBuriedPoint/stat`,
+    method: 'post',
+    data:data
+
+  
+  })
+}

+ 65 - 18
microserviceUserH5/vcloud/actFission.html

@@ -7,7 +7,7 @@
 	<meta name="description" content="活动">
 	<title>免费领机</title>
 	<link rel="icon" href="../static/img/favicon2.ico" type="img/x-ico">
-	<link rel="stylesheet" href="../static/css/index.css">
+	<link rel="stylesheet" href="../static/css/index.css?v=1.0.0.1">
 	<link rel="stylesheet" href="../static/css/vant.css" />
 	<script src="../static/js/vender/vue/vue.min.js"></script>
 	<script src="../static/js/vender/vue/vant.min.js"></script>
@@ -340,8 +340,8 @@
 			el: '#app',
 			data: {
 				isshow: false,
-				token: GetRequest().token ? GetRequest().token :'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyYW5kb20iOiI3MTI4MSIsImNsaWVudCI6IjAiLCJleHAiOjE2NDAyOTkzNjksInVzZXJuYW1lIjoiYWRtaW4ifQ.RFjJ1f-TlgSWmF5M94n2AxHhGUZWrul244hIxr6jyOQ',
-				topic: {},
+				token: GetRequest().token ? GetRequest().token :
+					'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJyYW5kb20iOiIxNTA2MSIsImNsaWVudCI6IjAiLCJleHAiOjE2NDA0MDYwNTMsInVzZXJuYW1lIjoieWVtZW5nbWVuZzAxIn0.35gCTt6Xd5_52NaRaBKnRh2uJSTNj-y8uK35XouDLdI',
 				rewardList: [],
 				queryParams: {
 					pageNum: 1,
@@ -349,6 +349,7 @@
 				},
 				isDisable: false,
 				finished: false,
+				flag: true,
 				loading: false,
 				finishedText: '没有更多了',
 				offset: 100,
@@ -357,12 +358,14 @@
 				defaultImg: 'this.src="' + "../static/offImg/tou.png" + '"',
 				actStatus: 0, //0活动状态 1开始
 				marqueeList: [],
+				timer:null,
 			},
 			created() {
 				this.getAwardPage(); //获取奖励列表
 			},
 			mounted() {
-				this.getActDetail();
+				this.getActDetailList(); //获取活动上下架
+				//	this.getActDetail();
 				this.getMarquee(); //跑马灯
 
 				//this.getList();
@@ -373,29 +376,57 @@
 					if (this.actStatus != 1) {
 						return
 					}
-					const {
-						title,
-						content,
-						gotoUrl,
-						shareImg
-					} = this.shareInfo;
-					if (isAndroid) {
-						window.native.share(title, content, gotoUrl, shareImg)
-					} else if (isIOS) {
-						window.webkit.messageHandlers.share.postMessage(type);
-					}
+					this.stopManyClick(() => {
+						systemBuriedPoint({
+							pointName: 'dt_裂变_h5_分享攻略'
+						}).then(res => {
+
+						})
+						const {
+							title,
+							content,
+							gotoUrl,
+							shareImg
+						} = this.shareInfo;
+						console.log({
+							title: title,
+							content: content,
+							gotoUrl: gotoUrl,
+							shareImg: shareImg
+						});
+						if (isAndroid) {
+							window.native.share(title, content, gotoUrl, shareImg)
+						} else if (isIOS) {
+							window.webkit.messageHandlers.share.postMessage({
+								title: title,
+								content: content,
+								gotoUrl: gotoUrl,
+								shareImg: shareImg
+							});
+						}
+					});
+
 				},
 				standarImg(id) {
 					return `${fileCenterApi}/file-center/fileOperate/getImage?id=${id}`;
 				},
-				getActDetail() { //获取活动状态
+				// getActDetail(){
+				// 	getActDetail(this.token).then(res => {
+				// 		if (res.status === 0) {
+
+				// 		} else {
+				// 			this.$toast(res.msg);
+				// 		}
+				// 	})
+				// },
+				getActDetailList() { //获取活动状态
 					this.$toast.loading({
 						duration: 0,
 						message: '加载中...',
 						forbidClick: true,
 						loadingType: 'spinner',
 					});
-					getActDetail().then(res => {
+					getActDetailList(this.token).then(res => {
 						this.$toast.clear();
 						if (res.status === 0) {
 							this.actStatus = res.data.actStatus;
@@ -405,6 +436,7 @@
 						}
 					})
 				},
+
 				getAwardPage() { //获取活动列表
 					getAwardPage(this.token, this.queryParams).then(res => {
 						if (res.status == 0) {
@@ -448,7 +480,8 @@
 					})
 				},
 				goGetReward(id) {
-					getCheck(this.token).then(res => {
+					this.stopManyClick(()=>{
+						getCheck(this.token).then(res => {
 						if (res.status === 0) {
 							if (isAndroid) {
 								window.native.activatePhone(1, id)
@@ -465,8 +498,22 @@
 							this.$toast(res.msg);
 						}
 					})
+					})
+					
 
 				},
+				stopManyClick(fn) { //防抖
+					if (this.flag) {
+						fn();
+					}
+					this.flag = false;
+					if (this.timer) {
+						clearTimeout(this.timer);
+					}
+					this.timer = setTimeout(() => {
+						this.flag = true
+					}, 1500);
+				},
 				download() {
 
 				},

+ 68 - 24
microserviceUserH5/vcloud/actFissionShare.html

@@ -7,7 +7,7 @@
     <meta name="description" content="分享朋友">
     <title></title>
     <link rel="icon" href="../static/img/favicon2.ico" type="img/x-ico">
-    <link rel="stylesheet" href="../static/css/index.css">
+    <link rel="stylesheet" href="../static/css/index.css?v=1.0.0.1">
     <link rel="stylesheet" href="../static/css/vant.css" />
     <script src="../static/js/vender/vue/vue.min.js"></script>
     <script src="../static/js/vender/vue/vant.min.js"></script>
@@ -195,6 +195,10 @@
             letter-spacing: 0.02rem;
 
         }
+
+        .van-dialog__footer {
+            display: none;
+        }
     </style>
 </head>
 
@@ -224,8 +228,7 @@
                         <p>激活码:</p>
                         <p>AS4*********SD3</p>
                     </div>
-                    <div class="button-download copybtn" :data-clipboard-text="key"
-                         @click='createCopy()'>点击复制并下载</div>
+                    <div class="button-download copybtn" @click='createCopy()'>点击复制并下载</div>
                 </div>
             </div>
         </div>
@@ -248,10 +251,11 @@
             data: {
                 isshow: true,
                 id: GetRequest().id ? GetRequest().id : 404,
+                username: GetRequest().username ? GetRequest().username : 'admin',
                 topic: null,
                 defaultImg: 'this.src="' + "../static/offImg/tou.png" + '"',
                 marqueeList: [],
-                key: '3333',
+                code: '',
 
             },
             created() {
@@ -288,26 +292,66 @@
                         console.log(res)
                     })
                 },
-                createCopy(){
-                    this.$toast.loading({
-                        duration: 2000,
-                        message: '加载中...',
-                        forbidClick: true,
-                        loadingType: 'spinner',
-                    });
-						var clipboard = new ClipboardJS('.copybtn') //此处为点击的dom的类名
-                       
-						console.log(232);
-						clipboard.on('success', (e)=>{
-                            this.$toast('复制成功');
-						    
-							clipboard.destroy()
-						})
-						clipboard.on('error', (e)=>{
-                            this.$toast('复制失败');
-							clipboard.destroy()
-						})
-					},
+                createCopy() {
+
+                    // this.$toast.loading({
+                    //     duration: 0,
+                    //     message: '加载中...',
+                    //     forbidClick: true,
+                    //     loadingType: 'spinner',
+                    // });
+                    systemBuriedPoint({
+                        pointName: 'dt_裂变_h5_复制激活码'
+                    }).then(res => {
+
+                    })
+                    var clipboard = new ClipboardJS('.copybtn')
+
+                    getActivationCode(this.username).then(res => {
+                        this.$toast.clear();
+                        if (res.status === 0) {
+                            //此处为点击的dom的类名
+                            this.code = res.data[0].code;
+                            console.log(this.code);
+
+                            try {
+                                const input = document.createElement('textarea')
+                                input.value = this.code;
+                                document.body.appendChild(input)
+                                input.select() // 选择对象
+                                document.execCommand('Copy') // 执行浏览器复制命令
+                                input.style.display = 'none'
+                                input.remove()
+                                this.$dialog.alert({
+                                    message: '复制成功'
+                                });
+                                setTimeout(() => {
+                                    this.$dialog.close();
+                                    this.download();
+                                }, 2000)
+                            } catch (err) {
+                                this.$dialog.alert({
+                                    message: '失败'
+                                });
+                                setTimeout(() => {
+                                    this.$dialog.close();
+                                }, 2000)
+                            }
+
+
+
+                        } else {
+                            this.$dialog.alert({
+                                message: res.msg
+                            });
+                            setTimeout(() => {
+                                this.$dialog.close();
+                            }, 2000)
+                        }
+
+                    })
+
+                },
                 download() {
 
                     var u = navigator.userAgent,

+ 412 - 156
microserviceUserH5/vcloud/doubleChristmasActivity.html

@@ -21,8 +21,8 @@
 		<div class="header-container">
 			<img class="top-banner" src="../static/img/doubleChristmasActivity/top-banner.png" />
 			<div class="activity-meal">活动参与套餐:星耀套餐</div>
-			<div class="meal-price">云机低至0.24元/天</div>
-			<div class="rest-time">距离活动结束:20天3时4分30秒</div>
+			<div class="meal-price">云机低至<span class="meal-price-num"></span>元/天</div>
+			<div class="rest-time"></div>
 			<div class="limit">PC端用户不参与本次活动</div>
 		</div>
 		<div class="middle-container">
@@ -59,38 +59,39 @@
 			<div class="rest-tip">使用激活码,优惠券和星币支付不参与活动</div>
 			<div class="tab-row">
 				<div class="tab-item tab-active" data-index="0">充值奖励</div>
-				<div class="tab-item" data-index="1">分配奖励(0000)</div>
+				<div class="tab-item" data-index="1">分配奖励(<span class="time-number"></span>)</div>
 				<img class="tab-bg" src="../static/img/doubleChristmasActivity/tab-bg.png" />
 			</div>
 			<div class="reward-container">
+				<div class="activity-finish">
+					<div class="finish-text">活动已结束</div>
+				</div>
 				<div class="reward-time">
 					<span class="reward-text">购买套餐累计时长</span>
-					<span class="time-num">2222</span>
+					<span class="total-time-num"></span>
 					<span class="reward-text">天</span>
 					<span class="time-line">|</span>
 					<span class="reward-text">距离下一个奖励还差</span>
-					<span class="time-num">2222</span>
+					<span class="next-time-num"></span>
 					<span class="reward-text">天</span>
 				</div>
 				<div class="reward-tip-row">
 					<img class="reward-tip-img" src="../static/img/doubleChristmasActivity/reward-tip-img.png" />
 					<div class="reward-tip">精彩不停的充值福利专场已经来临充值越多折扣越大</div>
 				</div>
-				<div class="reward-list">
-					<div class="reward-last-tip">已获得奖励请在分配奖励栏中进行时长分配</div>
-				</div>
+				<div class="reward-list"></div>
 			</div>
 			<div class="distribution-container">
 				<div class="distribution-time">
 					<div>
 						<span class="distribution-text">奖励总时长</span>
-						<span class="distribution-num">2222</span>
+						<span class="distribution-total-num"></span>
 						<span class="distribution-text">天</span>
 					</div>
 					<span class="distribution-line">|</span>
 					<div>
 						<span class="distribution-text">未分配时长</span>
-						<span class="distribution-num">2222</span>
+						<span class="no-distribution-num"></span>
 						<span class="distribution-text">天</span>
 					</div>
 				</div>
@@ -122,26 +123,7 @@
 						<div>时间</div>
 						<div>时长</div>
 					</div>
-					<div class="time-content-row">
-						<div>lo试玩撒了</div>
-						<div>2021年11月24日15:48:44</div>
-						<div>1000天</div>
-					</div>
-					<div class="time-content-row">
-						<div>lo试玩撒了</div>
-						<div>2021年11月24日15:48:44</div>
-						<div>1000天</div>
-					</div>
-					<div class="time-content-row">
-						<div>lo试玩撒了</div>
-						<div>2021年11月24日15:48:44</div>
-						<div>1000天</div>
-					</div>
-					<div class="time-content-row">
-						<div>lo试玩撒了</div>
-						<div>2021年11月24日15:48:44</div>
-						<div>1000天</div>
-					</div>
+					<div class="no-time-data">暂无分配时长</div>
 				</div>
 			</div>
 			<div class="rule-container">
@@ -156,14 +138,22 @@
 					<div class="rule-point">2.使用星币支付、激活码兑换、优惠劵购买和购买非星耀套餐不计入任务进度。</div>
 					<div class="rule-point">3.奖励获取的云机时长仅可用于续费账号中现有的星曜云机设备。</div>
 					<div class="rule-point blue">4.奖励领取日期为:2021年12月18日-2022年1月6日,超过领取时间未领取奖励则视为放弃任务奖励。</div>
-					<div class="rule-point">5.授权的云手机不能获取累计奖励时长。</div>
+					<div class="rule-point">5.从他人获取授权的云手机不能分配累计奖励时长。</div>
 					<div class="rule-point">三、其他说明</div>
 					<div class="rule-point">1.本次活动不与其他活动优惠叠加。</div>
 					<div class="rule-point">2.本次活动期间购买的云手机套餐不支持退款。</div>
 					<div class="rule-point">3.双子星官方对活动具有最终解释权。</div>
 				</div>
 			</div>
-
+		</div>
+		<div class="sure-distribution-wrap">
+			<div class="sure-distribution-box">
+				<div class="sure-distribution-title">确定分配奖励时长</div>
+				<div class="sure-distribution-btn-list">
+					<div class="sure-distribution-btn sure-distribution-cannel">取消</div>
+					<div class="sure-distribution-btn sure-distribution-sure">确定</div>
+				</div>
+			</div>
 		</div>
 	</div>
 	<script>
@@ -180,6 +170,9 @@
 		// 上线分享环境改为0,图片路径改为正式站路径
 		// var baseUrl = 'https://test.androidscloud.com'
 		var loc = window.location.search,
+			n1 = loc.length,//地址的总长度
+			n2 = loc.indexOf("="),//取得=号的位置
+			id = loc.substr(n2 + 1, n1 - n2),//从=号后面的内容
 			u = navigator.userAgent,
 			ua = navigator.userAgent.toLowerCase(),
 			isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
@@ -198,33 +191,48 @@
 			isMiniprogram = false;
 		}
 		let s = loc.substr(1, loc.length - 1);//取得=号的位置
-		let parms = s.split('&');
-		parms.map((item) => {
-			let arr = item.split('=');
-			let key = arr[0];
-			obj[key] = arr[1];
-		})
-		getList();
-		getLists();
+		let userName = '';
+		let totalTime = 0;
+		let christmasDoubleReward = 0;
+		let currTotalTime = 0;
+		let distributionList = [];
+		var pageNum = 0;
+		var sliderNumber = 0;//滑块是数量,控制溢出不能滑动
+		// let parms = s.split('&');
+		// parms.map((item) =>{
+		// 	let arr = item.split('=');
+		// 	let key = arr[0];
+		// 	obj[key] = arr[1];
+		// })
+		getBaseData();
 		//点击立即参与按钮
 		$('.join-activity-btn')[0].addEventListener('click', () => {
+			operate('dt_双旦_h5_立即参与');
 			if (isAndroid) { // 安卓
 				window.native.startPurchase(1, 365);
-			} if (isMiniprogram) { // 小程序
+			} else if (isMiniprogram) { // 小程序
 				wx.miniProgram.navigateTo({
 					url: '/packageA/order/buy/index'
 				})
-			} else {
+			} else if (isiOS) {
 				window.webkit.messageHandlers.startPurchase.postMessage({ type: 2, day: 365 });
 			}
 		})
 		//点击去完成
 		$('.reward-list')[0].addEventListener('click', (e) => {
 			if (e.target.className === 'reward-btn') {
+				let receive = e.target.dataset.receive;
+				if (receive !== 'null') {
+					return
+				}
 				if (isAndroid) { // 安卓
 					window.native.startPurchase(1, 365);
-				} else {
+				} else if (isiOS) {
 					window.webkit.messageHandlers.startPurchase.postMessage({ type: 2, day: 365 });
+				} else if (isMiniprogram) { // 小程序
+					wx.miniProgram.navigateTo({
+						url: '/packageA/order/buy/index'
+					})
 				}
 			}
 		});
@@ -235,12 +243,16 @@
 				return
 			}
 			if (index == 0) {
+				operate('dt_双旦_h5_tab_充值奖励');
 				$('.tab-item')[1].className = 'tab-item';
 				$('.tab-bg')[0].className = 'tab-bg tab-left';
 				$('.reward-container').eq(0).css('display', 'block');
 				$('.distribution-container').eq(0).css('display', 'none');
 				$('.distribution-container').eq(1).css('display', 'none');
 			} else {
+				operate('dt_双旦_h5_tab_分配奖励');
+				getLists();
+				distributionRecord();
 				$('.tab-item')[0].className = 'tab-item';
 				$('.tab-bg')[0].className = 'tab-bg tab-right';
 				$('.reward-container').eq(0).css('display', 'none');
@@ -249,149 +261,379 @@
 			}
 			$('.tab-item')[index].className = 'tab-item tab-active';
 		})
+		//获取倒计时
+		function getBaseData() {
+			$.ajax({
+				url: baseUrl + '/api/user/v1/activity/getChristmasActivityConf',
+				type: 'get',
+				headers: {
+					'Authorization': id //id
+				},
+				contentType: "application/json",
+				dataType: 'json',
+				cache: false,
+				success: function (res) {
+					getList();
+					const objData = res.data;
+					userName = objData.userName;
+					christmasDoubleReward = objData.christmasDoubleReward;
+					$('.meal-price-num').eq(0).text(objData.price);
+					let currTime = parseInt(Date.parse(objData.now)),
+						closeTime = parseInt(Date.parse(objData.endTime)),
+						result = closeTime - currTime,
+						day = parseInt(result / 1000 / 60 / 60 / 24),
+						hour = parseInt(result / 1000 / 60 / 60 % 24),
+						minute = parseInt(result / 1000 / 60 % 60),
+						seconds = parseInt(result / 1000 % 60),
+						time = day + "天" + hour + "时" + minute + "分" + seconds + "秒";
+					const timeInterval = setInterval(() => {
+						if (seconds > 0) {
+							seconds--;
+						} else if (minute > 0) {
+							seconds = 59;
+							minute--;
+						} else if (hour > 0) {
+							minute = 59;
+							hour--;
+						} else if (day > 0) {
+							hour = 59;
+							day--;
+						} else {
+							clearInterval(timeInterval);
+						}
+						time = day + "天" + hour + "时" + minute + "分" + seconds + "秒";
+						let str = `距离活动结束:${time}`
+						$('.rest-time').eq(0).text(str);
+					}, 1000)
+					let str = `距离活动结束:${time}`
+					if (day == 0 && hour == 0 && minute == 0 && seconds == 0 || objData.activityEnd) {
+						str = '已结束'
+						getList()
+					}
+					$('.rest-time').eq(0).text(str);
+				},
+			})
+		}
 		//调用获取数据列表接口
 		function getList() {
-			// $.ajax({
-			// 	url: baseUrl + '/api/user/v1/activity/orderRedEnvelopeSharing',
-			// 	type: 'post',
-			// 	headers: {
-			// 		'Authorization': obj.token //id
-			// 	},
-			// 	contentType: "application/json",
-			// 	dataType: 'json',
-			// 	cache: false,
-			// 	success: function (res) {
-			// 		if(res.status === 0){
-			// 			if(res.data && res.data.length > 0){
-			let res = {
-				data: [{
-					shareCount: 10,
-					totalMoney: 30
-				}, {
-					shareCount: 40,
-					totalMoney: 90
-				}, {
-					shareCount: 80,
-					totalMoney: 180
-				}, {
-					shareCount: 240,
-					totalMoney: 365
-				}, {
-					shareCount: 800,
-					totalMoney: 730
-				}, {
-					shareCount: 3022,
-					totalMoney: 2022
-				}, {
-					shareCount: 3022,
-					totalMoney: 2022
-				}]
-			}
-			var str = '',
-				len = res.data.length;
-			for (var i = 0; i < len; i++) {
-				var totalMoney = res.data[i].totalMoney,
-					shareCount = res.data[i].shareCount;
-				str += `<div class="reward-row">
+			$.ajax({
+				url: baseUrl + '/api/user/v1/activity/getReceivingList',
+				type: 'get',
+				headers: {
+					'Authorization': id //id
+				},
+				contentType: "application/json",
+				dataType: 'json',
+				cache: false,
+				success: function (res) {
+					if (res.status === 0) {
+						if (res.data.open == 2) {
+							$('.activity-finish').eq(0).css('display', 'block');
+						}
+						if (res.data && res.data.operateActivityGoodsInfos.length > 0) {
+							var str = '',
+								flag = true,
+								nextDuration = 0,
+								usedDuration = res.data.usedDuration,
+								rewardDuration = res.data.rewardDuration,
+								totalDuration = res.data.totalDuration,
+								len = res.data.operateActivityGoodsInfos.length;
+							for (var i = 0; i < len; i++) {
+								let rewardDuration = res.data.operateActivityGoodsInfos[i].rewardDuration,
+									receiveDuration = res.data.operateActivityGoodsInfos[i].receiveDuration,
+									cumulativeDuration = res.data.operateActivityGoodsInfos[i].cumulativeDuration;
+								str += `<div class="reward-row">
 										<img class="reward-row-bg" src="../static/img/doubleChristmasActivity/reward-row-bg.png" />
 										<div class="reward-row-content">
 											<img class="reward-img" src="../static/img/doubleChristmasActivity/reward.png" />
 											<div class="reward-day-text">
-												<div class="reward-day">奖励天数${shareCount}天</div>
-												<div class="total-day">购买套餐累计时长达${totalMoney}天</div>
+												<div class="reward-day">奖励天数${rewardDuration}天</div>
+												<div class="total-day">购买套餐累计时长达${cumulativeDuration}天</div>
 											</div>
-											<img class="reward-btn" src="../static/img/doubleChristmasActivity/finish-btn.png" />
+											<img class="reward-btn" data-receive=${receiveDuration} src="../static/img/doubleChristmasActivity/${receiveDuration ? 'get-btn' : 'finish-btn'}.png" />
 										</div>
 									</div>`
-			}
-			str += `<div class="reward-last-tip">已获得奖励请在分配奖励栏中进行时长分配</div>`
-			$('.reward-list').eq(0).append(str);
-			// 			}
-			// 		}else{
-			// 			stopManyClick(() => {
-			// 				toastr.error(res.msg);
-			// 			})
-			// 		}
-			// 	}
-			// })
+								if (totalDuration - cumulativeDuration < 0 && flag) {
+									flag = false;
+									nextDuration = cumulativeDuration - totalDuration;
+								}
+							}
+							str += `<div class="reward-row">
+								<img class="reward-row-bg" src="../static/img/doubleChristmasActivity/reward-row-bg.png" />
+								<div class="reward-row-content">
+									<img class="reward-img" src="../static/img/doubleChristmasActivity/reward.png" />
+									<div class="reward-day-text">
+										<div class="reward-day">星曜套餐买一送二</div>
+										<div class="total-day">购买套餐累计时长达高于${christmasDoubleReward}天</div>
+									</div>
+									<img class="reward-btn" data-receive=33 src="../static/img/doubleChristmasActivity/finish-btn.png" />
+								</div>
+							</div>`
+							str += `<div class="reward-last-tip">已获得奖励请在分配奖励栏中进行时长分配</div>`
+							$('.reward-list').eq(0).append(str);
+							$('.time-number').eq(0).text(rewardDuration);
+							$('.total-time-num').eq(0).text(totalDuration);
+							$('.next-time-num').eq(0).text(nextDuration);
+							$('.distribution-total-num').eq(0).text(rewardDuration);
+							const noDistributionDuration = rewardDuration - usedDuration;
+							totalTime = noDistributionDuration;
+							$('.no-distribution-num').eq(0).text(noDistributionDuration);
+						}
+					} else {
+						stopManyClick(() => {
+							toastr.error(res.msg);
+						})
+					}
+				}
+			})
+		}
+		// 获取分配列表数据
+		function distributionRecord() {
+			$.ajax({
+				url: baseUrl + '/api/user/v1/activity/queryUserDistribution',
+				type: 'get',
+				data: {
+					pageNum: pageNum + 1,
+					pageSize: 10,
+					userName: userName
+				},
+				headers: {
+					'Authorization': id //id
+				},
+				contentType: "application/json",
+				dataType: 'json',
+				cache: false,
+				success: function (res) {
+					console.log(res)
+					if (res.status === 0) {
+						let records = res.data.records;
+						if (res.data && records.length > 0) {
+							var str = '',
+								len = records.length;
+							for (var i = 0; i < len; i++) {
+								var diskName = records[i].diskName,
+									createTime = records[i].createTime,
+									increaseDuration = records[i].increaseDuration,
+									id = records[i].id;
+								str += `<div class="time-content-row">
+										<div>${diskName}</div>
+										<div>${createTime.substring(0, 4)}年${createTime.substring(5, 7)}月${createTime.substring(8, 10)}日 ${createTime.substring(11, 19)}</div>
+										<div>${increaseDuration}天</div>
+									</div>`
+							}
+							$('.time-list').eq(0).append(str);
+							if (len !== 0) {
+								$('.no-time-data').eq(0).css('display', 'none');
+							}
+						}
+					} else {
+						stopManyClick(() => {
+							toastr.error(res.msg);
+						})
+					}
+				},
+			})
 		}
-		//获取分配列表数据
+		// 活动获取用户云机列表,分页
 		function getLists() {
+			console.log(id)
 			const sliderLen = Array.from($('.slider-item')).length;
-			if (sliderLen > 4) {
+			if (sliderLen > sliderNumber) {
 				return
 			}
-			// $.ajax({
-			// 	url: baseUrl + '/api/user/v1/activity/orderRedEnvelopeSharing',
-			// 	type: 'post',
-			// 	headers: {
-			// 		'Authorization': obj.token //id
-			// 	},
-			// 	contentType: "application/json",
-			// 	dataType: 'json',
-			// 	cache: false,
-			// 	success: function (res) {
-			// 		if(res.status === 0){
-			// 			if(res.data && res.data.length > 0){
-			let res = {
-				data: [{
-					shareCount: 10,
-					totalMoney: 30
-				}, {
-					shareCount: 40,
-					totalMoney: 90
-				}, {
-					shareCount: 80,
-					totalMoney: 180
-				}]
-			}
-			var str = '',
-				len = res.data.length;
-			for (var i = 0; i < len; i++) {
-				var totalMoney = res.data[i].totalMoney,
-					shareCount = res.data[i].shareCount;
-				str += `<div class="reward-row">
+			$.ajax({
+				url: baseUrl + '/api/user/v1/activity/getUserCardPage',
+				type: 'get',
+				data: {
+					pageNum: pageNum + 1,
+					pageSize: 4,
+					phoneType: 'SVIP'
+				},
+				headers: {
+					'Authorization': id //id
+				},
+				contentType: "application/json",
+				dataType: 'json',
+				cache: false,
+				success: function (res) {
+					if (res.status === 0) {
+						let records = res.data.userCardPage.records;
+						if (res.data && records.length > 0) {
+							sliderNumber = res.data.userCardPage.pages;
+							var str = '',
+								len = records.length;
+							for (var i = 0; i < len; i++) {
+								var diskName = records[i].diskName,
+									exceptTime = records[i].exceptTime,
+									now = res.data.now,
+									currTime = parseInt(Date.parse(now)),
+									closeTime = parseInt(Date.parse(exceptTime)),
+									resultTime = closeTime - currTime,
+									day = parseInt(resultTime / 1000 / 60 / 60 / 24),
+									hour = parseInt(resultTime / 1000 / 60 / 60 % 24),
+									time = day + "天" + hour + "时";
+								recordsId = records[i].id;
+								str += `<div class="reward-row">
 										<img class="reward-row-bg" src="../static/img/doubleChristmasActivity/reward-row-bg.png" />
 										<div class="reward-row-content">
 											<img class="icon_xingyao" src="../static/img/doubleChristmasActivity/home_list_icon_xingyao.png" />
 											<div class="reward-day-text">
-												<div class="reward-day">Y2-12567</div>
+												<div class="reward-day">${diskName}</div>
 												<div class="total-day time-row">
 													<img class="time-icon" src="../static/img/doubleChristmasActivity/time-icon.png" />
-													<span>剩99999天24小时</span>
+													<span>${time}</span>
 												</div>
 											</div>
 											<div class="compute-block">
 												<img class="compute-icon cut" src="../static/img/doubleChristmasActivity/cut.png" />
-												<input class="ipt" type="number" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" value="0" maxlength="5" />
-												<img class="compute-icon add" src="../static/img/doubleChristmasActivity/add.png" />
+												<input class="ipt" data-id=${recordsId} data-index=${i} type="number" onkeyup="this.value=this.value.replace(/[^0-9]/g,'')" value="0" />
+												<img class="compute-icon add" data-id=${recordsId} data-index=${i} src="../static/img/doubleChristmasActivity/add.png" />
 											</div>
 										</div>
 									</div>`
-			}
-			let sliderItemDom = res.data.length === 0 ? `<div class="slider-item no-slider">暂无可分配的云手机</div>` : `<div class="slider-item">${str}</div>`;
-			$('#slider-list').append(sliderItemDom);
-			if (res.data.length === 0) {
-				$('.left-ear').eq(0).css('display', 'none');
-				$('.right-ear').eq(0).css('display', 'none');
-				$('.page-row').eq(0).css('display', 'none');
-			}
-			// 			}
-			// 		}else{
-			// 			stopManyClick(() => {
-			// 				toastr.error(res.msg);
-			// 			})
-			// 		}
-			// 	}
-			// })
+
+							}
+							let sliderItemDom = res.data.length === 0 ? `<div class="slider-item no-slider">暂无可分配的云手机</div>` : `<div class="slider-item">${str}</div>`;
+							$('#slider-list').append(sliderItemDom);
+							if (records.length === 0) {
+								$('.left-ear').eq(0).css('display', 'none');
+								$('.right-ear').eq(0).css('display', 'none');
+								$('.page-row').eq(0).css('display', 'none');
+								$('.distribution-reward-btn').eq(0).css('display', 'none');
+							}
+							$('.page').eq(0).text(`${pageNum + 1}/${sliderNumber}页`);
+							if (sliderNumber === 1) {
+								$('.page-row').eq(0).css('display', 'none');
+								$('.distribution-reward-btn').eq(0).css('margin-top', '20px');
+							}
+							for (var i = 0; i < len; i++) {
+								iptIndex = (pageNum) * 4 + parseInt(i);
+								$('.ipt')[iptIndex].oninput = function (e) {
+									const id = e.target.dataset.id;
+									let oldDuration = 0;
+									let preTotalTime = 0;
+									let index = e.target.dataset.index;
+									let value = $('.ipt').eq(index).val();
+									distributionList.map(item => { // 上一次的总数据
+										preTotalTime += parseInt(item.duration);
+									})
+									//这一次操作
+									if (value == 0) {
+										distributionList.push({
+											cardId: id,
+											duration: +value
+										});
+									} else {
+										distributionList.map(item => {
+											if (item.cardId == id) {
+												oldDuration = item.duration;
+												item.duration = +value;
+											}
+										})
+									}
+									currTotalTime = 0;
+									distributionList.map(item => { // 这一次的总数据
+										currTotalTime += parseInt(item.duration);
+									})
+									console.log(currTotalTime);
+									if (currTotalTime < totalTime) { // 当前已分配小于总分配时长
+
+									} else {// 当前已分配大于总分配时长
+										let val = totalTime - preTotalTime;
+										distributionList.map(item => {
+											if (item.cardId == id) {
+												item.duration = val;
+											}
+										})
+										$('.ipt').eq(index).val(val);
+										stopManyClick(() => {
+											toastr.error('分配时常不能大于未分配时常');
+										})
+										return
+									};
+									if (value.length > 5) value = value.slice(0, 5);
+									$('.ipt').eq(index).val(value);
+								}
+							}
+						}
+					} else {
+						stopManyClick(() => {
+							toastr.error(res.msg);
+						})
+					}
+				}
+			})
 		}
+		//点击分配时常按钮
+		$('.distribution-reward-btn')[0].addEventListener('click', (e) => {
+			if (distributionList.length === 0) {
+				stopManyClick(() => {
+					toastr.error('未选中任何云手机');
+				})
+			} else {
+				$('.sure-distribution-wrap').eq(0).css('display', 'block');
+			}
+		});
+		//点击分配时常取消按钮
+		$('.sure-distribution-cannel')[0].addEventListener('click', (e) => {
+			operate('dt_双旦_h5_分配奖励_取消');
+			$('.sure-distribution-wrap').eq(0).css('display', 'none');
+		});
+		//点击分配时常确定按钮
+		$('.sure-distribution-sure')[0].addEventListener('click', (e) => {
+			$.ajax({
+				url: baseUrl + '/api/user/v1/activity/distributeRewardDuration',
+				type: 'post',
+				data: JSON.stringify(distributionList),
+				headers: {
+					'Authorization': id //id
+				},
+				contentType: "application/json",
+				dataType: 'json',
+				cache: false,
+				success: function (res) {
+					console.log(res)
+					if (res.status === 0) {
+						operate('dt_双旦_h5_分配奖励_确定');
+						$('.sure-distribution-wrap').eq(0).css('display', 'none');
+						$('.reward-list').eq(0).text('');
+						getList();
+						getLists();
+						stopManyClick(() => {
+							toastr.error('分配时长成功,请前往云机列表查看');
+						})
+					} else {
+						stopManyClick(() => {
+							toastr.error(res.msg);
+						})
+					}
+				},
+			})
+		});
 		//点击加号
 		$('.slider-list')[0].addEventListener('click', (e) => {
+			console.log(sliderNumber)
 			if (e.target.className === 'compute-icon add') {
-				let number = $('.ipt').eq(0).val();
-				number++;
-				if (number < 30) {
-					$('.ipt').eq(0).val(number);
+				const id = e.target.dataset.id;
+				let index = e.target.dataset.index;
+				index = (pageNum) * 4 + parseInt(index);
+				let number = $('.ipt').eq(index).val();
+				if (number < totalTime - 1) {
+					if (number == 0) {
+						distributionList.push({
+							cardId: id,
+							duration: +number + 1
+						});
+					} else {
+						distributionList.map(item => {
+							if (item.cardId == id) {
+								item.duration++;
+							}
+						})
+					}
+					number++;
+					currTotalTime++;
+					$('.ipt').eq(index).val(number);
 				} else {
 					stopManyClick(() => {
 						toastr.error('分配时常不能大于未分配时常');
@@ -404,7 +646,20 @@
 			if (e.target.className === 'compute-icon cut') {
 				let number = $('.ipt').eq(0).val();
 				if (number > 0) {
+					if (number == 0) {
+						distributionList.push({
+							cardId: id,
+							duration: +number - 1
+						});
+					} else {
+						distributionList.map(item => {
+							if (item.cardId == id) {
+								item.duration--;
+							}
+						})
+					}
 					number--;
+					currTotalTime--;
 					$('.ipt').eq(0).val(number);
 				} else {
 					stopManyClick(() => {
@@ -413,8 +668,9 @@
 				}
 			}
 		});
+
 		//埋点
-		operate('dt_双11_h5_活动页面');
+		operate('dt_双旦_h5_活动首页');
 		function operate(pointName, type) {
 			$.ajax({
 				url: baseUrl + '/api/public/v1/systemBuriedPoint/stat',

+ 8 - 4
microserviceUserH5/vcloud/share.html

@@ -7,7 +7,7 @@
 	<meta name="description" content="分享朋友">
 	<title></title>
 	<link rel="icon" href="../static/img/favicon2.ico" type="img/x-ico">
-	<link rel="stylesheet" href="../static/css/index.css">
+	<link rel="stylesheet" href="../static/css/index.css?v=1.0.0.1">
 	<link rel="stylesheet" href="../static/css/vant.css" />
 	<script src="../static/js/vender/vue/vue.min.js"></script>
 	<script src="../static/js/vender/vue/vant.min.js"></script>
@@ -26,21 +26,24 @@
 			height: 1.36rem;
 			padding: 0 1.14rem;
 			width: 100%;
+			display: flex;
+			justify-content: center;
 			left: 0;
 		}
 
 		.footer img {
-			width: 100%;
+	        width: 5.22rem;
 			height: 100%;
 		}
 
 		.hideContainer {
-			width: 100%;
+			width: 7.5rem;
 			display: flex; 
 			justify-content: center;
 			align-items: center;
 			height: calc(100vh - 1.36rem);
 			text-align: center;
+			margin: 0 auto;
 
 		}
 
@@ -57,7 +60,8 @@
 		}
 
 		.top-content {
-			width: 100%;
+			width: 7.5rem;
+			margin: 0 auto;
 			padding: 0.2rem 0.3rem;
 
 		}