wenjie 1 rok temu
rodzic
commit
4f658e7acf
100 zmienionych plików z 2432 dodań i 363 usunięć
  1. 1 1
      api/activity.js
  2. 18 2
      api/common.js
  3. 46 0
      api/refuel.js
  4. 5 2
      components/zs-banner/index.vue
  5. 1 1
      detail/discountsDetail/refuel.vue
  6. 24 18
      detail/goodsDetail/index.vue
  7. 10 1
      detail/shopDetail/shopDetail.vue
  8. 174 6
      hotel/index.vue
  9. 93 73
      login/login/login.vue
  10. 44 2
      login/login/otherLogin.vue
  11. 604 0
      login/login/xieyi.vue
  12. 1 1
      my/edit/edit.vue
  13. 264 85
      my/order/detail.vue
  14. 2 0
      my/order/index.vue
  15. 63 14
      my/order/signUp/signUpDetail.vue
  16. 17 0
      my/order/webView.vue
  17. 21 3
      pages.json
  18. 7 6
      pages/index/index.vue
  19. 2 3
      pay/pay.vue
  20. 1 2
      pay/pay1.vue
  21. 115 56
      refuel/index.vue
  22. 458 62
      refuel/refuelDetail.vue
  23. 6 1
      scenic/detail.vue
  24. 372 0
      scenic/makeOut.vue
  25. 7 3
      signUp/index.vue
  26. 74 18
      signUp/makeOut.vue
  27. 2 1
      study/index.vue
  28. 0 0
      unpackage/dist/build/.automator/h5/.automator.json
  29. 0 0
      unpackage/dist/build/.automator/mp-weixin/.automator.json
  30. 0 2
      unpackage/dist/build/h5/index.html
  31. BIN
      unpackage/dist/build/h5/static/active.png
  32. BIN
      unpackage/dist/build/h5/static/add.png
  33. BIN
      unpackage/dist/build/h5/static/banner.png
  34. BIN
      unpackage/dist/build/h5/static/camera.png
  35. BIN
      unpackage/dist/build/h5/static/card-bg.png
  36. BIN
      unpackage/dist/build/h5/static/card-bg1.png
  37. BIN
      unpackage/dist/build/h5/static/card.png
  38. BIN
      unpackage/dist/build/h5/static/combo.png
  39. BIN
      unpackage/dist/build/h5/static/cs1.png
  40. BIN
      unpackage/dist/build/h5/static/cs2.png
  41. BIN
      unpackage/dist/build/h5/static/cs3.png
  42. BIN
      unpackage/dist/build/h5/static/diamon.png
  43. BIN
      unpackage/dist/build/h5/static/emoji.png
  44. BIN
      unpackage/dist/build/h5/static/equity1.png
  45. BIN
      unpackage/dist/build/h5/static/equity2.png
  46. BIN
      unpackage/dist/build/h5/static/equity3.png
  47. BIN
      unpackage/dist/build/h5/static/equity4.png
  48. BIN
      unpackage/dist/build/h5/static/equity5.png
  49. BIN
      unpackage/dist/build/h5/static/food1.png
  50. BIN
      unpackage/dist/build/h5/static/food2.png
  51. BIN
      unpackage/dist/build/h5/static/food3.png
  52. BIN
      unpackage/dist/build/h5/static/food4.png
  53. BIN
      unpackage/dist/build/h5/static/home_off.png
  54. BIN
      unpackage/dist/build/h5/static/home_on.png
  55. BIN
      unpackage/dist/build/h5/static/hot-white.png
  56. BIN
      unpackage/dist/build/h5/static/hot.png
  57. BIN
      unpackage/dist/build/h5/static/hot1.png
  58. BIN
      unpackage/dist/build/h5/static/hotel1.png
  59. BIN
      unpackage/dist/build/h5/static/hotel2.png
  60. BIN
      unpackage/dist/build/h5/static/hotel3.png
  61. BIN
      unpackage/dist/build/h5/static/hotel4.png
  62. BIN
      unpackage/dist/build/h5/static/hotel5.png
  63. BIN
      unpackage/dist/build/h5/static/icon.png
  64. BIN
      unpackage/dist/build/h5/static/icon1.png
  65. BIN
      unpackage/dist/build/h5/static/icon2.png
  66. BIN
      unpackage/dist/build/h5/static/icon3.png
  67. BIN
      unpackage/dist/build/h5/static/icon4.png
  68. BIN
      unpackage/dist/build/h5/static/img-loading.png
  69. BIN
      unpackage/dist/build/h5/static/img/banner.0cd1091e.png
  70. BIN
      unpackage/dist/build/h5/static/img/card-bg.7750314a.png
  71. BIN
      unpackage/dist/build/h5/static/img/card-bg1.1560652a.png
  72. BIN
      unpackage/dist/build/h5/static/img/cs1.31699093.png
  73. BIN
      unpackage/dist/build/h5/static/img/cs2.a6ef70d3.png
  74. BIN
      unpackage/dist/build/h5/static/img/cs3.550f1c68.png
  75. BIN
      unpackage/dist/build/h5/static/img/hotel2.5bb68c5d.png
  76. BIN
      unpackage/dist/build/h5/static/img/hotel3.f22bcb3b.png
  77. BIN
      unpackage/dist/build/h5/static/img/js1.0c7fbac8.png
  78. BIN
      unpackage/dist/build/h5/static/img/js2.17b6f2f8.png
  79. BIN
      unpackage/dist/build/h5/static/img/js3.da081eb8.png
  80. BIN
      unpackage/dist/build/h5/static/img/js4.12ce18d9.png
  81. BIN
      unpackage/dist/build/h5/static/img/logo.9344b7fa.png
  82. BIN
      unpackage/dist/build/h5/static/img/service.d9aa6a17.png
  83. BIN
      unpackage/dist/build/h5/static/img/top-bg.320d60f2.png
  84. BIN
      unpackage/dist/build/h5/static/img/yanxue.98dd69ad.png
  85. BIN
      unpackage/dist/build/h5/static/img/yl4.c29c677b.png
  86. 0 0
      unpackage/dist/build/h5/static/index.63b34199.css
  87. BIN
      unpackage/dist/build/h5/static/jiayou.png
  88. BIN
      unpackage/dist/build/h5/static/jiayou1.png
  89. BIN
      unpackage/dist/build/h5/static/jiayou2.png
  90. BIN
      unpackage/dist/build/h5/static/jiayou3.png
  91. 0 0
      unpackage/dist/build/h5/static/js/chunk-vendors.7b01b7e8.js
  92. 0 0
      unpackage/dist/build/h5/static/js/combo-combo-combo.52b16176.js
  93. 0 0
      unpackage/dist/build/h5/static/js/combo-combo-combo~integral-logs~pages-index-visitorIndex.114470d6.js
  94. 0 0
      unpackage/dist/build/h5/static/js/combo-combo-combo~login-login-otherLogin~my-edit-edit~pages-index-visitorIndex.ac091977.js
  95. 0 0
      unpackage/dist/build/h5/static/js/combo-combo-combo~login-login-otherLogin~pages-index-visitorIndex.dca64b3f.js
  96. 0 0
      unpackage/dist/build/h5/static/js/combo-combo-combo~study-community.5a7022ad.js
  97. 0 0
      unpackage/dist/build/h5/static/js/detail-discountsDetail-index.2b879ca0.js
  98. 0 0
      unpackage/dist/build/h5/static/js/detail-discountsDetail-index~detail-shopDetail-shopDetail~integral-logs~integral-shop~my-favorite-in~9199b9c6.f9dca844.js
  99. 0 0
      unpackage/dist/build/h5/static/js/detail-qrcode-index.79699e10.js
  100. 0 0
      unpackage/dist/build/h5/static/js/detail-shopDetail-shopDetail.7f1d35aa.js

+ 1 - 1
api/activity.js

@@ -11,7 +11,7 @@ export function getActivityDetail(data) {
 // 获取模板详情
 export function getTemplateDetail(data) {
 	return request({
-		url: '/zswl-cloud-shop/dataTemplate/detail',
+		url: '/zswl-cloud-shop/activitySignupOrder/getContent',
 		data
 	})
 }

+ 18 - 2
api/common.js

@@ -9,6 +9,14 @@ export function register(data) {
 	})
 }
 
+// 解决微信接口异常问题
+export function clear(data) {
+	return request({
+		url: '/zswl-cloud-bdb/user/clear',
+		data
+	})
+}
+
 // 获取短信验证码
 export function sendVerifyCode(data) {
 	return request({
@@ -129,7 +137,7 @@ export function getScheme(data) {
 // 	})
 // }
 
-// 获取oss上传
+// 头像获取oss上传
 export function uploadImg(data) {
 	return request({
 		url: '/zswl-cloud-bdb/user/requestUploadImg',
@@ -138,7 +146,7 @@ export function uploadImg(data) {
 	})
 }
 
-// 通知服务端上传结果
+// 头像通知服务端上传结果
 export function finishUploadImg(data) {
 	return request({
 		url: '/zswl-cloud-bdb/user/finishUploadImg',
@@ -147,6 +155,14 @@ export function finishUploadImg(data) {
 	})
 }
 
+// 上传正常图片
+export function finishUpload(data) {
+	return request({
+		url: '/zswl-cloud-bdb/user/finishUploadImg?type=2',
+		method:'post',
+		data
+	})
+}
 
 // 获取金刚区
 export function getMenu(data) {

+ 46 - 0
api/refuel.js

@@ -0,0 +1,46 @@
+import {request} from '@/utils/request.js'
+
+// 查询附近加油站
+export function getNearbyStore(data) {
+	return request({
+		url: '/springbatchservice/xiaoju/nearbyStore',
+		method:'post',
+		data
+	})
+}
+
+// 查询加油站详情
+export function queryStoreDetail(data) {
+	return request({
+		url: '/springbatchservice/xiaoju/queryStoreDetail/'+data,
+	})
+}
+
+// 价格计算
+export function queryCalPrice(data) {
+	return request({
+		url: '/springbatchservice/xiaoju/queryCalPrice',
+		method:'post',
+		data
+	})
+}
+
+
+// 创建订单
+export function queryNewOrder(data) {
+	return request({
+		url: '/springbatchservice/xiaoju/queryNewOrder',
+		method:'post',
+		data
+	})
+}
+
+// 取消订单
+export function cancelOrder(data) {
+	return request({
+		url: '/springbatchservice/xiaoju/cancelOrder',
+		method:'post',
+		data
+	})
+}
+

+ 5 - 2
components/zs-banner/index.vue

@@ -2,7 +2,7 @@
 	<view class="zs-banner">
 		<!-- <view class="position-box" :style="{height:navBareight +'px',top:statusBarHeight+'px'}" v-if="position"> -->
 		<view class="position-box" :style="{height:navBareight +'px',background:background?'#fff':''}" v-if="position">
-			<view class="position">
+			<view class="position" @click="handlePosition">
 				<image class="position-icon" src="../../static/black-position.png" mode=""></image>
 				<text class="city">{{city}}</text>
 			</view>
@@ -105,7 +105,7 @@
 				})
 			},
 			getBanner(){
-				getBanner({currentPage:1,pageSize:10}).then(res=>{
+				getBanner({currentPage:1,pageSize:10,belongType:2}).then(res=>{
 					if(res.state == 'Success'){
 						this.bannerList = res.content.records
 						this.theme = this.bannerList[0].colour
@@ -120,6 +120,9 @@
 			handleSearch(){
 				this.$emit('search',this.search)
 			},
+			handlePosition(){
+				this.$emit('handlePosition','')
+			},
 			getNavHeight(){
 		
 				//去除

+ 1 - 1
detail/discountsDetail/refuel.vue

@@ -467,7 +467,7 @@
 					}
 					.activity{
 						font-size: 24rpx;
-						color: #FF4D3A;
+						color: $uni-color-primary;
 						line-height: 42rpx;
 						display: flex;
 						align-items: center;

+ 24 - 18
detail/goodsDetail/index.vue

@@ -3,11 +3,13 @@
 		<image class="good-img" :src="info.goodsPath" mode="aspectFit"></image>
 		<view class="price-box">
 			<view class="left">
-				<view class="unit">
-					¥
-				</view>
-				<view class="price">
-					{{info.realPrice}}
+				<view class="num-box">
+					<view class="unit">
+						¥
+					</view>
+					<view class="price">
+						{{info.realPrice}}
+					</view>
 				</view>
 				<view class="old-price">
 					市场价 ¥{{info.marketPrice}}
@@ -26,7 +28,9 @@
 				{{info.goodsDescribe}}
 			</view>
 		</view>
-		<template v-if="info.specs[0].specValues.length">
+		
+		<!-- 商品规格 -->
+		<!-- <template v-if="info.specs[0].specValues.length">
 			<view class="type-box" v-for="item in info.specs" :key="item.specId">
 				<view class="type-title">
 					{{item.specName}}
@@ -37,7 +41,7 @@
 					</view>
 				</view>
 			</view>
-		</template>
+		</template> -->
 		
 		<view class="shop-limit" @click="jump('/detail/shopList/index')">
 			<view class="info">
@@ -241,20 +245,22 @@
 		background-size: 100% 116rpx;
 		padding: 24rpx;
 		color: #fff;
-		position: relative;
-		margin-top: -116rpx;
-		z-index: 2;
 		.left{
 			display: flex;
 			align-items: center;
-			.unit{
-				font-size: 20rpx;
-				font-weight: bold;
-				align-self: flex-end;
-			}
-			.price{
-				font-weight: 600;
-				font-size: 48rpx;
+			.num-box{
+				display: flex;
+				align-items: center;
+				.unit{
+					font-size: 20rpx;
+					font-weight: bold;
+					align-self: flex-end;
+					margin-bottom: 10rpx;
+				}
+				.price{
+					font-weight: 600;
+					font-size: 48rpx;
+				}
 			}
 			.old-price{
 				text-decoration: line-through;

+ 10 - 1
detail/shopDetail/shopDetail.vue

@@ -2,7 +2,7 @@
 	<view class="shopDetail">
 		<view class="top-box">
 			
-			<image class="bg target" :src="info.logoPath" mode="aspectFill"></image>
+			<image class="bg target" :src="info.detailImg" mode="aspectFill"></image>
 			<view class="shop-info">
 				<image class="shop-logo" :src="info.logoPath" mode=""></image>
 				<view class="info-box">
@@ -123,6 +123,7 @@
 
 <script>
 	import { allCouponByUser,creat,getGoods } from '@/api/goods.js';
+	import {shopDetail} from '@/api/shop.js'
 	import guid from '@/utils/guid.js'
 	import {rpxTopx} from '@/utils/tool.js'
 	export default {
@@ -205,6 +206,7 @@
 					userInfo = {setMealId:0,userId:''}
 				}
 				this.info = JSON.parse(uni.getStorageSync('shopInfo'))
+				this.shopDetail(this.info.shopVo.id)
 				this.query.shopId = this.info.shopVo.id
 				this.query.setMealId = userInfo.setMealId
 				this.query.userId = userInfo.userId
@@ -301,6 +303,13 @@
 						}
 					}
 				})
+			},
+			shopDetail(shopId){
+				shopDetail({shopId}).then(res=>{
+					if(res.state == 'Success'){
+						this.info.detailImg = res.content.detailImg
+					}
+				})
 			}
 			
 		},

+ 174 - 6
hotel/index.vue

@@ -36,13 +36,13 @@
 			
 			<view class="total">
 				共1晚 
-				<image class="more" src="../../static/right.png" mode=""></image>
+				<image class="more" src="@/static/right.png" mode=""></image>
 			</view>
 		</view>
 		
 		<view class="input-box">
 			<input class="input" type="text" v-model="value" placeholder="搜索酒店名/地名/关键词" />
-			<image class="more" src="../../static/right.png" mode=""></image>
+			<image class="more" src="@/static/right.png" mode=""></image>
 		</view>
 		
 		<view class="btn-box">
@@ -50,6 +50,72 @@
 		</view>
 		
 	</view>
+	
+	<!-- 列表 -->
+	<zs-list class="store-box" mt="0" @load="loadMore" :status="status">
+		<view class="left">
+			<view class="hotel-item" v-for="(item,index) in list" :key="index">
+
+						<view >
+							<zs-img src="http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/662f340632e63427d1a36a50/ext/GOODS_INFO/750_750.jpg/1.jpg?x-oss-process=image/resize,w_376" width="340rpx" height="340rpx" mode="widthFix"></zs-img>
+							<view class="info">
+								<view class="price-box">
+									<view class="left">
+										<view class="price">
+										¥580
+										</view>
+									</view>
+									
+									<view class="right">
+										评分
+									</view>
+								</view>
+								<view class="title">
+									重庆秘境森林里温汤的的绝
+									美民宿
+								</view>
+								<view class="desc">
+									观山湖区
+								</view>
+								
+							</view>
+						</view>
+						
+					</view>
+				</view>
+				<view class="right">
+				<view class="hotel-item" v-for="(item,index) in list" :key="index">
+							<view >
+								<zs-img src="http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/662f340632e63427d1a36a50/ext/GOODS_INFO/750_750.jpg/1.jpg?x-oss-process=image/resize,w_376" width="340rpx" height="340rpx" mode="widthFix"></zs-img>
+								<view class="info">
+									<view class="price-box">
+										<view class="left">
+											<view class="price">
+											¥580
+											</view>
+										</view>
+										
+										<view class="right">
+											评分
+										</view>
+									</view>
+									<view class="title">
+										重庆秘境森林里温汤的的绝
+										美民宿
+									</view>
+									<view class="desc">
+										观山湖区
+									</view>
+									
+								</view>
+							</view>
+							
+						</view>
+				</view>
+			
+			</zs-list>
+	
+	
 	</view>
 </template>
 
@@ -57,13 +123,15 @@
 	export default {
 		data() {
 			return {
-				value: ''
+				value: '',
+				list:9,
+				list1:9,
 			}
 		},
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 .hotel{
 	background: #F9F9F9;
 	min-height: 100vh;
@@ -75,9 +143,9 @@
 		width: 702rpx;
 		background: #FFFFFF;
 		border-radius: 16rpx 16rpx 16rpx 16rpx;
-		margin: 0 24rpx 20rpx;
+		margin: -224rpx 24rpx 20rpx;
 		position: relative;
-		top: -224rpx;
+		// top: -224rpx;
 		box-sizing: border-box;
 		.address-box{
 			display: flex;
@@ -202,5 +270,105 @@
 			}
 		}
 	}
+	
+	.zs-list {
+		display: flex;
+		flex-wrap: wrap;
+		justify-content: space-between;
+		padding: 0 24rpx;
+	
+		.left {
+			.adv-swiper{
+				width: 340rpx;
+				height: 444rpx;
+				margin-bottom: 25rpx;
+				.adv-item{
+					width: 340rpx;
+					height: 444rpx;
+				}
+			}
+		}
+			.ad{
+				width: 340rpx;
+				border-radius: 16rpx;
+			}
+	
+		.hotel-item {
+			width: 340rpx;
+			margin-bottom: 20rpx;
+			// box-shadow: 0rpx 0rpx 24rpx 2rpx rgba(0, 0, 0, 0.08);
+			border-radius: 16rpx;
+			background: #fff;
+	
+			.icon {
+				width: 100%;
+				height: 300rpx;
+				border-radius: 16rpx 16rpx 0 0;
+			}
+	
+			.info{
+				flex: 1;
+				padding: 16rpx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				position: relative;
+				.title{
+					font-size: 28rpx;
+					font-weight: bold;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					/* 弹性伸缩盒子模型显示 */
+					display: -webkit-box;
+					/* 限制在一个块元素显示的文本的行数 */
+					-webkit-line-clamp: 2;
+					/* 设置或检索伸缩盒对象的子元素的排列方式 */
+					-webkit-box-orient: vertical;
+					margin-top: 10rpx;
+				}
+				
+				.desc{
+					font-size: 24rpx;
+					color: #AAAAAA;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					/* 弹性伸缩盒子模型显示 */
+					display: -webkit-box;
+					/* 限制在一个块元素显示的文本的行数 */
+					-webkit-line-clamp: 2;
+					/* 设置或检索伸缩盒对象的子元素的排列方式 */
+					-webkit-box-orient: vertical;
+					margin-top: 12rpx;
+				}
+				
+				.price-box{
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					margin-top: 12rpx;
+					.left{
+						display: flex;
+						align-items: flex-end;
+						.unit{
+							font-size: 20rpx;
+							color: $uni-color-primary;
+							font-weight: bold;
+						}
+						.price{
+							font-size: 32rpx;
+							color: $uni-color-primary;
+							font-weight: bold;
+						}
+					}
+					.right{
+						font-size: 24rpx;
+						color: #AAAAAA;
+					}
+				}
+				
+			}
+		}
+	}
+	
 }
 </style>

+ 93 - 73
login/login/login.vue

@@ -38,6 +38,16 @@
 					</u-form-item>
 
 				</u--form>
+					<u-checkbox-group v-model="check">
+						<u-checkbox size="34" shape="circle" >
+						</u-checkbox>
+						<view  class="protocol" @click="handleProtocol">已阅读并同意 
+						<view class="link">
+							《用户隐私协议》
+						</view> 
+						</view>
+						<view class="notice-protocol" v-if="notice">请勾选用户隐私协议</view>
+					</u-checkbox-group>
 				<button class="save-btn" type="default" @click="submit">提交</button>
 			</view>
 		</u-popup>
@@ -57,11 +67,14 @@
 		getPhoneNum,
 		getLoginToken,
 		auth,
-		getUserDetail
+		getUserDetail,
+		clear
 	} from '@/api/common.js'
 	export default {
 		data() {
 			return {
+				check:false,
+				notice:false,
 				id:'',//其他页面传来的id
 				scene:'',//其他页面携带的参数统一存放
 				redirect:'',//重定位地址
@@ -101,57 +114,67 @@
 				getPhoneNum({
 					code: val.detail.code
 				}).then(data => {
-					this.userInfo.phone = data.content
-					getLoginToken({
-						phoneNum: data.content
-					}).then(msg => {
-						console.log(msg);
-						if(msg.state != 'Success') return
-						uni.login({
-							provider: 'weixin',
-							success(r) {
-								wechatLogin({
-									jsCode: r.code,
-									phone: data.content,
-									loginToken: msg.content
-								}).then(res => {
-									uni.hideLoading()
-									if(res.state == 'Success'){
-										uni.setStorageSync('isAuth', res.content
-											.isAuth) //登录状态
-										uni.setStorageSync('token', res.content
-											.token) //登录状态
-										uni.setStorageSync('refreshToken', res.content
-											.refreshToken) //refreshToken
-											
-										getUserDetail().then(res => {
-											uni.setStorageSync('userInfo', JSON.stringify(res.content))
-											if (res.content.isAuth == 1) {
-												if(that.redirect){
-													console.log(that.scene);
-													uni.reLaunch({
-														url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
-													})
-												}else{
-													uni.switchTab({
-														url: '../../pages/index/index'
-													})
+					console.log(11111111,data);
+					if(data.msg != '成功'){
+						clear().then(()=>{
+							this.decryptPhoneNumber(val)
+						})
+					}else{
+						
+						this.userInfo.phone = data.content
+						getLoginToken({
+							phoneNum: data.content
+						}).then(msg => {
+							if(msg.state != 'Success') return
+							uni.login({
+								provider: 'weixin',
+								success(r) {
+									wechatLogin({
+										jsCode: r.code,
+										phone: data.content,
+										loginToken: msg.content
+									}).then(res => {
+										uni.hideLoading()
+										if(res.state == 'Success'){
+											uni.setStorageSync('isAuth', res.content
+												.isAuth) //登录状态
+											uni.setStorageSync('token', res.content
+												.token) //登录状态
+											uni.setStorageSync('refreshToken', res.content
+												.refreshToken) //refreshToken
+												
+											getUserDetail().then(res => {
+												uni.setStorageSync('userInfo', JSON.stringify(res.content))
+												if (res.content.isAuth == 1) {
+													if(that.redirect){
+														console.log(that.scene);
+														uni.reLaunch({
+															url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
+														})
+													}else{
+														uni.switchTab({
+															url: '../../pages/index/index'
+														})
+													}
+												} else { //未实名认证
+													that.show = true
 												}
-											} else { //未实名认证
-												that.show = true
-											}
-										})
-									}
-								
-								})
-							}
+											})
+										}
+									
+									})
+								}
+							})
 						})
-					})
+					}
 				})
 
 			},
 			handleProtocol() {
-
+				console.log(22222222);
+				uni.navigateTo({
+					url:'./xieyi'
+				})
 			},
 			goOther() {
 				console.log(this.redirect);
@@ -178,12 +201,9 @@
 					this.seconds--
 				}, 1000)
 			},
-			// 点击协议
-			handleProtocol() {
-				this.show1 = true
-			},
 			// 实名认证
 			submit() {
+				if(!this.check) return this.notice = true
 				this.$refs.uForm.validate().then(r => {
 					uni.showLoading({
 						title:'验证中'
@@ -275,31 +295,31 @@
 			}
 
 		}
-		.protocol {
-			text-align: center;
-			font-size: 28rpx;
-			margin-top: 40rpx;
-			color: #999999;
-			.link{
-			color: #0C6FFE;
+		
+		.u-checkbox-group{
+			position: relative;
+			padding-bottom: 30rpx;
+			margin-top: 20rpx;
+			.protocol {
+				text-align: center;
+				font-size: 28rpx;
+				color: #999999;
+				display: flex;
+				.link{
+				color: #0C6FFE;
+				}
+			}
+			
+			.notice-protocol {
+				color: red;
+				margin-left: 50rpx;
+				font-size: 26rpx;
+				position: absolute;
+				bottom: 0;
+				left: 0%;
 			}
 		}
-
-		.notice-protocol {
-			color: red;
-			width: 500rpx;
-			margin: 0 auto;
-			font-size: 26rpx;
-			position: absolute;
-			bottom: -34rpx;
-			left: 0%;
-		}
-
-		.notice {
-			margin-top: 160rpx;
-			text-align: center;
-		}
-
+		
 		.modal {
 			width: 680rpx;
 			box-sizing: border-box;

+ 44 - 2
login/login/otherLogin.vue

@@ -32,6 +32,16 @@
 					</u-form-item>
 		
 				</u--form>
+					<u-checkbox-group v-model="check">
+						<u-checkbox size="34" shape="circle" >
+						</u-checkbox>
+						<view  class="protocol" @click="handleProtocol">已阅读并同意
+						<view class="link">
+							《用户隐私协议》
+						</view> 
+						</view>
+						<view class="notice-protocol" v-if="notice">请勾选用户隐私协议</view>
+					</u-checkbox-group>
 				<button class="save-btn" type="default" @click="submit">提交</button>
 			</view>
 		</u-popup>
@@ -47,7 +57,10 @@
 	export default {
 		data() {
 			return {
-				msg:'',//其他页面携带的参数统一存放
+				check:false,
+				notice:false,
+				id:'',//其他页面传来的id
+				scene:'',//其他页面携带的参数统一存放
 				redirect:'',//重定位地址
 				show: false,
 				auth: {
@@ -98,6 +111,11 @@
 			}
 		},
 		methods: {
+			handleProtocol() {
+				uni.navigateTo({
+					url:'./xieyi'
+				})
+			},
 			close(){
 				this.show = false
 			},
@@ -121,6 +139,7 @@
 			},
 			// 实名认证
 			submit() {
+				if(!this.check) return this.notice = true
 				this.$refs.uForm.validate().then(r => {
 					uni.showLoading({
 						title:'验证中'
@@ -195,7 +214,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 .other-login{
 	padding: 10rpx 20rpx;
 		.code-btn{
@@ -218,6 +237,29 @@
 		.u-form-item{
 			
 		}
+		.u-checkbox-group{
+			position: relative;
+			padding-bottom: 30rpx;
+			margin-top: 20rpx;
+			.protocol {
+				text-align: center;
+				font-size: 28rpx;
+				color: #999999;
+				.link{
+				color: #0C6FFE;
+				}
+			}
+			
+			.notice-protocol {
+				color: red;
+				margin-left: 50rpx;
+				font-size: 26rpx;
+				position: absolute;
+				bottom: 0;
+				left: 0%;
+			}
+		}
+		
 		
 		.modal {
 			width: 680rpx;

+ 604 - 0
login/login/xieyi.vue

@@ -0,0 +1,604 @@
+<template>
+	<view class="xieyi">
+		<view class="title">
+			慧研学惠生活隐私政策
+		</view>
+		<view class="time">
+			生效日期:<text class="red"> 2023年11月08日</text>
+		</view>
+		
+		<view class="text">
+			慧研学惠生活(以下或称“我们”)非常注重保护用户(“您”)的个人信息及隐私,我们深知个人信息对您的重要性,并将按照法律法规要求和业界成熟的安全标准,采取相应的安全保护措施来保护您的个人信息。我们希望通过本隐私政策向您清晰地介绍在使用我们的产品/服务时,我们如何处理您的个人信息,以及我们为您提供的访问、更正、删除和保护这些信息的方式。
+		</view>
+		<view class="text">
+			本政策将帮助您了解以下内容: 
+		</view>
+		<view class="text">
+			1.具体功能可能收集、使⽤个⼈信息的范围、⽬的、⽅式,以及拒绝提供个⼈信息可能的影响;
+		</view>
+		<view class="text">
+			2.⼩程序可能需要调⽤的权限、调⽤⽬的及其对应业务功能,以及⽤户关闭相应权限的⽅式;
+		</view>
+		<view class="text">
+			3.我们如何共享、保护您的个⼈信息;
+		</view>
+		<view class="text">
+			4.您作为个⼈信息主体所享有的权利等。
+		</view>
+		<view class="text bold">
+			【特别提示】请您在使用我们提供的各项产品/服务前,仔细阅读并充分理解本《隐私政策》(重点内容我们已将字体加粗请您特别关注)并作出相应选择。一旦您使用或继续使用我们的产品/服务时,即意味着您同意我们按照本隐私政策处理您的相关信息。如对本隐私政策有任何疑问,您可以通过本隐私政策“如何联系我们”中提供的方式与我们联系。
+			您同意本隐私政策,仅代表您已了解本应⽤提供的功能,以及功能运⾏所需的必要个⼈信息,并不代表您已同意我们收集非必要个⼈信息。对于非必要的个⼈信息处理,会在您使⽤服务的过程中单独征求您的同意。如果您拒绝我们收集非必要个⼈信息,并不会影响您使⽤基本业务功能。您同意本隐私政策,个⼈信息相关权限并不会默认开启,我们会在您使⽤到相应业务功能时,另⾏弹窗再次征得您的同意后开启。权限开启后,您还可以随时通过设备设置关闭权限。您不同意开启权限,不会影响其他非相关业务功能的正常使⽤。
+		</view>
+		<view class="text">
+			慧研学惠生活是由 <text class="red"> 中数未来(广州)信息技术有限公司(注册地址:广州市天河区金穗路8号2202自编E15)</text>及其关联方提供者通过下述途径向您提供的产品/服务:<text class="red">包括但不限于中国移动和校园app、慧研学惠生活小程序。</text> 针对某些特定的产品/服务,我们还将制定单独的隐私政策,向您说明这些产品/服务的特殊政策。如相关特定的隐私政策与本隐私政策有不一致之处,适用该特定隐私政策。
+		</view>
+		<view class="text">
+		本政策所称的慧研学惠生活及其关联方是指<text class="red">中数未来(广州)信息技术有限公司</text>及现有和/或未来设立的相关关联公司的单称或合称。
+		</view>
+		<view class="text">
+			【特别提示】请您在使用我们提供的各项产品/服务前,仔细阅读并充分理解本《隐私政策》(重点内容我们已将字体加粗请您特别关注)并作出相应选择。一旦您使用或继续使用我们的产品/服务时,即意味着您同意我们按照本隐私政策处理您的相关信息。如对本隐私政策有任何疑问,您可以通过本隐私政策“如何联系我们”中提供的方式与我们联系。
+			您同意本隐私政策,仅代表您已了解本应⽤提供的功能,以及功能运⾏所需的必要个⼈信息,并不代表您已同意我们收集非必要个⼈信息。对于非必要的个⼈信息处理,会在您使⽤服务的过程中单独征求您的同意。如果您拒绝我们收集非必要个⼈信息,并不会影响您使⽤基本业务功能。您同意本隐私政策,个⼈信息相关权限并不会默认开启,我们会在您使⽤到相应业务功能时,另⾏弹窗再次征得您的同意后开启。权限开启后,您还可以随时通过设备设置关闭权限。您不同意开启权限,不会影响其他非相关业务功能的正常使⽤。
+		</view>
+		
+		<view class="text bold">
+			请您注意,本政策不适用于您通过我们的小程序、产品/服务而接入或跳转的其他第三方产品/服务(“其他第三方”,包括您的交易相对方、任何第三方网站任何第三方小程序以及第三方服务提供者等),具体规定请参照该第三方的隐私政策或类似声明。
+		</view>
+		<view class="text bold">
+			目录
+		</view>
+		<view class="text">
+			一、我们如何收集和使用您的个人信息
+		</view>
+		<view class="text">
+			二、我们如何使用 Cookie 和同类技术
+		</view>
+		<view class="text">
+			三、我们如何共享、转让、公开披露您的个人信息
+		</view>
+		<view class="text">
+			四、我们如何保存和保护您的个人信息
+		</view>
+		<view class="text">
+			五、您如何管理您的个人信息
+		</view>
+		<view class="text">
+			六、未成年人的个人信息保护
+		</view>
+		<view class="text">
+			七、通知和修订
+		</view>
+		<view class="text">
+			八、如何联系我们
+		</view>
+		<view class="text">
+			九、附录及附件
+		</view>
+		
+		<view class="text bold">
+			一、我们如何收集和使用您的个人信息
+		</view>
+		<view class="text">
+			在您使用我们的产品/服务时,您需要/可以选择授权我们收集和使用个人信息的场景包括: 
+		</view>
+		<view class="text">
+			1、为了向您提供我们产品/服务的基本功能,您需要授权我们收集、使用必要信息的情形,如您拒绝提供必要信息,您将无法正常使用我们的产品/服务;
+		</view>
+		<view class="text">
+			2、为了向您提供我们产品/服务的拓展功能,您可以选择授权我们收集、使用信息的情形,如您拒绝提供前述信息,您将无法正常使用相关附加功能或无法实现我们拟达到的功能效果,但并不会影响您正常使用我们产品/服务的基本功能。
+		</view>
+		<view class="text bold">
+			(一)您需要授权我们收集和使用个人信息的场景
+		</view>
+		<view class="text">
+			我们会遵循正当、合法、必要的原则,出于本政策所述的下列目的收集和使用您的个人信息。 
+		</view>
+		<view class="text bold">
+			(一)您需要授权我们收集和使用个人信息的场景
+		</view>
+		<view class="text">
+			我们会遵循正当、合法、必要的原则,出于本政策所述的下列目的收集和使用您的个人信息。 
+		</view>
+		<view class="text bold">
+			1、帮助您成为我们的用户
+		</view>
+		<view class="text">
+			为遵守法律法规的要求,以及向您提供更便捷的服务,在您注册成为慧研学惠生活用户时,您需要提供手机号码以创建慧研学惠生活账号,并完善相关的网络身份识别信息(如头像、昵称及登录密码等);如果您需要成为付费会员,您需要提供中国移动手机号进行账号注册,付费会员信息相关详见《慧研学惠生活付费会员服务协议》;如果您仅需使用浏览、搜索等功能,您无需注册成为我们的用户以及提供上述信息。
+		</view>
+		<view class="text">
+			在提供账号信息的过程中,如果您愿意额外补充如下个人信息,将有助于我们向您提供更为个性化的服务:
+			<text class="bold">包括您的性别、生日、常居地、家乡、喜好、家庭信息等。如果您不提供该等信息,不会影响您享受慧研学惠生活服务的基本功能。</text>
+		</view>
+		<view class="text bold">
+			2、向您提供基于地理位置的信息展示
+		</view>
+		<view class="text">
+			为了向您提供周边研学机构、吃喝玩乐及出行信息的展示和搜索服务,提升我们的服务表现、效率和功能,经您授权我们会收集您在使用我们服务过程中产生的相关信息,包括: 
+		</view>
+		<view class="text">
+			<text class="bold">(1)位置信息。当您通过系统授权开启移动设备的定位功能并使用基于位置提供的服务时,我们会收集和使用您的位置信息以便为您推荐周边的生活服务</text>(例如您不需要手动输入所在地理位置就可获得相关服务,估算商家与您之间的实际距离方便您进行消费决策,为您推荐附近的服务品类和优惠信息等)。我们会使用有关技术获取您的位置信息(准确度会有所不同),这些技术包括IP地址、GPS以及能够提供相关信息的WLAN(如 Wi-Fi)接入点、蓝牙和基站、传感器信息。 <text class="bold">
+			您使用服务中提供的信息中也可能包含相应地理位置信息,例如您在账号资料中设置的地区信息或您上传的图片、视频中的地理标记信息。您可以在移动设备的系统中关闭定位服务停止我们对您所在位置信息的收集,但可能因此无法使用我们基于地理位置为您提供的服务,或者无法达到相关服务的预期效果。
+			</text>
+		</view>
+		
+		<view class="text">
+			(2)日志信息。当您使用我们提供的产品/服务时,我们会收集您的浏览、搜索、 点击、收藏、添加购物车、交易、售后、关注、分享、发布等信息并作为有关网络日志进行保存,其中包括您的 IP 地址、浏览器的类型、使用的语言、操作系统的版本、访问的日期和时间、通信运营商、网络请求等。为保证您在使用慧研学惠生活平台服务时能够及时收到消息,我们的软件需要与服务器维持通信状态,以进行必要的更新,包括本地热点更新、软件更新和升级等,这些设置都是基于为用户提供更佳的使用体验。 
+		</view>
+		
+		<view class="text">
+			(3)传感器信息。当您使用我们的产品/服务过程中,我们可能会收集您的传感器信息以适配您的设备状态或在您选择参与活动时以识别您的动作,不同场景下的传感器类型可能不一致,我们仅会在具体需要的场景中才会使用。例如,在“扫一扫”场景下通过光线传感器判断黑暗环境,以便为您展示是否选择开启闪光灯或调整亮度。
+		</view>
+		<view class="text">
+3、为您提供预订、下单、订单管理功能
+您在慧研学惠生活上预订/下单研学课程、美食、休闲娱乐、生活服务、电影票、运动健身、婚庆、亲子、宠物、医疗等服务时,您需要根据所选择的服务类型提供联系人信息(姓名、性别、电话号码等)、地址信息(如使用家政服务时)、服务偏好(如就餐人数等)。
+您在慧研学惠生活上预订/下单民宿、跟团旅行、医疗、学生专享、出行等服务,或者办理手机卡或签证等业务时,您可能需要根据有关法律规定和相关方要求(票务及其代理方等)提供您的实名身份信息(包括但不限于您的身份证、军官证、护照、驾驶证、学生证等载明您身份的证件照片、复印件、号码等)、联系人信息(姓名、性别、电话号码等)、电子邮箱地址(用于确认订单信息等)、个人照片(用于初诊等)、同行人信息、紧急联络人信息等。
+		</view>
+		<view class="text">
+		您在慧研学惠生活上预订/下单境内外酒店时,根据您选择的服务类型及相关方要求(酒店及其代理方等),您可能需要提供联系人信息(入住人姓名、电话号码等)、电子邮箱地址(用于确认订单信息等)、订单备注等。
+		</view>
+		<view class="text">
+		您在慧研学惠生活上预订/下单境内外景点门票时,根据您选择的服务类型及相关方要求 
+		(景点及其代理方等),您可能需要提供您的实名身份信息(包括但不限于您的身份证、护照、港澳通行证等载明您身份的证件照片、复印件、号码等)、联系人信息(姓名、性别、生日、电话号码、微信号等)、电子邮箱地址(用于确认订单信息等)、订单备注等。为向您展示您账号的订单信息及便于您对订单信息的管理,我们会收集您在使用我们服务过程中产生的订单信息。 
+		</view>
+		<view class="text">
+		您在慧研学惠生活上生成的订单中,将可能包含您的身份信息、联络信息、行程信息、住宿信息、支付信息等,这些都属于敏感信息,请您谨慎向他人展示或对外提供,我们也将会在展示订单信息时,在保证信息可用性的基础上尽量去标识化处理。
+		</view>
+		<view class="text">
+	4、为您提供收藏、关注、分享、推荐功能 
+	为了便于您管理自己的偏好,获得更轻松的访问体验,与好友及第三方进行分享等,您可以收藏/关注,也可以通过功能组件向第三方进行信息分享,我们会收集您在使用上述功能中产生的日志信息,用于在个人主页中向您展示、实现在线管理、信息分享以及向您推荐相似得商品/服务等。 
+		</view>
+		<view class="text">
+		5、为您提供写点评、攻略、打卡等信息发布功能
+		您在慧研学惠生活上主动对商家的产品/服务进行评价或发布其他内容时,我们将收集您发布的信息,并展示您的昵称、头像和发布内容等。如您选择以匿名方式发布评价信息时,我们将不展示您的昵称、头像。 
+		</view>
+		<view class="text">
+		6、为您提供出行服务
+		当您在慧研学惠生活上使用打车/代驾等出行服务时,我们还可能会收集您的定位、手机号及行程信息等。
+		</view>
+		<view class="text">
+		7、帮助您完成支付
+		您在慧研学惠生活上进行订单支付时,您可以选择微信支付、支付宝、云闪付等合作方所提供的服务进行支付。我们需要收集您的订单信息、对账信息及其他法律要求的必要信息并与这些合作机构共享,以确认您的支付指令并帮助您完成支付。如您使用的软件版本和硬件设备支持指纹或面容ID支付,您还可以在支付设置中选择开启或关闭对应的指纹或面容ID支付功能,我们会在您支付过程中提供相应选项,同时您也可以选择密码、短信验证码等其他方式支付。支付的过程中,我们仅收集验证的结果,而不会直接收集您的指纹或面容ID信息。
+		</view>
+		<view class="text">
+		8、为您提供客服和售后服务 
+		当您与我们的客服取得联系时,我们的系统可能会记录您与客服之间的通讯记录,以及使用您的账号信息以便核验身份;当您需要我们提供与您订单相关的客户服务时,我们可能会查询您的相关订单信息以便给予您适当的帮助和处理;当您需要客服协助您修改有关信息时,您可能还需要提供上述信息外的其他信息以便完成修改。为了保证服务体验、处理服务纠纷,您在订单履行过程中拨打或者接听开启号码保护(隐私号)的电话时,您与商家、客服间的通话信息可能会被录音。当您与商家间出现服务纠纷时,平台可依法调取并使用录音信息作为解决纠纷的参考依据。 
+		</view>
+		<view class="text">
+		9、我们可能间接收集的个人信息
+		为完成身份核验,保障账号安全,确认交易状态及为您提供售后与争议解决等目的,经您授权后我们可能会从第三方获取您的个人信息(例如通过您选择的交易对象和交易直接涉及的第三方信息系统、支付机构等收集与交易进度相关的您的交易、支付、出票、酒店预订等信息,以便于我们处理您的订单并保证服务的顺利完成,或者更好地预防诈骗等恶意行为)。我们会依据法律法规的要求以及与第三方的约定,经您授权后向慧研学惠生活的关联方、合作伙伴获得您的有关信息,并对其信息来源的合法性进行确认后使用您的这些信息。
+		</view>
+		<view class="text bold">
+		(二)其他
+		</view>
+		<view class="text bold">
+		您可以通过慧研学惠生活为其他人预定各类产品/服务,并提供该实际服务接收人的有关信息,此前请您确保已取得相关人的授权。
+		</view>
+		<view class="text">
+		如果我们将信息用于本政策未载明的其他用途,或者将基于特定目的收集而来的信息用于其他目的时,会单独征求您的授权同意。 
+		</view>
+		<view class="text bold">
+		(三)征得同意的例外
+		</view>
+		<view class="text bold">
+		请您知悉,以下情形中,我们收集、使用个人信息无需征得您的授权同意: 
+		</view>
+		<view class="text bold">
+		1、为订立、履行个人作为一方当事人的合同所必需,或者按照依法制定的劳动规章制度和依法签订的集体合同实施人力资源管理所必需; 
+		</view>
+		<view class="text bold">
+		2、为履行法定职责或者法定义务所必需;
+		</view>
+		<view class="text bold">
+		3、为应对突发公共卫生事件,或者紧急情况下为保护自然人的生命健康和财产安全所必需;
+		</view>
+		<view class="text bold">
+		4、为公共利益实施新闻报道、舆论监督等行为,在合理的范围内处理个人信息;
+		</view>
+		<view class="text bold">
+		5、依照法律规定在合理的范围内处理个人自行公开或者其他已经合法公开的个人信息;
+		</view>
+		<view class="text bold">
+		6、法律法规规定的其他情形。 
+		</view>
+		<view class="text bold">
+		请注意,单独或与其他信息相结合无法识别您的身份或者与您直接建立联系的信息,不属于个人信息。如果我们将单独无法与任何特定个人建立联系的信息与其他信息结合用于识别自然人个人身份,或者将其与个人信息结合使用,则在结合使用期间,此类信息将被视为个人信息。 
+		</view>
+		<view class="text bold">
+		(四)个人信息的使用规则
+		</view>
+		<view class="text">
+		为满足您的个性化需求,维护、改进我们的产品或服务质量,我们会在符合法律规定并根据您具体授权的情况下使用如下信息: 
+		</view>
+		
+		<view class="text bold">
+		1、我们可能会收集您的订单信息、浏览及搜索信息、行为偏好(如您向我们提供的研学偏好、膳食习惯、就餐环境要求、旅行计划、常用乘客/酒店/租车信息、航班舱位、行李和票务选择等信息)、位置信息等,以及将您在慧研学惠生活上使用某项服务中提供的信息与来自其他服务中的信息结合起来,进行综合统计、分析以形成用户画像,同时,您授权我们向包括但不限于通信运营商及其相关合作商等第三方查询、核实、处理您的个人信息(如互联网数据、终端数据)。用来向您推荐或展示您可能感兴趣的产品/服务信息,或通过系统向您展示个性化的第三方推广信息,包括在小程序页面向您推送消息通知,为您提供智能推荐,通过公众号、电话、短信、 电子邮件等给您发送推送消息、推广信息或展示商业广告,通过电话、短信进行回访、向您提供信息咨询等服务或邀请您参与服务、产品或功能有关的客户调研。例如将您在使用我们某项服务时收集的信息,用于在另一项服务中向您展示个性化的内容或广告。 
+		</view>
+		<view class="text">
+		2、我们可能会收集您在参与产品/服务调查时主动向我们提供的信息,以及您与我们的关联方、合作伙伴之间互动时提供的相关信息,以便于您追踪订单情况、发起用户投诉以及我们优化客户服务的质量与流程。 
+		</view>
+		<view class="text">
+		3、我们可能将业务中收集的个人信息用于统计分析和改进运营,将已经去标识化无法识别您身份且不能复原的信息用于建立数据库并进行商业化利用。例如通过您所在的位置、偏好等进行统计分析,从而改进我们的产品、服务或营销计划;又如为改进我们系统而进行的技术改造、网络维护、故障排除、内部政策与流程制定、生成内部报告等。
+		</view>
+		
+		<view class="text bold">
+		(五)设备权限调用 
+		</view>
+		<view class="text">
+		慧研学惠生活以微信中的小程序形式运行,为确保相关业务功能的正常实现,我们可能需要根据具体的使用场景调用对应的必要权限(微信已获取),具体的权限调用说明请见附件一。您可以在设备的设置中对应微信权限选择关闭部分或者全部权限,这可能导致对应的业务功能无法实现或者无法达到预期效果。
+		</view>
+		<view class="text bold">
+		二、我们如何使用 Cookie 和同类技术 
+		</view>
+		<view class="text bold">
+		(一)Cookie 的使用
+		</view>
+		<view class="text">
+		为确保网站正常高效运转、为您获得更轻松的访问体验、向您推荐您可能感兴趣的内容,我们会在您的设备终端/系统上存储名为 Cookie 的小数据文件。Cookie会帮助您在后续访问我们网站时调用您的信息,简化您填写个人信息(例如一键登录等)的流程;为您提供安全购物的偏好设置;帮助您优化对广告的选择与互动;保护您的数据安全等。我们不会将 Cookie 用于本隐私政策所述目的之外的任何用途。您可根据自己的偏好管理或删除 Cookie。您可以清除计算机或移动设备上保存的所有 Cookie,您有权接受或拒绝 Cookie。大多数浏览器会自动接受 Cookie,但您通常可根据自己的需要来修改浏览器的设置以拒绝 Cookie;另外,您也可以清除软件内保存的所有 Cookie。但您可能因此无法完全体验我们某些便捷性和安全性的服务功能。
+		</view>
+		<view class="text bold">
+		(二)网络 Beacon 和同类技术的使用
+		</view>
+		<view class="text">
+		除 Cookie 外,我们网页上常会包含一些电子图像(称为“单像素”GIF 文件或“网络 Beacon”)等其他同类技术,它们可以帮助网站计算浏览网页的用户或访问某些 Cookie。我们使用网络 Beacon 的方式有:
+		</view>
+		<view class="text">
+		1、我们通过在我们网站上使用网络 Beacon,计算用户访问数量,并通过访问Cookie 辨认注册用户。
+		</view>
+		<view class="text">
+		2、我们通过得到的 Cookie 信息,可以在我们网站提供个性化服务。
+		</view>
+		<view class="text bold">
+		三、我们如何共享、转让、公开披露您的个人信息
+		</view>
+		<view class="text bold">
+		(一)共享
+		</view>
+		
+		
+		<view class="text">
+		在我们向您提供产品/服务时,我们会采取严格的安全措施,由我们所完成的产品/服务中我们不会与慧研学惠生活以外的任何公司、组织和个人共享您的个人信息。但请您知悉,我们提供的产品/服务大多是无法单独完成的,因此我们可能会与我们的关联公司以及其他合作商等第三方共享或委托其处理您的部分个人信息,以保障和优化我们为您提供的产品/服务,此类情况包括:
+		</view>
+		<view class="text">
+		1、提供平台服务。我们可能会作为电子商务平台向您提供产品/服务,如您在我们的平台上使用商家或其他合作方提供的产品/服务,我们可能会与相应产品/服务的提供方共享您的必要个人信息,以便于您能够正常使用相应的浏览、下单、交易、支付等功能;如您在我们的平台上预订境外产品/服务时,经您同意,我们可能会将您的相关个人信息提供给境外商家或代理商,以便为您提供产品/服务预订、身份核验、信息通知及订单售后等服务。如在您预订境外酒店时,为帮助您完成预定并成功入住,我们需要将您的相关个人信息等传输给境外接收方。在您预定境外门票时,为帮助您完成预定并满足景区身份核验要求等,我们需要将您的相关个人信息等传输给境外接收方。通常我们会在您下单前通过产品预订页面展示的《个人信息跨境传输同意函》向您告知境外接收方的相关信息(例如境外接收方的名称、联系方式、处理您个人信息的目的、方式和种类以及您向境外接收方行使您的权利的方式和程序等)。在涉及上述数据跨境传输或访问的情况下,我们将按照本隐私政策、《个人信息跨境传输同意函》以及其他相关的保密和安全措施来处理您的个人信息。
+		</view>
+		<view class="text">
+		2、提供统一管理服务。如您使用我们的账号登录和使用我们关联公司和其他第三方所提供的产品/服务,我们可能会共享您的个人信息。我们只会共享必要的个人信息以便向您提供一致化的服务和统一管理,例如在我们的产品/服务内查看订单并进行管理,如果我们共享您的个人敏感信息或者关联方改变个人信息的使用目的,将再次征求您的授权同意。
+		</view>
+		
+		<view class="text">
+		3、提供必要的合作服务。仅为实现本政策中声明的目的,我们的某些服务将由业务合作伙伴提供。为保障为您提供的服务顺利完成,我们可能会将您的个人信息共享给我们的合作伙伴,包括技术服务、支付服务、金融业务服务等的供应商、服务合作商、第三方商家等,其中可能包括您的联络信息、订单信息、支付信息、地址信息等。
+		</view>
+		<view class="text">
+		例如我们需要将您的订单号和订单金额与第三方支付机构共享以实现确认您的支付指令并完成支付;将您的订单信息、必要交易信息与第三方商家共享,以便其向您提供商品、服务及售后等。其中您的联络信息和地址信息属于个人敏感信息,我们将努力通过采取“号码保护”等合适的举措尽全力保护您的个人信息。 
+		</view>
+		<view class="text">
+		4、保障安全和优化服务。为了保障您在使用我们产品/服务时的安全,以及优化我们的服务,我们可能会与我们的相关合作伙伴共享您的必要信息。 
+		</view>
+		
+		<view class="text">
+		安全保障服务。为了保障您的账号安全,避免您遭受欺诈、网络病毒、网络攻击等风险,我们可能会用与我们安全保障的合作伙伴共享与您有关的必要设备信息、日志信息,以及您的使用习惯和常用软件信息等来综合判断您的账号及交易风险,预防安全事件的发生。 
+		</view>
+		
+		<view class="text">
+		统计、优化服务。经您授权,我们可能会与提供广告投放推广和统计分析的合作伙伴共享信息,用于相关合作伙伴可能会对上述信息进行汇聚分析,提供广告曝光监测或服务决策,为您提供更好的服务。但我们仅会向这些合作伙伴提供广告推广的覆盖面、有效性以及统计类等信息,而不会共享可以识别您身份的个人信息,否则我们会对这些信息进行去标识化处理以避免对您身份的识别。 
+		</view>
+		
+		<view class="text">
+		5、基于法定情形提供。根据法律法规的规定、诉讼争议解决需要、您与我们签署的相关协议(包括在线签署的电子协议及平台规则)或法律文件,或行政、司法等有权机关依法提出要求时,我们可能会共享您的个人信息。 
+		</view>
+		<view class="text">
+		6、除了上述情况外,我们如果对其他任何公司、组织和个人共享您的个人信息,会再次征求您的明确同意或授权。 
+		</view>
+		
+		<view class="text bold">
+		我们会通过应用程序接口(API)、软件工具开发包(SDK)与第三方进行必要的数据共享,不同版本的第三方SDK会有所不同,一般包括第三方账号登录类、分享类、第三方支付类、地图导航类、厂商推送类、统计类等,我们会对第三方进行严格的安全检测并约定数据保护措施。
+		</view>
+		<view class="text">
+		请您知悉,我们仅会出于合法、正当、必要、特定、明确的目的共享您的个人信息,对我们仅为实现本政策中声明的目的与之共享个人信息的公司、组织和个人,我们会与其签署严格的信息保护和保密协定,要求他们遵守协议并采取相关的安全措施来保护您的个人信息。
+		</view>
+		<view class="text bold">
+		(二)转让
+		</view>
+		
+		<view class="text">
+			随着我们业务的发展,我们及我们的关联方有可能进行合并、收购、重组、资产转让或类似的交易,如涉及个人信息的转让,我们会要求受让您个人信息的公司、组织继续接受本隐私政策的约束,否则,我们将要求该公司、组织重新征求您的授权同意。
+		</view>
+		<view class="text">
+			除了上述情况,我们不会未经您的明确同意将您的个人信息进行转让。
+		</view>
+		<view class="text bold">
+			(三)公开披露
+		</view>
+		<view class="text">
+			我们仅会在以下情况下,且采取符合业界标准的安全防护措施的前提下,才可能公开披露您的个人信息: 
+		</view>
+		<view class="text">
+			1、根据您的需求,在您明确同意的披露方式下披露您所指定的个人信息;
+		</view>
+		<view class="text">
+			2、根据法律、法规的要求、强制性的行政执法或司法要求所必须提供您个人信息的情况下,我们可能会依据所要求的个人信息类型和披露方式公开披露您的个人信息。在符合法律法规的前提下,当我们收到上述披露信息的请求时,我们会要求必须出具与之相应的法律文件,如传票或调查函。 
+		</view>
+		<view class="text bold">
+			请注意,您在使用我们服务时自愿发布甚至公开分享的信息,可能会涉及您或他人的个人信息甚至个人敏感信息,如您的交易信息,以及您在评价时选择上传包含个人信息的文字、图片或视频等各种形式的信息。请您在使用我们的服务时更加谨慎地考虑,是否要发布甚至公开分享相关信息。 
+		</view>
+		<view class="text bold">
+			(四)共享、转让、公开披露个人信息时事先征得授权同意的例外
+		</view>
+		<view class="text">
+		以下情形中,共享、转让、公开披露您的个人信息无需事先征得您的授权同意: 
+		</view>
+		<view class="text">
+		1、与国家安全、国防安全有关的;
+		</view>
+		<view class="text">
+		2、与公共安全、公共卫生、重大公共利益有关的;
+		</view>
+		<view class="text">
+		3、与犯罪侦查、起诉、审判和判决执行等有关的;
+		</view>
+		<view class="text">
+		4、出于维护您或其他个人的生命、财产等重大合法权益但又很难得到本人同意的; 
+		</view>
+		<view class="text">
+		5、其他维护公共利益的情形,例如您的信用评价信息需要被公开/共享;
+		</view>
+		<view class="text">
+			6、您自行向社会公众公开的个人信息;
+		</view>
+		<view class="text">
+			7、从合法公开披露的信息中收集个人信息的,如合法的新闻报道、政府信息公开等渠道。但是您明确拒绝或者处理该信息侵害您重大利益的除外; 
+		</view>
+		<view class="text">
+			8、其他依法规定可以无需征得授权的情况。 
+		</view>
+		<view class="text bold">
+		根据法律规定,共享、转让、公开披露经去标识化处理的个人信息,且确保数据接收方无法复原并重新识别个人信息主体的,我们对此类数据的处理将无需另行向您通知并征得您的同意。
+		</view>
+		<view class="text bold">
+			四、我们如何保存和保护您的个人信息
+		</view>
+		<view class="text bold">
+			(一)个人信息的保存
+		</view>
+		<view class="text">
+		1、保存期限:我们只会在达成本政策所述目的所需的期限内保留您的个人信息,除非法律法规有强制的留存要求,例如《中华人民共和国电子商务法》要求商品和服务信息、交易信息保存时间自交易完成之日起不少于三年。我们判断个人信息的存储期限主要参考以下标准并以其中较长者为准:完成与您相关的交易目的、维护相应交易及业务记录,以应对您可能的查询或投诉;保证我们为您提供服务的安全和质量;您是否同意更长的留存期间;是否存在关于保留期限的其他特别约定或法律法规规定。
+		</view>
+		<view class="text bold">
+			在超出保留期间后,我们会根据适用法律的要求删除您的个人信息,或使其匿名化处理。在您主动注销账号时,我们将根据法律法规的要求进行数据处理。 
+		</view>
+		<view class="text">
+			2、保存地域:我们在中华人民共和国境内收集和产生的个人信息,将存储在中国境内。基于本隐私政策中所载的目的,您的个人信息可能被传输至中国以外的国家或地区进行处理,我们将根据法律法规要求履行相应流程和合规义务,以保护您的个人信息安全,相关情形包括但不限于:
+		</view>
+		<view class="text">
+			(1)基于法律法规的明确规定;
+		</view>
+		<view class="text">
+			(2)在传输您的个人信息前,向您告知上述信息并征得您的授权同意;
+		</view>
+		<view class="text">
+			(3)您主动发起的跨境预订、下单、交易等个人行为(如预订境外酒店、景区门票等);
+			除非符合法律法规规定的征得同意的例外情形外,我们将严格按照法律及监管要求,采用合理的方式向您明示告知所涉产品/服务的境外接收方的名称、联系方式、处理个人信息的目的、方式和种类、以及您享有的个人信息的权利和行使方式,并征得您的授权同意。例如,在您预订境外酒店、门票等境外产品/服务时,我们将会在您下单前通过订单填写或订单确认页面向您明示告知上述信息,并征得您的授权同意,具体的告知同意形式,以具体产品/服务的订单页面为准。 
+		</view>
+		<view class="text">
+			在向境外提供您的个人信息前,我们将通过开展数据出境安全评估、经专业机构进行个人信息保护认证、或与境外数据接收方签署网信部门制定的数据出境标准合同等方式,以符合法律、行政法规和国家网信主管部门规定。我们将要求境外数据接收方按照不低于中国法律要求的安全和保密措施保护您的个人信息安全并履行相应的个人信息保护义务。
+		</view>
+		<view class="text">
+			3、终止运营:如果发生终止运营等情形,我们将会至少提前30天通知您,并在终止运营后对您的个人信息根据法律法规的要求进行处理。
+		</view>
+		<view class="text bold">
+			(二)个人信息的保护措施 
+		</view>
+		<view class="text bold">
+			1、数据安全措施 
+		</view>
+		<view class="text">
+			为保障您的信息安全,我们努力采取各种符合业界标准的物理、电子和管理方面的安全措施来保护您的个人信息,建立数据分类分级制度、数据安全管理规范、数据安全开发规范来管理规范个人信息的存储和使用。慧研学惠生活通过信息接触者保密协议、监控和审计机制来对数据进行全面安全控制,防止您的个人信息遭到未经授权访问、公开披露、使用、修改、损坏或丢失。例如在您的浏览器与“服务”之间交换数据(如信用卡信息)时采用 SSL 加密保护技术;同时对网站本身提供https安全浏览方式;使用加密技术确保数据的保密性;使用受信赖的保护机制防止数据遭到恶意攻击;部署访问控制机制,确保只有授权人员才可访问个人信息;以及举办安全和隐私保护培训课程,加强员工对于保护个人信息重要性的认识。
+		</view>
+		<view class="text bold">
+		2、安全认证 
+		</view>
+		<view class="text">
+			我们已先后通过了公安部信息安全等级保护二级认证、ISO27001 信息安全认证、第三方支付行业(支付卡行业 PCI DSS)数据安全标准国际认证等认证资质,并与监管机构、第三方测评机构建立了良好的协调沟通机制,及时抵御并处置各类信息安全威胁,为您的信息安全提供全方位保障。
+		</view>
+		<view class="text bold">
+		3、请您知悉并理解,互联网并非绝对安全的环境,我们强烈建议您通过安全方式、使用复杂密码,协助我们保证您的账号安全。如您发现自己的个人信息泄密,尤其是您的账号或密码发生泄露,请您立即根据本隐私政策中提供的联系方式联络我们,以便我们采取相应措施。
+		</view>
+		<view class="text">
+			4、安全事件 
+			在不幸发生个人信息安全事件后,我们会立即成立专项应急小组,启动应急预案,防止安全事件扩大,并按照法律法规的要求及时向您告知:安全事件的基本情况和可能的影响、我们已采取或将要采取的处置措施、您可自主防范和降低风险的建议、对您的补救措施等。我们将及时将事件相关情况以邮件、信函、电话、推送通知等方式告知您,难以逐一告知个人信息主体时,我们会采取合理、有效的方式发布公告。同时,我们还将按照监管部门要求,主动上报个人信息安全事件的处置情况。
+		</view>
+		<view class="text bold">
+		五、您如何管理您的个人信息
+		</view>
+		<view class="text bold">
+			您对您的个人信息享有以下权利。根据法律法规要求,在特定情形下,除您另有安排,您的近亲属为了自身的合法、正当利益,可以对您的相关个人信息行使以下权利。
+		</view>
+		<view class="text bold">
+			(一)您有权访问、更正、删除您的个人信息,法律法规规定的例外情况除外。
+		</view>
+		<view class="text ">
+			您可以通过以下方式管理您的信息:
+		</view>
+		<view class="text ">
+			个人信息查阅与管理:您可以通过“我的”-右上角点击进入“设置”-“隐私管理”,进行个人信息的查阅与管理。
+		</view>
+		<view class="text ">
+			账号信息——您可以通过“我的”页面访问、更正您账号中的个人资料及账号信息(身份认证信息除外)、支付信息、账号绑定信息等,也可以更改您的密码、添加安全信息等。 
+		</view>
+		<view class="text ">
+			地址信息——您可以通过访问慧研学惠生活页面上“我的”-“设置”-“个人信息”-“收货地址”中随时添加、更改、删除您的收货地址信息(包括姓名、性别、电话号码等)。
+			搜索浏览信息——您可以通过搜索栏点击删除、“我的”—“足迹”等方式访问或清除您的搜索历史记录、查看和修改兴趣以及管理其他数据。
+		</view>
+		<view class="text ">
+			订单信息——您可以通过“我的”页面访问“我的订单”页面查看您的所有已经完成、待付款、待售后、待评价的订单。您可以选择删除已完成的订单信息,但这样可能导致我们无法根据您的购买信息而准确提供相应的售后服务。
+		</view>
+		<view class="text bold">
+			请您知悉,根据法律法规的要求及不同信息的技术条件需要,我们可能无法立即从系统中完全删除您所希望删除的相应信息,在此之前,我们将根据法规要求对相应信息仅进行存储并采取必要的安全保护措施方面的处理。
+		</view>
+		<view class="text ">
+			如果您无法通过上述链接管理这些个人信息,您可以随时通过本隐私政策中提供的反馈方式联系我们。我们将在 15 天内回复您的访问请求。
+		</view>
+		<view class="text bold">
+			(二)改变您授权同意的范围或撤回授权
+		</view>
+		<view class="text ">
+			您可以通过在慧研学惠生活中删除信息、更改隐私设置或者在系统中关闭设备权限功能等方式改变同意范围或撤回您的授权。 
+		</view>
+		<view class="text ">
+			请您理解,当您执行上述操作后,我们将无法继续为您提供撤回同意或授权所对应的服务,但不会影响此前基于您的授权已经开展的个人信息处理。 
+		</view>
+		<view class="text bold">
+			(三)注销账号 
+		</view>
+		<view class="text ">
+			您有权注销您的慧研学惠生活账号,您可以通过访问小程序“我的”页面右上角“设置”-“账号与安全”-“注销账号”中进行在线操作。您注销成功后,除法律法规及相应的国家标准另有规定外,我们将删除您的个人信息或作匿名化处理。如果您无法通过上述方式访问、更正或删除您的个人信息以及注销账号,或者如果您认为慧研学惠生活存在违反法律的规定收集、使用您个人信息的情形,您可以通过我们的客服或通过本隐私政策提供的其他方式与我们取得联系。为了保障安全,我们可能需要您提供相应方式证明您的身份和请求的正当性,我们将在收到您反馈并验证您的身份后的 15 天内答复您的请求。对于您合理的请求,我们原则上不收取费用,但对多次重复、超出合理限度的请求,我们将视情收取一定成本费用。对于那些无端重复、需要过多技术手段(例如,需要开发新系统或从根本上改变现行惯例)、给他人合法权益带来风险或者非常不切实际(例如,涉及备份磁带上存放的信息)的请求,我们可能会予以拒绝。
+		</view>
+		<view class="text bold">
+			(四)自主管理控制营销信息及定向推送
+		</view>
+		<view class="text ">
+			消息推送——如您不希望收到相关消息通知,可以选择拒绝接收消息通知。
+		</view>
+		<view class="text ">
+			个性化推荐——如您不希望使用我们的智能推荐服务,可以自主选择按照距离、好评、价格等不针对您个人特征的方式进行排序,也可以在推荐信息页面中通过“不感兴趣”、“不想看”等功能进行精准反馈和实时关闭;还可以在“我的”页面“设置”-“隐私管理”-“个性化内容推荐”中进行自主管理控制。
+			个性化广告——如您不希望接收个性化的广告,您可以在“我的”页面“设置”-“隐私管理”-“个性化广告推荐”中自行控制开关,当您关闭后,您看到的广告相关性会降低,但广告不会消失。 
+			推广/回访——如您不希望接收我们的推广短信或电话回访,可通过信息中相应的退订功能进行退订,或者在电话回访中明确表示拒绝。
+		</view>
+		<view class="text bold">
+			六、未成年人的个人信息保护
+		</view>
+		<view class="text ">
+			慧研学惠生活非常重视对未成年人个人信息的保护。我们的网站和服务主要面向成人。如您为未成年人的,建议您请您的父母或监护人仔细阅读本隐私权政策并在征得您的父母或监护人同意的前提下使用我们的服务或向我们提供信息。
+			对于经父母或监护人同意使用我们的产品或服务而收集未成年人个人信息的情况,我们只会在法律法规允许、父母或监护人明确同意或者保护未成年人所必要的情况下使用、共享、转让或披露此信息。 
+		</view>
+		<view class="text bold">
+			如果我们发现自己在未事先获得可证实的父母或法定监护人同意的情况下收集了未成年人的个人信息,则会设法尽快对相关数据采取适当处理。 
+		</view>
+		
+		
+		<view class="text bold">
+			七、通知和修订 
+		</view>
+		
+		<view class="text ">
+			为给您提供更好的服务,我们的业务将不时变化,本隐私政策也将随之调整,对我们的基本情况、您的个人信息的处理目的方式种类和保存期限、您管理个人信息的方式、我们的联系方式发生变更的,我们会进行及时更新。未经您明确同意,我们不会削减您依据本隐私政策所应享有的权利。 
+			我们会通过在我们网站、移动端上发出更新版本或以其他方式提醒您相关内容的更新,也请您访问我们以便及时了解最新的隐私政策。在前述情况下,若您继续使用我们的服务,即表示同意接受修订后的本政策并受之约束。
+		</view>
+		<view class="text bold">
+			八、如何联系我们 
+		</view>
+		<view class="text ">
+			您可以通过以下方式与我们联系,我们将在15天内答复您的请求:
+		</view>
+		<view class="text bold">
+			1、您可以通过慧研学惠生活小程序上提供的在线联系方式/客服系统与我们联系;
+		</view>
+		<view class="text red">
+			2、您可以联系慧研学惠生活的客服电话进行反馈10086。
+		</view>
+		<view class="text bold">
+			九、附录:
+		</view>
+		
+		<view class="text ">
+			1、个人信息:以电子或者其他方式记录的与已识别或者可识别的自然人有关的各种信息,不包括匿名化处理后的信息。本隐私政策中可能涉及到的个人信息包括但不限于:个人基本信息(包括姓名、电话号码、性别、住址、生日等);个人身份信息(包括身份证、军官证、护照、驾驶证等);网络身份标识信息(包括系统账号、IP 地址、邮箱地址及与前述有关的密码、口令、口令保护答案);个人财产信息(包括银行账号、交易和消费记录、信贷记录以及虚拟财产信息等);个人健康生理信息(包括病症、病历、病史等);联系人信息(包括通讯录信息、好友列表等);个人上网记录(包括网站浏览记录、点击记录等);个人设备信 息(包括唯一设备识别码等描述个人常用设备基本情况的信息);个人位置信息(包括行踪轨迹、精准定位信息、住宿信息等)。 
+		</view>
+		<view class="text ">
+			2、敏感个人信息:是指一旦泄露或者非法使用,容易导致自然人的人格尊严受到侵害或者人身、财产安全受到危害的个人信息。本隐私政策中可能涉及到的个人敏感信息包括:个人身份认证信息(包括身份证、军官证、护照、驾驶证、学生证等);个人财产信息(银行账号、交易和消费记录、信贷记录以及虚拟财产信息等);其他信息(行踪轨迹、通讯录信息、住宿信息、精准定位信息、医疗健康信息、生物识别信息等);14 周岁以下的未成年人信息。
+		</view>
+		<view class="text ">
+			3、慧研学惠生活:本政策中所指的“慧研学惠生活”是指中数未来旗下所有公司与其附属、关联公司及未来可能成立的公司。
+		</view>
+		<view class="text ">
+			4、关联账号:您可以使用相同的手机号码登录慧研学惠生活所提供的产品/服务,并授权使用您的账号信息(如头像、昵称),以便于我们基于关联账号向您提供一致的服务以及您进行统一管理。
+		</view>
+		
+		<view class="text mt50">
+			附件一:
+		</view>
+		<view class="table">
+			<view class="tr">
+				<view class="td">设备权限</view>
+				<view class="td">功能说明</view>
+				<view class="td">使用目的</view>
+			</view>
+			<view class="tr">
+				<view class="td">位置</view>
+				<view class="td">获取用户位置信息</view>
+				<view class="td">用于向用户推荐周边的吃喝玩乐和出行服务、使用地图导航功能等</view>
+			</view>
+			<view class="tr">
+				<view class="td">相机</view>
+				<view class="td">调用摄像头拍摄</view>
+				<view class="td">用于扫码、拍照、上传图片/视频</view>
+			</view>
+			<view class="tr">
+				<view class="td">麦克风</view>
+				<view class="td">调用麦克风录音</view>
+				<view class="td">用于语音搜索、聊天</view>
+			</view>
+			<view class="tr">
+				<view class="td">蓝牙</view>
+				<view class="td">发现和链接蓝牙设备</view>
+				<view class="td">用于辅助定位等</view>
+			</view>
+			<view class="tr">
+				<view class="td">照片</view>
+				<view class="td">读取、写入相册</view>
+				<view class="td">用于写入和读取用户相册信息</view>
+			</view>
+			<view class="tr">
+				<view class="td">运动与健身</view>
+				<view class="td">访问运动与健身数据</view>
+				<view class="td">用于向用户提供步数统计等运动健身功能</view>
+			</view>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		
+	}
+</script>
+
+<style lang="scss" scoped>
+.xieyi{
+	padding: 20rpx;
+		.title{
+			font-size: 36rpx;
+			font-weight: bold;
+			text-align: center;
+			margin: 30rpx 0;
+		}
+		.time{
+			text-align: right;
+			margin-bottom: 20rpx;
+			font-size: 20rpx;
+		}
+		.text{
+			font-size: 24rpx;
+		}
+		.red{
+			color: red;
+		}
+		.bold{
+			font-weight: bold;
+		}
+		.mt50{
+			margin-top: 50rpx;
+		}
+		.table{
+			
+			.tr{
+				display: flex;
+				.td{
+					border: 1rpx solid #ccc;
+					flex: 1;
+					padding: 6rpx 10rpx;
+				}
+			}
+		}
+}
+	
+</style>

+ 1 - 1
my/edit/edit.vue

@@ -60,7 +60,7 @@
 								
 								
 								let fileName = r.tempFilePaths[0].substr(r.tempFilePaths[0].lastIndexOf('/')+1);
-								const host = 'http://' + res.content.bucket + '.'+ res.content.endPoint;
+								const host = 'https://' + res.content.bucket + '.'+ res.content.endPoint;
 								const policy = Base64.encode(JSON.stringify(policyText));
 								const signature = crypto.enc.Base64.stringify(crypto.HmacSHA1(policy, res.content.token.accessKeySecret));;
 								const filePath = r.tempFilePaths[0]; // 待上传文件的文件路径。

+ 264 - 85
my/order/detail.vue

@@ -30,14 +30,44 @@
 				</view>
 			</view>
 			
-			<view class="content info">
+			<view class="content" v-if="info.goodsList[0].jobFlowMap == 'XiaoJu'">
+				<view class="title">
+					加油明细
+				</view>
+				<view class="item">
+					<view class="label">
+						油号
+					</view>
+					<view class="value">
+						{{info.goodsList[0].goodsInfo.itemName || '-'}}
+					</view>
+				</view>
+				<view class="item">
+					<view class="label">
+						油枪号
+					</view>
+					<view class="value">
+						{{info.goodsList[0].goodsInfo.gunNo}}号
+					</view>
+				</view>
+				<view class="item">
+					<view class="label">
+						加油升数
+					</view>
+					<view class="value">
+						{{(info.goodsList[0].goodsInfo.litre/1000).toFixed(2)}}升
+					</view>
+				</view>
+			</view>
+			
+			<view class="content info" v-if="info.goodsList[0].jobFlowMap !== 'XiaoJu'">
 				<view class="order-info">
 					<image class="icon" :src="info.goodsList[0].goodsInfo.goodsPath" mode=""></image>
 					<view class="shop-info">
 						<view class="title">
 							{{info.goodsList[0].goodsInfo.goodsName}}
 						</view>
-						<view class="goods-desc">
+						<view class="goods-desc" v-if="!isVisual">
 							{{info.goodsList[0].goodsInfo.goodsDescribe}}
 						</view>
 						<view class="price-box">
@@ -47,17 +77,11 @@
 							
 						</view>
 						
-						
-						<!-- 有extend并且不是虚拟商品 -->
-						<!-- <view class="start-time" v-if="info.extend&&!isVisual">
-							出发时间:{{info.extend}}
-						</view> -->
-						
 					</view>
 				</view>
 			</view>
 			
-			<view class="content code-box"  v-if="info.goodsList[0].goodsState == 'WAIT_USE'&&info.goodsList[0].goodsName!='二维码支付'">
+			<view class="content code-box"  v-if="info.goodsList[0].jobFlowMap != 'P802'&&info.goodsList[0].goodsState == 'WAIT_USE'&&info.goodsList[0].goodsName!='二维码支付'">
 				<view class="left">
 					<view class="title">
 						券码信息
@@ -70,7 +94,7 @@
 					查看券码 <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
 				</view>
 			</view>
-			<view class="content" v-if="info.goodsList[0].goodsState == 'USED'">
+			<!-- <view class="content" v-if="info.goodsList[0].goodsState == 'USED'">
 				<view class="title">
 					消费记录
 				</view>
@@ -92,7 +116,7 @@
 					</view>
 				</view>
 				
-			</view>
+			</view> -->
 			
 			<view class="content">
 				<view class="title">
@@ -107,14 +131,14 @@
 					</view>
 				</view>
 				
-				<view class="item">
+				<!-- <view class="item">
 					<view class="label">
 						付款方式
 					</view>
 					<view class="value">
-						{{info.payment.paymentWay | filterPay}}
+						{{info.payment?(info.payment.paymentWay | filterPay):'-'}}
 					</view>
-				</view>
+				</view> -->
 				<view class="item">
 					<view class="label">
 						下单时间
@@ -128,13 +152,56 @@
 					<view class="label">
 						支付时间
 					</view>
+					<view class="value" >
+						{{payTime}}
+					</view>
+				</view>
+			</view>
+			
+			<view class="content" v-if="info.goodsList[0].jobFlowMap == 'XiaoJu'">
+				<view class="title">
+					交易信息
+				</view>
+				
+				<view class="item">
+					<view class="label">
+						订单金额
+					</view>
+					<view class="value">
+						¥{{info.totalAmount}}
+					</view>
+				</view>
+				
+				
+				<view class="item">
+					<view class="label">
+						服务费
+					</view>
 					<view class="value">
-						{{$u.timeFormat(info.payment.paymentTime,'yyyy-mm-dd hh:MM:ss')}}
+						¥{{(info.goodsList[0].goodsInfo.serviceFee/100).toFixed(2)}}
+					</view>
+				</view>
+				<view class="item" >
+					<view class="label">
+						优惠减免金额
+					</view>
+					<view class="value ">
+						-¥{{info.discountAmount}}
+					</view>
+				</view>
+				
+				
+				<view class="item">
+					<view class="label">
+						支付金额
+					</view>
+					<view class="value">
+						¥{{info.payAmount}}
 					</view>
 				</view>
 			</view>
 			
-			<view class="content">
+			<view class="content" v-else>
 				<view class="title">
 					交易信息
 				</view>
@@ -147,8 +214,6 @@
 						¥{{info.goodsList[0].goodsInfo.realPrice}}
 					</view>
 				</view>
-				
-				
 				<view class="item" >
 					<view class="label">
 						优惠券
@@ -158,7 +223,6 @@
 					</view>
 				</view>
 				
-				
 				<view class="item">
 					<view class="label">
 						合计
@@ -167,7 +231,6 @@
 						<text class="red fs28">¥{{info.payAmount}}</text>
 					</view>
 				</view>
-				
 			</view>
 			
 			<view class="input-box" v-if="isVisual">
@@ -175,7 +238,7 @@
 					充值账号
 				</view>
 				<view class="value">
-					{{JSON.parse(info.extend).account}}
+					{{JSON.parse(info.goodsList[0].extend).account}}
 				</view>
 			</view>
 			
@@ -192,8 +255,28 @@
 				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
 			</template>
 			
-			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'" @click="pay" >立即支付</button>
-			<view class="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&isRefund()" @click="apply">
+			
+			<view class="btn-box" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'&&info.goodsList[0].jobFlowMap == 'XiaoJu'">
+				<button class="cancel-btn" @click="cancel" :loading="btnLoading">
+					取消订单
+				</button>
+				<button class="btn" @click="pay" :loading="btnLoading">
+					立即支付
+				</button>
+			</view>
+			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'&&info.goodsList[0].jobFlowMap !== 'XiaoJu'" @click="pay" >立即支付</button>
+			
+			
+			<view class="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&info.goodsList[0].jobFlowMap == 'XiaoJu'" @click="handleCall">
+				<view class="label">
+					如有申请退款,请联系滴滴客服
+				</view>
+				<view class="value">
+					滴滴客服电话:4000016553
+				</view>
+			</view>
+			
+			<view class="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&isRefund()&&info.goodsList[0].jobFlowMap !== 'XiaoJu'" @click="apply">
 				<view class="label">
 					退款申请
 				</view>
@@ -203,6 +286,8 @@
 				<image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
 			</view>
 			
+			
+			
 			<!-- 二维码 -->
 			<u-overlay :show="show" v-if="show" :opacity="0.6">
 				<view class="wrap"  @click.stop="close">
@@ -219,7 +304,8 @@
 
 <script>
 	import {qrCode} from '@/api/order.js'
-	import {payDetails,queryPayOrder,unRefund} from '@/api/payment.js'
+	import {payDetails,queryPayOrder,unRefund} from '@/api/payment.js';
+	import {cancelOrder} from '@/api/refuel.js'
 	export default {
 		data() {
 			return {
@@ -230,7 +316,7 @@
 				btnLoading:false,
 				oldBright:0,
 				info:{
-					goodsList:[{goodsState:''}]
+					goodsList:[{goodsState:'CLOSE'}]
 				},
 				isNotTime:false
 			}
@@ -247,6 +333,7 @@
 				if(val == 'APPLY_REFUND'){
 					return '退款审核中'
 				}else if(val == 'CLOSE'){
+					console.log(1111111111111111);
 					return '关闭订单'
 				}else if(val == 'REFUNDED'){
 					return '已退款'
@@ -274,13 +361,27 @@
 		},
 		computed: {
 			closeTime() {
-				// if((this.info.createTime + 1000*60*15) - new Date().getTime()){
-				// 	this.isNotTime = false
-				// }else{
-				// 	this.isNotTime = true
-				// }
 				return (this.info.createTime + 1000*60*30) - new Date().getTime()
 			},
+			payTime(){
+				if(this.info.goodsList[0].extend&&!JSON.parse(this.info.goodsList[0].extend).hasOwnProperty('account')){
+					if(JSON.parse(this.info.goodsList[0].extend).hasOwnProperty('notifyOrderInfo')){
+						console.log(11,JSON.parse(this.info.goodsList[0].extend).notifyOrderInfo.payTime);
+						return JSON.parse(this.info.goodsList[0].extend).notifyOrderInfo.payTime
+					}else{
+						console.log(22);
+						return '-'
+					}
+				}else{
+					if(this.info.payment && this.info.payment.paymentTime){
+						console.log(3);
+						return uni.$u.timeFormat(this.info.payment.paymentTime,'yyyy-mm-dd hh:MM:ss') 
+					}else{
+						console.log(4);
+						return '-'
+					}
+				}
+			}
 		},
 		methods: {
 			isRefund(){
@@ -334,76 +435,116 @@
 				// 	value:this.oldBright
 				// })
 			},
+			handleCall(){
+				uni.makePhoneCall({
+					phoneNumber: '4000016553'//仅为示例
+				});
+			},
 			apply(){
 				let that = this
-				uni.navigateTo({
-					url:'./refund',
-					success: function(res) {
-					  // 通过eventChannel向被打开页面传送数据
-					  res.eventChannel.emit('orderInfo', that.info)
-					}
-				})
+				if(this.info.goodsList[0].jobFlowMap == 'XiaoJu'){
+					uni.navigateTo({
+						url:'./webView'
+					})
+				}else{
+					uni.navigateTo({
+						url:'./refund',
+						success: function(res) {
+						  // 通过eventChannel向被打开页面传送数据
+						  res.eventChannel.emit('orderInfo', that.info)
+						}
+					})
+				}
 			},
 			// 获取订单详情
 			payDetails(orderNo){
 				payDetails(orderNo).then(res=>{
 					this.info = res.content
-					try{
-						let extend = JSON.parse(this.info.extend)
-						if(extend.account){
-							this.isVisual = true
-						}
-					}catch(e){
-						//TODO handle the exception
+					if(this.info.goodsList[0].jobFlowMap == 'P802'){
+						this.isVisual = true
 					}
+					// try{
+					// 	let extend = JSON.parse(this.info.goodsList[0].extend)
+					// 	if(extend.account){
+					// 		this.isVisual = true
+					// 	}
+					// }catch(e){
+					// 	//TODO handle the exception
+					// }
 				})
 			},
-			// 支付
-			pay(){
-				if (this.btnLoading) return
-				this.btnLoading = true
+			// 取消支付
+			cancel(){
 				uni.showLoading({
-					title: '支付中'
+					title: '取消中'
 				})
-				let that = this
-				let miniPayRequest = JSON.parse(this.info.payment.miniPayRequest)
-				uni.requestPayment({
-					"provider": "wxpay",
-					"orderInfo": miniPayRequest,
-					"appid": miniPayRequest.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
-					"paySign": miniPayRequest.paySign,
-					"nonceStr": miniPayRequest.nonceStr, // 随机字符串
-					"package": miniPayRequest.package, // 固定值
-					// "prepayid":  miniPayRequest.package, // 统一下单订单号 
-					"timeStamp": miniPayRequest.timeStamp, // 时间戳(单位:秒)
-					"signType": miniPayRequest.signType, //签名算法
-					success(msg) {
-						console.log('msg', msg);
-						queryPayOrder(that.info.orderNo).then(res1 => {
-							if (res1.state == 'Success') {
-								uni.hideLoading()
-								uni.showToast({
-									title: '支付成功',
-									icon: 'success'
-								})
-								that.btnLoading = false
-								that.payDetails(that.info.orderNo)
-							}
-						})
-					},
-					fail(e) {
-						that.btnLoading = false
-						uni.hideLoading()
+				let obj = JSON.parse(this.info.goodsList[0].extend)
+				console.log(this.info.goodsList[0].extend);
+				cancelOrder(obj).then(res=>{
+					if(res.state == 'Success'){
 						uni.showToast({
-							title: '取消支付',
-							icon: 'fail'
+							title: '取消成功',
+							icon: 'success'
 						})
-						// 取消支付后,获取支付信息以备再次支付
-						that.payDetails(that.info.orderNo)
-						console.log('err', e,this);
+						this.payDetails(this.info.orderNo)
 					}
 				})
 			},
+			// 支付
+			pay(){
+				let that = this
+				if(this.info.goodsList[0].jobFlowMap == 'XiaoJu'){
+					let {xjOrderId,tradeId} = JSON.parse(this.info.goodsList[0].extend)
+					uni.navigateToMiniProgram({
+					   appId:"wx0d252f6ed9755862", // 滴滴加油小程序appId
+					   path: `packageA/pages/open-energy-pay/index?orderId=${xjOrderId}&tradeId=${tradeId}`, // 滴滴加油收银台页面地址,需要拼接orderId和tradeId
+					   envVersion: 'release', // 固定release
+					})
+				}else{
+					if (this.btnLoading) return
+					this.btnLoading = true
+					uni.showLoading({
+						title: '支付中'
+					})
+					let miniPayRequest = JSON.parse(this.info.payment.miniPayRequest)
+					uni.requestPayment({
+						"provider": "wxpay",
+						"orderInfo": miniPayRequest,
+						"appid": miniPayRequest.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
+						"paySign": miniPayRequest.paySign,
+						"nonceStr": miniPayRequest.nonceStr, // 随机字符串
+						"package": miniPayRequest.package, // 固定值
+						// "prepayid":  miniPayRequest.package, // 统一下单订单号 
+						"timeStamp": miniPayRequest.timeStamp, // 时间戳(单位:秒)
+						"signType": miniPayRequest.signType, //签名算法
+						success(msg) {
+							console.log('msg', msg);
+							queryPayOrder(that.info.orderNo).then(res1 => {
+								if (res1.state == 'Success') {
+									uni.hideLoading()
+									uni.showToast({
+										title: '支付成功',
+										icon: 'success'
+									})
+									that.btnLoading = false
+									that.payDetails(that.info.orderNo)
+								}
+							})
+						},
+						fail(e) {
+							that.btnLoading = false
+							uni.hideLoading()
+							uni.showToast({
+								title: '取消支付',
+								icon: 'fail'
+							})
+							// 取消支付后,获取支付信息以备再次支付
+							that.payDetails(that.info.orderNo)
+							console.log('err', e,this);
+						}
+					})
+				}
+			},
 			// 取消退款申请
 			cancelReply(){
 				if (this.btnLoading) return
@@ -588,12 +729,12 @@
 			justify-content: space-between;
 			margin-top: 28rpx;
 			.label{
-				color: #222222;
 				font-size: 28rpx;
+				color: #AAAAAA;
 			}
 			.value{
-				color: #999999;
 				font-size: 28rpx;
+				color: #222222;
 			}
 		}
 	}
@@ -637,6 +778,44 @@
 			height: 24rpx;
 		}
 	}
+	.btn-box {
+		position: fixed;
+		bottom: 0%;
+		left: 0%;
+		width: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: flex-end;
+		box-sizing: border-box;
+		padding: 10rpx 24rpx env(safe-area-inset-bottom);
+		background: #fff;
+		border-top: 1rpx solid #EEEEEE;
+		.cancel-btn{
+			width: 240rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			border-radius: 40rpx;
+			border: 2rpx solid #EE4320;
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #EE4320;
+			margin: 0;
+		}
+		.btn {
+			width: 240rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			background: $uni-color-primary;
+			border-radius: 40rpx;
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #FFFFFF;
+			margin: 0;
+			margin-left: 20rpx;
+		}
+	}
 	.info{
 		.order-info{
 			display: flex;

+ 2 - 0
my/order/index.vue

@@ -81,6 +81,8 @@
 					return '待付款'
 				}else if(val == 'WAIT_USE'){
 					return '待使用'
+				}else if(val =='AOUTO_REFUNDED'){
+					return '自动退款'
 				}
 			}
 		},

+ 63 - 14
my/order/signUp/signUpDetail.vue

@@ -23,20 +23,20 @@
 			
 			<view class="content info">
 				<view class="order-info">
-					<image class="icon" :src="info.goodsList[0].goodsInfo.activityCover" mode=""></image>
+					<!-- <image class="icon" :src="info.goodsList[0].goodsInfo.activityCover" mode=""></image> -->
 					<view class="shop-info">
 						<view class="title">
 							{{info.goodsList[0].goodsInfo.activityName}}
 						</view>
 						<view class="goods-desc">
-							活动时间:{{info.goodsList[0].goodsInfo.activityStartTime}} 至 {{info.goodsList[0].goodsInfo.activityEndTime}}
+							活动时间:{{info.goodsList[0].goodsInfo.activityStartTime.replace('T',' ')}} 至 {{info.goodsList[0].goodsInfo.activityEndTime.replace('T',' ')}}
 						</view>
 						<view class="num-box">
 							<view class="label">
 								报名人数
 							</view>
 							<view class="label">
-								{{info.goodsList.length}}
+								{{list.length}}
 							</view>
 						</view>
 						
@@ -58,17 +58,21 @@
 				</view>
 			</view> -->
 			
-			<view class="content">
+			<view class="content" v-if="list[0].data.length">
 				<view class="title">
-					报名信息 (开发中)
+					报名信息
 				</view>
-				<view class="box">
-					<view class="item">
+				<view class="box" v-for="(item,index) in list" :key="index">
+					<view class="item" v-for="(i,d) in item.data" :key="d">
 						<view class="label">
-							姓名
+							{{i.key}}
+						</view>
+						<view class="image-box" v-if="i.dataType == 5">
+			
+							<image class="img" :src="img" v-for="(img,key) in i.value" :key="key" mode=""></image>
 						</view>
-						<view class="value">
-							{{info.orderNo}}
+						<view class="value" v-else>
+							{{i.value || '-'}}
 						</view>
 					</view>
 				</view>
@@ -198,6 +202,9 @@
 	export default {
 		data() {
 			return {
+				imgList:['http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/ibYjzVQwzgBL70116d9d23a9553bf4643b28d9a80f74.jpg.jpg/1.jpg','http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/ibYjzVQwzgBL70116d9d23a9553bf4643b28d9a80f74.jpg.jpg/1.jpg','http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/ibYjzVQwzgBL70116d9d23a9553bf4643b28d9a80f74.jpg.jpg/1.jpg','http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/ibYjzVQwzgBL70116d9d23a9553bf4643b28d9a80f74.jpg.jpg/1.jpg','http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/ibYjzVQwzgBL70116d9d23a9553bf4643b28d9a80f74.jpg.jpg/1.jpg','http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/ibYjzVQwzgBL70116d9d23a9553bf4643b28d9a80f74.jpg.jpg/1.jpg',
+				'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/ibYjzVQwzgBL70116d9d23a9553bf4643b28d9a80f74.jpg.jpg/1.jpg',
+				],
 				codeData:'123',
 				show:false,
 				loading:false,
@@ -206,6 +213,7 @@
 				info:{
 					goodsList:[{goodsState:''}]
 				},
+				list:[],
 				isNotTime:false
 			}
 		},
@@ -318,7 +326,31 @@
 			getOrderDetail(orderNo,activityId){
 				getOrderDetail({activityId,orderNo}).then(res=>{
 					if (res.state == 'Success') {
-						
+						this.list = []
+						res.content.records.map(item=>{
+							let obj = {data:[]}
+							item.data.map(i=>{
+								let dataItem = {}
+								if(i.content.length>1){
+									if(i.dataType == 5){
+										dataItem.value = i.content
+									}else{
+										dataItem.value = i.content.toString()
+									}
+								}else{
+									if(i.dataType == 5){
+										dataItem.value = i.content
+									}else{
+										dataItem.value = i.content[0]
+									}
+								}
+								dataItem.key = i.dataName
+								dataItem.dataType = i.dataType
+								obj.data.push(dataItem)
+							})
+							 this.list.push(obj)
+						})
+						console.log(this.list);
 					}
 				})
 			},
@@ -543,6 +575,7 @@
 			font-size: 28rpx;	
 			color: #AAAAAA;
 		}
+		
 	}
 	.box{
 		border-top: 1rpx solid #F0F0F0;
@@ -566,10 +599,25 @@
 			.label{
 				color: #222222;
 				font-size: 28rpx;
+				padding-right: 20rpx;
+				white-space: nowrap;
+				align-self: flex-start;
 			}
 			.value{
 				color: #999999;
 				font-size: 28rpx;
+				word-break: break-all;
+			}
+			.image-box{
+				display: flex;
+				overflow: auto;
+				.img{
+					flex-shrink: 0;
+					width: 100rpx;
+					height: 100rpx;
+					border-radius: 8rpx;
+					margin-right: 10rpx;
+				}
 			}
 		}
 	}
@@ -626,13 +674,13 @@
 				display: flex;
 				flex-direction: column;
 				justify-content: space-between;
-				padding-left: 24rpx;
+				// padding-left: 24rpx;
 				flex: 1;
 				box-sizing: border-box;
 				.title{
 					color: #181818;
 					font-size: 28rpx;
-					width: 450rpx;
+					width: 620rpx;
 					white-space: nowrap;
 					overflow: hidden;
 					text-overflow: ellipsis;
@@ -656,10 +704,11 @@
 				.start-time,.goods-desc{
 					font-size: 24rpx;
 					color: #AAAAAA;
-					width: 450rpx;
+					width: 620rpx;
 					white-space: nowrap;
 					overflow: hidden;
 					text-overflow: ellipsis;
+					margin: 20rpx 0;
 				}
 			}
 		}

+ 17 - 0
my/order/webView.vue

@@ -0,0 +1,17 @@
+<template>
+	<view class="webView">
+		<web-view src="https://z.didi.cn/7RA8b"></web-view>
+	</view>
+</template>
+
+<script>
+	export default {
+		
+	}
+</script>
+
+<style lang="scss" scoped>
+.webView{
+	
+}
+</style>

+ 21 - 3
pages.json

@@ -79,13 +79,14 @@
 				{
 					"path": "index",
 					"style": {
-						"navigationBarTitleText": "加油充电"
+						"navigationBarTitleText": "加油充电",
+						"enablePullDownRefresh": true
 					}
 				},
 				{
 					"path": "refuelDetail",
 					"style": {
-						"navigationBarTitleText": "",
+						"navigationBarTitleText": "加油站",
 						"navigationStyle": "custom"
 					}
 				}
@@ -214,6 +215,12 @@
 						"navigationBarTitleText": "退款详情"
 					}
 				},
+				{
+					"path": "order/webView",
+					"style": {
+						"navigationBarTitleText": "退款申请"
+					}
+				},
 				{
 					"path": "favorite/index",
 					"style": {
@@ -227,7 +234,6 @@
 						"navigationStyle": "custom"
 					}
 				}
-
 			]
 		},
 		{
@@ -273,6 +279,12 @@
 					"style": {
 						"navigationBarTitleText": "手机号登录"
 					}
+				},
+				{
+					"path": "login/xieyi",
+					"style": {
+						"navigationBarTitleText": "隐私协议"
+					}
 				}
 			]
 		},
@@ -346,6 +358,12 @@
 						"navigationBarTitleText": "",
 						"navigationStyle": "custom"
 					}
+				},
+				{
+					"path": "makeOut",
+					"style": {
+						"navigationBarTitleText": "填写订单"
+					}
 				}
 			]
 		},

+ 7 - 6
pages/index/index.vue

@@ -2,7 +2,7 @@
 	<view class="home">
 		<zs-skeleton :loading="loading"></zs-skeleton>
 
-		<zs-banner :city="city" :background="background" position @search="handleSearch"></zs-banner>
+		<zs-banner :city="city" :background="background" position @handlePosition="getCity" @search="handleSearch"></zs-banner>
 
 		<view class="login-home">
 			<!-- 登录显示的套餐列表 -->
@@ -65,7 +65,7 @@
 								<zs-img :src="item.advertsImg" radius="full" width="340rpx" mode="widthFix" @click.native="jump(item.jumpUrl)"></zs-img>
 							</template>
 							<view v-else @click="goGoodsDetail(item)">
-								<zs-img :src="item.goodsVos[0].goodsImg" width="340rpx" height="340rpx" mode="center"></zs-img>
+								<zs-img :src="item.goodsVos[0].goodsImg" width="340rpx" height="340rpx" mode="widthFix"></zs-img>
 								<view class="info">
 									<view class="title">
 										{{item.goodsVos[0].goodsName}}
@@ -100,7 +100,7 @@
 								<!-- <image class="ad" :src="item.advertsImg" mode="widthFix"></image> -->
 							</template>
 							<view v-else  @click="goGoodsDetail(item)">
-								<zs-img :src="item.goodsVos[0].goodsImg" width="340rpx" height="340rpx" mode="center"></zs-img>
+								<zs-img :src="item.goodsVos[0].goodsImg" width="340rpx" height="340rpx" mode="widthFix"></zs-img>
 								<view class="info">
 									<view class="title">
 										{{item.goodsVos[0].goodsName}}
@@ -214,6 +214,7 @@
 			// 获取当前城市
 			getCity(){
 				let that = this
+				this.city = '定位中'
 				return new Promise((resolve,reject)=>{
 					uni.getLocation({
 							type: 'gcj02',
@@ -407,7 +408,7 @@
 			// 广告位
 			getAdv(){
 				return new Promise((resolve,reject)=>{
-					getAdv({currentPage:1,pageSize:10,advertsType:1,status:1}).then(res=>{
+					getAdv({currentPage:1,pageSize:10,advertsType:1,status:1,belongType:2}).then(res=>{
 						if(res.state == 'Success'){
 							this.advList = res.content.records
 							// this.advList = res.content.records.filter((item,index)=>index<2)
@@ -420,7 +421,7 @@
 			// 获取商品列表内广告位
 			getGoodsAdv(){
 				return new Promise((resolve,reject)=>{
-					getAdv({currentPage:1,pageSize:99,advertsType:2,status:1}).then(res=>{
+					getAdv({currentPage:1,pageSize:99,advertsType:2,status:1,belongType:2}).then(res=>{
 						if(res.state == 'Success'){
 							this.advList1 = res.content.records
 							resolve(2)
@@ -447,7 +448,7 @@
 			 uni.setStorageSync('inviteCode',decodeURIComponent(query.scene))
 		},
 		created() {
-			this.loading = true
+			// this.loading = true
 			Promise.all([this.getMenu(),this.getAdv(),this.getCity()]).then(res=>{
 				this.search()
 			})

+ 2 - 3
pay/pay.vue

@@ -228,7 +228,7 @@
 											"timeStamp": that.payData.timeStamp, // 时间戳(单位:秒)
 											"signType": that.payData.signType, //签名算法
 											success(msg) {
-												console.log('msg', msg, res);
+												console.log('msg', that.query.orderNo);
 												queryPayOrder(that.query.orderNo).then(res1 => {
 													if (res1.state == 'Success') {
 														uni.hideLoading()
@@ -488,12 +488,11 @@
 			bottom: 0%;
 			left: 0%;
 			width: 100%;
-			height: 98rpx;
 			display: flex;
 			align-items: center;
 			justify-content: space-between;
 			box-sizing: border-box;
-			padding: 0 30rpx;
+			padding: 10rpx 30rpx env(safe-area-inset-bottom);
 			border-top: 1rpx solid #EEEEEE;
 
 			.total-price {

+ 1 - 2
pay/pay1.vue

@@ -506,12 +506,11 @@
 			bottom: 0%;
 			left: 0%;
 			width: 100%;
-			height: 98rpx;
 			display: flex;
 			align-items: center;
 			justify-content: space-between;
 			box-sizing: border-box;
-			padding: 0 30rpx;
+			padding: 10rpx 30rpx env(safe-area-inset-bottom);
 			border-top: 1rpx solid #EEEEEE;
 
 			.total-price {

+ 115 - 56
refuel/index.vue

@@ -2,22 +2,22 @@
 	<view class="refuel">
 		<!-- 内容 -->
 		<zs-list class="store-box" mt="0" @load="loadMore" :status="status">
-			<view class="item" v-for="(item,index) in list" :key="index">
-				<zs-img :src="item.logoPath" width="200rpx" height="200rpx" radius="full" @click.native="goDetail(item)"></zs-img>
+			<view class="item" v-for="(item,index) in list" :key="index" @click="goDetail(item)">
+				<zs-img :src="item.logo" width="200rpx" height="200rpx" radius="full" ></zs-img>
 				<view class="info">
 					<view class="title">
-						{{item.shopVo.shopName}}
+						{{item.storeName}}
 					</view>
 					<view class="address" >
-						距离你{{(item.shopVo.distance/1000).toFixed(2)}}公里 驾车 11分钟
+						距离你 {{(item.distance/1000).toFixed(2)}} 公里
 					</view>
 					<view  class="activity">
 						<view class="price-box">
 							<view class="price">
-								¥7.36L
+								¥{{item |filterVipPrice}}/L
 							</view>
 							<view class="old-price">
-								国际价 ¥7.92
+								国际价 ¥{{item|filterPrice}}/L
 							</view>
 						</view>
 						<view class="coupon">
@@ -35,7 +35,10 @@
 </template>
 
 <script>
-	import { search } from '@/api/shop.js';
+	import { getNearbyStore } from '@/api/refuel.js';
+	import {
+		search
+	} from '@/api/shop.js';
 	export default {
 		data() {
 			return {
@@ -49,79 +52,135 @@
 				status: 'more',
 				list: [],
 				list: [],
-				query:{
-					menuId:'',
-					queryName:'',
-					'location.lat':0,
-					'location.lon':0,
-					pageCurrent:1,
-					pageSize:10
+				// query:{
+				// 	latitude:39.896751,
+				// 	longitude:116.460653,
+				// 	maxDistanceInKilometers:50,
+				// 	pageCurrent:1,
+				// 	pageSize:10
+				// },
+				query: {
+					district:'',
+					menuId: 4,
+					queryName: '',
+					'location.lat': 0,
+					'location.lon': 0,
+					pageCurrent: 1,
+					pageSize: 10
+				},
+			}
+		},
+		filters: {
+			filterVipPrice: function(item) {
+				let arr = item.itemInfoList.filter(i=>i.itemName == '92#')
+				if(!arr.length &&item.itemInfoList.length){
+					arr = [item.itemInfoList[0]] 
+				}
+				return arr.length?(arr[0].vipPrice/100).toFixed(2) : 0;
+			},
+			filterPrice: function(item) {
+				let arr = item.itemInfoList.filter(i=>i.itemName == '92#')
+				if(!arr.length &&item.itemInfoList.length){
+					arr = [item.itemInfoList[0]] 
 				}
+				return arr.length?(arr[0].cityPrice/100).toFixed(2) : 0;
 			}
 		},
-
 		methods: {
 
 			goDetail(item) {
+				if(!uni.getStorageSync('token')){
+					return uni.showModal({
+						title:'请登录',
+						confirmText:'去登录',
+						success(res){
+							console.log(res);
+							if(res.confirm){
+								uni.navigateTo({
+									url:'/login/login/login?redirect=/refuel/index'
+								})
+							}
+						}
+					})
+				}
 				uni.navigateTo({
-					url: '/refuel/refuelDetail?'
+					url: `/refuel/refuelDetail?id=${item.storeId}&epId=${item.shopId}`
 				})
 			},
 			loadMore() {
 				this.search()
 			},
 			search() {
-				return new Promise((resolve,reject)=>{
-					if(this.status == 'noMore') return
 					this.status = 'loading'
-					search(this.query).then(res=>{
-						if(res.state == 'Success'){
-							this.list = this.list.concat(res.content.records)
-							res.content.records.map((item,index)=>{
-								this.markers.push(
-								{
-								  id: index+1,  
-								  latitude: item.shopVo.location.lat,  
-								  longitude: item.shopVo.location.lon,  
-								  zIndex: '1',
-								  iconPath: '/static/triangle.png',  
-								  width: '18rpx',  
-								  height: '16rpx',  
-								  customCallout: {  
-								    anchorY: 0,  
-								    anchorX: 0,  
-								    display: 'ALWAYS'  
-								  },
-								  label:{
-									  content:item.shopVo.shopName,
-									  fontSize:'10',
-									  textAlign:'center'
-								  },
-								  joinCluster:true
+					let obj = JSON.parse(JSON.stringify(this.query))
+					search(obj).then(res => {
+						uni.stopPullDownRefresh()
+						if (res.state == 'Success') {
+							let dataList = []
+							res.content.records.map(item=>{
+								let obj 
+								if(item.tripartiteJson){
+									obj = JSON.parse(item.tripartiteJson)
+									obj.distance = item.shopVo.distance
+									obj.shopId = item.shopVo.id
+									dataList.push(obj)
 								}
-								)
 							})
-							
-							if(this.list.length >= res.content.total){
+							this.list = this.list.concat(dataList)
+							console.log(this.list);
+							if (this.list.length >= res.content.total) {
 								this.status = 'noMore'
-							}else{
+							} else {
 								this.status = 'more'
 								this.query.pageCurrent++
 							}
-							resolve()
 						}
 					})
-				})
+					// getNearbyStore(this.query).then(res=>{
+					// 		uni.stopPullDownRefresh()
+					// 		this.status = 'noMore'
+					// 	if(res.state == 'Success'){
+					// 		this.list = res.content
+							
+					// 	}
+					// })
 			},
 		},
+		onPullDownRefresh() {
+			uni.getLocation({
+					type: 'gcj02',
+					success: (res) => {
+						// 解析地址
+						this.query['location.lat'] = res.latitude
+						this.query['location.lon'] = res.longitude
+						// 存储经纬度
+						uni.setStorageSync('location',JSON.stringify({latitude:res.latitude,longitude:res.longitude}))
+						this.query.pageCurrent = 1
+						this.status = 'more'
+						this.list = []
+						this.search()
+					}
+			})
+		},
 		onLoad(option) {
-			this.query.menuId = option.id
 		},
 		onReady() {
-			let location = JSON.parse(uni.getStorageSync('location'))
-			this.query['location.lat'] = location.latitude
-			this.query['location.lon'] = location.longitude
-			this.search()
+			// let location = JSON.parse(uni.getStorageSync('location'))
+			// this.query['location.lat'] = location.latitude
+			// this.query['location.lon']= location.longitude
+			// this.search()
+			uni.getLocation({
+					type: 'gcj02',
+					success: (res) => {
+						// 解析地址
+						this.query['location.lat'] = res.latitude
+						this.query['location.lon'] = res.longitude
+						console.log(this);
+						// 存储经纬度
+						uni.setStorageSync('location',JSON.stringify({latitude:res.latitude,longitude:res.longitude}))
+						this.search()
+					}
+			})
 		}
 	}
 </script>
@@ -176,11 +235,11 @@
 							.price{
 								font-weight: 600;
 								font-size: 32rpx;
-								color: #FF4D3A;
+								color: $uni-color-primary;
 							}
 							.old-price{
 								font-weight: 300;
-								font-size: 20rpx;
+								font-size: 18rpx;
 								color: #AAAAAA;
 								text-decoration: line-through;
 								margin-left: 10rpx;
@@ -189,7 +248,7 @@
 						.coupon{
 							font-weight: 300;
 							font-size: 24rpx;
-							color: #FF4D3A;
+							color: $uni-color-primary;
 						}
 					}
 				

+ 458 - 62
refuel/refuelDetail.vue

@@ -1,21 +1,20 @@
 <template>
 	<view class="refuelDetail">
 		<zs-header :background="background"></zs-header>
-		<image class="banner" src="http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/657c35e3cae1326607ea9ed2/ext/SHOP_INFO/1977.jpg_wh300.jpg/7.jpg" mode=""></image>
+		<image class="banner" :src="info.logo" mode=""></image>
 		<view class="content">
 			<view class="title">
-				中国石化富源加油站
+				{{info.storeName}}
 			</view>
 			<view class="time">
-				营业时间 周一至周日 00:00-24:00
+				营业时间 周一至周日  {{info.openTimeHourStart}}:00 - {{info.openTimeHourEnd}}:00
 			</view>
 			<view class="distance">
-				距离您5.6公里 驾车24分钟
+				距离您{{(distance/1000).toFixed(2)}}公里
 			</view>
 			<view class="address-box">
 				<view class="address">
-					毓秀路街道延安中路13号(喷水池地
-					铁站K出口旁)
+					{{info.address}}
 				</view>
 				
 				<view class="btn-box">
@@ -30,27 +29,83 @@
 			
 			<view class="price-box">
 				<view class="price">
-					优惠加油 ¥7.89/L
+					优惠加油 ¥{{price.vipPrice?(price.vipPrice/100).toFixed(2):'--'}}/L
 				</view>
-				<view class="old-price">
-					国标价¥7.89/L
+				<view class="right-box">
+					<view class="old-price">
+						油站价¥{{price.cityPrice?(price.storePrice/100).toFixed(2):'--'}}/L
+					</view>
+					<view class="old-price">
+						国标价¥{{price.cityPrice?(price.cityPrice/100).toFixed(2):'--'}}/L
+					</view>
 				</view>
 			</view>
 			
 			<view class="choose-box">
-				<view class="item" @click="hanleChoose">
-					请选择油号
+				<view class="item" :class="[num?'active':'']" @click="hanleChoose">
+					 {{num||"请选择油号"}}
 					<image class="icon" src="../static/shop-desc.png" mode=""></image>
 				</view>
-				<view class="item" @click="hanleChoose">
-					请选择油枪
+				<view class="item" :class="[gun?'active':'']" @click="hanleChoose">
+					{{gun ? (gun + '号枪'):"请选择油枪"}}
 					<image class="icon" src="../static/shop-desc.png" mode=""></image>
 				</view>
 			</view>
+			<input class="price-input" type="digit" v-model="amount" placeholder-style="color:#AAAAAA;font-weight: 500;" placeholder="请输入加油金额,优惠价格计算" />
+			<view class="order-box">
+				<view class="item">
+					<view class="label">
+						订单金额
+					</view>
+					<view class="value-box">
+						<view class="num">
+							约{{(payInfo.litre/1000).toFixed(2)}}升
+						</view>
+						<view class="value">
+							{{'¥'+ (payInfo.totalPrice/100).toFixed(2) }}
+						</view>
+					</view>
+				</view>
+				<view class="item">
+					<view class="label">
+						服务费
+					</view>
+					<view class="value" :class="[!payInfo.totalPrice?'gray':'']">
+						{{payInfo.totalPrice?'¥'+(payInfo.serviceFee/100).toFixed(2) : '输入金额后查看服务费'}}
+					</view>
+				</view>
+				<view class="item">
+					<view class="label">
+						优惠券减免金额
+					</view>
+					<view class="value" :class="[!payInfo.totalPrice?'gray':'']">
+						{{payInfo.totalPrice?'¥'+(payInfo.promotionAmount/100).toFixed(2) : '输入金额后查看优惠金额'}}
+					</view>
+				</view>
+				<view class="item">
+					<view class="label">
+						优惠券
+					</view>
+					<view class="value gray">
+						{{payInfo.totalPrice?'暂无可用' : '输入金额后查看优惠券'}}
+						
+					</view>
+				</view>
+			</view>
 			
 		</view>
+
 		<view class="buy-box">
-			<button class="buy-btn" type="default" @click="">立即支付</button>
+			<view class="total-price">
+				<view class="label">
+					合计:
+				</view>
+				<view class="price">
+					¥ {{(payInfo.realPrice/100).toFixed(2)}}
+				</view>
+			</view>
+		
+			<button class="btn" :class="[btnDisabled?'disabled':'']" type="default" :loading="loading" :disabled="btnDisabled" @click="handlePay">立即支付</button>
 		</view>
 		
 		<u-popup :show="show" round="16rpx" mode="bottom" @close="close">
@@ -62,38 +117,24 @@
 					选择油号
 				</view>
 				<view class="box">
-					<view class="item">
-						92#
-					</view>
-					<view class="item active">
-						95#
-					</view>
-					<view class="item">
-						98#
+					<view class="item"  :class="[numIndex === index ?'active':'']" v-for="(item,index) in info.itemInfoList" :key="item.itemId" @click="handleTab(item,'',index)">
+						{{item.itemName}}
 					</view>
 				</view>
 			</view>
 			
 			<view class="item-box">
 				<view class="sub-title">
-					选择油枪
+					选择油枪 
+					<view class="notice">
+						请与加油员确认油枪号
+					</view>
 				</view>
 				<view class="box">
-					<view class="item active">
-						1
-					</view>
-					<view class="item">
-						2
-					</view>
-					<view class="item">
-						3
-					</view>
-					<view class="item m0">
-						4
-					</view>
-					<view class="item">
-						5
+					<view class="item" :class="[gun == item ?'active':'',(index+1)%4 == 0?'m0':'']" v-for="(item,index) in gunList" :key="item" @click="handleTab(item,'gun')">
+						{{item}}号
 					</view>
+					
 				</view>
 			</view>
 			
@@ -105,35 +146,290 @@
 </template>
 
 <script>
+	import { queryStoreDetail,queryCalPrice,queryNewOrder } from '@/api/refuel.js';
+	import {debounce} from '@/utils/tool.js'
+	// 腾讯地图
+	var QQMapWX = require('@/libs/qqmap-wx-jssdk.min.js');
+	var qqmapsdk = new QQMapWX({key:'KX5BZ-B64RC-RO62W-AMWAZ-VVTC3-YAFXF'});
 	export default {
 		data() {
 			return {
+				type:1,
 				background:false,
 				map:null,
 				show:false,
+				loading:false,
+				info:null,
+				distance:0,
+				itemId:'',//油号id
+				num:'',//油号
+				numIndex:undefined,//选择油号的index
+				gun:'',//油枪
+				price:{//选择的油号价格
+					cityPrice:0,
+					vipPrice:0,
+					storePrice:0
+				},
+				storeId:'',
+				amount:'',//输入金额
+				payInfo:{//计算出来的金额
+					discountPrice: 0,
+					itemName: "",
+					litre: 0,
+					priceDetailVo: {deductionDetail: null, gunCoupon: null},
+					promotionAmount: 0,
+					realPrice: 0,
+					serviceFee: 0,
+					storeId: "",
+					totalPrice: 0,
+				},
+				epId:'',//店铺id
+			}
+		},
+		watch: {
+			amount:debounce(function(val){
+				if(!val){
+					this.payInfo = {//计算出来的金额
+						discountPrice: 0,
+						itemName: "",
+						litre: 0,
+						priceDetailVo: {deductionDetail: null, gunCoupon: null},
+						promotionAmount: 0,
+						realPrice: 0,
+						serviceFee: 0,
+						storeId: "",
+						totalPrice: 0,
+					}
+				}
+				this.queryCalPrice()
+				// else if(!this.num||!this.gun){
+				// 	uni.showToast({
+				// 		title:'请选择油号/油枪',
+				// 		icon:'none'
+				// 	})
+				// }else if(val<10){
+				// 	uni.showToast({
+				// 		title:'加油金额不能小于10',
+				// 		icon:'none'
+				// 	})
+				// }
+			})
+		},
+		computed: {
+			btnDisabled(){
+				if(!this.payInfo.realPrice || !this.num || !this.gun || this.loading || this.amount<10){
+					return true
+				}else{
+					return false
+				}
+			},
+			gunList() {
+				if(this.numIndex == undefined){
+					return []
+				}else{
+					return this.info.itemInfoList[this.numIndex].gunNoList
+				}
+			},
+			query(){
+				return {
+					amount:this.amount*100,
+					itemName :this.num,
+					storeId:this.storeId,
+				}
+			},
+			notice(){
+				if(this.amount&&this.amount<10){
+					return uni.showToast({
+							title:'加油金额不能小于10',
+							icon:'none'
+						})
+				}else if(!this.num||!this.gun){
+					return uni.showToast({
+								title:'请选择油号/油枪',
+								icon:'none'
+							})
+				}else if(!this.amount){
+					return uni.showToast({
+								title:'请输入加油金额',
+								icon:'none'
+							})
+				}
+				else if(this.amount>999){
+					this.amount = 999
+					return uni.showToast({
+								title:'加油最大金额999',
+								icon:'none'
+							})
+				}
 			}
 		},
 		methods: {
+			handleTab(item,type,index){
+				if(type == 'gun'){
+					this.gun = item
+					this.show = false
+				}else{
+					this.gun = ''
+					this.numIndex = index
+					this.itemId = item.itemId
+					this.num = item.itemName
+					this.price.cityPrice = item.cityPrice
+					this.price.vipPrice = item.vipPrice
+					this.price.storePrice = item.storePrice
+				}
+				this.queryCalPrice()
+					
+			},
 			handleNavigation() {
-				this.map.openMapApp({
-					longitude:104.117262,
-					latitude:30.598726,
-					destination:'目的地',
-					success(res){
-						
-					}
-				}) 
+				uni.openLocation({
+							latitude: this.info.lat,
+							longitude: this.info.lon,
+							name:this.info.storeName,
+							address:this.info.address,
+							success: function () {
+								console.log('success');
+							}
+						});
+				// this.map.openMapApp({
+				// 	longitude:this.info.lon,
+				// 	latitude:this.info.lat,
+				// 	destination:this.info.storeName,
+				// 	success(res){
+				// 		console.log(res);
+				// 	}
+				// }) 
 			},
 			handleCall() {
-				uni.makePhoneCall({
-					phoneNumber: '10086' //仅为示例
-				});
+				if(this.info.tel){
+					uni.makePhoneCall({
+						phoneNumber: this.info.tel //仅为示例
+					});
+				}else{
+					uni.showToast({
+						title:'商家没有预留电话',
+						icon:'none'
+					})
+				}
 			},
 			hanleChoose(){
 				this.show = true
 			},
 			close(){
 				this.show = false
+			},
+			// 加油站详情
+			queryStoreDetail(storeId){
+				queryStoreDetail(storeId).then(res=>{
+					this.info = res.content
+					this.getDistance()
+					this.info.itemInfoList.map((item,index)=>{
+						if(item.itemName == '92#'){
+							this.numIndex = index
+							this.itemId = item.itemId
+							this.num = item.itemName
+							this.price.cityPrice = item.cityPrice
+							this.price.vipPrice = item.vipPrice
+							this.price.storePrice = item.storePrice
+						}
+					})
+				})
+			},
+			queryCalPrice(){
+				if(this.num&&this.gun&&this.amount>=10){
+					uni.showLoading({
+						title:'计算中'
+					})
+					queryCalPrice(this.query).then(res=>{
+						uni.hideLoading()
+						if(res.state == 'Success'){
+							this.payInfo = res.content
+						}
+					})
+				}
+			},
+			getDistance(){
+				let location = JSON.parse(uni.getStorageSync('location'))
+				qqmapsdk.calculateDistance({from:{latitude:location.latitude,longitude:location.longitude},to:[{latitude:this.info.location[1],longitude:this.info.location[0]}],success:(res)=>{
+					console.log(res);
+					this.distance = res.result.elements[0].distance
+				}})
+			
+			},
+			getRad(d) {
+			    return d * Math.PI / 180.0;
+			},
+			/*参数:两地的经纬度数值*/
+			getFlatternDistance(lat1, lng1, lat2, lng2) {
+			    var radLat1 = this.getRad(lat1);
+			    var radLat2 = this.getRad(lat2);
+			    var a = radLat1 - radLat2;
+			    var b = this.getRad(lng1) - this.getRad(lng2);
+			    var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2) +
+			    Math.cos(radLat1) * Math.cos(radLat2) * Math.pow(Math.sin(b / 2), 2)));
+			    s = s * 6378137.0;//地球半径 单位米;
+			    s = Math.round(s * 10000) / 10000; //输出为米
+			    s = s.toFixed(0)
+			    return s
+			},
+			handlePay(){
+				let that = this
+				let location = JSON.parse(uni.getStorageSync('location'))
+				console.log('不能超过(米):',this.amount*1000,'距离加油站(米):',this.getFlatternDistance(location.latitude,location.longitude,this.info.lat,this.info.lon))
+				if(this.getFlatternDistance(location.latitude,location.longitude,this.info.lat,this.info.lon)>1000){
+					return uni.showModal({
+						title:'提示',
+						content:'您当前距离加油站较远,请到达加油站后与加油员确定信息',
+						confirmText:'刷新位置',
+						success: function (res) {
+							if (res.confirm) {
+								uni.showLoading({
+									title:'刷新中'
+								})
+								uni.getLocation({
+										type: 'gcj02',
+										success: (res) => {
+											// 存储经纬度
+											uni.setStorageSync('location',JSON.stringify({latitude:res.latitude,longitude:res.longitude}))
+											uni.hideLoading()
+											that.getDistance()
+										}
+								})
+							}
+						}
+					})
+				}
+				this.loading = true
+				let query = {
+					  "epId": this.epId,
+					  "itemName":this.num,
+					  "gunNo": this.gun,
+					  "itemId": this.itemId,
+					  "litre": this.payInfo.litre,
+					  "openExtra": "",
+					  "originalAmount": this.payInfo.totalPrice,
+					  "outNewUserFlag": "",
+					  "paymentAmount":  this.payInfo.realPrice,
+					  "promotionInfo": [
+					    {
+					      "allowanceId": "string",
+					      "allowanceType": 0
+					    }
+					  ],
+					  "serviceFee": this.payInfo.serviceFee,
+					  "storeId":this.storeId,
+					  "storePrice": this.price.storePrice,
+					  "vipPrice": this.price.vipPrice
+				}
+				queryNewOrder(query).then(res=>{
+					this.loading = false
+					if(res.state == 'Success'){
+						uni.navigateToMiniProgram({
+							 appId:"wx0d252f6ed9755862", // 滴滴加油小程序appId
+							   path: `packageA/pages/open-energy-pay/index?orderId=${res.content.xjOrderId}&tradeId=${res.content.tradeId}`, // 滴滴加油收银台页面地址,需要拼接orderId和tradeId
+							   envVersion: 'release' // 固定release
+						})
+					}
+				})
 			}
 		},
 		onPageScroll(e) {
@@ -145,6 +441,20 @@
 		},
 		onReady() {
 			this.map = uni.createMapContext("map", this);
+		},
+		onShow() {
+			if(!this.btnDisabled){
+				uni.reLaunch({
+					url:'/my/order/index'
+				})
+			}
+		},
+		onLoad(options) {
+			this.epId = options.epId
+			// '5154031457384536897'
+			this.storeId = options.id
+			this.queryStoreDetail(options.id)
+			
 		}
 	}
 </script>
@@ -235,10 +545,15 @@
 				font-size: 28rpx;
 				color: #222222;
 			}
-			.old-price{
-				font-weight: 300;
-				font-size: 24rpx;
-				color: #AAAAAA;
+			.right-box{
+				display: flex;
+				align-items: center;
+				.old-price{
+					font-weight: 300;
+					font-size: 24rpx;
+					color: #AAAAAA;
+					margin-left: 20rpx;
+				}
 			}
 		}
 		.choose-box{
@@ -269,29 +584,99 @@
 				color: #FF4D3A;
 			}
 		}
+		.price-input{
+			width: 702rpx;
+			height: 120rpx;
+			line-height: 120rpx;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			border: 2rpx solid #AAAAAA;
+			font-weight: bold;
+			font-size: 32rpx;
+			color: #222;
+			padding: 28rpx;
+			box-sizing: border-box;
+			margin-top: 20rpx;
+		}
+		
+		.order-box{
+			.item{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 24rpx 0;
+				border-bottom: 1rpx solid #F0F0F0;
+				.label{
+					font-weight: 300;
+					font-size: 28rpx;
+					color: #222222;
+				}
+				.value-box{
+					display: flex;
+					align-items: center;
+					.num{
+						font-weight: 300;
+						font-size: 28rpx;
+						color: #AAAAAA;
+					}
+				}
+				.value{
+					font-weight: 300;
+					font-size: 28rpx;
+					color: #222222;
+					margin-left: 20rpx;
+				}
+				.gray{
+					color: #AAAAAA!important;
+				}
+			}
+		}
 		
 	}
-	.buy-box{
+	.buy-box {
 		position: fixed;
 		bottom: 0%;
 		left: 0%;
 		width: 100%;
-		background: #fff;
-		padding: 10rpx 24rpx env(safe-area-inset-bottom);
-		border-top: 1rpx solid #EEEEEE;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
 		box-sizing: border-box;
-		.buy-btn{
-			width: 702rpx;
+		padding: 10rpx 30rpx env(safe-area-inset-bottom);
+		border-top: 1rpx solid #EEEEEE;
+	
+		.total-price {
+			display: flex;
+			align-items: center;
+	
+			.label {
+				color: #181818;
+				font-size: 28rpx;
+			}
+	
+			.price {
+				font-size: 36rpx;
+				font-weight: 800;
+				color: #222222;
+				margin-left: 10rpx;
+			}
+		}
+	
+		.btn {
+			width: 280rpx;
 			height: 80rpx;
 			line-height: 80rpx;
 			text-align: center;
 			background: $uni-color-primary;
-			border-radius: 40rpx;
-			font-weight: 600;
-			font-size: 28rpx;
+			box-shadow: inset 0rpx 6rpx 12rpx 2rpx rgba(255, 255, 255, 0.16);
+			border-radius: 46rpx 46rpx 46rpx 46rpx;
+			font-weight: 800;
 			color: #FFFFFF;
+			font-size: 28rpx;
+			margin: 0;
+		}
+		.btn.disabled{
+			filter: grayscale(1);
 		}
-		
 	}
 	
 	.map{
@@ -315,15 +700,26 @@
 			margin-top: 20rpx;
 			padding: 24rpx;
 			box-sizing: border-box;
+			
 			.sub-title{
 				font-weight: 600;
 				font-size: 28rpx;
 				color: #222222;
 				margin-bottom: 20rpx;
+				display: flex;
+				align-items: flex-end;
+				.notice{
+					font-weight: 300;
+					font-size: 24rpx;
+					color: #AAAAAA;
+					margin-left: 20rpx;
+				}
 			}
 			.box{
 				display: flex;
 				flex-wrap: wrap;
+				max-height: 600rpx;
+				overflow: auto;
 				.item{
 					width: 148rpx;
 					height: 52rpx;

+ 6 - 1
scenic/detail.vue

@@ -171,7 +171,7 @@
 							</view>
 						</view>
 					</view>
-					<view class="buy-btn">
+					<view class="buy-btn" @click="handleBtn">
 						立即预订
 					</view>
 				</view>
@@ -233,6 +233,11 @@
 						
 					}
 				}) 
+			},
+			handleBtn(){
+				uni.navigateTo({
+					url:'/scenic/makeOut'
+				})
 			}
 		},
 		onPageScroll(e) {

+ 372 - 0
scenic/makeOut.vue

@@ -0,0 +1,372 @@
+<template>
+	<view class="scenic-makeOut">
+		<u--form
+			labelPosition="left"
+			:model="form"
+			:rules="rules"
+			ref="uForm"
+			labelWidth="150rpx"
+			>
+			<view class="content info">
+				<view class="title">
+					敦煌鸣沙山与月牙泉门票成人票
+				</view>
+				<view class="notice">
+					<view class="text">
+						预定须知 
+					</view>
+					<image class="jiantou" src="../static/right.png" mode=""></image>
+				</view>
+				<u-form-item
+						label="出游日期"
+						borderBottom
+						ref="item1"
+				>
+					<view class="time-box" @click="chooseTime">
+						<image class="right-icon" src="../static/right.png" mode=""></image>
+					</view>
+				</u-form-item>
+				<view class="signUp-box">
+					<view class="label-box">
+						<view class="label">
+							报名人数
+						</view>
+						<view class="desc">
+							(最多10张)
+						</view>
+					</view>
+					<view class="num-box">
+						<view class="btn" :class="[num == 1?'disabled':'']" @click="add(-1)">
+							-
+						</view>
+						<view class="num">
+							{{num}}
+						</view>
+						<view class="btn" :class="[num == 10?'disabled':'']" @click="add(1)">
+							+
+						</view>
+					</view>
+				</view>
+			</view>
+			
+			<view class="content ">
+				<view class="sub-title">
+					取票人信息
+				</view>
+				<u-form-item
+						label="姓名"
+						borderBottom
+						ref="item1"
+				>
+					<u--input
+							v-model="form.name"
+							border="none"
+							placeholder="请输入姓名"
+					></u--input>
+				</u-form-item>
+				<u-form-item
+						label="手机号"
+						borderBottom
+						ref="item1"
+				>
+					<u--input
+							v-model="form.name"
+							border="none"
+							placeholder="请输入手机号"
+					></u--input>
+				</u-form-item>
+				<u-form-item
+						label="证件类型"
+						borderBottom
+						ref="item1"
+				>
+					<view class="time-box" @click="chooseTime">
+						<image class="right-icon" src="../static/right.png" mode=""></image>
+					</view>
+				</u-form-item>
+				<u-form-item
+						label="证件号"
+						ref="item1"
+				>
+					<u--input
+							v-model="form.name"
+							border="none"
+							placeholder="请输入证件号"
+					></u--input>
+				</u-form-item>
+			</view>
+			
+			<view class="content" v-for="item in num" :key="item">
+				<view class="sub-title">
+					出游人信息
+				</view>
+				<view class="no">
+					第{{item+1}}位
+				</view>
+				<u-form-item
+						label="姓名"
+						borderBottom
+						ref="item1"
+				>
+					<u--input
+							v-model="form.name"
+							border="none"
+							placeholder="请输入姓名"
+					></u--input>
+				</u-form-item>
+				<u-form-item
+						label="手机号"
+						borderBottom
+						ref="item1"
+				>
+					<u--input
+							v-model="form.name"
+							border="none"
+							placeholder="请输入手机号"
+					></u--input>
+				</u-form-item>
+				<u-form-item
+						label="证件类型"
+						borderBottom
+						ref="item1"
+				>
+					<view class="time-box" @click="chooseTime">
+						<image class="right-icon" src="../static/right.png" mode=""></image>
+					</view>
+				</u-form-item>
+				<u-form-item
+						label="证件号"
+						ref="item1"
+				>
+					<u--input
+							v-model="form.name"
+							border="none"
+							placeholder="请输入证件号"
+					></u--input>
+				</u-form-item>
+			</view>
+			
+		</u--form>
+		
+		<view class="btn-box">
+			<view class="left">
+				<view class="num">
+					共{{num}}件
+				</view>
+				<view class="total">
+					合计 <view class="price-box">
+						<view class="unit">
+							¥
+						</view>
+						<view class="price">
+							{{total}}
+						</view>
+					</view>
+				</view>
+			</view>
+			<button class="btn" @click="handleBuy" :loading="loading">
+				立即报名
+			</button>
+		</view>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				num:1,
+				total:0,
+				loading:false,
+				form:{
+					name:''
+				},
+				rules: {
+						'name': {
+							type: 'string',
+							required: true,
+							message: '请填写姓名',
+							trigger: ['blur', 'change']
+						},
+					},
+			}
+		},
+		methods: {
+			chooseTime() {
+				console.log(1111);
+			},
+			add(val){
+				if((val==-1&&this.num == 1)||(val==1&&this.num == 10)) return
+				this.num += val
+			},
+			handleBuy(){
+				
+			}
+		},
+		onReady() {
+				//如果需要兼容微信小程序,并且校验规则中含有方法等,只能通过setRules方法设置规则。
+		    	this.$refs.uForm.setRules(this.rules)
+		    },
+	}
+</script>
+
+<style lang="scss" >
+.scenic-makeOut{
+	background: #F9F9F9;
+	border-radius: 0rpx 0rpx 0rpx 0rpx;
+	padding: 20rpx 24rpx 120rpx;
+	.content{
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		margin-bottom: 20rpx;
+		padding: 24rpx;
+	}
+	.sub-title{
+		font-weight: 600;
+		font-size: 28rpx;
+		color: #222222;
+		padding-bottom: 24rpx;
+		border-bottom: 1rpx solid #F0F0F0;
+	}
+	.no{
+		padding: 24rpx 0;
+		font-size: 28rpx;
+		color: #222222;
+	}
+	.time-box{
+		display: flex;
+		justify-content: flex-end;
+		.right-icon{
+			width: 48rpx;
+			height: 48rpx;
+		}
+	}
+	.info{
+		.title{
+			font-weight: 600;
+			font-size: 36rpx;
+			color: #222222;
+			width: 100%;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			margin-top: 10rpx;
+		}
+		.notice{
+			display: flex;
+			align-items: center;
+			font-size: 24rpx;
+			color: #AAAAAA;
+			margin-top: 20rpx;
+			.jiantou{
+				width: 48rpx;
+				height: 48rpx;
+			}
+		}
+		
+		.signUp-box{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			padding-top: 20rpx;
+			.label-box{
+				display: flex;
+				align-items: center;
+				.label{
+					font-weight: 300;
+					font-size: 24rpx;
+					color: #181818;
+				}
+				.desc{
+					font-weight: 300;
+					font-size: 24rpx;
+					color: #AAAAAA;
+				}
+			}
+			.num-box{
+				display: flex;
+				align-items: center;
+				.btn.disabled{
+					background: #F0F0F0;
+					color: #AAAAAA;
+				}
+				.btn{
+					width: 36rpx;
+					height: 36rpx;
+					line-height: 36rpx;
+					border-radius: 50%;
+					background: #E2ECFF;
+					color: #3879F9;
+					font-size: 30rpx;
+					text-align: center;
+					vertical-align: top;
+				}
+				.num{
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #222222;
+					width: 50rpx;
+					text-align: center;
+					
+				}
+			}
+		}
+		
+	}
+	.btn-box {
+		position: fixed;
+		bottom: 0%;
+		left: 0%;
+		z-index: 2;
+		width: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		box-sizing: border-box;
+		padding: 10rpx 24rpx env(safe-area-inset-bottom);
+		background: #fff;
+		border-top: 1rpx solid #EEEEEE;
+		.left{
+			display: flex;
+			align-items: flex-end;
+			.num{
+				font-weight: 300;
+				font-size: 24rpx;
+				color: #AAAAAA;
+			}
+			.total{
+				font-weight: 300;
+				font-size: 24rpx;
+				color: #222222;
+				display: flex;
+				align-items: flex-end;
+				margin-left: 6rpx;
+				.price-box{
+					display: flex;
+					align-items: flex-end;
+					font-weight: 400;
+					font-size: 32rpx;
+					color: #222222;
+					.unit{
+						font-size: 20rpx;
+					}
+				}
+			}
+		}
+	
+		.btn {
+			width: 280rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			background: $uni-color-primary;
+			border-radius: 40rpx;
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #FFFFFF;
+			margin: 0;
+		}
+	}
+}
+</style>

+ 7 - 3
signUp/index.vue

@@ -5,7 +5,7 @@
 			<view class="goods-name">
 				{{info.activityName}}
 			</view>
-			<view class="price-box">
+			<view class="price-box" v-if="info.activityEnable == 1">
 				<view class="left">
 					<view class="unit">
@@ -27,7 +27,7 @@
 					{{info.activityStartTime}} 至 {{info.activityEndTime}}
 				</view>
 			</view>
-			<view class="item">
+			<view class="item" v-if="info.activityEnable == 1">
 				<view class="label">
 					报名时间
 				</view>
@@ -53,7 +53,7 @@
 		</view>
 		
 		
-		<view class="buy-box">
+		<view class="buy-box"  v-if="info.activityEnable == 1&&!isEnd">
 			<button class="buy-btn" type="default" @click="handleSignUp">报名</button>
 		</view>
 		
@@ -67,6 +67,7 @@
 			return {
 				id:0,
 				info: {},
+				isEnd:false
 			}
 		},
 		methods: {
@@ -112,6 +113,9 @@
 						uni.setNavigationBarTitle({
 							title:this.info.activityName
 						})
+						if(new Date(this.info.activityEndTime).getTime()< new Date().getTime() ){//活动结束
+							this.isEnd = true
+						}
 					}
 				})
 			}

+ 74 - 18
signUp/makeOut.vue

@@ -13,7 +13,7 @@
 						报名人数
 					</view>
 					<view class="desc">
-						{{activity.limited?`(最多${activity.limited}人)`:'不限制'}}
+						{{activity.limited?`(最多${activity.limited}人)`:'不限制'}}
 					</view>
 				</view>
 				<view class="num-box">
@@ -46,11 +46,16 @@
 						:required="item.requiredEnable == 1?true:false"
 						ref="item1"
 					>
-						<u--input v-if="item.dataType == 1" :placeholder="'请选择'+item.dataName" :maxlength="getLength(item)" v-model="modelQuery[d][`data_${index}_value`]" border="none"></u--input>
+					
+						<u--input v-if="item.dataType == 1" :placeholder="'请输入'+item.dataName" :maxlength="getLength(item)" v-model="modelQuery[d][`data_${index}_value`]" border="none"></u--input>
 						<u-textarea v-else-if="item.dataType == 2" v-model="modelQuery[d][`data_${index}_value`]" border="surround" :maxlength="400" count ></u-textarea>
 						<u-radio-group  v-model="modelQuery[d][`data_${index}_value`]" v-else-if="item.dataType == 3">
 							<u-radio labelSize="34rpx" v-for="i in item.content" :key="i" :name="i" :label="i"></u-radio>
 						</u-radio-group>
+						<!-- <template v-else-if="item.dataType == 3">
+							<u--input @focus="handeChoose" :placeholder="'请选择'+item.dataName" v-model="modelQuery[d][`data_${index}_value`]" border="none"></u--input>
+						 <u-picker :show="show" ref="uPicker" closeOnClickOverlay :columns="[item.content]" @cancel="cancel" @confirm="confirm($event,d,index)"></u-picker>
+						</template> -->
 						 <u-checkbox-group
 							v-model="modelQuery[d][`data_${index}_value`]"
 							 v-else-if="item.dataType == 4"
@@ -125,6 +130,10 @@
 				activity:{},
 				rules: {},
 				loading:false,
+				show:false,
+				pickerObj:{
+					
+				},
 				price:0,
 				query: {
 					"msgType": "wx.unifiedOrder",
@@ -143,6 +152,17 @@
 			}
 		},
 		methods: {
+			handeChoose(){
+				this.show = true
+			},
+			cancel(){
+				this.show = false
+			},
+			confirm(val,d,index){
+				this.modelQuery[d][`data_${index}_value`] = val.value[0] 
+				this.show = false
+				console.log(val,d,index);
+			},
 			oversize(val,item){
 				console.log(val,item);
 				uni.showToast({
@@ -203,10 +223,10 @@
 				})
 				
 			},
-			getTemplateDetail(id){
-				getTemplateDetail({id}).then(res=>{
+			getTemplateDetail(activityId){
+				getTemplateDetail({activityId}).then(res=>{
 					if (res.state == 'Success') {
-						this.setQuery = res.content
+						this.setQuery = res.content.content
 						this.setQuery.data.map((item,index)=>{
 							if(item.dataType == 1){
 								// this.$set(item,'value','')
@@ -233,16 +253,16 @@
 										}
 									}else if(item.validType == 3){
 										obj ={
-											pattern: /^[_A-Za-z0-9-]+(\\.[_A-Za-z0-9-]+)*@"+"[A-Za-z0-9-]/,
+											pattern: /^[_A-Za-z0-9-]+(\.[_A-Za-z0-9-]+)*@[A-Za-z0-9-]/,
 											// 正则检验前先将值转为字符串
-											// transform(value) {
-											// 	return String(value);
-											// },
+											transform(value) {
+												return String(value);
+											},
 											message: '请输入正确的邮箱'
 										}
 									}else if(item.validType == 4){
 										obj ={
-											pattern: /\\d+/,
+											pattern: /^(\-|\+)?\d+(\.\d+)?$/,
 											message: '只能输入数字'
 										}
 									}
@@ -363,14 +383,42 @@
 				  "userId": JSON.parse(uni.getStorageSync('userInfo')).userId
 				}
 				let arr = []
+				console.log( 11111111,this.modelQuery);
 				new Promise((resolve,reject)=>{
 					this.modelQuery.map((item,index)=>{
 						let personData = {data:[]}//每个人的填写数据
 						// 循环校验表单
 						this['a'+index] =  new Promise((resolve1,reject1)=>{
-						  this.$refs['uForm' + index][0].validate().then(res => {
-							  // 把每个人的资料全部放在personData的data属性里面  依次排列
-							  let dataItem
+							console.log( this.$refs['uForm' + index][0]);
+							if( Object.keys(this.rules).length){//有必填项
+							  this.$refs['uForm' + index][0].validate().then(res => {
+								  // 把每个人的资料全部放在personData的data属性里面  依次排列
+								  let dataItem
+									for(let key in item){
+										let i = key.split('_')[1]
+										console.log(item,i,this.setQuery.data[i]);
+										dataItem = JSON.parse(JSON.stringify(this.setQuery.data[i])) 
+										
+										// 值是数组直接赋值
+										if(Array.isArray(item[key])){
+											if(dataItem.dataType == 5){//取出图片里面的地址
+												dataItem.content = item[key].map(item1=>{ return item1.url})
+											}else{
+												dataItem.content = item[key]
+											}
+										}else{
+											dataItem.content = [item[key]]
+										}
+										personData.data.push(dataItem)
+									}
+									resolve1(1)
+									
+								}).catch(errors => {
+									console.log(errors);
+								})
+							}else{
+								// 把每个人的资料全部放在personData的data属性里面  依次排列
+								let dataItem
 								for(let key in item){
 									let i = key.split('_')[1]
 									console.log(item,i,this.setQuery.data[i]);
@@ -389,10 +437,7 @@
 									personData.data.push(dataItem)
 								}
 								resolve1(1)
-								
-							}).catch(errors => {
-								console.log(errors);
-							})
+							}
 						})
 						obj.dataInfos.push(personData)
 						// 校验的promise数组 用于获取全部校验成功
@@ -550,7 +595,7 @@
 			let userInfo = JSON.parse(uni.getStorageSync('userInfo'))
 			this.query.userId = userInfo.userId
 			this.activity = JSON.parse(uni.getStorageSync('activity'))
-			this.getTemplateDetail(options.id)
+			this.getTemplateDetail(this.activity.id)
 		}
 	}
 </script>
@@ -641,6 +686,7 @@
 		position: fixed;
 		bottom: 0%;
 		left: 0%;
+		z-index: 2;
 		width: 100%;
 		display: flex;
 		align-items: center;
@@ -696,13 +742,23 @@
 		.u-form-item__body__left{
 			align-self: flex-start !important;
 		}
+		.u-radio-group{
+			flex-wrap: wrap;
+		}
 		.u-radio,.u-checkbox{
 			margin-right: 20rpx;
+			margin-bottom: 20rpx;
 		}
 		.u-radio__icon-wrap--circle,.u-checkbox__icon-wrap--square{
 			width: 28rpx!important;
 			height: 28rpx!important;
 		}
+		.u-checkbox-group{
+			flex-wrap: wrap;
+			.u-radio,.u-checkbox-label--left{
+				margin-bottom: 20rpx;
+			}
+		}
 	}
 }
 </style>

+ 2 - 1
study/index.vue

@@ -186,7 +186,8 @@
 			},
 			// 获取顶部栏目
 			getMenu(){
-				getMenu({currentPage:1,pageSize:5,userId:this.userId}).then(res=>{
+				let userId = uni.getStorageSync('userInfo')?JSON.parse(uni.getStorageSync('userInfo')).userId:''
+				getMenu({currentPage:1,pageSize:5,userId}).then(res=>{
 					if(res.state == 'Success'){
 						res.content.records.map((item,index)=>{
 							if(index == 0){

+ 0 - 0
unpackage/dist/build/.automator/h5/.automator.json


+ 0 - 0
unpackage/dist/build/.automator/mp-weixin/.automator.json


+ 0 - 2
unpackage/dist/build/h5/index.html

@@ -1,2 +0,0 @@
-<!DOCTYPE html><html lang=zh-CN><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><title>慧研学惠生活</title><script>var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
-            document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')</script><link rel=stylesheet href=/static/index.63b34199.css></head><body><noscript><strong>Please enable JavaScript to continue.</strong></noscript><div id=app></div><script src=/static/js/chunk-vendors.7b01b7e8.js></script><script src=/static/js/index.3ce6abec.js></script></body></html>

BIN
unpackage/dist/build/h5/static/active.png


BIN
unpackage/dist/build/h5/static/add.png


BIN
unpackage/dist/build/h5/static/banner.png


BIN
unpackage/dist/build/h5/static/camera.png


BIN
unpackage/dist/build/h5/static/card-bg.png


BIN
unpackage/dist/build/h5/static/card-bg1.png


BIN
unpackage/dist/build/h5/static/card.png


BIN
unpackage/dist/build/h5/static/combo.png


BIN
unpackage/dist/build/h5/static/cs1.png


BIN
unpackage/dist/build/h5/static/cs2.png


BIN
unpackage/dist/build/h5/static/cs3.png


BIN
unpackage/dist/build/h5/static/diamon.png


BIN
unpackage/dist/build/h5/static/emoji.png


BIN
unpackage/dist/build/h5/static/equity1.png


BIN
unpackage/dist/build/h5/static/equity2.png


BIN
unpackage/dist/build/h5/static/equity3.png


BIN
unpackage/dist/build/h5/static/equity4.png


BIN
unpackage/dist/build/h5/static/equity5.png


BIN
unpackage/dist/build/h5/static/food1.png


BIN
unpackage/dist/build/h5/static/food2.png


BIN
unpackage/dist/build/h5/static/food3.png


BIN
unpackage/dist/build/h5/static/food4.png


BIN
unpackage/dist/build/h5/static/home_off.png


BIN
unpackage/dist/build/h5/static/home_on.png


BIN
unpackage/dist/build/h5/static/hot-white.png


BIN
unpackage/dist/build/h5/static/hot.png


BIN
unpackage/dist/build/h5/static/hot1.png


BIN
unpackage/dist/build/h5/static/hotel1.png


BIN
unpackage/dist/build/h5/static/hotel2.png


BIN
unpackage/dist/build/h5/static/hotel3.png


BIN
unpackage/dist/build/h5/static/hotel4.png


BIN
unpackage/dist/build/h5/static/hotel5.png


BIN
unpackage/dist/build/h5/static/icon.png


BIN
unpackage/dist/build/h5/static/icon1.png


BIN
unpackage/dist/build/h5/static/icon2.png


BIN
unpackage/dist/build/h5/static/icon3.png


BIN
unpackage/dist/build/h5/static/icon4.png


BIN
unpackage/dist/build/h5/static/img-loading.png


BIN
unpackage/dist/build/h5/static/img/banner.0cd1091e.png


BIN
unpackage/dist/build/h5/static/img/card-bg.7750314a.png


BIN
unpackage/dist/build/h5/static/img/card-bg1.1560652a.png


BIN
unpackage/dist/build/h5/static/img/cs1.31699093.png


BIN
unpackage/dist/build/h5/static/img/cs2.a6ef70d3.png


BIN
unpackage/dist/build/h5/static/img/cs3.550f1c68.png


BIN
unpackage/dist/build/h5/static/img/hotel2.5bb68c5d.png


BIN
unpackage/dist/build/h5/static/img/hotel3.f22bcb3b.png


BIN
unpackage/dist/build/h5/static/img/js1.0c7fbac8.png


BIN
unpackage/dist/build/h5/static/img/js2.17b6f2f8.png


BIN
unpackage/dist/build/h5/static/img/js3.da081eb8.png


BIN
unpackage/dist/build/h5/static/img/js4.12ce18d9.png


BIN
unpackage/dist/build/h5/static/img/logo.9344b7fa.png


BIN
unpackage/dist/build/h5/static/img/service.d9aa6a17.png


BIN
unpackage/dist/build/h5/static/img/top-bg.320d60f2.png


BIN
unpackage/dist/build/h5/static/img/yanxue.98dd69ad.png


BIN
unpackage/dist/build/h5/static/img/yl4.c29c677b.png


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/index.63b34199.css


BIN
unpackage/dist/build/h5/static/jiayou.png


BIN
unpackage/dist/build/h5/static/jiayou1.png


BIN
unpackage/dist/build/h5/static/jiayou2.png


BIN
unpackage/dist/build/h5/static/jiayou3.png


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/chunk-vendors.7b01b7e8.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/combo-combo-combo.52b16176.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/combo-combo-combo~integral-logs~pages-index-visitorIndex.114470d6.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/combo-combo-combo~login-login-otherLogin~my-edit-edit~pages-index-visitorIndex.ac091977.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/combo-combo-combo~login-login-otherLogin~pages-index-visitorIndex.dca64b3f.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/combo-combo-combo~study-community.5a7022ad.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/detail-discountsDetail-index.2b879ca0.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/detail-discountsDetail-index~detail-shopDetail-shopDetail~integral-logs~integral-shop~my-favorite-in~9199b9c6.f9dca844.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/detail-qrcode-index.79699e10.js


Plik diff jest za duży
+ 0 - 0
unpackage/dist/build/h5/static/js/detail-shopDetail-shopDetail.7f1d35aa.js


Niektóre pliki nie zostały wyświetlone z powodu dużej ilości zmienionych plików