wenjie 10 сар өмнө
parent
commit
8c1409a446
100 өөрчлөгдсөн 5828 нэмэгдсэн , 3006 устгасан
  1. 46 0
      App.vue
  2. 8 0
      api/activity.js
  3. 31 0
      api/combo.js
  4. 11 0
      api/coupon.js
  5. 9 0
      api/goods.js
  6. 83 0
      api/movie.js
  7. 7 0
      api/payment.js
  8. 1 1
      api/refuel.js
  9. 10 1
      api/scenic.js
  10. 7 7
      api/study.js
  11. 112 0
      components/zs-adv-dialog/index.vue
  12. 11 7
      components/zs-banner/index.vue
  13. 8 1
      components/zs-choose-tab/index.vue
  14. 2 2
      components/zs-header/index.vue
  15. 0 0
      components/zs-img/index.vue
  16. 2 2
      components/zs-skeleton/index.vue
  17. 4 4
      components/zs-slider/index.vue
  18. 67 37
      detail/discountsDetail/index.vue
  19. 0 501
      detail/discountsDetail/refuel.vue
  20. 296 90
      detail/goodsDetail/index.vue
  21. 102 31
      detail/shopDetail/shopDetail.vue
  22. 8 2
      detail/shopList/index.vue
  23. 43 15
      detail/virtualGoods/index.vue
  24. 1 0
      detail/virtualGoods/pay.vue
  25. 85 51
      hotel/hotelDetail.vue
  26. 73 35
      hotel/index.vue
  27. 19 10
      hotel/introduce.vue
  28. 14 6
      hotel/makeOut.vue
  29. 196 62
      hotel/search.vue
  30. 0 218
      integral/logs.vue
  31. 0 155
      integral/shop.vue
  32. 0 353
      integral/store.vue
  33. 39 13
      login/login/login.vue
  34. 52 22
      login/login/otherLogin.vue
  35. 131 24
      movie/chooseSeat.vue
  36. 160 49
      movie/index.vue
  37. 275 105
      movie/movieDetail.vue
  38. 189 0
      movie/movieList.vue
  39. 59 15
      my/coupon/index.vue
  40. 20 5
      my/edit/edit.vue
  41. 52 0
      my/edit/unSubscribe.vue
  42. 216 151
      my/memberCenter/index.vue
  43. 110 46
      my/order/detail.vue
  44. 129 62
      my/order/hotel/detail.vue
  45. 29 13
      my/order/index.vue
  46. 842 0
      my/order/movie/detail.vue
  47. 5 1
      my/order/refund.vue
  48. 21 9
      my/order/refundDetail.vue
  49. 79 58
      my/order/scenic/detail.vue
  50. 396 0
      my/order/scenic/refund.vue
  51. 480 0
      my/order/scenic/refundDetail.vue
  52. 8 3
      my/order/signUp/refundDetail.vue
  53. 36 13
      my/order/signUp/signUpDetail.vue
  54. 0 0
      my/service/index.vue
  55. 47 47
      pages.json
  56. 115 0
      pages/activity/index.vue
  57. 81 41
      pages/index/index.vue
  58. 7 2
      pages/index/searchResult.vue
  59. 123 75
      pages/my/index.vue
  60. 0 154
      pages/service/chatRoom.vue
  61. 3 2
      pay/coupon.vue
  62. 1 0
      pay/pay.vue
  63. 110 85
      pay/pay1.vue
  64. 110 35
      refuel/index.vue
  65. 248 133
      refuel/refuelDetail.vue
  66. 11 3
      scenic/detail.vue
  67. 110 80
      scenic/index.vue
  68. 128 81
      scenic/makeOut.vue
  69. 92 45
      scenic/search.vue
  70. 55 40
      signUp/index.vue
  71. 2 2
      signUp/makeOut.vue
  72. 1 1
      special/water.vue
  73. BIN
      static/activity_off.png
  74. BIN
      static/activity_on.png
  75. BIN
      static/close.png
  76. BIN
      static/cricle-white.png
  77. BIN
      static/disable-icon.png
  78. BIN
      static/down.png
  79. BIN
      static/edit-icon.png
  80. BIN
      static/error-img.png
  81. BIN
      static/half_star.png
  82. BIN
      static/home_off.png
  83. BIN
      static/home_on.png
  84. BIN
      static/icon1.png
  85. BIN
      static/icon2.png
  86. BIN
      static/icon3.png
  87. BIN
      static/icon4.png
  88. BIN
      static/jiayou.png
  89. BIN
      static/level0.png
  90. BIN
      static/level1.png
  91. BIN
      static/level2.png
  92. BIN
      static/level2023110101.png
  93. BIN
      static/level2023110102.png
  94. BIN
      static/level2023110103.png
  95. BIN
      static/level3.png
  96. BIN
      static/loading-img.png
  97. BIN
      static/map-bg.png
  98. BIN
      static/member/click.gif
  99. BIN
      static/member/vip1/card.png
  100. BIN
      static/member/vip1/icon1.png

+ 46 - 0
App.vue

@@ -24,6 +24,14 @@
 		},
 		onHide: function() {
 			console.log('App Hide')
+			// 解决我的页面多个登录窗堆叠问题
+			let pages = getCurrentPages()
+			let currentPage = pages[pages.length - 1]
+			if(currentPage.route == 'pages/my/index'){
+				uni.reLaunch({
+					url:'/pages/index/index'
+				})
+			}
 		},
 
 	}
@@ -32,4 +40,42 @@
 <style lang="scss">
 	/*每个页面公共css */
 	@import "@/uni_modules/uview-ui/index.scss";
+	.tag1{
+			display: inline-block;
+			width: 70rpx;
+			height: 24rpx;
+			line-height: 24rpx;
+			text-align: center;
+			background: #E4F5FF;
+			border-radius: 4rpx 4rpx 12rpx 4rpx;
+			font-size: 16rpx;
+			color: #222222;
+			margin-left: 8rpx;
+		}
+		
+		.tag2{
+			display: inline-block;
+			width: 70rpx;
+			height: 24rpx;
+			line-height: 24rpx;
+			text-align: center;
+			background: #FAEBFF;
+			border-radius: 4rpx 4rpx 12rpx 4rpx;
+			font-size: 16rpx;
+			color: #222222;
+			margin-left: 8rpx;
+		}
+		
+		.tag3{
+			display: inline-block;
+			width: 70rpx;
+			height: 24rpx;
+			line-height: 24rpx;
+			text-align: center;
+			background: linear-gradient( 180deg, #272624 0%, #FFE1A5 100%);
+			border-radius: 4rpx 4rpx 12rpx 4rpx;
+			font-size: 16rpx;
+			color: #FFE1A5;
+			margin-left: 8rpx;
+		}
 </style>

+ 8 - 0
api/activity.js

@@ -1,5 +1,13 @@
 import {request} from '@/utils/request.js'
 
+// 活动列表
+export function activityList(data) {
+  return request({
+    url: '/zswl-cloud-shop/activitySignup/search',
+    data
+  })
+}
+
 // 获取活动详情
 export function getActivityDetail(data) {
 	return request({

+ 31 - 0
api/combo.js

@@ -0,0 +1,31 @@
+import {request} from '@/utils/request.js'
+
+// 套餐列表
+export function mealList(data) {
+	return request({
+		url: '/zswl-cloud-shop/setMeal/list',
+		data
+	})
+}
+
+// 权益列表
+export function equityList(data) {
+  return request({
+    url: '/zswl-cloud-shop/equityInfo/search',
+    data
+  })
+}
+
+
+// 订购链接
+export function getH5url(data) {
+  return request({
+    url: '/vipserver/h5url',
+	method:'post',
+    data
+  })
+}
+
+
+
+

+ 11 - 0
api/coupon.js

@@ -34,3 +34,14 @@ export function getMyCouponList(data) {
 	})
 }
 
+
+// 我的优惠券
+export function couponByUser(data) {
+	return request({
+		url: '/zswl-cloud-shop/couponInfo/couponByUser',
+		data
+	})
+}
+
+
+

+ 9 - 0
api/goods.js

@@ -74,3 +74,12 @@ export function getVirtualInfo(data) {
 		data
 	})
 }
+
+// 下单校验
+export function valid(data) {
+	return request({
+		url: '/zswl-cloud-shop/goodsInfo/valid',
+		data
+	})
+}
+

+ 83 - 0
api/movie.js

@@ -0,0 +1,83 @@
+import {request} from '@/utils/request.js'
+
+// 获取热映电影
+export function hotList(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/movies',
+		data
+	})
+}
+
+// 获取待映电影
+export function comingList(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/coming_movies',
+		data
+	})
+}
+
+// 获取影院筛选
+export function cinema_filter(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/cinema_filter',
+		data
+	})
+}
+
+// 获取影院列表
+export function cinemas(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/cinemas',
+		data
+	})
+}
+
+// 获取城市列表
+export function cityList(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/get_citys',
+		data
+	})
+}
+
+// 获取电影详情
+export function movieDetail(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/movie_detail',
+		data
+	})
+}
+
+// 获取电影的可选影院
+export function movie_cinemas(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/movie_cinemas',
+		data
+	})
+}
+
+
+// 获取影院某个电影的排片列表
+export function cinema_shows(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/cinema_shows',
+		data
+	})
+}
+
+// 获取场次座位详情
+export function getSeat(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/session',
+		data
+	})
+}
+
+// 创建订单
+export function create_order(data) {
+	return request({
+		url: '/springbatchservice/ypp/movie/create_order',
+		method:'post',
+		data
+	})
+}

+ 7 - 0
api/payment.js

@@ -48,3 +48,10 @@ export function close(data) {
 	})
 }
 
+// 申请客服介入
+export function refundIntervene(data) {
+	return request({
+		url: '/springbatchservice/pay/refundIntervene/'+data,
+	})
+}
+

+ 1 - 1
api/refuel.js

@@ -12,7 +12,7 @@ export function getNearbyStore(data) {
 // 查询加油站详情
 export function queryStoreDetail(data) {
 	return request({
-		url: '/springbatchservice/xiaoju/queryStoreDetail/'+data,
+		url: '/springbatchservice/xiaoju/queryStoreDetail2/'+data,
 	})
 }
 

+ 10 - 1
api/scenic.js

@@ -43,4 +43,13 @@ export function cancelOrder(data) {
 		method:'post',
 		data
 	})
-}
+}
+
+// 退票接口
+export function tuiPiao(data) {
+	return request({
+		url: '/springbatchservice/dfy/ticket/tuiPiao',
+		method:'post',
+		data
+	})
+}

+ 7 - 7
api/study.js

@@ -56,13 +56,13 @@ export function studyGoodsByUser(data) {
 	})
 }
 
-// 研学商品详情
-export function studyGoodsDetail(data) {
-	return request({
-		url: '/zswl-cloud-shop/goodsCoupon/studyGoodsDetail',
-		data
-	})
-}
+// // 研学商品详情
+// export function studyGoodsDetail(data) {
+// 	return request({
+// 		url: '/zswl-cloud-shop/goodsCoupon/studyGoodsDetail',
+// 		data
+// 	})
+// }
 
 // 研学测试题库
 export function getPaper(data) {

+ 112 - 0
components/zs-adv-dialog/index.vue

@@ -0,0 +1,112 @@
+<template>
+	<view class="zs-dialog" v-if="showDialog">
+	   <view class="dialog-content">
+		<image class="adv" :src="currentAdv" mode="widthFix" @click="jump"></image>
+		<image class="close" src="@/static/close.png" mode="" @click="handleClose"></image>
+	   </view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			list: {
+				type: Array,
+				default: ()=>{
+					return []
+				}
+			},
+		},
+		data() {
+			return {
+				current: 0,
+				show:true,
+			}
+		},
+		computed: {
+			currentAdv() {
+				if(this.list.length){
+					return this.list[this.current].advertsImg
+				}else{
+					return ''
+				}
+			},
+			showDialog(){
+				if(this.list.length &&this.show){
+					if((this.current+1) > this.list.length){
+						return false
+					}else{
+						return true
+					}
+				}else{
+					return false
+				}
+			}
+		},
+		methods: {
+			handleClose() {
+				if((this.current+1)== this.list.length){
+					this.show = false
+				}else{
+					this.current++
+				}
+			},
+			jump(){
+				if(this.list[this.current].loginLimit == 1){
+					if(!uni.getStorageSync('token')){
+						let that = this
+						return uni.showModal({
+						  title: "请登录",
+						  confirmText: "去登录",
+						  success(res) {
+							if (res.confirm) {
+								let redirect = that.list[that.current].jumpUrl.split('?')[0]
+								let params =  that.list[that.current].jumpUrl.split('?')[1]
+								console.log(`../../login/login/login?redirect=${redirect}&${params}`);
+							  uni.navigateTo({
+								url: `../../login/login/login?redirect=${redirect}&${params}`,
+							  });
+							}
+						  },
+						});
+					}
+				}
+				this.show = false
+				uni.navigateTo({
+					url: this.list[this.current].jumpUrl
+				})
+			}
+		},
+		
+	}
+</script>
+
+<style lang="scss" scoped>
+.zs-dialog{
+	position: fixed;
+	top: 0%;
+	left: 0%;
+	width: 750rpx;
+	height: 100vh;
+	z-index: 2;
+	background: rgba(0, 0, 0, .4);
+	.dialog-content{
+		position: absolute;
+		top: 50%;
+		left: 50%;
+		transform: translate(-50%,-50%);
+		width: 552rpx;
+		.adv{
+			width: 100%;
+		}
+		.close{
+			width: 40rpx;
+			height: 40rpx;
+			position: absolute;
+			bottom: -52rpx;
+			left: 50%;
+			transform: translateX(-50%);
+		}
+	}
+}
+</style>

+ 11 - 7
components/zs-banner/index.vue

@@ -13,16 +13,15 @@
 		</view>
 		<view class="top-box" :style="{'--bg':theme}">
 				
-			<swiper class="swiper" @change="swiperChange" :indicator-dots="true" circular :autoplay="true"
-				:interval="3000" :duration="1000">
-				<swiper-item v-for="(item,index) in bannerList" :key="index">
+			<swiper class="swiper" @change="swiperChange" skip-hidden-item-layout :indicator-dots="true" circular :autoplay="true" :interval="3000" :duration="1000">
+				<swiper-item v-for="(item,index) in bannerList" :key="index" @click="goDetail(item.jumpUrl)">
 					<image class="swiper-item" mode="" :src="item.bannerImg">
 					</image>
 				</swiper-item>
 		
 			</swiper>
 		</view>
-		<u-notice-bar bgColor="none" icon="volume-fill" color="#6F4F23" direction="column" :fontSize='26' :text="textList"></u-notice-bar>
+	<!-- 	<u-notice-bar bgColor="none" icon="volume-fill" color="#6F4F23" direction="column" :fontSize='26' :text="textList"></u-notice-bar> -->
 	</view>
 </template>
 
@@ -82,7 +81,12 @@
 			};
 		},
 		methods: {
-			
+			// 跳转优惠详情
+			goDetail(url) {
+				uni.navigateTo({
+					url,
+				})
+			},
 			// swiper变动
 			swiperChange(val) {
 				this.theme = this.bannerList[val.detail.current].colour
@@ -138,7 +142,7 @@
 			}
 		},
 		created() {
-			this.getNotification()
+			// this.getNotification()
 			this.getBanner()
 			this.getNavHeight()
 		}
@@ -154,7 +158,7 @@
 
 .zs-banner{
 	position: relative;
-	height: 584rpx;
+	// height: 584rpx;
 	.position-box{
 		position: fixed;
 		width: 100%;

+ 8 - 1
components/zs-choose-tab/index.vue

@@ -5,7 +5,9 @@
 		<view class="tab-list">
 			<view class="tab" v-for="(item,index) in tabList" :class="[chooseList[index] ?'active':'']" :key="index" @click="handleTab(item,index)">
 				{{chooseList[index].label|| item.label}}
+				<u-icon name="arrow-down" color="#222" size="24"></u-icon>
 			</view>
+			
 		</view>
 			 <view class="box" v-show="show">
 				<view class="item " :class="[chooseList[active].id == item.id ?'active':'']" v-for="(item,index) in tabList[active].list" :key="index" @click="choose(item)">
@@ -125,7 +127,7 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 	.choose-modal {
 		position: fixed;
 		top: 0;
@@ -156,6 +158,11 @@
 				font-size: 24rpx;
 				padding: 0 20rpx;
 				margin-right: 16rpx;
+				display: flex;
+				align-items: center;
+				.u-icon{
+					margin-left: 5rpx;
+				}
 			}
 		}
 		

+ 2 - 2
components/zs-header/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="zs-header" :style="{height:statusBarHeight+navBareight +'px',background:background?'#fff':''}" @click="back">
-		<!-- <image class="back" :src="background?backIcon:whiteBack" mode=""></image> -->
-		<image class="back" :src="backIcon" mode=""></image>
+		<image class="back" :src="background?backIcon:whiteBack" mode=""></image>
+		<!-- <image class="back" :src="backIcon" mode=""></image> -->
 		<view class="title" :style="{color:background?'#222222':'#fff'}">
 			{{title}}
 		</view>

Файлын зөрүү хэтэрхий том тул дарагдсан байна
+ 0 - 0
components/zs-img/index.vue


+ 2 - 2
components/zs-skeleton/index.vue

@@ -655,8 +655,8 @@
 		        <image mode="true" class="head sk-image" data-event-opts="tap,goShopDetail,$0,shopInfo"></image>
 		        <view class="btn-box">
 		          <view class="buy-btn" data-event-opts="tap,handleBuy,$event">
-		            <view class="label sk-transparent sk-text-14-2857-14 sk-text" style="background-position-x: 50%;">会员专享价</view>
-		            <view class="price sk-transparent sk-text-14-2857-988 sk-text" style="background-position-x: 50%;">¥0.1</view>
+		          <!--  <view class="label sk-transparent sk-text-14-2857-14 sk-text" style="background-position-x: 50%;">会员专享价</view>
+		            <view class="price sk-transparent sk-text-14-2857-988 sk-text" style="background-position-x: 50%;">¥0.1</view> -->
 		          </view>
 		        </view>
 		      </view>

+ 4 - 4
components/zs-slider/index.vue

@@ -21,7 +21,7 @@
 					width: blockWidth + 'rpx',
 					backgroundColor: blockColor
 				}]">
-				<text class="numsize">{{value[0]}}</text>
+				<!-- <text class="numsize">{{value[0]}}</text> -->
 				</view>
       </view>
       <view class="cj-slider__button-wrap2" @mousedown="onMouseDown(2, $event)" @mousemove="onMouseMove($event)"
@@ -33,7 +33,7 @@
       				width: blockWidth + 'rpx',
       				backgroundColor: blockColor
       			}]">
-				<text class="numsize">{{value[1]}}</text>
+				<!-- <text class="numsize">{{value[1]}}</text> -->
 				</view>
       </view>
     </view>
@@ -101,7 +101,7 @@
       // 进度条的激活部分颜色
       activeColor: {
         type: String,
-        default: '#2979ff'
+        default: '#EE4320'
       },
       // 进度条的背景颜色
       inactiveColor: {
@@ -348,7 +348,7 @@
 	  position: relative;
 	  	  .numsize{
 	  		  position: absolute;
-	  		  width: 60rpx;
+	  		  width: 90rpx;
 	  		  height: 40rpx;
 			  padding: 2rpx 10rpx;
 	  		  background-color: rgba(0, 0, 0, .8);

+ 67 - 37
detail/discountsDetail/index.vue

@@ -4,30 +4,29 @@
 
 		<!-- 内容 -->
 		<zs-list class="store-box" mt="0" @load="loadMore" :status="status">
-			<view class="item" v-for="(item,index) in list" :key="index">
+			<view class="item" v-for="(item,index) in list" :key="index" @click="goDetail(item)">
 				<!-- <image :src="item.src" mode="" class="icon" @click="goDetail(item)"></image> -->
 				<view class="box">
 					<zs-img :src="item.logoPath" width="200rpx" height="200rpx" radius="full"
-						@click.native="goDetail(item)"></zs-img>
+						></zs-img>
 					<view class="info">
 						<view class="title">
 							{{item.shopVo.shopName}}
 						</view>
 						<view class="desc">
-							{{item.district}}
+							{{item.address}}
+						</view>
+						<view class="desc">
+							距离你{{(item.shopVo.distance/1000).toFixed(2)}}km
 						</view>
 					</view>
 				</view>
 				
 				<view class="goods-item" :class="[d != 0?'none':'']" v-for="(i,d) in filterData(item.goodsVos)" :key="d">
-					<view class="goods-info">
-						<!-- <view class="tag">
-							团
-						</view> -->
-						<view class="goods-name">
-							{{i.goodsName}}
+						<view class="tag" v-if="i.goodsLabel">
+							{{i.goodsLabel}}
 						</view>
-					</view>
+						
 					<view class="price-box">
 							<view class="unit">
@@ -35,10 +34,19 @@
 							<view class="price">
 								{{i.realPrice}}
 							</view>
+							<view class="discount-tag" v-if="i.marketPrice">
+								<image class="icon" src="https://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/HZm0fGVdMht36ef982cd73bdd6733a803e1ba6a80fa2.png/1.png" mode=""></image>
+								<view class="discount-num">
+									{{((i.realPrice/i.marketPrice)*10).toFixed(1)}}折
+								</view>
+							</view>
 							<view class="old-price">
-								市场价 ¥{{i.marketPrice}}
+								 ¥{{i.marketPrice}}
 							</view>
 					</view>
+					<view class="goods-name">
+						{{i.goodsName}}
+					</view>
 				</view>
 
 			</view>
@@ -79,7 +87,7 @@
 					'location.lat': 0,
 					'location.lon': 0,
 					pageCurrent: 1,
-					pageSize: 10
+					pageSize: 100
 				},
 				location:'',
 				tabList: [{
@@ -193,7 +201,13 @@
 				console.log(this.query.menuId);
 			},
 			goDetail(item) {
-				uni.setStorageSync('shopInfo', JSON.stringify(item))
+				let shopInfo = {
+					shopId:item.shopVo.shopId,
+					shopName:item.shopVo.shopName,
+					detailContent:item.detailContent,
+					logoPath:item.logoPath,
+				}
+				uni.setStorageSync('shopInfo', JSON.stringify(shopInfo))
 				uni.navigateTo({
 					url: '../shopDetail/shopDetail'
 				})
@@ -319,7 +333,7 @@
 						}
 
 						.desc {
-							margin-top: 30rpx;
+							margin-top: 20rpx;
 							font-size: 24rpx;
 							color: #AAAAAA;
 							overflow: hidden;
@@ -342,32 +356,27 @@
 				}
 				.goods-item{
 					display: flex;
-					justify-content: space-between;
-					padding: 20rpx 0;
-					border-bottom: 1rpx solid #F0F0F0;
-					.goods-info{
-						display: flex;
-						align-items: center;
-						.tag{
-							text-align: center;
-							font-size: 24rpx;
-							color: #FFFFFF;
-							width: 30rpx;
-							height: 30rpx;
-							line-height: 30rpx;
-							background: #EE4320;
-							border-radius: 8rpx 8rpx 8rpx 8rpx;
-						}
-						.goods-name{
-							font-weight: 400;
-							font-size: 24rpx;
-							color: #222222;
-							margin-left: 18rpx;
-						}
+					padding: 10rpx 0;
+					display: flex;
+					align-items: center;
+					.tag{
+						text-align: center;
+						font-size: 20rpx;
+						color: #FFFFFF;
+						background: $uni-color-primary;
+						padding: 2rpx 10rpx;
+						border-radius: 8rpx 8rpx 8rpx 8rpx;
+					}
+					.goods-name{
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #222222;
+						margin-left: 18rpx;
 					}
 					.price-box {
 						display: flex;
 						align-items: center;
+						margin-left: 10rpx;
 							.unit {
 								font-size: 20rpx;
 								color: $uni-color-primary;
@@ -375,10 +384,31 @@
 							}
 					
 							.price {
-								font-size: 32rpx;
+								font-size: 28rpx;
 								color: $uni-color-primary;
 								font-weight: bold;
 							}
+							.discount-tag{
+								display: flex;
+								align-items: center;
+								width: 92rpx;
+								height: 28rpx;
+								line-height: 28rpx;
+								background: #FFF6F5;
+								border-radius: 8rpx 8rpx 8rpx 8rpx;
+								border: 1rpx solid $uni-color-primary;
+								margin-left: 10rpx;
+								.icon{
+									width: 30.5rpx;
+									height: 28rpx;
+								}
+								.discount-num{
+									flex: 1;
+									text-align: center;
+									font-size: 20rpx;
+									color: $uni-color-primary;
+								}
+							}
 					
 							.old-price {
 								font-size: 20rpx;

+ 0 - 501
detail/discountsDetail/refuel.vue

@@ -1,501 +0,0 @@
-<template>
-	<view class="discountsDetail">
-
-		<!-- 地图 -->
-		<map id="map" class="map" style="width: 100%;" :longitude="longitude" :latitude="latitude" :scale='scale'
-			 enable-poi show-location :markers="markers"
-			@regionchange="mapChange" @callouttap="handleCallout">
-			<image class="position" src="../../static/map-position.png" mode="" @click="myPosition"></image>
-			<cover-view slot="callout">  
-						  <cover-view v-for="(item,index) in markers" :key="item.id" class="callout" :marker-id="item.id"  @click="test">
-						    <cover-image class="icon" src="@/static/jiayou.png"></cover-image>  
-								<cover-view class="title">
-									7.65/L
-								</cover-view>
-								<cover-view class="triangle"></cover-view>
-						  </cover-view>  
-			      </cover-view>  
-
-		</map>
-
-		<!-- titleArr: 选择项数组 dropArr: 下拉项数组 二维数组 @finishDropClick: 下拉筛选完成事件-->
-		<cc-dropDownMenu :titleArr="titleArr" :dropArr="dropArr" @finishDropClick="finishClick"></cc-dropDownMenu>
-		<!-- 内容 -->
-		<zs-list class="store-box" mt="0" @load="loadMore" :status="status">
-			<view class="item" v-for="(item,index) in list" :key="index">
-				<!-- <image :src="item.src" mode="" class="icon" @click="goDetail(item)"></image> -->
-				<zs-img :src="item.logoPath" width="164rpx" height="164rpx" radius="full" @click.native="goDetail(item)"></zs-img>
-				<view class="info">
-					<view class="title">
-						{{item.shopVo.shopName}}
-					</view>
-					<view  class="activity" :class="!item.activityContent?'white':''">
-						<image class="card" src="../../static/card-icon.png" mode=""></image>
-						{{item.activityContent || '-'}}
-					</view>
-					<view class="address" >
-						<image class="position" src="../../static/address-icon.png" mode=""></image>
-						距离你{{(item.shopVo.distance/1000).toFixed(2)}}km ·{{item.district}}
-					</view>
-					
-				</view>
-			</view>
-		</zs-list>
-
-
-
-	</view>
-</template>
-
-<script>
-	import { search } from '@/api/shop.js';
-	export default {
-		options: {
-			styleIsolation: 'shared'
-		},
-		data() {
-			return {
-				map: null,
-				longitude: 0,
-				latitude: 0,
-				scale:18,
-				markers: [],
-				destination: '',
-				active: 0,
-				status: 'more',
-				list: [],
-				btnText: '去加油',
-				list: [],
-				titleArr: ['全城', '距离最近'],
-				dropArr: [
-					// 距离
-					[{
-							text: '全城',
-							value: ""
-						},
-						{
-							text: '观山湖区',
-							value: "440103"
-						}
-					],
-
-					// 类型
-					[{
-							text: '距离最远',
-							value: "0-40"
-						},
-						{
-							text: '距离最近',
-							value: "40-60"
-						}
-					],
-				],
-				filterResultData: [],
-				query:{
-					menuId:'',
-					queryName:'',
-					'location.lat':0,
-					'location.lon':0,
-					pageCurrent:1,
-					pageSize:10
-				}
-			}
-		},
-
-		methods: {
-			// 点击地图气泡
-			handleCallout(val){
-				console.log(val);
-			},
-			// 地图中打开商家
-			handleAdress(item) {
-				this.map.openMapApp({
-					longitude: Number(item.longitude) ,
-					latitude: Number(item.latitude),
-					destination: item.shopVo.shopName,
-					complete(r) {
-						console.log(r);
-					}
-				})
-			},
-			// 获取初始位置
-			initPosition() {
-				let that = this
-				uni.getLocation({
-					type: 'gcj02',
-					success(res) {
-						that.longitude = res.longitude
-						that.latitude = res.latitude
-					}
-				})
-			},
-			// 回到我的位置
-			myPosition() {
-				let that = this
-				console.log(that.map);
-				uni.getLocation({
-					type: 'gcj02',
-					success(res) {
-						that.map.moveToLocation({
-							longitude: res.longitude,
-							latitude: res.latitude
-						})
-						console.log(res);
-						// that.markers =[
-						// 	{	id:1,
-						// 		latitude: res.latitude,
-						// 		longitude: res.longitude,
-						// 		width: '42rpx',
-						// 		height: '42rpx',
-						// 		iconPath: '/static/jiayou.png',
-						// 		callout:{
-						// 			content:'#92 7.5元/L',
-						// 			bgColor:'#fff',
-						// 			color:'#222',
-						// 			borderRadius:'50%',
-						// 			fontSize: '22rpx',
-						// 			padding:'16rpx',
-						// 			display:'ALWAYS'
-						// 		},
-						// 	},
-							
-						// ]
-					
-					}
-				})
-			},
-			// 地图拖动
-			mapChange(val) {
-				
-			},
-			finishClick(resultData) {
-				this.filterResultData = resultData;
-				// uni.showModal({
-				// 	title: '温馨提示',
-				// 	content: '筛选数据 = ' + JSON.stringify(resultData)
-				// })
-			},
-
-			goDetail(item) {
-				uni.setStorageSync('shopInfo', JSON.stringify(item))
-				uni.navigateTo({
-					url: '../shopDetail/shopDetail?type=' + this.active
-				})
-			},
-			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
-								}
-								)
-							})
-							
-							if(this.list.length >= res.content.total){
-								this.status = 'noMore'
-							}else{
-								this.status = 'more'
-								this.query.pageCurrent++
-							}
-							resolve()
-						}
-					})
-				})
-			},
-		},
-		onLoad(option) {
-			this.initPosition()
-			this.query.menuId = option.id
-		},
-		onReady() {
-			this.map = uni.createMapContext("map", this);
-			let location = JSON.parse(uni.getStorageSync('location'))
-			this.query['location.lat'] = location.latitude
-			this.query['location.lon'] = location.longitude
-			this.search()
-		}
-	}
-</script>
-
-<style lang="scss">
-	.callout{
-			width: 150rpx;
-			height: 54rpx;
-			background: #61B5FD;
-			// box-shadow: 0rpx 6rpx 12rpx 2rpx rgba(0,0,0,0.2);
-			border-radius: 60rpx 60rpx 60rpx 60rpx;
-			display: flex;
-			align-items: center;
-			position: relative;
-			.icon{
-				width: 42rpx;
-				height: 42rpx;
-				margin-left: 6rpx;
-			}
-			.title{
-				flex: 1;
-				color: #FFFFFF;
-				font-weight: bold;			
-				font-size: 20rpx;
-				text-align: center;
-			}
-			.triangle{
-				width: 0;
-				height: 0;
-				border-top: 16rpx solid red;
-				border-bottm: 16rpx solid transparent;
-				border-left: 16rpx solid transparent;
-				border-right: 16rpx solid transparent;
-				position: absolute;
-				bottom: -16rpx;
-				z-index: 9999999;
-				left: 50%;
-				// transform: translate(-50%,100%);
-			}
-		}
-
-	.bar-item-text {
-		max-width: 250rpx !important;
-	}
-
-	.screen-bar::after {
-		display: none;
-	}
-
-	.discountsDetail cc-drop-down-menu .screen-bar {
-		// position: fixed;
-		top: 0%;
-		left: 0;
-		width: 100%;
-	}
-
-	.discountsDetail {
-
-		.banner {
-			width: 100%;
-			height: 310rpx;
-			position: relative;
-			z-index: 99;
-		}
-
-		.recommend {
-			display: flex;
-			justify-content: space-between;
-			margin: 20rpx 30rpx;
-
-			.recommend-item.color {
-				background: linear-gradient(0deg, #FFDA84 0%, #FFF6E1 100%);
-
-			}
-
-			.recommend-item {
-				padding: 18rpx;
-				border-radius: 16rpx;
-				width: 335rpx;
-				box-sizing: border-box;
-				background: linear-gradient(0deg, #FF9898 0%, rgba(255, 101, 101, 0.09) 100%);
-				;
-				box-shadow: inset 0rpx 6rpx 12rpx 2rpx rgba(255, 255, 255, 0.16);
-
-				.top {
-					display: flex;
-					align-items: center;
-					justify-content: space-between;
-
-					.title {
-						color: #0F0F0F;
-						font-size: 26rpx;
-					}
-
-					.type-box {
-						display: flex;
-						align-items: center;
-						padding: 0 16rpx;
-						height: 40rpx;
-						line-height: 40rpx;
-						border-radius: 20rpx;
-						border: 1rpx solid #FF4343;
-
-						.hot {
-							width: 16.7rpx;
-							height: 21.7rpx;
-						}
-
-						.type {
-							font-size: 20rpx;
-							font-weight: 400;
-							color: #FF4343;
-							margin-left: 6rpx;
-						}
-					}
-				}
-
-				.image-box {
-					position: relative;
-					margin-top: 20rpx;
-					background: #fff;
-					border-radius: 16rpx;
-					display: flex;
-
-					.icon {
-						width: 116rpx;
-						height: 116rpx;
-						margin-left: 15rpx;
-					}
-
-					.info {
-						padding: 16rpx;
-						display: flex;
-						flex-direction: column;
-						justify-content: space-between;
-
-						.title {
-							font-size: 20rpx;
-							font-weight: bold;
-						}
-
-						.btn-box {
-							display: flex;
-							align-items: center;
-							width: 100%;
-							font-size: 18rpx;
-							height: 36rpx;
-							line-height: 36rpx;
-							margin-top: 10rpx;
-
-							.btn {
-								height: 36rpx;
-								line-height: 36rpx;
-								padding: 0 14rpx;
-								background: #FE5B47;
-								color: #FFFFFF;
-							}
-
-							.desc {
-								height: 36rpx;
-								line-height: 36rpx;
-								font-weight: 400;
-								color: #FF4343;
-								padding: 0 18rpx 0 10rpx;
-								background: rgba(254, 91, 71, .17);
-								border-radius: 0 8rpx 8rpx 0;
-							}
-						}
-					}
-				}
-			}
-		}
-
-		.zs-list {
-
-			// padding-top: 20rpx;
-			.item {
-				display: flex;
-				padding: 20rpx 30rpx;
-				background: #fff;
-				border-radius: 16rpx;
-				margin: 20rpx 30rpx 0;
-				border-bottom: 1rpx solid #F0F0F0;
-				.icon {
-					width: 200rpx;
-					height: 180rpx;
-					border-radius: 8px;
-				}
-
-				.info{
-					flex: 1;
-					padding-left: 20rpx;
-					display: flex;
-					flex-direction: column;
-					justify-content: space-between;
-					position: relative;
-					.title{
-						font-size: 28rpx;
-						font-weight: bold;
-						width: 340rpx;
-						white-space: nowrap;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						margin-top: 10rpx;
-					}
-					.address{
-						color: #bebebe;
-						display: flex;
-						align-items: center;
-						font-size: 24rpx;
-						.u-icon{
-							align-self: flex-start;
-						}
-						.position {
-								width: 30rpx;
-								height: 30rpx;
-								margin-right: 8rpx;
-							}
-					}
-					.activity.white{
-						color: #fff;
-						background: #fff;
-						.card{
-							display: none;
-						}
-					}
-					.activity{
-						font-size: 24rpx;
-						color: $uni-color-primary;
-						line-height: 42rpx;
-						display: flex;
-						align-items: center;
-						background: linear-gradient(90deg, #FAF4EB 0%, rgba(255,235,207,0) 100%);
-						.card{
-							width: 30.4rpx;
-							height: 30rpx;
-							vertical-align: bottom;
-							margin: 0 8rpx 0 14rpx;
-						}
-						// text-align: center;
-						// background: linear-gradient(90deg, rgba(253,149,108,0) 0%, #FD8B64 50%, rgba(253,140,101,0) 100%);
-					}
-				
-				}
-			}
-		}
-
-			.map {
-				height: 480rpx;
-				position: relative;
-				.position {
-					position: absolute;
-					bottom: 20rpx;
-					right: 20rpx;
-					width: 60rpx;
-					height: 60rpx;
-				}
-			}
-	}
-</style>

+ 296 - 90
detail/goodsDetail/index.vue

@@ -2,31 +2,42 @@
 	<view class="goodsDetail">
 		<zs-skeleton type="goodsDetail" :loading="pageLoading"></zs-skeleton>
 		<image class="good-img" :src="info.goodsPath" mode="aspectFit"></image>
-		<view class="price-box">
-			<view class="left">
-				<view class="num-box">
-					<view class="unit">
-						¥
+		<view class="info-box">
+			<view class="tag" v-if="info.goodsLabel">
+				{{info.goodsLabel}}
+			</view>
+			<view class="price-box">
+				<view class="left">
+					<view class="num-box">
+						<view class="unit">
+							¥
+						</view>
+						<view class="price">
+							{{info.realPrice}}
+						</view>
 					</view>
-					<view class="price">
-						{{info.realPrice}}
+					<view class="discount-tag" v-if="info.marketPrice">
+						<image class="icon" src="@/static/down.png" mode=""></image>
+						<view class="discount-num">
+							{{((info.realPrice/info.marketPrice)*10).toFixed(1)}}折
+						</view>
+					</view>
+					<view class="old-price">
+						市场价 ¥{{info.marketPrice}}
 					</view>
 				</view>
-				<view class="old-price">
-					市场价 ¥{{info.marketPrice}}
+				
+				<view class="right">
+					销量{{info.saleNum}}
 				</view>
 			</view>
-			
-			<view class="right">
-				销量{{info.saleNum}}
-			</view>
-		</view>
-		<view class="goods-info">
-			<view class="goods-name">
-				{{info.goodsName}}
-			</view>
-			<view class="desc">
-				{{info.goodsDescribe}}
+			<view class="goods-info">
+				<view class="goods-name">
+					{{info.goodsName}}
+				</view>
+				<view class="desc">
+					{{info.goodsDescribe}}
+				</view>
 			</view>
 		</view>
 		
@@ -48,11 +59,11 @@
 			<view class="info">
 				<view class="shop-name">
 					<!-- 朱光玉火锅(天河店) -->
-					{{shopInfo.shopVo.shopName}}
+					{{info.shopInfo.shopName}}
 				</view>
 				<view class="address">
 					<!-- 花溪区天河潭旅游度假区天河潭  22.65km -->
-					{{shopInfo.district}}  {{(shopInfo.shopVo.distance/1000).toFixed(2)}} KM
+					{{info.shopInfo.address}}  {{distance}} KM
 				</view>
 			</view>
 			<view class="num">
@@ -61,9 +72,31 @@
 			</view>
 		</view>
 		
+		<view class="combo-content" v-if="info.services.length">
+			<view class="item" v-for="(item,index) in info.services" :key="index">
+				<view class="item-title">
+					{{item.serviceName}}
+				</view>
+				<view class="item-content" v-for="i in item.services" :key="i.id">
+					<view class="name">
+						{{i.serviceName}}
+					</view>
+					
+					<view class="left">
+						<view class="unit">
+							{{`(${i.num}${i.unit})`}}
+						</view>
+						<view class="price">
+							¥{{i.price}}
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+		
 		<view class="tab-group">
 			<view class="tab" :class="[tab == 1 ? 'active':'']" @click="handleTab(1)">
-				商品详情
+				图文详情
 			</view>
 			<view class="tab" :class="[tab == 2 ? 'active':'']" @click="handleTab(2)">
 				购买须知
@@ -93,7 +126,7 @@
 		
 		
 		<view class="buy-box">
-			<image class="head" :src="shopInfo.logoPath" @click="goShopDetail(shopInfo)" mode=""></image>
+			<image class="head" :src="info.shopInfo.logoPath" @click="goShopDetail(shopInfo)" mode=""></image>
 			<view class="btn-box">
 				
 			<!-- 	<view class="group-btn" @click="handleBuy">
@@ -115,24 +148,75 @@
 			</view>
 		</view>
 		
+		<u-modal :show="show"  title="开通会员" showCancelButton cancelText="下次再说" confirmColor="#FF4D3A" confirmText="立即开通" @cancel="show = false" @confirm="jump('/my/memberCenter/index')">
+			<view class="slot-content">
+				<view class="">
+					此商品需要开通
+				 <text :style="{color:'#FF4D3A'}">{{noticeContent}}</text>
+				 才能购买
+				</view>
+			</view>
+		</u-modal>
+		
 	</view>
 </template>
 
 <script>
-	import {detail} from '@/api/goods.js'
+	import {detail,valid} from '@/api/goods.js'
 	import {search} from '@/api/shop.js'
 	export default {
 		data() {
 			return {
+				show:false,
+				id:0,
+				loading:false,
 				pageLoading:false,
 				active:0,
 				tab:1,
 				shopList:[],
 				info: {},
-				shopInfo:{}
+				location:{},
+				shopInfo:{},
+				distance:0,
+				noticeContent:''
 			}
+		},
+		computed: {
+			
 		},
 		methods: {
+			getDistance() {
+					var radLat1 = this.location.latitude * Math.PI / 180.0;
+					var radLat2 = this.info.shopInfo.mapLat* Math.PI / 180.0;
+					var a = radLat1 - radLat2;
+					var b = this.location.longitude* Math.PI / 180.0 - this.info.shopInfo.mapLon* Math.PI / 180.0;
+					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 /1000 //输出为千米
+					s = s.toFixed(2)
+					this.distance = s
+			},
+			// 获取当前城市
+			getCity(){
+				let that = this
+				return new Promise((resolve,reject)=>{
+				uni.getLocation({
+						type: 'gcj02',
+						success: (res) => {
+							// 解析地址
+							that.location.latitude = res.latitude
+							that.location.longitude = res.longitude
+							// 存储经纬度
+							uni.setStorageSync('location',JSON.stringify({latitude:res.latitude,longitude:res.longitude}))
+							resolve()
+						},
+						fail: () => {
+							console.log("获取经纬度失败");
+						},
+					})
+				})
+			},
 			filterMsg(val,name){
 				let msg = val.replace(/\n/g, "<br>")
 				if(name == 'validDay'){
@@ -149,15 +233,24 @@
 				this.tab = val
 			},
 			handleBuy() {
-				if(!this.info.realStockNum) return
+				if(!this.info.realStockNum || this.loading) return
 					let that = this
 				if (uni.getStorageSync('token')) {
-					uni.navigateTo({
-						url:`/pay/pay`,
-						  success: function(res) {
-						    // 通过eventChannel向被打开页面传送数据
-						    res.eventChannel.emit('pay', that.info)
-						  }
+					this.loading = true							
+					valid({goodsId:that.info.goodsId,userId:JSON.parse(uni.getStorageSync('userInfo')).userId}).then(res=>{
+						this.loading = false
+						if(res.content){
+							this.noticeContent = res.content.join().replace(/,/g,'、')
+							this.show = true
+						}else{
+							uni.navigateTo({
+								url:`/pay/pay`,
+								  success: function(res) {
+									// 通过eventChannel向被打开页面传送数据
+									res.eventChannel.emit('pay', that.info)
+								  }
+							})
+						}
 					})
 				} else {
 					uni.showModal({
@@ -182,38 +275,45 @@
 					if(res.state == 'Success'){
 						this.info = res.content
 						this.info.goodsDetail = res.content.goodsDetail.replace(/<img/gi, '<img class="img_class" ')
+						uni.setNavigationBarTitle({
+							title:this.info.goodsName
+						})
 					}
 				})
 			},
 			goShopDetail(shopInfo) {
-				uni.setStorageSync('shopInfo', JSON.stringify(shopInfo))
+				uni.setStorageSync('shopInfo', JSON.stringify(this.info.shopInfo))
 				uni.navigateTo({
 					url: `../../detail/shopDetail/shopDetail`
 				})
 			},
 			getShopList(goodsId){
-				let location = JSON.parse(uni.getStorageSync('location'))
+				// let location = JSON.parse(uni.getStorageSync('location'))
 				let obj = {
 					goodsId,
 					pageCurrent:1,
 					pageSize:99
 				}
-				obj['location.lat'] = location.latitude
-				obj['location.lon'] = location.longitude
+				obj['location.lat'] = this.location.latitude
+				obj['location.lon'] = this.location.longitude
 				search(obj).then(res=>{
 					if(res.state == 'Success'){
 						this.shopList = res.content.records
 						uni.setStorageSync('shopList',JSON.stringify(this.shopList))
+						this.getDistance()
 					}
 				})
 			}
 			
 		},
 		onLoad(option) {
-			
-			this.shopInfo = JSON.parse(uni.getStorageSync('shopInfo')) 
+			this.id = option.id
+			console.log(111111,option);
+			// this.shopInfo = uni.getStorageSync('shopInfo')? JSON.parse(uni.getStorageSync('shopInfo')) :{logoPath:'',}
 			this.detail(option.id)
-			this.getShopList(option.id)
+			this.getCity().then(()=>{
+				this.getShopList(option.id)
+			})
 			let that = this
 			// this.info = JSON.parse(uni.getStorageSync('goodsInfo')) 
 			// const eventChannel = this.getOpenerEventChannel();
@@ -222,7 +322,19 @@
 			// 		that.info = data
 			// 	})
 			// }
-		}
+		},
+		onShareTimeline() {
+		  return {
+		    title: "慧研学惠生活-"+this.info.goodsName,
+		    query: "id="+this.id,
+		  };
+		},
+		onShareAppMessage() {
+		  return {
+		    title: "慧研学惠生活-"+this.info.goodsName,
+		    path: "/detail/goodsDetail/index?id="+this.id,
+		  };
+		},
 		
 	}
 </script>
@@ -237,65 +349,102 @@
 		height: 750rpx;
 		vertical-align: bottom;
 	}
-	.price-box{
-		display: flex;
-		justify-content: space-between;
-		align-items: center;
-		width: 100%;
-		height: 116rpx;
-		box-sizing: border-box;
-		background-image: url('../../static/price-bg.png');
-		background-repeat: no-repeat;
-		background-size: 100% 116rpx;
-		padding: 24rpx;
-		color: #fff;
-		.left{
+	.info-box{
+		background: #fff;
+		.tag{
+			display: inline-block;
+			text-align: center;
+			font-size: 20rpx;
+			color: #FFFFFF;
+			background: $uni-color-primary;
+			padding: 2rpx 10rpx;
+			border-radius: 8rpx 8rpx 8rpx 8rpx;
+			margin-left: 24rpx;
+			margin-top: 24rpx;
+		}
+		.price-box{
 			display: flex;
+			justify-content: space-between;
 			align-items: center;
-			.num-box{
+			width: 100%;
+			height: 116rpx;
+			box-sizing: border-box;
+			border-bottom: 1rpx solid #F0F0F0;
+			// background-image: url('../../static/price-bg.png');
+			// background-repeat: no-repeat;
+			// background-size: 100% 116rpx;
+			padding: 10rpx 24rpx 24rpx;
+			.left{
 				display: flex;
 				align-items: center;
-				.unit{
-					font-size: 20rpx;
-					font-weight: bold;
-					align-self: flex-end;
-					margin-bottom: 10rpx;
+				.num-box{
+					display: flex;
+					align-items: center;
+					color: $uni-color-primary;
+					.unit{
+						font-size: 20rpx;
+						font-weight: bold;
+						align-self: flex-end;
+						margin-bottom: 10rpx;
+					}
+					.price{
+						font-weight: 600;
+						font-size: 48rpx;
+					}
 				}
-				.price{
-					font-weight: 600;
-					font-size: 48rpx;
+				.discount-tag{
+					display: flex;
+					align-items: center;
+					width: 92rpx;
+					height: 28rpx;
+					line-height: 28rpx;
+					background: #FFF6F5;
+					border-radius: 8rpx 8rpx 8rpx 8rpx;
+					border: 1rpx solid $uni-color-primary;
+					margin-left: 10rpx;
+					.icon{
+						width: 30.5rpx;
+						height: 28rpx;
+					}
+					.discount-num{
+						flex: 1;
+						text-align: center;
+						font-size: 20rpx;
+						color: $uni-color-primary;
+					}
+				}
+				.old-price{
+					text-decoration: line-through;
+					margin-left: 12rpx;
+					font-weight: 300;
+					font-size: 20rpx;
+					color: #AAAAAA;
 				}
 			}
-			.old-price{
-				text-decoration: line-through;
-				margin-left: 12rpx;
+			.right{
+				font-size: 24rpx;
 				font-weight: 300;
-				font-size: 20rpx;
+				font-size: 24rpx;
 			}
 		}
-		.right{
-			font-size: 24rpx;
-			font-weight: 300;
-			font-size: 24rpx;
-		}
-	}
-	.goods-info{
-		padding: 24rpx;
-		margin-bottom: 20rpx;
-		background: #fff;
-		
-		.goods-name{
-			font-size: 32rpx;
-			color: #222222;
-			font-weight: bold;
-		}
-		.desc{
-			font-size: 24rpx;
-			color: #AAAAAA;
-			overflow: hidden;
-			text-overflow: ellipsis;
-			white-space: nowrap;
-			margin-top: 12rpx;
+		.goods-info{
+			padding: 24rpx;
+			margin-bottom: 20rpx;
+			background: #fff;
+			
+			.goods-name{
+				font-size: 32rpx;
+				color: #222222;
+				font-weight: bold;
+			}
+			.desc{
+				font-size: 24rpx;
+				color: #AAAAAA;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				white-space: nowrap;
+				margin-top: 12rpx;
+			}
 		}
 	}
 	.type-box{
@@ -345,6 +494,7 @@
 				font-size: 24rpx;
 				color: #AAAAAA;
 				margin-top: 16rpx;
+				width: 450rpx;
 			}
 		}
 		.num{
@@ -360,6 +510,62 @@
 		}
 	}
 	
+	.combo-content{
+		background: #FFFFFF;
+		padding: 24rpx 24rpx 24rpx 46rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		.item{
+			.item-title{
+				font-weight: 600;
+				font-size: 24rpx;
+				color: #222222;
+				position: relative;
+				&::before{
+					content: '';
+					position: absolute;
+					top: 50%;
+					left: -16rpx;
+					width: 6rpx;
+					height: 6rpx;
+					border-radius: 50%;
+					background: #CCCCCC;
+					transform: translateY(-50%);
+				}
+			}
+			.item-content{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				margin-top: 20rpx;
+				.name{
+					flex: 1;
+					font-size: 24rpx;
+					color: #222222;
+				}
+				.left{
+					display: flex;
+					align-items: center;
+					justify-content: flex-end;
+					.unit{
+						font-size: 20rpx;
+						color: #AAAAAA;
+					}
+					.price{
+						font-size: 24rpx;
+						color: #222222;
+						font-weight: 600;
+						margin-left: 20rpx;
+					}
+				}
+			}
+		}
+		.item+.item{
+			margin-top: 20rpx;
+			border-top: 1rpx solid #F0F0F0;
+		}
+	}
+	
 	.tab-group{
 		display: flex;
 		background: #fff;

+ 102 - 31
detail/shopDetail/shopDetail.vue

@@ -8,8 +8,9 @@
 				<view class="info-box">
 					<view class="title-box">
 						<view class="title">
-							{{info.shopVo.shopName}}
+							{{info.shopName}}
 						</view>
+						<image class="tel" src="../../static/phone.png" mode="" v-if="info.serviceTel" @click="handleCall"></image>
 					</view>
 					<view class="address-box" @click="handleAdress">
 						<view class="distance">
@@ -21,7 +22,7 @@
 				</view>
 			</view>
 			
-			<view class="card-box">
+			<view class="card-box" v-if="freeList.length">
 				<view class="card"  v-for="(item,index) in freeList" :key="index" @click="openPop">
 					{{item.couponName}}
 				</view>
@@ -39,7 +40,7 @@
 		<zs-list class="goods-list" mt="0" @load="loadMore" :status="status">
 			<!-- <view class="goods-list"> -->
 				<view class="goods-item" v-for="item in buyList" :key="item.goodsId" @click="goDetail(item)">
-					<zs-img  :src="item.goodsImg" width="200rpx" height="200rpx" radius="full"  mode="" ></zs-img>
+					<zs-img  :src="item.goodsImg" width="160rpx" height="160rpx" radius="full"  mode="" ></zs-img>
 					<view class="info">
 						<view class="title">
 							{{item.goodsName}}
@@ -49,14 +50,23 @@
 						</view>
 						<view class="price-box">
 							<view class="left">
+								<view class="tag" v-if="item.goodsLabel">
+									{{item.goodsLabel}}
+								</view>
 								<view class="unit">
 								</view>
 								<view class="price">
 									{{item.realPrice}}
 								</view>
+								<view class="discount-tag" v-if="item.marketPrice">
+									<image class="icon" src="@/static/down.png" mode=""></image>
+									<view class="discount-num">
+										{{((item.realPrice/item.marketPrice)*10).toFixed(1)}}折
+									</view>
+								</view>
 								<view class="old-price">
-									市场价 ¥{{item.marketPrice}}
+									¥{{item.marketPrice}}
 								</view>
 							</view>
 							
@@ -71,10 +81,10 @@
 			<u-empty marginTop="100" textSize="20" v-if="!buyList.length" mode="data"></u-empty>
 		
 		<u-popup :show="show" round="32rpx" mode="bottom" @close="show = false" @open="openPop">
-				<view class="discounts">
-					<view class="title">
+					<view class="discounts-title">
 						免费领取
 					</view>
+				<view class="discounts">
 					<u-empty marginTop="100" textSize="20" v-if="!freeList.length" mode="data"></u-empty>
 					<zs-list mt="0" @load="loadCoupon" :status="status1">
 					<view class="discounts-item" v-for="(item,index) in freeList" :key="index" >
@@ -87,7 +97,7 @@
 								</view>
 							</view>
 							<view class="info">
-								<view class="title">
+								<view class="card-title">
 									{{item.couponName}}
 								</view>
 								<view class="limit">
@@ -98,8 +108,8 @@
 									{{item.usrDetail || '-'}}
 								</view>
 							</view>
-							<view class="btn" :class="[item.exist > 0?'used':'']" @click="claim(item.id,item.exist)">
-								{{item.exist > 0?'去使用':'领取'}}
+							<view class="btn" :class="[item.exist > 0?'used':'']" @click="handleBuy(item.id,item.exist)">
+								{{item.exist > 0?'已领取':'领取'}}
 							</view>
 					</view>
 					</zs-list>
@@ -117,7 +127,7 @@
 	import { creat,getGoods } from '@/api/goods.js';
 	import {shopDetail} from '@/api/shop.js'
 	import guid from '@/utils/guid.js'
-	import {rpxTopx} from '@/utils/tool.js'
+	import {rpxTopx,transformFromBaiduToGCJ} from '@/utils/tool.js'
 	export default {
 		data() {
 			return {
@@ -177,6 +187,18 @@
 			},
 		},
 		methods: {
+			handleCall() {
+				if(this.info.serviceTel){
+					uni.makePhoneCall({
+						phoneNumber: this.info.serviceTel //仅为示例
+					});
+				}else{
+					uni.showToast({
+						title:'商家没有预留电话',
+						icon:'none'
+					})
+				}
+			},
 			openPop(){
 				this.show = true
 			},
@@ -185,10 +207,11 @@
 			},
 			// 地图中打开商家
 			handleAdress() {
+				let {latitude,longitude} = transformFromBaiduToGCJ(this.info.mapLat,this.info.mapLon)
 				uni.openLocation({
-					latitude:this.info.shopVo.location.lat,
-					longitude: this.info.shopVo.location.lon,
-					name:this.info.shopVo.shopName,
+					latitude,
+					longitude,
+					name:this.info.shopName,
 					address:this.info.address,
 					success: function () {
 						console.log('success');
@@ -203,8 +226,8 @@
 					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.shopDetail(this.info.shopId)
+				this.query.shopId = this.info.shopId
 				this.query.setMealId = userInfo.setMealId
 				this.query.userId = userInfo.userId
 				this.getGoods()
@@ -273,7 +296,7 @@
 			getGoods(){
 				if(this.status == 'noMore') return
 				this.status = 'loading'
-				getGoods({currentPage:this.currentPage,status:3,shopId:this.info.shopVo.id}).then(res=>{
+				getGoods({currentPage:this.currentPage,status:3,shopId:this.info.shopId}).then(res=>{
 					if(res.state == 'Success'){
 						this.buyList = this.buyList.concat(res.content.records)
 						console.log(res.content.total,this.buyList.length);
@@ -289,8 +312,17 @@
 			shopDetail(shopId){
 				shopDetail({shopId}).then(res=>{
 					if(res.state == 'Success'){
+						this.info.shopLabel = res.content.shopLabel
 						this.info.detailImg = res.content.detailImg
 						this.info.address = res.content.address
+						this.info.serviceTel = res.content.serviceTel
+						this.info.mapLat = res.content.mapLat
+						this.info.mapLon = res.content.mapLon
+						this.info.detailContent = res.content.detailContent
+						
+						uni.setNavigationBarTitle({
+							title:res.content.shopName
+						})
 					}
 				})
 			}
@@ -344,18 +376,25 @@
 					width: 120rpx;
 					height: 120rpx;
 					border-radius: 16rpx 16rpx 16rpx 16rpx;
-					margin-top: -28rpx;
+					// margin-top: -28rpx;
 				}
 				.info-box{
+					flex: 1;
 					margin-left: 20rpx;
 					color: #222222;
 					.title-box{
 						display: flex;
 						justify-content: space-between;
+						align-items: flex-start;
 						.title {
 							font-size: 32rpx;
 							font-weight: bold;
 						}
+						.tel{
+							width: 40rpx;
+							height: 40rpx;
+							margin-left: 20rpx;
+						}
 					}
 					.address-box{
 						width: 100%;
@@ -394,7 +433,7 @@
 					line-height: 40rpx;
 					padding: 0 14rpx;
 					border-radius: 8rpx 8rpx 8rpx 8rpx;
-					border: 1rpx solid #FF4C39;
+					border: 1rpx solid rgba(255,76,57,0.3);
 					color: #FF4C39;
 					font-size: 20rpx;
 					margin-right: 12rpx;
@@ -469,27 +508,58 @@
 							/* 弹性伸缩盒子模型显示 */
 							display: -webkit-box;
 							/* 限制在一个块元素显示的文本的行数 */
-							-webkit-line-clamp: 2;
+							-webkit-line-clamp: 1;
 							/* 设置或检索伸缩盒对象的子元素的排列方式 */
 							-webkit-box-orient: vertical;
 						}
 						
 						.price-box{
 							display: flex;
-							justify-content: space-between;
 							align-items: center;
+							justify-content: space-between;
+							height: 60rpx;
 							.left{
 								display: flex;
 								align-items: flex-end;
+								.tag{
+									text-align: center;
+									font-size: 20rpx;
+									color: #FFFFFF;
+									background: $uni-color-primary;
+									padding: 2rpx 10rpx;
+									border-radius: 8rpx 8rpx 8rpx 8rpx;
+								}
 								.unit{
 									font-size: 20rpx;
 									color: $uni-color-primary;
 									font-weight: bold;
+									margin-left: 10rpx;
 								}
 								.price{
-									font-size: 32rpx;
+									font-size: 28rpx;
 									color: $uni-color-primary;
 									font-weight: bold;
+									line-height: 30rpx;
+								}
+								.discount-tag{
+									display: flex;
+									align-items: center;
+									width: 92rpx;
+									height: 28rpx;
+									line-height: 28rpx;
+									background: #FFF6F5;
+									border-radius: 8rpx 8rpx 8rpx 8rpx;
+									border: 1rpx solid $uni-color-primary;
+									.icon{
+										width: 30.5rpx;
+										height: 28rpx;
+									}
+									.discount-num{
+										flex: 1;
+										text-align: center;
+										font-size: 20rpx;
+										color: $uni-color-primary;
+									}
 								}
 								.old-price{
 									font-size: 20rpx;
@@ -508,18 +578,19 @@
 				}
 			}
 		
+		.discounts-title {
+			font-weight: bold;
+			font-size: 32rpx;
+			color: #222222;
+			text-align: center;
+			margin-bottom: 28rpx;
+			padding-top: 28rpx;
+		}
 		.discounts {
-			padding: 28rpx 24rpx;
+			padding: 0 24rpx 28rpx;
 			max-height: 1000rpx;
 			min-height: 600rpx;
-			.title {
-				font-weight: bold;
-				font-size: 32rpx;
-				color: #222222;
-				text-align: center;
-				margin-bottom: 28rpx;
-			}
-		
+			overflow: auto;
 			.discounts-item {
 				margin-bottom: 20rpx;
 					display: flex;
@@ -547,7 +618,7 @@
 					.info {
 						flex: 1;
 						margin-left: 40rpx;
-						.title {
+						.card-title {
 							font-size: 28rpx;
 							color: #222222;
 						}

+ 8 - 2
detail/shopList/index.vue

@@ -6,7 +6,7 @@
 					{{item.shopVo.shopName}}
 				</view>
 				<view class="address">
-					{{item.district}}  {{(item.shopVo.distance/1000).toFixed(2)}} km 
+					{{item.address}}  {{(item.shopVo.distance/1000).toFixed(2)}} km 
 				</view>
 			</view>
 			<image class="icon" src="../../static/shop-desc.png" mode=""></image>
@@ -24,7 +24,13 @@
 		},
 		methods: {
 			jump(url,item) {
-				uni.setStorageSync('shopInfo',JSON.stringify(item))
+				let shopInfo = {
+					shopId:item.shopVo.shopId,
+					shopName:item.shopVo.shopName,
+					detailContent:item.detailContent,
+					logoPath:item.logoPath,
+				}
+				uni.setStorageSync('shopInfo',JSON.stringify(shopInfo))
 				uni.navigateTo({
 					url
 				})

+ 43 - 15
detail/virtualGoods/index.vue

@@ -39,6 +39,10 @@
 					</view>
 				</view>
 				
+				<view class="notice">
+					暂不提供IOS用户进行充值业务
+				</view>
+				
 					<u--form labelPosition="top" :model="form" ref="uForm" borderBottom labelWidth="180rpx" :labelStyle="{'color': '#222222',
 'font-weight': 'bold','line-height':'60rpx','font-size': '28rpx'}">
 						<u-form-item label="充值账号" prop="account" borderBottom ref="item1">
@@ -52,6 +56,8 @@
 				<button class="btn" type="default" :loading="loading" @click="handleBuy">确认</button>
 			</view>
 		</u-popup>
+		
+		<u-modal :show="iosShow" content='暂不提供IOS用户进行充值业务' @confirm="iosShow = false"></u-modal>
 
 	</view>
 </template>
@@ -63,6 +69,7 @@
 		data() {
 			return {
 				show: false,
+				iosShow: false,
 				goodsData:[],
 				chooseInfo:null,
 				loading:false,
@@ -86,7 +93,11 @@
 				this.show = false
 			},
 			getVirtuallist(){
+				uni.showLoading({
+					title:'加载中'
+				})
 				getVirtuallist().then(res=>{
+					uni.hideLoading()
 					if(res.state == 'Success'){
 						this.goodsData = res.content
 					}
@@ -108,21 +119,32 @@
 						title:'请输入充值账号',
 						icon:'none'
 					})
-					let info = {
-						goodsId:this.chooseInfo.mainId,
-						goodsName:this.chooseInfo.name,
-						realPrice:this.chooseInfo.calcPrice,
-						goodsImg:this.chooseInfo.mainImg,
-						goodsDescribe:this.chooseInfo.catalogName,
-						shopId:SHOP_ID,
-						extend:JSON.stringify({account:this.form.account})
-					}
-					uni.navigateTo({
-						url:`/detail/virtualGoods/pay`,
-						  success: function(res) {
-						    // 通过eventChannel向被打开页面传送数据
-						    res.eventChannel.emit('pay', info)
-						  }
+					let that = this
+					uni.getSystemInfo({
+						success(res){
+							console.log(res.osName);
+							if(res.osName == 'ios'){
+								that.show = false
+								that.iosShow = true
+							}else{
+								let info = {
+									goodsId:that.chooseInfo.mainId,
+									goodsName:that.chooseInfo.name,
+									realPrice:that.chooseInfo.calcPrice,
+									goodsImg:that.chooseInfo.mainImg,
+									goodsDescribe:that.chooseInfo.catalogName,
+									shopId:SHOP_ID,
+									extend:JSON.stringify({account:that.form.account})
+								}
+								uni.navigateTo({
+									url:`/detail/virtualGoods/pay`,
+									  success: function(res) {
+										// 通过eventChannel向被打开页面传送数据
+										res.eventChannel.emit('pay', info)
+									  }
+								})
+							}
+						}
 					})
 				} else {
 					uni.showModal({
@@ -279,6 +301,12 @@
 					align-self: center;
 				}
 			}
+			.notice{
+				font-size: 24rpx;
+				color: #AAAAAA;
+				padding: 26rpx 0;
+				border-bottom: 2rpx solid #F0F0F0;
+			}
 			.goods-describe{
 				color: #222222;
 				font-size: 24rpx;

+ 1 - 0
detail/virtualGoods/pay.vue

@@ -140,6 +140,7 @@
 							discountId: (this.info.couponId || this.info.couponId == -1) ? [this.info.couponId
 							] : [],
 							extend,
+							channel:'ZhongShu',
 							goodsList: this.info.goodsId ? [this.info.goodsId] : [],
 							idempotent: guid(),
 							shopId: this.info.shopId

+ 85 - 51
hotel/hotelDetail.vue

@@ -12,27 +12,26 @@
 			<view class="title-box">
 				<view class="title">
 					{{info.chineseName}}
+					<view :class="[getTag(info.star).tag]">
+						{{info.starName}}
+					</view>
 				</view>
 				<view class="star-box">
-					<image class="star" v-for="i in Math.round(info.star/2)" src="../static/star.png" mode=""></image>
-					<!-- <image class="star" src="@/static/star.png" mode=""></image>
-					<image class="star" src="@/static/star.png" mode=""></image>
-					<image class="star" src="@/static/star.png" mode=""></image>
-					<image class="star" src="@/static/star.png" mode=""></image>
-					<image class="star" src="@/static/star.png" mode=""></image> -->
+					<image class="star" v-for="i in getTag(info.star).num" src="../static/star.png" mode=""></image>
+
 				</view>
 			</view>
 			
 			<view class="desc-box">
-				<view class="text">
+				<view class="text" v-if="info.debutYear">
 					{{info.debutYear}}年开业
 				</view>
 				<view class="text" v-if="info.decorateDate">
 					{{info.decorateDate}}年装修
 				</view>
-				<view class="text">
+			<!-- 	<view class="text">
 					{{info.roomCount}}间房
-				</view>
+				</view> -->
 			</view>
 			
 			<view class="address-box">
@@ -95,58 +94,60 @@
 			<!-- 列表 -->
 			<zs-list class="store-box" mt="0" @load="loadMore" :status="status">
 				<view class="hotel-item" v-for="(item,index) in roomList" :key="index">
-					<view class="box">
-						<zs-img :src="item.pictures[0].path" width="200rpx" height="200rpx" radius="full" mode="widthFix"></zs-img>
-						<view class="info">
-							<view class="title">
-								{{item.roomNameCn}}
-							</view>
-							<view class="desc">
-								<view class="item" v-if="item.area">
-									{{item.area}}
+					<template v-if="item.roomId">
+						<view class="box">
+							<zs-img :src="item.pictures[0].path" width="200rpx" height="200rpx" radius="full" mode="widthFix"></zs-img>
+							<view class="info">
+								<view class="title">
+									{{item.roomNameCn}}
 								</view>
-								<view class="item" v-if="item.window">
-									{{item.window |filterWindow}}
+								<view class="desc">
+									<view class="item" v-if="item.area">
+										{{item.area}}
+									</view>
+									<view class="item" v-if="item.window">
+										{{item.window |filterWindow}}
+									</view>
 								</view>
+					<!-- 			<view class="notice">
+									早餐不可取消
+								</view> -->
 							</view>
-				<!-- 			<view class="notice">
-								早餐不可取消
-							</view> -->
-						</view>
-						<view class="price-box">
-							<view class="price">
-								¥{{item.ratePlanInfo[0].averagePrice}}
-							</view>
-							<view class="label">
-								起
+							<view class="price-box">
+								<view class="price">
+									¥{{item.ratePlanInfo[0].averagePrice}}
+								</view>
+								<view class="label">
+									起
+								</view>
 							</view>
 						</view>
-					</view>
-					<view class="type-box">
-						<view class="type-item" v-for="(i,d) in item.ratePlanInfo" :key="i.id"  @click.native="handleImg(item,d)">
-							<view class="left">
-								<view class="name-box">
-									<view class="name">
-										{{i.meal.breakfast.desc || i.mealInfo.substr(3)}}
+						<view class="type-box">
+							<view class="type-item" v-for="(i,d) in item.ratePlanInfo" :key="i.id"  @click.native="handleImg(item,d)">
+								<view class="left">
+									<view class="name-box">
+										<view class="name">
+											{{i.meal.breakfast.desc || i.mealInfo.substr(3)}}
+										</view>
+										<view class="name">
+											{{i.cancel.name}}
+										</view>
 									</view>
-									<view class="name">
-										{{i.cancel.name}}
+									<view class="residue">
+										还剩{{i.counts}}间
 									</view>
 								</view>
-								<view class="residue">
-									还剩{{i.counts}}间
+								
+								<view class="right">
+									<view class="price">
+										¥{{i.averagePrice}}
+									</view>
+									<image class="buy-btn" src="../static/hotel-buy-btn.png" mode=""  @click.stop="handleBuy(i,item)"></image>
 								</view>
 							</view>
 							
-							<view class="right">
-								<view class="price">
-									¥{{i.averagePrice}}
-								</view>
-								<image class="buy-btn" src="../static/hotel-buy-btn.png" mode=""  @click.stop="handleBuy(i,item)"></image>
-							</view>
 						</view>
-						
-					</view>
+					</template>
 				</view>
 			</zs-list>
 			
@@ -164,7 +165,7 @@
 						{{roomInfo.roomNameCn}}
 					</view>
 					<view class="desc-box">
-						<view class="item">
+						<view class="item" v-if="roomInfo.area">
 							{{roomInfo.area}}
 						</view>
 						<view class="item">
@@ -344,6 +345,10 @@
 					return '封闭窗'
 				}else if(val === 7){
 					return '飘窗'
+				}else if(val === 11){
+					return '不确定'
+				}else{
+					return ''
 				}
 			},
 			filterWifi:function(val){
@@ -369,6 +374,19 @@
 			}
 		},
 		methods: {
+			getTag(star){
+				if(star == 0 ||star == 1){
+					return {tag:'tag1',num:1}
+				}else if(star == 2 ||star == 6){
+					return {tag:'tag2',num:2}
+				}if(star == 3 ||star == 7){
+					return {tag:'tag2',num:3}
+				}if(star == 4 ||star == 8){
+					return {tag:'tag3',num:4}
+				}if(star == 5 ||star == 9){
+					return {tag:'tag3',num:5}
+				}
+			},
 			confirm(e) {
 				this.show = false
 				if(e){
@@ -524,6 +542,7 @@
 		},
 		onLoad(options) {
 			this.query.hotelId = options.id
+			this.day = options.day || 1
 			if(options.checkInDate){
 				this.query.checkIn = options.checkInDate
 			}
@@ -533,7 +552,20 @@
 			
 			this.getHotelDetail(options.id)
 			this.getRoomList()
-		}
+		},
+		onShareTimeline() {
+		  return {
+		    title: "慧研学惠生活-"+this.info.chineseName,
+		    query: "id="+this.id,
+		  };
+		},
+		onShareAppMessage() {
+		  return {
+		    title: "慧研学惠生活-"+this.info.chineseName,
+		    path: "/pages/signUp/index?id="+this.id,
+		  };
+		},
+		
 	}
 </script>
 
@@ -581,6 +613,8 @@
 				overflow: hidden;
 				text-overflow: ellipsis;
 				margin-top: 20rpx;
+				display: flex;
+				align-items: center;
 			}
 			.star-box{
 				display: flex;

+ 73 - 35
hotel/index.vue

@@ -1,6 +1,7 @@
 <template>
 	<view class="hotel">
-	<zs-img class="banner" width="750rpx" height="556rpx" src="http://hyxhsh.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/y82Lt1MyVdPu5f5f6895568756dbbea184cccce3825b.png/1.png"></zs-img>
+		<zs-header  :background="background"></zs-header>
+	<zs-img class="banner" width="750rpx" height="556rpx" src="https://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/ymXHEWZKPqHc8af6f071b190394c9495a5147a7e1a9b.jpg/1.jpg"></zs-img>
 	
 	<view class="search-box">
 		<view class="address-box">
@@ -46,7 +47,7 @@
 		</view>
 		
 		<view class="btn-box">
-			<button class="btn" type="default" @click="handleSearch">特惠购票</button>
+			<button class="btn" type="default" @click="handleSearch">查找酒店</button>
 		</view>
 		
 	</view>
@@ -59,22 +60,34 @@
 							<zs-img :src="item.picture" width="340rpx" height="322rpx" mode="widthFix"></zs-img>
 							<view class="info">
 								<view class="price-box">
-									<view class="left">
+									<view class="left" v-if="item.price">
 										<view class="price">
 										¥{{item.price}}
 										</view>
+										<view class="label">
+											起
+										</view>
+									</view>
+									<view class="left" v-else>
+										<view class="label">
+											暂无报价
+										</view>
 									</view>
 									
 									<view class="right">
-										<image class="star" v-for="i in Math.round(item.star/2)" src="../static/star.png" mode=""></image>
+										<image class="star" v-for="i in getTag(item.star).num" src="../static/star.png" mode=""></image>
+	
 									</view>
 								</view>
 								<view class="title">
 									{{item.chineseName}}
+									<!-- <view :class="[getTag(item.star).tag]">
+										{{item.starName}}
+									</view> -->
 								</view>
-								<view class="desc">
+							<!-- 	<view class="desc">
 									观山湖区
-								</view>
+								</view> -->
 								
 							</view>
 						</view>
@@ -87,22 +100,33 @@
 								<zs-img :src="item.picture" width="340rpx" height="322rpx" mode="widthFix"></zs-img>
 								<view class="info">
 									<view class="price-box">
-										<view class="left">
+										<view class="left" v-if="item.price">
 											<view class="price">
 											¥{{item.price}}
 											</view>
+											<view class="label">
+												起
+											</view>
+										</view>
+										<view class="left" v-else>
+											<view class="label">
+												暂无报价
+											</view>
 										</view>
 										
 										<view class="right">
-													<image class="star" v-for="i in Math.round(item.star/2)" src="../static/star.png" mode=""></image>
+												<image class="star" v-for="i in getTag(item.star).num" src="../static/star.png" mode=""></image>
 										</view>
 									</view>
 									<view class="title">
 										{{item.chineseName}}
+										<!-- <view :class="[getTag(item.star).tag]">
+											{{item.starName}}
+										</view> -->
 									</view>
-									<view class="desc">
+									<!-- <view class="desc">
 										观山湖区
-									</view>
+									</view> -->
 									
 								</view>
 							</view>
@@ -145,6 +169,7 @@
 				list1:[],
 				status:'more',
 				show: false,
+				background: false,
 				mode: 'range',
 				query:{
 				  "checkInDate":uni.$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd') ,
@@ -174,6 +199,19 @@
 			}
 		},
 		methods: {
+			getTag(star){
+				if(star == 0 ||star == 1){
+					return {tag:'tag1',num:1}
+				}else if(star == 2 ||star == 6){
+					return {tag:'tag2',num:2}
+				}if(star == 3 ||star == 7){
+					return {tag:'tag2',num:3}
+				}if(star == 4 ||star == 8){
+					return {tag:'tag3',num:4}
+				}if(star == 5 ||star == 9){
+					return {tag:'tag3',num:5}
+				}
+			},
 			// 获取当前城市
 			getCity(){
 				let that = this
@@ -211,14 +249,12 @@
 			},
 			handleSearch(){
 				uni.navigateTo({
-					url:`./search?key=${this.query.keyword}&checkInDate=${this.query.checkInDate}&checkOutDate=${this.query.checkOutDate}`
+					url:`./search?key=${this.query.keyword}&checkInDate=${this.query.checkInDate}&checkOutDate=${this.query.checkOutDate}&day=${this.day}`
 				})
 			},
 			confirm(e) {
-				console.log(e);
 				this.show = false
 				if(e){
-					console.log(this);
 					this.day = e.length - 1
 					this.query.checkInDate = e[0]
 					this.query.checkOutDate = e[this.day]
@@ -238,7 +274,9 @@
 			},
 			getHotelList(){
 				this.status = 'loading'
-				getHotelList(this.query).then(res=>{
+				let query = JSON.parse(JSON.stringify(this.query))
+				query.start = query.start*query.limit
+				getHotelList(query).then(res=>{
 					if(res.state == 'Success'){
 						let list = []
 						let list1 = []
@@ -261,8 +299,16 @@
 				})
 			}
 		},
+		onPageScroll(e) {
+				if (e.scrollTop >= 50) {
+					this.background = true
+				} else {
+					this.background = false
+				}
+		},
 		onLoad() {
 			this.getCity()
+			
 		}
 	}
 </script>
@@ -274,6 +320,7 @@
 	.banner{
 		
 	}
+	
 	.search-box{
 		padding: 28rpx 24rpx;
 		width: 702rpx;
@@ -412,23 +459,9 @@
 		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;
-				}
-			}
+		.hotel-item.disable{
+			filter: grayscale(1);
 		}
-			.ad{
-				width: 340rpx;
-				border-radius: 16rpx;
-			}
-	
 		.hotel-item {
 			width: 340rpx;
 			margin-bottom: 20rpx;
@@ -484,11 +517,11 @@
 					margin-top: 12rpx;
 					.left{
 						display: flex;
-						align-items: flex-end;
-						.unit{
-							font-size: 20rpx;
-							color: $uni-color-primary;
-							font-weight: bold;
+						align-items: center;
+						.label{
+							font-size: 24rpx;
+							color: #AAAAAA;
+							margin-left: 6rpx;
 						}
 						.price{
 							font-size: 32rpx;
@@ -506,6 +539,11 @@
 							height: 17rpx;
 							margin-left: 3rpx;
 						}
+						.half-star{
+							width: 10.5rpx;
+							height: 16.5rpx;
+							margin-left: 3rpx;
+						}
 					}
 				}
 				

+ 19 - 10
hotel/introduce.vue

@@ -6,22 +6,18 @@
 				{{info.chineseName}}
 			</view>
 			<view class="star-box">
-				<image class="star" src="@/static/star.png" mode=""></image>
-				<image class="star" src="@/static/star.png" mode=""></image>
-				<image class="star" src="@/static/star.png" mode=""></image>
-				<image class="star" src="@/static/star.png" mode=""></image>
-				<image class="star" src="@/static/star.png" mode=""></image>
+			<image class="star" v-for="i in getTag(info.star).num" src="../static/star.png" mode=""></image>
 			</view>
 			<view class="desc-box">
-				<view class="text">
+				<view class="text" v-if="info.debutYear">
 					{{info.debutYear}}年开业
 				</view>
 				<view class="text" v-if="info.decorateDate">
 					{{info.decorateDate}}年装修
 				</view>
-				<view class="text">
+				<!-- <view class="text">
 					{{info.roomCount}}间房
-				</view>
+				</view> -->
 			</view>
 			
 			<view class="desc-text">
@@ -114,6 +110,19 @@
 		},
 		
 		methods: {
+			getTag(star){
+				if(star == 0 ||star == 1){
+					return {tag:'tag1',num:1}
+				}else if(star == 2 ||star == 6){
+					return {tag:'tag2',num:2}
+				}if(star == 3 ||star == 7){
+					return {tag:'tag2',num:3}
+				}if(star == 4 ||star == 8){
+					return {tag:'tag3',num:4}
+				}if(star == 5 ||star == 9){
+					return {tag:'tag3',num:5}
+				}
+			},
 			goDetail(id) {
 				uni.navigateTo({
 					url:`/hotel/hotelDetail?id=${this.info.hotelId}`
@@ -122,7 +131,7 @@
 			handleCall() {
 				if(this.info.tel){
 					uni.makePhoneCall({
-						phoneNumber: this.info.shopInfo.tel //仅为示例
+						phoneNumber: this.info.tel //仅为示例
 					});
 				}else{
 					uni.showToast({
@@ -249,7 +258,7 @@
 		line-height: 98rpx;
 		display: flex;
 		justify-content: flex-end;
-		padding: 0 0 env(safe-area-inset-bottom);
+		padding: 0 0 calc(env(safe-area-inset-bottom) + 10rpx) ;
 		border-top: 1rpx solid #EEEEEE;
 		.btn{
 			width: 240rpx;

+ 14 - 6
hotel/makeOut.vue

@@ -50,7 +50,7 @@
 				房间数
 			</view>
 			<view class="desc">
-				1间房 每间房2 成人 0儿童
+				{{form.numberofRooms}}间房 每间房2 成人 0儿童
 			</view>
 			<view class="tab-box">
 				<view class="tab" :class="[d+1 == form.numberofRooms?'active':'',d%4?'ml20':'']" v-for="(i,d) in 8" :key="d" @click="choose(d)">
@@ -86,6 +86,7 @@
 					<u--input
 							v-model="item.value"
 							border="none"
+							placeholder="请填写实际入住人姓名"
 					></u--input>
 				</u-form-item>
 			</view>
@@ -100,6 +101,7 @@
 							v-model="form.contactPhone"
 							border="none"
 							:maxlength="11"
+							placeholder="用于接收短信通知"
 					></u--input>
 				</u-form-item>
 			</u--form>
@@ -225,7 +227,7 @@
 		},
 		computed: {
 			price() {
-				this.form.totalPrice = this.averagePrice*this.form.numberofRooms
+				this.form.totalPrice = this.averagePrice*this.form.numberofRooms*this.day
 				return '' 
 			}
 		},
@@ -315,7 +317,7 @@
 						
 						this.query.orderNo = res.content.orderNo
 						this.query.subOpenId = JSON.parse(uni.getStorageSync('userInfo')).openId
-						this.query.orderDesc = '测试商品名'
+						this.query.orderDesc = this.form.roomNameCn
 						creatPayOrder(this.query).then(data => {
 							that.payData = JSON.parse(data.content.miniPayRequest)
 							if (data.content.miniPayRequest == null) return uni.hideLoading()
@@ -411,11 +413,15 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 .hotel-makeOut{
 	background: #F9F9F9;
 	border-radius: 0rpx 0rpx 0rpx 0rpx;
-	padding: 20rpx 24rpx;
+	padding: 20rpx 24rpx 200rpx;
+	.u-form-item__body__left__content__label{
+		font-size: 24rpx!important;
+		color: #222222!important;
+	}
 	.content{
 		padding: 24rpx;
 		background: #fff;
@@ -496,6 +502,7 @@
 		.day{
 			font-size: 24rpx;
 			color: #222222;
+			font-weight: bold;
 		}
 	}
 	
@@ -540,6 +547,7 @@
 			.title{
 				font-size: 28rpx;
 				color: #222222;
+				font-weight: bold;
 			}
 			.add-btn{
 				font-weight: 300;
@@ -608,7 +616,7 @@
 		.box{
 			position: relative;
 			.ticket-title{
-				font-weight: 400;
+				font-weight: 500;
 				font-size: 24rpx;
 				color: #222222;
 				margin-top: 20rpx;

+ 196 - 62
hotel/search.vue

@@ -56,7 +56,11 @@
 				<view class="info">
 					<view class="title">
 						{{item.chineseName}}
+						<!-- <view :class="[getTag(item.star).tag]">
+							{{item.starName}}
+						</view> -->
 					</view>
+					<image class="star" v-for="i in getTag(item.star).num" src="../static/star.png" mode=""></image>
 					<view class="district">
 						<!-- 观山湖区 -->
 					</view>
@@ -64,7 +68,7 @@
 						<view class="distance">
 							距你{{item|filterDistance}}公里
 						</view>
-						<view class="price-box">
+						<view class="price-box" v-if="item.price">
 							<view class="price">
 								¥{{item.price}}
 							</view>
@@ -72,6 +76,12 @@
 							</view>
 						</view>
+						<view class="price-box" v-else>
+							<view class="label">
+								暂无报价
+							</view>
+							
+						</view>
 					</view>
 				</view>
 				
@@ -79,7 +89,7 @@
 		</zs-list>
 		
 		
-		<u-popup :show="show1" :round="16" mode="top" @close="show1 = false">
+		<u-popup :show="show1" :round="16" mode="top" :closeOnClickOverlay="false" @close="show1 = false">
 			<view class="content">
 				<view class="search-box">
 					<view class="city-box">
@@ -140,26 +150,31 @@
 						</view>
 					</view>
 					<template v-else-if="active == 1">
-						<view class="sub-title mb100">
-							价格区间
-						</view>
-						<zs-slider class="zs-slider" ref="slider" v-model="priceValue" :min="0" :max="5000" :step="10" :blockWidth="40" @end="moveEnd" />
-						<view class="sub-title mt60">
+					
+						<view class="sub-title">
 							星级(可多选)
 						</view>
 						<view class="tab-box">
-							<view class="tab" :class="[query.filter.star.indexOf(item.id) != -1?'active':'']" v-for="item in starList" :key="item.id" @click="chooseTab(item.id,1)">
+							<view class="tab" :class="[index%4!=0?'ml20':'',query.filter.star.indexOf(item.id) != -1?'active':'']" v-for="(item,index) in starList" :key="item.id" @click="chooseTab(item.id,1)">
 								{{item.label}}
 							</view>
-							<view class="tab" style="border: none;" v-if="starList.length%3 == 2"></view>
+						</view>
+						<view class="sub-title mb28">
+							价格区间 <text class="price-range">{{`¥${priceValue[0]}~¥${priceValue[1]}`}}</text>
+						</view>
+						<zs-slider class="zs-slider" ref="slider" v-model="priceValue" :min="0" :max="2500" :step="10" :blockWidth="40" @end="moveEnd" />
+						<view class="price-tab-box">
+							<view class="price-tab" :class="[index%4!=0?'ml20':'',item.max == curPrice?'active':'']" v-for="(item,index) in priceList" :key="index" @click="choosePrice(item)">
+								¥{{item.min}}{{ item.max == 2500?'以上': '-'+item.max}}
+							</view>
 						</view>
 					</template>
 					<view class="radio-box" v-if="active == 2">
-						<view class="radio" v-for="item in districtList" :key="item.id" @click="chooseTab(item,2)">
+						<view class="radio" v-for="item in areaList" :key="item.code" @click="chooseTab(item,2)">
 							<view class="label">
-							{{item.label}}
+							{{item.name}}
 							</view>
-							<view class="value" v-if="query.filter.poiCode == item.id">
+							<view class="value" v-if="query.filter.poiCode == item.code">
 							</view>
 						</view>
@@ -168,7 +183,7 @@
 			</view>
 			<view class="btn-box">
 				<view class="btn" type="default" @click="reset">重置</view>
-				<view class="btn" type="default" @click="show1 = false">完成</view>
+				<view class="btn" type="default" @click="submit">完成</view>
 			</view>
 		</u-popup>
 		
@@ -198,6 +213,7 @@
 	export default {
 		data() {
 			return {
+				day:1,
 				active:0,
 				show:false,
 				show1:false,
@@ -210,15 +226,15 @@
 				  "cityName": uni.getStorageSync('city').replace('市',''),
 				  "filter": {
 					  "star":[],
-					  "price":[],
-					  "poiKey": "DISTRICT",
+					  "price":[10, 2000],
+					  "poiKey": "",
 					  "poiCode": "",
-					  "latitude": JSON.parse(uni.getStorageSync('location')).latitude,
-					  "longitude": JSON.parse(uni.getStorageSync('location')).longitude,
+					  "latitude": '',
+					  "longitude": '',
 				  },
 				  "keyword": "",
 				  "limit": 10,
-				  "returnFilter": 0,
+				  "returnFilter": 1,
 				  "sortKey": "recommend",
 				  "start": 0
 				},
@@ -245,45 +261,78 @@
 				starList:[
 					{
 						id:1,
-						label:'一星级'
+						label:'一星级',
+						data:[1,0]
 					},
 					{
 						id:2,
-						label:'二星级'
+						label:'二星级',
+						data:[2,6]
 					},
 					{
 						id:3,
-						label:'三星级'
+						label:'三星级',
+						data:[3,7]
 					},
 					{
 						id:4,
-						label:'四星级'
+						label:'四星级',
+						data:[4,8]
 					},
 					{
 						id:5,
-						label:'五星级'
+						label:'五星级',
+						data:[5,9]
 					},
+					// {
+					// 	id:6,
+					// 	label:'经济型'
+					// },
+					// {
+					// 	id:7,
+					// 	label:'舒适型'
+					// },
+					// {
+					// 	id:8,
+					// 	label:'高档型'
+					// },
+					// {
+					// 	id:9,
+					// 	label:'豪华型'
+					// },
+					// {
+					// 	id:0,
+					// 	label:'普通型'
+					// }
+				],
+				curPrice:'',
+				priceList:[
 					{
-						id:6,
-						label:'经济型'
+						min:0,
+						max:250
 					},
 					{
-						id:7,
-						label:'舒适型'
+						min:250,
+						max:400
 					},
 					{
-						id:8,
-						label:'高档型'
+						min:400,
+						max:650
 					},
 					{
-						id:9,
-						label:'豪华型'
+						min:650,
+						max:900
 					},
 					{
-						id:0,
-						label:'普通型'
+						min:900,
+						max:2500
 					}
-				]
+				],
+				areaList:[],//存放行政区信息
+				location:{
+					latitude:0,
+					longitude:0,
+				}
 			}
 		},
 		filters: {
@@ -319,40 +368,67 @@
 			})
 		},
 		methods: {
+			getTag(star){
+				if(star == 0 ||star == 1){
+					return {tag:'tag1',num:1}
+				}else if(star == 2 ||star == 6){
+					return {tag:'tag2',num:2}
+				}if(star == 3 ||star == 7){
+					return {tag:'tag2',num:3}
+				}if(star == 4 ||star == 8){
+					return {tag:'tag3',num:4}
+				}if(star == 5 ||star == 9){
+					return {tag:'tag3',num:5}
+				}
+			},
 			moveEnd(){
 				console.log('结束');
 				this.query.filter.price = [this.priceValue[0]+'-'+this.priceValue[1]]
-				this.search()
+				// this.search()
 			},
 			reset(){
 				this.query.sortKey = "recommend"
 				this.query.filter.star = []
 				this.query.filter.price = []
-					this.$refs.slider.updateValue(10, 2000)
 				this.query.filter.poiCode = ''
-				this.query.filter.latitude = JSON.parse(uni.getStorageSync('location')).latitude
-				this.query.filter.longitude = JSON.parse(uni.getStorageSync('location')).longitude
+				this.query.filter.poiKey =  ""
+				this.query.filter.latitude = this.location.latitude
+				this.query.filter.longitude = this.location.longitude
+				this.curPrice = ''
 				this.search()
+				this.$refs.slider.updateValue(10, 2000)
 				
 			},
+			submit(){
+				this.search()
+				this.show1 = false
+			},
 			chooseTab(val,type){
 				if(type == 0){
 					this.query.sortKey = val
 				}else if(type == 1){
+					// 星级筛选
 					if(this.query.filter.star.indexOf(val) != -1){
-						console.log(11111111,this.query.filter.star.indexOf(val));
-						let index = this.query.filter.star.indexOf(val)
-						this.query.filter.star.splice(index,1)
+						this.starList[val-1].data.map(item=>{
+							let index = this.query.filter.star.indexOf(item)
+							this.query.filter.star.splice(index,1)
+						})
 					}else{
-						console.log(22222222222,this.query.filter.star.indexOf(val));
-						this.query.filter.star.push(val)
+						this.query.filter.star = this.query.filter.star.concat(this.starList[val-1].data)
 					}
 				}else if(type == 2){
-					this.query.filter.poiCode = val.id
-					this.query.filter.latitude = val.location.lat
-					this.query.filter.longitude = val.location.lng
+					this.query.filter.poiKey =  "DISTRICT"
+					this.query.filter.poiCode = val.code
+					this.query.filter.latitude = val.latitude
+					this.query.filter.longitude = val.longitude
 				}
-				this.search()
+				// this.search()
+			},
+			choosePrice(item){
+				this.curPrice = item.max
+				this.query.filter.price = [`${item.min}-${item.max}`]
+				this.$refs.slider.updateValue(item.min, item.max)
+				// this.search()
 			},
 			close(){},
 			search(){
@@ -386,14 +462,27 @@
 			},
 			goDetail(id) {
 				uni.navigateTo({
-					url:`/hotel/hotelDetail?id=${id}&checkInDate=${this.query.checkInDate}&checkOutDate=${this.query.checkOutDate}`
+					url:`/hotel/hotelDetail?id=${id}&checkInDate=${this.query.checkInDate}&checkOutDate=${this.query.checkOutDate}&day=${this.day}`
 				})
 			},
 			getHotelList(){
+				if(this.status == 'loading') return
 				this.status = 'loading'
-				getHotelList(this.query).then(res=>{
+				let query = JSON.parse(JSON.stringify(this.query))
+				query.start = query.start*query.limit
+				getHotelList(query).then(res=>{
 					if(res.state == 'Success'){
 						this.list = this.list.concat(res.content.data.hotelList) 
+						if(!this.areaList.length){
+							let filterList = res.content.data.filter
+							filterList.map(item=>{
+								if(item.filterName == '位置'){
+									this.areaList = item.pros[0].filter
+								}
+							})
+						}else{
+							this.query.returnFilter = 0
+						}
 						if((this.list.length) >= res.content.data.count){
 							this.status = 'noMore'
 						}else{
@@ -405,9 +494,13 @@
 			}
 		},
 		onLoad(options) {
+			this.location = JSON.parse(uni.getStorageSync('location'))
 			this.query.keyword = options.key
 			this.query.checkInDate = options.checkInDate
 			this.query.checkOutDate = options.checkOutDate
+			this.query.filter.latitude = this.location.latitude
+			this.query.filter.longitude = this.location.longitude
+			this.day = options.day
 			this.getHotelList()
 		}
 	}
@@ -519,6 +612,9 @@
 	
 	.zs-list {
 		margin-top: 20rpx;
+		.hotel-item.disable{
+			filter: grayscale(1);
+		}
 		.hotel-item {
 			display: flex;
 			align-items: center;
@@ -547,6 +643,11 @@
 					margin-top: 20rpx;
 					
 				}
+				.star{
+					width: 21rpx;
+					height: 17rpx;
+					margin-left: 3rpx;
+				}
 				.distance-box{
 					display: flex;
 					align-items: center;
@@ -579,23 +680,46 @@
 		.choose-box{
 			.tab-box{
 				display: flex;
-				justify-content: space-between;
 				flex-wrap: wrap;
 				.tab{
-					flex-shrink: 0;
-					width: 204rpx;
-					height: 60rpx;
-					line-height: 60rpx;
+					width: 160rpx;
+					height: 52rpx;
+					line-height: 52rpx;
 					text-align: center;
+					background: #F0F0F0;
 					border-radius: 8rpx 8rpx 8rpx 8rpx;
-					margin-bottom: 20rpx;
+					font-size: 28rpx;
+					color: #AAAAAA;
 					box-sizing: border-box;
-					border: 1rpx solid #EE4320;
-					color: rgba(238, 67, 32, .5);
+					margin-top: 20rpx;
 				}
 				.tab.active{
-					background: #EE4320;
-					color: #fff;
+					background: #fff;
+					border: 2rpx solid #EE4320;
+					color: #EE4320;
+				}
+			}
+			.price-tab-box{
+				display: flex;
+				flex-wrap: wrap;
+				padding-top: 20rpx;
+				.price-tab{
+					width: 160rpx;
+					height: 52rpx;
+					line-height: 52rpx;
+					text-align: center;
+					background: #F0F0F0;
+					border-radius: 8rpx 8rpx 8rpx 8rpx;
+					font-size: 28rpx;
+					color: #AAAAAA;
+					box-sizing: border-box;
+					margin-top: 20rpx;
+				}
+				
+				.price-tab.active{
+					background: #fff;
+					border: 2rpx solid #EE4320;
+					color: #EE4320;
 				}
 			}
 		}
@@ -603,10 +727,15 @@
 		.sub-title{
 			font-size: 28rpx;
 			font-weight: bold;
-			margin: 20rpx 0;
+			// margin: 20rpx 0;
+			.price-range{
+				font-weight: 300;
+				font-size: 28rpx;
+				color: #EE4320;
+			}
 		}
-		.mb100{
-			margin-bottom: 100rpx!important;
+		.mb28{
+			margin-bottom: 28rpx!important;
 		}
 		
 		.mt60{
@@ -614,10 +743,15 @@
 		}
 		
 		.zs-slider{
+			width: 92%;
 			// margin-bottom: 60rpx;
 		}
 	}
 	
+	.ml20{
+		margin-left: 20rpx;
+	}
+	
 	.btn-box{
 		display: flex;
 		align-items: center;

+ 0 - 218
integral/logs.vue

@@ -1,218 +0,0 @@
-<template>
-	<view class="integral-logs">
-		<!-- 筛选器 -->
-		<view class="filter-box">
-			<view class="box">
-				<view class="filter-item" :class="[active == 1?'active':'']" @click="handleType(1)">
-					全部
-				</view>
-				<view class="filter-item" :class="[active == 2?'active':'']" @click="handleType(2)">
-					获得
-				</view>
-				<view class="filter-item" :class="[active == 3?'active':'']" @click="handleType(3)">
-					消耗
-				</view>
-			</view>
-				<view class="filter-time" @click="handleTime">
-					筛选时间
-					<u-icon name="arrow-down" size="30" color="#fff"></u-icon>
-				</view>
-		</view>
-		
-		
-		<u-datetime-picker
-		                :show="show"
-		                v-model="time"
-		                mode="date"
-						:closeOnClickOverlay="true"
-						@cancel="cancel"
-						@confirm="confirm"
-						@close="close"
-		        ></u-datetime-picker>
-				
-				<zs-list mt="90rpx" @load="loadMore" :status="status">
-					<view class="time-title">
-						2022年10月
-					</view>
-					<view class="item" v-for="(item,index) in list" :key="index">
-						<view class="info">
-							<view class="title">
-								{{item.title}}
-							</view>
-							<view class="time">
-								{{item.time}}
-							</view>
-						</view>
-						<view class="score">
-							{{item.score}}
-						</view>
-					</view>
-				</zs-list>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				show:false,
-				time:Number(new Date()),
-				status:'more',
-				active:1,
-				list:[
-					{
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+5'
-					},
-					{
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+5'
-					},
-					{
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+5'
-					},
-					{
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+5'
-					},
-					// {
-					// 	title:'天天签到积分',
-					// 	time:'2022-10-01',
-					// 	score:'+5'
-					// },
-					// {
-					// 	title:'天天签到积分',
-					// 	time:'2022-10-01',
-					// 	score:'+5'
-					// },
-					// {
-					// 	title:'天天签到积分',
-					// 	time:'2022-10-01',
-					// 	score:'+5'
-					// },
-					// {
-					// 	title:'天天签到积分',
-					// 	time:'2022-10-01',
-					// 	score:'+5'
-					// },
-					// {
-					// 	title:'天天签到积分',
-					// 	time:'2022-10-01',
-					// 	score:'+5'
-					// },
-					// {
-					// 	title:'天天签到积分',
-					// 	time:'2022-10-01',
-					// 	score:'+5'
-					// },
-					// {
-					// 	title:'天天签到积分',
-					// 	time:'2022-10-01',
-					// 	score:'+5'
-					// }
-				]
-			}
-		},
-		methods: {
-			handleType(val){
-				this.active = val
-			},
-			handleTime() {
-				this.show = true
-			},
-			// 关闭选择器时触发
-			close(){
-				this.show = false
-			},
-			// 点击确定按钮时触发
-			confirm(){
-				this.show = false
-			},
-			// 点击取消按钮
-			cancel(){
-				this.show = false
-			},
-			loadMore(){
-				this.status = 'loading'
-					setTimeout(()=>{
-						this.status = 'more'
-						this.list.push({
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+15'
-					})
-					},1000)
-			}
-		},
-	}
-</script>
-
-<style lang="scss">
-.integral-logs{
-	.filter-box{
-		display: flex;
-		padding: 25rpx 0;
-		background: rgb(57, 81, 251);
-		color: #fff;
-		position: fixed;
-		top: 0%;
-		left: 0%;
-		width: 100%;
-		.box{
-			flex: 1;
-			display: flex;
-			border-right: 1px solid #fff;
-			.filter-item{
-				flex: 1;
-				text-align: center;
-			}
-			.active{
-				font-weight: bold;
-			}
-		}
-		.filter-time{
-			width: 240rpx;
-			display: flex;
-			align-items: center;
-			justify-content: center;
-			.u-icon{
-				margin-left: 8rpx;
-			}
-		}
-	}
-	.time-title{
-		font-size: 32rpx;
-		font-weight: bold;
-		padding-left: 20rpx;
-		line-height: 70rpx;
-	}
-	.item{
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		padding: 25rpx;
-		box-shadow: rgba(0, 0, 0, 0.1) 0px 2px 3px 0px;
-		margin-bottom: 15rpx;
-		border-radius: 12rpx;
-		.info{
-			.title{
-				font-size: 32rpx;
-			}
-			.time{
-				font-size: 24rpx;
-				color: #cacaca;
-				margin-top: 10rpx;
-			}
-		}
-		.score{
-			font-size: 38rpx;
-			color: rgb(57, 81, 251);
-		}
-	}
-}
-</style>

+ 0 - 155
integral/shop.vue

@@ -1,155 +0,0 @@
-<template>
-	<view class="integral-shop">
-		<view class="search-box">
-			<zs-search></zs-search>
-		</view>
-		
-		<image class="top-banner" src="http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/zWqwDFLWR49e9ad6233cd12be362c43beb149fd7afd8.png/1.png" mode=""></image>
-		
-		<zs-list class="list" mt="0" @load="loadMore" :status="status">
-			<view class="item" v-for="(item,index) in list" :key="index">
-				<image :src="item.src" mode="aspectFill" class="icon"></image>
-				<view class="item-title">
-					{{item.title}}
-				</view>
-				<view class="handle-box">
-					<view class="price">
-						{{item.score}}分
-					</view>
-					<view class="exchange-btn">
-						兑换
-					</view>
-				</view>
-			</view>
-		</zs-list>
-		
-		<zs-skeleton :loading="loading" type="integralShop"></zs-skeleton>
-		
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				loading:false,
-				list:[
-					{
-						src:'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/8zBA84UCvIef20b42c8c60ccf255659809bb7487bc39.png/1.png',
-						title:'宅小鹿芒果干',
-						score:6000,
-					},
-					{
-						src:'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/9wkfNPdtHQDx215952a03c9499e4bd4cc030e5be26bd.png/1.png',
-						title:'麻辣王子地道辣条',
-						score:6000,
-					},
-					{
-						src:'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/FHcYDdynWMlO6bb60c27722f428d3d6552a1a39eae9c.png/1.png',
-						title:'良品铺子酥脆薄饼',
-						score:6000,
-					},
-				],
-				status:'more',//加载状态
-			}
-		},
-		methods: {
-			
-			loadMore(){
-				this.status = 'loading'
-					setTimeout(()=>{
-						this.status = 'more'
-						this.list.push({
-						src:'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/iNEvSic47Nhy84e3b9a86e1e505bfe57c92d01acb255.png/1.png',
-						title:'薄脆饼干',
-						score:6000,
-						num:120
-					},)
-					},1000)
-			}
-		},
-		onLoad() {
-			this.loading = true
-			setTimeout(()=>{
-				this.loading = false
-			},1000)
-		}
-	}
-</script>
-
-<style lang="scss">
-
-	.integral-shop {
-		background: #f5f5f5;
-		padding-top: 120rpx;
-		.search-box{
-			position: fixed;
-			top: 0%;
-			left: 0%;
-			width: 100%;
-			padding: 20rpx 0;
-			background: #fff;
-			z-index: 9;
-		}
-		
-		.top-banner{
-			margin: 0 30rpx;
-			width: 690rpx;
-			height: 346rpx;
-		}
-		
-		.zs-list{
-			margin-left: 30rpx;
-			margin-right: 30rpx;
-			display: flex;
-			flex-wrap: wrap;
-			justify-content: space-between;
-			.item{
-				width: 334rpx;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				background: #fff;
-				border-radius: 16rpx;
-				margin-top: 20rpx;
-				.icon{
-					width: 100%;
-					height: 320rpx!important;
-					border-radius: 12rpx;
-					object-fit: cover;
-				}
-				.item-title{
-					font-size: 26rpx;
-					 display: -webkit-box;
-					-webkit-box-orient: vertical;
-					overflow: hidden;
-					-webkit-line-clamp: 2;
-					text-overflow: ellipsis;
-					padding: 0 20rpx;
-					margin-top: 20rpx;
-				}
-				.handle-box{
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					margin-top: 15rpx;
-					padding: 10rpx 20rpx;
-					.price{
-						font-size: 26rpx;
-						color: #FE5B47;
-					}
-					.exchange-btn{
-						width: 96rpx;
-						height: 40rpx;
-						line-height: 40rpx;
-						background: $uni-color-primary;
-						border-radius: 20rpx;
-						text-align: center;
-						color: #fff;
-						font-size: 22rpx;
-					}
-				}
-			}
-		}
-	}
-</style>

+ 0 - 353
integral/store.vue

@@ -1,353 +0,0 @@
-<template>
-	<view class="store">
-		
-		<view class="bg">
-			<view class="info">
-				<view class="num">
-					3399
-				</view>
-				<view class="label">
-					剩余积分
-				</view>
-			</view>
-			<view class="rule">
-				积分规则
-			</view>
-			<image class="jump-img"  @click="jump('./shop')" src="http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/BwbkTmLONI0K245c64d32574af7de6e0d328048b9f7c.png/1.png" mode=""></image>
-		</view>
-		
-		<view class="title">
-			<image class="icon" src="../static/diamon.png" mode=""></image>
-			积分明细
-		</view>
-		
-		
-	<!-- 	<view class="tab-group">
-			<view class="tab" @click="jump('./shop')">
-				<image class="icon" src="../static/store.png" mode=""></image>
-				<view class="tab-name">
-					积分商城
-				</view>
-			</view>
-			
-			<view class="tab" @click="jump('./logs')">
-				<image class="icon" src="../static/diamon.png" mode=""></image>
-				<view class="tab-name">
-					积分明细
-				</view>
-			</view>
-			
-		</view> -->
-		
-		<zs-list mt="0" @load="loadMore" :status="status">
-		
-			<view class="item" v-for="(item,index) in list" :key="index">
-				<view class="top">
-					<view class="item-title">
-						{{item.title}}
-					</view>
-					<view class="score">
-						{{item.score}}
-					</view>
-				</view>
-				<view class="bottom">
-					
-					<view class="time">
-						{{item.time}}
-					</view>
-					<view class="num">
-						剩余{{item.num}}
-					</view>
-				</view>
-			</view>
-		</zs-list>
-		
-		
-		
-		<!-- <view class="goods-box">
-			
-			<view class="store-title">
-				人气兑换
-				<u-icon name="arrow-right" color="#000000" size="38"></u-icon>
-			</view>
-			
-			<view class="box">
-				<view class="item" v-for="(item,index) in list" :key="index">
-					<image :src="item.src" mode="aspectFill" class="icon"></image>
-					<view class="item-title">
-						{{item.title}}
-					</view>
-					<view class="handle-box">
-						<view class="price">
-							{{item.score}}分
-						</view>
-						<view class="exchange-btn">
-							兑换
-						</view>
-					</view>
-				</view>
-				
-			</view>
-			
-			<view class="store-title">
-				生活出行
-				<u-icon name="arrow-right" color="#000000" size="38"></u-icon>
-			</view>
-			
-			<view class="box">
-				<view class="item" v-for="(item,index) in list" :key="index">
-					<image :src="item.src" mode="aspectFill" class="icon"></image>
-					<view class="item-title">
-						{{item.title}}
-					</view>
-					<view class="handle-box">
-						<view class="price">
-							{{item.score}}分
-						</view>
-						<view class="exchange-btn">
-							兑换
-						</view>
-					</view>
-				</view>
-			</view>
-			
-		</view> -->
-		<zs-skeleton :loading="loading" type="integral"></zs-skeleton>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				loading: false,
-				status:'more',
-				list:[
-					{
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+5',
-						num:1233
-					},
-					{
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+5',
-						num:1233
-					},
-					{
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+5',
-						num:233
-					},
-					{
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+5',
-						num:1233
-					}],
-				
-			}
-		},
-		methods: {
-			jump(url) {
-				uni.navigateTo({
-					url
-				})
-			},
-			loadMore(){
-				this.status = 'loading'
-					setTimeout(()=>{
-						this.status = 'more'
-						this.list.push({
-						title:'天天签到积分',
-						time:'2022-10-01',
-						score:'+15',
-						num:1233
-					})
-					},1000)
-			}
-		},
-		onLoad() {
-			this.loading = true
-			setTimeout(()=>{
-				this.loading = false
-			},1000)
-		}
-	}
-</script>
-
-<style lang="scss">
-.store{
-	padding-bottom: 80rpx;
-	background: #F9F9F9;
-	.bg{
-		background: linear-gradient(180deg, #3988FF 0%, #F9F9F9 100%);
-		height: 430rpx;
-		background-size: 100% 430rpx;
-		display: flex;
-		justify-content: center;
-		align-items: center;
-		color: #fff;
-		position: relative;
-		.jump-img{
-			position: absolute;
-			bottom: 20rpx;
-			left: 50%;
-			transform: translateX(-50%);
-			width: 660rpx;
-			height: 134rpx;
-		}
-		.info{
-			text-align: center;
-			color: #222222;
-			.num{
-				font-size: 56rpx;
-				font-weight: bold;
-			}
-			.label{
-				font-size: 24rpx;
-			}
-		}
-		.rule{
-			position: absolute;
-			top: 50%;
-			right: 0%;
-			transform: translateY(-50%);
-			background: #fff;
-			color: $uni-text-primary;
-			font-size: 28rpx;
-			padding:10rpx 18rpx;
-			border-radius: 12rpx;
-		}
-	}
-	
-	
-	.title{
-		font-size: 28rpx;
-		font-weight: bold;
-		color: #0F0F0F;
-		display: flex;
-		align-items: center;
-		margin: 30rpx;
-		.icon{
-			width: 40rpx;
-			height: 40rpx;
-			margin-right: 10rpx;
-		}
-	}
-	
-	.item{
-		display: flex;
-		flex-direction: column;
-		justify-content: space-between;
-		padding: 25rpx;
-		margin:0 30rpx 20rpx;
-		border-radius: 16rpx;
-		background: #fff;
-		.top{
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			.item-title{
-				font-size: 28rpx;
-			}
-			.score{
-				font-size: 38rpx;
-				color: rgb(57, 81, 251);
-				color: #0F0F0F;
-				font-weight: bold;
-			}
-			
-		}
-		.bottom{
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			color: #999999;
-			margin-top: 15rpx;
-				font-size: 24rpx;
-			.time{
-			}
-			
-			.num{
-				
-			}
-		}
-	}
-	
-	
-	.goods-box{
-		padding: 20rpx 50rpx;
-		.store-title{
-			font-size: 34rpx;
-			display: flex;
-			align-items: center;
-			position: relative;
-			padding-left: 18rpx;
-			font-weight: bold;
-			margin: 20rpx 0 30rpx;
-		}
-		.store-title::before{
-			width: 7rpx;
-			height: 100%;
-			background: rgb(57, 81, 251);
-			content: '';
-			display: flex;
-			position: absolute;
-			top: 0%;
-			left: 0;
-			
-		}
-		.box{
-			display: flex;
-			justify-content: space-between;
-			border-bottom: 1rpx solid #cacaca;
-			padding-bottom: 30rpx;
-			.item{
-				width: 200rpx;
-				display: flex;
-				flex-direction: column;
-				justify-content: space-between;
-				.icon{
-					width: 100%;
-					height: 210rpx!important;
-					border-radius: 12rpx;
-					object-fit: cover;
-				}
-				.item-title{
-					font-size: 26rpx;
-					 display: -webkit-box;
-					-webkit-box-orient: vertical;
-					overflow: hidden;
-					-webkit-line-clamp: 2;
-					text-overflow: ellipsis;
-					margin-top: 10rpx;
-				}
-				.handle-box{
-					display: flex;
-					justify-content: space-between;
-					align-items: center;
-					margin-top: 15rpx;
-					.price{
-						font-size: 26rpx;
-						color: #FE5B47;
-					}
-					.exchange-btn{
-						width: 96rpx;
-						height: 40rpx;
-						line-height: 40rpx;
-						background: $uni-color-primary;
-						border-radius: 20rpx;
-						text-align: center;
-						color: #fff;
-						font-size: 22rpx;
-					}
-				}
-			}
-		}
-	}
-	
-}
-</style>

+ 39 - 13
login/login/login.vue

@@ -79,6 +79,7 @@
 				scene:'',//其他页面携带的参数统一存放
 				redirect:'',//重定位地址
 				show: false,
+				params:'',//重定向页面参数
 				userInfo: {
 					name: '',
 					idCardNum: '',
@@ -91,13 +92,25 @@
 						message: '请填写姓名',
 						trigger: ['blur', 'change']
 					},
-					'idCardNum': {
-						type: 'string',
-						max: 18,
-						required: true,
-						message: '请输入身份证号',
-						trigger: ['blur', 'change']
-					},
+					'idCardNum':[
+						{
+							type: 'string',
+							max: 18,
+							required: true,
+							message: '请输入身份证号',
+							trigger: ['blur', 'change']
+						},
+						{
+							validator: (rule, value, callback) => {
+								let reg = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
+								// 上面有说,返回true表示校验通过,返回false表示不通过
+								return reg.test(value);
+							},
+							message: '身份证号不合法',
+							// 触发器可以同时用blur和change
+							trigger: ['change','blur'],
+						}
+					] ,
 				},
 			}
 		},
@@ -116,14 +129,15 @@
 				}).then(data => {
 					console.log(11111111,data);
 					if(data.msg != '成功'){
-						clear().then(()=>{
+						clear({type:1}).then(()=>{
 							this.decryptPhoneNumber(val)
 						})
 					}else{
 						
 						this.userInfo.phone = data.content
 						getLoginToken({
-							phoneNum: data.content
+							phoneNum: data.content,
+							platformType:1
 						}).then(msg => {
 							if(msg.state != 'Success') return
 							uni.login({
@@ -149,7 +163,8 @@
 													if(that.redirect){
 														console.log(that.scene);
 														uni.reLaunch({
-															url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
+															// url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
+															url:`${that.redirect}?${that.params}`
 														})
 													}else{
 														uni.switchTab({
@@ -179,7 +194,8 @@
 			goOther() {
 				console.log(this.redirect);
 				uni.navigateTo({
-					url: `../../login/login/otherLogin?redirect=${this.redirect}&scene=${this.scene}&id=${this.id}`
+					// url: `../../login/login/otherLogin?redirect=${this.redirect}&scene=${this.scene}&id=${this.id}`
+					url: `../../login/login/otherLogin?redirect=${this.redirect}&${this.params}`
 				})
 			},
 			close(){
@@ -214,7 +230,8 @@
 							this.show = false
 							if(this.redirect){
 								uni.reLaunch({
-									url:`${this.redirect}?scene=${this.scene}&id=${this.id}`
+									// url:`${this.redirect}?scene=${this.scene}&id=${this.id}`
+									url:`${this.redirect}?${this.params}`
 								})
 							}else{
 								uni.switchTab({
@@ -236,7 +253,16 @@
 			this.redirect = options.redirect
 			this.scene = options.scene
 			this.id = options.id
-			console.log(1111111,this.redirect);
+			for (let key in options) {
+				if(key != 'redirect'){
+					if(this.params){
+					 this.params += `&${key}=${options[key]}`
+					}else{
+						 this.params += `${key}=${options[key]}`
+					}
+				}
+			}
+			console.log(1111111,this.params);
 		}
 
 	}

+ 52 - 22
login/login/otherLogin.vue

@@ -62,6 +62,7 @@
 				id:'',//其他页面传来的id
 				scene:'',//其他页面携带的参数统一存放
 				redirect:'',//重定位地址
+				params:'',//重定向页面参数
 				show: false,
 				auth: {
 					name: '',
@@ -75,17 +76,30 @@
 						message: '请填写姓名',
 						trigger: ['blur', 'change']
 					},
-					'idCardNum': {
-						type: 'string',
-						max: 18,
-						required: true,
-						message: '请输入身份证号',
-						trigger: ['blur', 'change']
-					},
+					'idCardNum': [
+						{
+							type: 'string',
+							max: 18,
+							required: true,
+							message: '请输入身份证号',
+							trigger: ['blur', 'change']
+						},
+						{
+							validator: (rule, value, callback) => {
+								let reg = /^[1-9]\d{5}(18|19|20)\d{2}((0[1-9])|(1[0-2]))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/;
+								// 上面有说,返回true表示校验通过,返回false表示不通过
+								return reg.test(value);
+							},
+							message: '身份证号不合法',
+							// 触发器可以同时用blur和change
+							trigger: ['change','blur'],
+						}
+					] ,
 				},
 				userInfo: {
 					code:'',
 					phoneNum:'',
+					platformType : 1
 				},
 				open:false,
 				seconds:6,
@@ -151,7 +165,8 @@
 							this.show = false
 							if(this.redirect){
 								uni.reLaunch({
-									url:`${this.redirect}?scene=${this.scene}&id=${this.id}`
+									// url:`${this.redirect}?scene=${this.scene}&id=${this.id}`
+									url:`${this.redirect}?${this.params}`
 								})
 							}else{
 								uni.switchTab({
@@ -169,7 +184,7 @@
 					uni.showLoading({
 						title: '加载中'
 					});
-					getLoginToken({phoneNum:this.userInfo.phoneNum}).then(res=>{
+					getLoginToken({phoneNum:this.userInfo.phoneNum,platformType:1}).then(res=>{
 						let userInfo = this.userInfo
 						userInfo.loginToken = res.content
 						if(res.state != 'Success') return
@@ -184,19 +199,24 @@
 									.refreshToken) //refreshToken
 								getUserDetail().then(res => {
 									uni.setStorageSync('userInfo', JSON.stringify(res.content))
-									if (res.content.isAuth == 1) {
-										if(that.redirect && that.redirect !=  "undefined"){
-											uni.reLaunch({
-												url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
-											})
-										}else{
-											uni.switchTab({
-												url: '../../pages/index/index'
-											})
-										}
-									} else { //未实名认证
-										that.show = true
-									}
+									uni.reLaunch({
+										// url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
+										url:`${that.redirect}?${that.params}`
+									})
+									// if (res.content.isAuth == 1) {
+									// 	if(that.redirect && that.redirect !=  "undefined"){
+									// 		uni.reLaunch({
+									// 			// url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
+									// 			url:`${that.redirect}?${that.params}`
+									// 		})
+									// 	}else{
+									// 		uni.switchTab({
+									// 			url: '../../pages/index/index'
+									// 		})
+									// 	}
+									// } else { //未实名认证
+									// 	that.show = true
+									// }
 								})
 								
 								
@@ -210,6 +230,15 @@
 			this.redirect = options.redirect
 			this.scene = options.scene
 			this.id = options.id
+			for (let key in options) {
+				if(key != 'redirect'){
+					if(this.params){
+					 this.params += `&${key}=${options[key]}`
+					}else{
+						 this.params += `${key}=${options[key]}`
+					}
+				}
+			}
 		}
 	}
 </script>
@@ -242,6 +271,7 @@
 			padding-bottom: 30rpx;
 			margin-top: 20rpx;
 			.protocol {
+				display: flex;
 				text-align: center;
 				font-size: 28rpx;
 				color: #999999;

+ 131 - 24
movie/chooseSeat.vue

@@ -2,9 +2,10 @@
 	<view class="movie">
 		<anil-seat
 		ref="anilSeat"
-		  title="皮皮鲁与鲁西西之罐头小人"
-		  info="2021年01月22日 国语 奇幻 喜剧 儿童"
-		  room-name="5号厅"
+		  :title="info.movieName"
+		  :info="info.showTime.substring(5)+' '+ info.version"
+		  :day="info.showTime"
+		  :room-name="info.hall"
 		  :seat-data="seatData" 
 		  :max="6" 
 		  @confirm="onConfirmSeat">
@@ -15,42 +16,148 @@
 <script>
 	import {
 		seatData
-	} from '@/utils/seat-data.js'
+	} from '@/utils/seat-data.js';
+	import {getSeat} from '@/api/movie'
 	export default {
 		data() {
 			return {
-				list:[]
+				info:{
+					movieName:'',
+					showTime:'',
+					version:'',
+					hall:'',
+				},
+				list:[],
+				query:{
+					sessionId:'',
+					cinemaId:'',
+					movieId:'',
+				}
 			}
 		},
 		methods: {
 			onConfirmSeat (items) {
 			  console.log(items)
+			  let seatArr = items.map(item=>{
+				  return item.SeatName
+			  })
+			  let seatIdArr = items.map(item=>{
+			  	  return item.SeatCode
+			  })
+			  
+			  let originPriceArr = items.map(item=>{
+			  	  return item.originPrice
+			  })
+			  let priceArr = items.map(item=>{
+			  	  return item.Price
+			  })
+			  console.log(originPriceArr,priceArr);
+			  let that = this
 			  uni.navigateTo({
 			  	url:`/pay/pay1`,
-			  })
-			}
-		},
-		onLoad() {
-			for (let i= 15;i>0;i--) {
-				for (let d = i;d>0;d--) {
-					this.list.push(
-					{
-						"YCoord": i,
-						"XCoord": d,
-						"SeatCode": "4413141101#01#14"+i+d,
-						"Status": 1,
-						SeatName:`${d}排${i}座`,
-						"RowNum": d,
-						"ColumnNum": i,
-						// "flag":1,
-					  "Price": "23.6"
+				success: function(res) {
+					let info = {
+						sessionId:that.query.sessionId,
+						cityId:uni.getStorageSync('movieCityId'),
+						cinemaId:that.query.cinemaId,
+						movieId:that.query.movieId,
+						movieCode:that.query.movieCode,
+						cityName:uni.getStorageSync('city'),
+						cinemaName:that.info.cinemaName,
+						cinemaCode:that.info.cinemaCode,
+						hallName:that.info.hall,
+						movieName:that.info.movieName,
+						seatNames:seatArr.toString(),
+						cinemaAddress:that.info.cinemaAddress,
+						sessionBeginTime:that.info.sessionBeginTime,
+						sessionEndTime:that.info.sessionEndTime,
+						originalSeatIds:seatIdArr.toString(),
+						postImageUrl:that.info.postImageUrl,
+						originPrice:originPriceArr,
+						price:priceArr,
+						// originPrice:Array.from(new Set(originPriceArr)),
+						// price:Array.from(new Set(priceArr)),
+						
 					}
-					)
+				  // 通过eventChannel向被打开页面传送数据
+				  res.eventChannel.emit('pay', info)
 				}
+			  })
+			},
+			getSeat(){
+				getSeat(this.query).then(res=>{
+					if(res.state == 'Success'){
+						res.content.data.seatSection.seatRows.map(item=>{
+							item.columns.map(i=>{
+								if(i.colId){
+									let price
+									let originPrice
+									res.content.data.areaPriceList.map(pItem=>{
+										if(pItem.areaId == i.areaId){
+											price = pItem.price
+											originPrice = pItem.originPrice
+										}
+									})
+									let obj = {
+										"YCoord": item.rowsNum,
+										"XCoord": i.colNum,
+										"SeatCode": i.originSeatID,
+										"RowNum": item.rowsNum,
+										"ColumnNum": i.colNum,
+										"SeatName":i.seatName,
+										"areaId":i.areaId,
+										"originPrice": originPrice,
+										"Price": price
+									}
+									
+									if(i.type == 2){
+										obj.flag = 1
+									}else if(i.type == 3){
+										obj.flag = 2
+									}
+									
+									if(i.state == 0){//非座位
+										obj.Status = -1
+									}else if(i.state == 1||i.state == 10||i.state == 11){//可选
+										obj.Status = 0
+									}else if(i.state == 2 || i.state == 3){//不可选
+										obj.Status = 2
+									}
+									
+									this.list.push(obj)
+								}
+							})
+						})
+						this.$nextTick(()=>{
+							console.log(222222,this.list);
+						this.$refs['anilSeat'].initData(this.list)
+						})
+						this.info = {
+							
+							movieCode:res.content.data.movieCode,
+							postImageUrl:res.content.data.postImageUrl,
+							sessionBeginTime:res.content.data.showTime,
+							sessionEndTime:res.content.data.endTime,
+							cinemaAddress:res.content.data.cinemaAddress,
+							cinemaName:res.content.data.cinemaName,
+							cinemaCode:res.content.data.cinemaCode,
+							movieName:res.content.data.movieName,
+							showTime:  uni.$u.timeFormat(new Date(res.content.data.showTime).getTime(), 'yyyy-mm-dd hh:MM'),
+							version:res.content.data.version,
+							hall:res.content.data.hall,
+						}
+					}
+				})
 			}
+		},
+		onLoad(options) {
+			this.query.sessionId = options.sessionId
+			this.query.cinemaId = options.cinemaId
+			this.query.movieId = options.movieId
+			this.getSeat()
+			
 			console.log(1111,this.list);
 			 // 座位图初始化 - seatData座位数据
-			this.$refs['anilSeat'].initData(this.list)
 		}
 	}
 </script>

+ 160 - 49
movie/index.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="movie">
 		<view class="header" :style="{height:height +'px'}">
-			<image class="back" src="../../static/back-btn.png" @click="back" mode=""></image>
+			<image class="back" src="@/static/back-btn.png" @click="back" mode=""></image>
 			<view class="tab" :class="[tab == 1?'active':'']" @click="handleTab(1)">
 				热映
 			</view>
@@ -15,96 +15,92 @@
 		<!-- 列表 -->
 		<zs-list :mt="(height+8) +'px'" @load="loadMore" :status="status">
 			<template v-if="tab == 1">
-				<view class="item" v-for="(item,index) in list1" :key="index">
+				<view class="item" v-for="(item,index) in list1" :key="index" @click="buy(item.movieId)">
 					<view class="img-box">
-						<view class="tag">
-							IMAX 2D
-						</view>
-						<view class="icon">
-							
+						<view class="tag" v-if="item.version">
+							{{item.version}}
 						</view>
+						<zs-img class="icon" :src="item.posterUrl" radius="full" width="160rpx" height="150rpx" mode="widthFix" ></zs-img>
 					</view>
 					<view class="info">
 						<view class="name">
-							熊出没·逆转时空
+							{{item.name}}
 						</view>
 						<view class="score-box">
 							<view class="score">
 								评分 <view class="num">
-									9.6
+									{{item.score}}
 								</view>
 							</view>
 							<view class="want-num">
-								4.2万人想看
+								{{item.wish | filterNum}}人想看
 							</view>
 						</view>
 						<view class="actor">
-							张伟 张秉君
+							{{item.star}}
 						</view>
-						<view class="play-movie-num">
+					<!-- 	<view class="play-movie-num">
 							今天 269家影院放映2507场
-						</view>
+						</view> -->
 					</view>
-					<button class="buy-btn" type="default" @click="buy">购票</button>
+					<button class="buy-btn" type="default" @click="buy(item.movieId)">购票</button>
 				</view>
 			</template>
 			
 			<template v-else-if="tab == 2">
-				<view class="cinema-item" v-for="(item,index) in list2" :key="index">
+				<view class="cinema-item" v-for="(item,index) in list2" :key="index" @click="goCinema(item.cinemaId)">
 					<view class="name-box">
 						<view class="name">
-							熊出没·逆转时空1111
+							{{item.name}}
 						</view>
 						<view class="price">
-							¥19.9 <view class="label">起</view>
+							¥{{item.sellPrice}} <view class="label">起</view>
 						</view>
 					</view>
 					<view class="address-box">
 						<view class="address">
-							沙坪坝区大学城景苑路(美丽熙街)8号附1027号
+							{{item.address}}
 						</view>
 						<view class="distance">
-							700m
+							{{item.dis}}
 						</view>
 					</view>
 					<view class="movie-name">
-						飞驰人生2/熊出没·逆转时空/第二十条
+						近期场次:{{item.showInfo}}
 					</view>
 				</view>
 			</template>
 			
 			<template v-else-if="tab == 3">
-				<view class="item" v-for="(item,index) in list3" :key="index">
+				<view class="item" v-for="(item,index) in list3" :key="index" @click="buy(item.movieId)">
 					<view class="img-box">
-						<view class="tag">
-							IMAX 2D
-						</view>
-						<view class="icon">
-							
+						<view class="tag" v-if="item.version">
+							{{item.version}}
 						</view>
+						<zs-img class="icon" :src="item.posterUrl" radius="full" width="160rpx" height="150rpx" mode="widthFix" ></zs-img>
 					</view>
 					<view class="info">
 						<view class="name">
-							熊出没·逆转时空222222
+							{{item.name}}
 						</view>
 						<view class="score-box">
-							<view class="score">
+							<view class="score" v-if="item.score">
 								评分 <view class="num">
-									9.6
+									{{item.score}}
 								</view>
 							</view>
 							<view class="want-num">
-								4.2万人想看
+								{{item.wish | filterNum}}人想看
 							</view>
 						</view>
 						<view class="actor">
-							张伟 张秉君
+							{{item.star}}
 						</view>
-						<view class="play-movie-num">
-							今天 269家影院放映2507场
+						<view class="releaseTime">
+							{{ $u.timeFormat(new Date(item.releaseTime).getTime(), 'yyyy年mm月dd日')}}
 						</view>
 					</view>
-					<button class="presell-btn" type="default" @click="buy">预售</button>
+					<button class="presell-btn" type="default" @click="buy(item.movieId)">预售</button>
 				</view>
 			</template>
 		</zs-list>
@@ -112,39 +108,137 @@
 </template>
 
 <script>
+	import {hotList,comingList,cinemas,cityList,cinema_filter} from '@/api/movie.js'
 	export default {
 		data() {
 			return {
 				status: "more",
 				tab:1,
 				height:0,
-				list1:[1,2,3,4,5],
-				list2:[1,2,3,4],
-				list3:[1,2,3],
+				list1:[],
+				list2:[],
+				list3:[],
+				cityId:0,
+				hotQuery:{
+					cityId:0,
+					pageIndex:0,
+					pageSize:20,
+				},
+				cinemasQuery:{
+					cityId:0,
+					lat:JSON.parse(uni.getStorageSync('location')).latitude,
+					lng:JSON.parse(uni.getStorageSync('location')).longitude,
+				},
 			}
 		},
-		methods: {
-			list() {
-				return this['list'+this.tab]
+		filters: {
+			filterNum: function(value) {
+				if(value>10000){
+					return (value/10000).toFixed(1)+'万';
+				}else{
+					return value;
+				}
 			}
 		},
 		methods: {
 			back(){
-				uni.switchTab({
+				uni.reLaunch({
 					url:'/pages/index/index'
 				})
 			},
+			goCinema(id){
+				uni.navigateTo({
+					url:'/movie/movieList?id='+id
+				})
+			},
 			handleTab(val){
 				this.tab = val
+				this.list1 = []
+				this.list2 = []
+				this.list3 = []
+				if(val == 1){
+					this.status = 'more'
+					this.hotQuery.pageIndex = 0
+					this.hotList()
+				}else if(val == 2){
+					this.status = 'noMore'
+					this.cinemas()
+				}else if(val == 3){
+					this.status = 'noMore'
+					this.comingList()
+				}
 			},
-			buy(){
+			buy(id){
 				uni.navigateTo({
-					url:'/movie/movieDetail'
+					url:'/movie/movieDetail?id='+id
 				})
 			},
 			loadMore() {
-				
-			}
+				if(this.cityId != 0 && this.tab == 1){
+					this.hotQuery.cityId = this.cityId
+					this.hotList()
+				}
+			},
+			cityList(){
+				return new Promise((resolve,reject)=>{
+					cityList().then(res=>{
+						if(res.state == 'Success'){
+							let city = uni.getStorageSync('city').replace('市','')
+							this.cityId = res.content.data.filter(item=>item.name == city)[0].cityId
+							uni.setStorageSync('movieCityId',this.cityId)
+							resolve()
+						}
+					})
+				})
+			},
+			hotList(){
+				if(this.status == 'loading') return
+				this.status = 'loading'
+				this.hotQuery.cityId = this.cityId
+				hotList(this.hotQuery).then(res=>{
+					if(res.state == 'Success'){
+						this.list1 = this.list1.concat(res.content.data.movies)
+						if(this.list1.length>=res.content.data.count){
+							this.status = 'noMore'
+						}else{
+							this.status = 'more'
+							this.hotQuery.pageIndex++
+						}
+					}
+				})
+			},
+			comingList(){
+				comingList({cityId:this.cityId}).then(res=>{
+					if(res.state == 'Success'){
+						this.list3 = this.list3.concat(res.content.data.movies)
+					}
+				})
+			},
+			cinema_filter(){
+				cinema_filter({cityId:this.cityId}).then(res=>{
+					if(res.state == 'Success'){
+						
+					}
+				})
+			},
+			cinemas(){
+				this.status = 'loading'
+				this.cinemasQuery.cityId = this.cityId
+				cinemas(this.cinemasQuery).then(res=>{
+					if(res.state == 'Success'){
+						this.list2 = res.content.data
+						this.status = 'noMore'
+						
+					}
+				})
+			},
+			
+		},
+		onLoad() {
+			this.cityList().then(()=>{
+				// this.cinema_filter()
+				this.hotList()
+			})
 		},
 		created() {
 			//去除
@@ -172,6 +266,7 @@
 		top: 0;
 		left: 0;
 		width: 100%;
+		z-index: 2;
 		.back{
 			position: absolute;
 			left: 32rpx;
@@ -210,6 +305,7 @@
 					border-radius: 8rpx 8rpx 8rpx 8rpx;
 					font-size: 18rpx;
 					color: #FFFFFF;
+					z-index: 2;
 				}
 				.icon{
 					width: 160rpx;
@@ -223,7 +319,7 @@
 				color: #AAAAAA;
 				display: flex;
 				flex-direction: column;
-				justify-content: space-between;
+				// justify-content: space-between;
 				margin-left: 20rpx;
 				.name{
 					font-weight: 600;
@@ -236,6 +332,7 @@
 				}
 				.score-box{
 					display: flex;
+					margin-top: 20rpx;
 					.score{
 						
 						display: flex;
@@ -248,13 +345,26 @@
 					}
 					.want-num{
 						padding: 0 12rpx;
-						border-left: 2rpx solid #F0F0F0;
 						align-self: flex-end;
 						// font-size: 24rpx;
 						// color: #AAAAAA;
 					}
+					.score+.want-num{
+						border-left: 2rpx solid #F0F0F0;
+					}
 				}
-				.actor{
+				.actor,.releaseTime{
+					margin-top: 20rpx;
+					width: 350rpx;
+					line-height: 44rpx;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					/* 弹性伸缩盒子模型显示 */
+					display: -webkit-box;
+					/* 限制在一个块元素显示的文本的行数 */
+					-webkit-line-clamp: 2;
+					/* 设置或检索伸缩盒对象的子元素的排列方式 */
+					-webkit-box-orient: vertical;
 					// font-size: 24rpx;
 					// color: #AAAAAA;
 				}
@@ -262,11 +372,12 @@
 					// font-size: 24rpx;
 					// color: #AAAAAA;
 				}
+				
 			}
 			.buy-btn{
 				position: absolute;
 				top: 50%;
-				right: 0;
+				right: 24rpx;
 				transform: translateY(-50%);
 				width: 120rpx;
 				height: 52rpx;

+ 275 - 105
movie/movieDetail.vue

@@ -2,32 +2,31 @@
 	<view class="movieDetail">
 		<view class="info-box">
 			<view class="info">
-				<view class="icon">
-					
-				</view>
+				<image class="icon":src="info.img" mode=""></image>
 				<view class="box">
 					<view class="name">
-						第二十条
+						{{info.nm}}
 					</view>
 					<view class="score-box">
 						<view class="score">
 							评分 <view class="num">
-								9.6
+								{{info.sc}}
 							</view>
 						</view>
 						<view class="want-num">
-							4.2万人想看
+							{{info.wish | filterNum}}人想看
 						</view>
 					</view>
 					
 					<view class="type-box">
-						喜剧 剧情 <view class="tag">
-							IMAX 2D
+						{{info.cat}}
+						<view class="tag">
+							{{info.ver}}
 						</view>
 					</view>
 					
 					<view class="publish-info">
-						2024年3月25日上映 141分钟
+						{{info.pubDesc}} {{info.dur}}分钟
 					</view>
 				</view>
 			</view>
@@ -36,89 +35,37 @@
 				<view class="title">
 					简介
 				</view>
-				<view class="open">
+				<!-- <view class="open">
 					展开
-					<image class="icon" src="../../static/shop-desc.png" mode=""></image>
-				</view>
+					<image class="icon" src="@/static/shop-desc.png" mode=""></image>
+				</view> -->
 			</view>
 			
 			<view class="desc">
-				这一年的不容易谁能懂?自打挂职到市检察院,韩明(雷佳音
-				饰)的糟心事就接二连三。儿子韩雨辰(刘耀文 饰)打了校领导
-				(张译 饰)儿子并拒绝道歉,妻子李茂娟(马丽 饰)义愤填…
+				{{info.desc}}
 			</view>
 			
 		</view>
 		
-		<view class="actor-box">
+		<view class="actor-box" v-if="info.workerList.length">
 			<view class="title-box1">
 				<view class="title">
 					演员列表
 				</view>
 				<view class="total">
-					全部67
-					<image class="icon" src="../../static/right.png" mode=""></image>
+					全部{{info.workerList.length}}
+					<image class="icon" src="@/static/right.png" mode=""></image>
 				</view>
 			</view>
 			
 			<scroll-view class="actor-list" scroll-x="true">
-				<view class="item">
-					<view class="icon">
-						
-					</view>
-					<view class="name">
-						张艺谋
-					</view>
-					<view class="sub-desc">
-						导演
-					</view>
-				</view>
-				
-				<view class="item">
-					<view class="icon">
-						
-					</view>
-					<view class="name">
-						雷佳音
-					</view>
-					<view class="sub-desc">
-						饰 韩明
-					</view>
-				</view>
-				
-				<view class="item">
-					<view class="icon">
-						
-					</view>
+				<view class="item" v-for="item in info.workerList" :key="item.id">
+					<zs-img class="icon" :src="item.avatarUrl" radius="full" width="120rpx" height="150rpx" mode="widthFix" ></zs-img>
 					<view class="name">
-						马丽
+						{{item.characterName}}
 					</view>
 					<view class="sub-desc">
-						饰 李茂娟
-					</view>
-				</view>
-				
-				<view class="item">
-					<view class="icon">
-						
-					</view>
-					<view class="name">
-						赵丽颖
-					</view>
-					<view class="sub-desc">
-						饰 郝秀萍
-					</view>
-				</view>
-				
-				<view class="item">
-					<view class="icon">
-						
-					</view>
-					<view class="name">
-						高叶
-					</view>
-					<view class="sub-desc">
-						饰 吕玲玲
+						{{item.actorName}}
 					</view>
 				</view>
 				
@@ -130,42 +77,84 @@
 			<button class="buy-btn" type="default" @click="buy">特惠购票</button>
 		</view>
 		
-		<u-popup :show="show" round="32rpx" mode="bottom" @close="show = false" @open="openPop">
+		<u-popup :show="show" round="32rpx" mode="bottom" @close="close" @open="openPop">
 			<view class="content">
-				<scroll-view class="tabList" scroll-x="true" scroll-with-animation :scroll-into-view="tab">
-					<view id="demo1" class="tab active">今天 03-04</view>
-					<view id="demo2" class="tab">明天 03-05</view>
-					<view id="demo3" class="tab">后天 03-06</view>
-					<view id="demo3" class="tab">周四 03-07</view>
-					<view id="demo3" class="tab">周四 03-07</view>
-					<view id="demo3" class="tab">周四 03-07</view>
-					<view id="demo3" class="tab">周四 03-07</view>
-					<view id="demo3" class="tab">周四 03-07</view>
+				<!-- 拍片时间 -->
+				<scroll-view v-if="showMovie||optionsCinemaId" class="tabList" scroll-x="true" scroll-with-animation :scroll-into-view="tab">
+					<view id="demo1" class="tab" :class="[chooseDay == item?'active':'']" v-for="(item,index) in dayList1" :key="index" @click="handleTab1(item)"> {{ item | filterDay}} {{ new Date(item).getTime() | date('mm-dd')}}</view>
+							
+				</scroll-view>
+				<!-- 影院时间 -->
+				<scroll-view v-else class="tabList" scroll-x="true" scroll-with-animation :scroll-into-view="tab">
+					<view id="demo1" class="tab" :class="[query.day == item?'active':'']" v-for="(item,index) in dayList" :key="index" @click="handleTab(item)"> {{ item | filterDay}} {{ new Date(item).getTime() | date('mm-dd')}}</view>
+			
 				</scroll-view>
-				<zs-choose-tab position="relative" :showModal="false" @choose="chooseTab"></zs-choose-tab>
+				
+				<!-- <zs-choose-tab position="relative" :showModal="false" @choose="chooseTab"></zs-choose-tab> -->
 				<view class="list">
-					<view class="cinema-item" v-for="(item,index) in 15" :key="index" @click="handleItem">
-						<view class="name-box">
-							<view class="name">
-								保利万和学府影城(熙街店)
+					<view v-if="showMovie||optionsCinemaId">
+						<u-empty v-if="!list.length" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"></u-empty>
+						<view class="movie-item" v-for="(item,index) in list" :key="index">
+							<view class="info">
+								<view class="time-box">
+									<view class="start-time">
+										{{ $u.timeFormat(new Date(item.showTime).getTime(), 'hh:MM')}}
+									</view>
+									<view class="end-time">
+										{{ $u.timeFormat(new Date(item.endTime).getTime(), 'hh:MM')}}散场
+									</view>
+								</view>
+								<view class="type-box">
+									<view class="type">
+										{{item.version}}
+									</view>
+									<view class="room">
+										{{item.hall}}
+									</view>
+								</view>
 							</view>
-							<view class="price">
-								¥19.9 <view class="label">起</view>
+							
+							<view class="price-box">
+								<view class="price">
+									¥{{item.sellPrice}}
+								</view>
+								<view class="btn" @click="goChooseSeat(item.sessionId)">
+									购票
+								</view>
 							</view>
+							
 						</view>
-						<view class="address-box">
-							<view class="address">
-								沙坪坝区大学城景苑路(美丽熙街)8号附1027号
+					</view>
+					
+					<view v-else >
+						<u-empty v-if="!cinemasList.length" mode="data" icon="http://cdn.uviewui.com/uview/empty/data.png"></u-empty>
+						<view class="cinema-item" v-for="(item,index) in cinemasList" :key="index" @click="handleItem(item.cinemaId)">
+							<view class="name-box">
+								<view class="name">
+									{{item.name}}
+								</view>
+								<view class="price">
+									¥{{item.sellPrice}} <view class="label">起</view>
+								</view>
 							</view>
-							<view class="distance">
-								700m
+							<view class="address-box">
+								<view class="address">
+									{{item.address}}
+								</view>
+								<view class="distance">
+									{{item.dis}}
+								</view>
+							</view>
+							<view class="movie-name">
+								近期场次:{{item.showInfo}}
 							</view>
-						</view>
-						<view class="movie-name">
-							近期场次:19:00 | 20:40 | 21:40
 						</view>
 					</view>
+					
+					
+					
 				</view>
+				
 			</view>
 		</u-popup>
 		
@@ -173,30 +162,151 @@
 </template>
 
 <script>
+	import {movieDetail,movie_cinemas,cinema_shows} from '@/api/movie.js'
 	export default {
 		data() {
 			return {
 				show: false,
-				tab:''
+				showMovie: false,
+				info:{},
+				query:{
+					cityId:uni.getStorageSync('movieCityId'),
+					day:'',
+					lat:0,
+					lng:0,
+					movieId:0,
+				},
+				chooseDay:'',//电影的日期
+				cinemaId:0,//选中影院id
+				dayList:[],//影院时间列表
+				dayList1:[],//电影拍片时间列表
+				movieList:[],
+				cinemasList:[],
+				optionsCinemaId:0,//电影院跳转携带id
+			}
+		},
+		filters: {
+			filterNum: function(value) {
+				if(value>10000){
+					return (value/10000).toFixed(1)+'万';
+				}else{
+					return value;
+				}
+			},
+			filterDay(val){
+				if(val ==  uni.$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd')){
+					return '今天'
+				}else if(val ==  uni.$u.timeFormat(new Date().getTime()+1000*60*60*24, 'yyyy-mm-dd')){
+					return '明天'
+				}else if(val ==  uni.$u.timeFormat(new Date().getTime()+1000*60*60*24*2, 'yyyy-mm-dd')){
+					return '后天'
+				}else{
+					let arr = ['日','一','二','三','四','五','六']
+					let num = new Date(val).getDay()
+					return `周${arr[num]}`
+				}
+			}
+		},
+		computed: {
+			list() {
+				let data = []
+				this.movieList.map(item=>{
+					if(item.showDate == this.chooseDay){
+						data = item.sessions
+					}
+				})
+				console.log(1111,data);
+				return data
 			}
 		},
 		methods: {
 			openPop(){
 				
+			},
+			close(){
+				this.show = false
+				this.showMovie = false
 			},
 			buy() {
 				this.show = true
-				
+				this.movie_cinemas()
 			},
-			handleItem(){
+			goChooseSeat(sessionId){
+				console.log(sessionId);
 				uni.navigateTo({
-					url:'./chooseSeat'
+					url:`./chooseSeat?movieId=${this.query.movieId}&cinemaId=${this.cinemaId}&sessionId=${sessionId}`
 				})
 			},
+			handleItem(id){
+				this.showMovie = true
+				this.cinemaId = id
+				this.cinema_shows(id)
+				// uni.navigateTo({
+				// 	url:'./chooseSeat'
+				// })
+			},
+			handleTab(val){
+				this.query.day = val
+				this.showMovie = false
+				this.movie_cinemas()
+			},
+			// 选择电影日期
+			handleTab1(val){
+				this.chooseDay = val
+			},
 			chooseTab(val){
-				
-			}
+			},
+			movieDetail(movieId){
+				movieDetail({movieId}).then(res=>{
+					if(res.state == 'Success'){
+						this.info = res.content.data
+						if(this.optionsCinemaId){
+							this.show = true
+							this.handleItem(this.optionsCinemaId)
+						}
+					}
+				})
+			},
+			// 获取某个电影的电影院列表
+			movie_cinemas(){
+				movie_cinemas(this.query).then(res=>{
+					if(res.state == 'Success'){
+						if(!(res.content.data.showDates.includes(this.query.day))){
+							this.query.day = res.content.data.showDates[0]
+							this.movie_cinemas()
+						}
+						this.dayList = res.content.data.showDates
+						this.cinemasList = res.content.data.cinemas
+					}
+				})
+			},
+			// 获取电影院某个电影的列表
+			cinema_shows(cinemaId){
+				cinema_shows({movieId:this.query.movieId,cinemaId}).then(res=>{
+					if(res.state == 'Success'){
+						let data = JSON.parse(JSON.stringify(res.content.data))
+						let movieList = data.movieShows.filter(item=>item.shows.length)
+						this.chooseDay = movieList[0].shows[0].showDate
+						// this.movieList = movieList[0].shows.filter(item=>item.showDate == this.query.day)[0].sessions
+						this.movieList = movieList[0].shows
+						this.dayList1 = movieList[0].shows.map(item=>item.showDate)
+						
+					}
+				})
+			},
+			
 		},
+		onLoad(options) {
+			this.query.movieId = options.id
+			this.optionsCinemaId = options.cinemaId
+			
+			this.movieDetail(options.id)
+			let location = JSON.parse(uni.getStorageSync('location')) 
+			this.query.lat = location.latitude
+			this.query.lng = location.longitude
+			this.query.day =uni.$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd')
+			this.tab =uni.$u.timeFormat(new Date().getTime(), 'yyyy-mm-dd')
+		}
 	}
 </script>
 
@@ -342,7 +452,6 @@
 						width: 120rpx;
 						height: 150rpx;
 						border-radius: 16rpx;
-						background: #aaa;
 					}
 					.name{
 						font-weight: 400;
@@ -411,7 +520,7 @@
 			}
 		}
 		.list{
-			height: 600rpx;
+			max-height: 900rpx;
 			overflow: auto;
 			.cinema-item{
 				background: #FFFFFF;
@@ -438,6 +547,7 @@
 						.label{
 							font-size: 24rpx;
 							color: #AAAAAA;
+							margin-left: 6rpx;
 						}
 					}
 				}
@@ -467,6 +577,66 @@
 					text-overflow: ellipsis;
 				}
 			}
+			
+			
+			.movie-item{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding: 34rpx 0;
+				border-bottom: 1rpx solid #F0F0F0;
+				.info{
+					display: flex;
+					.time-box{
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+						.start-time{
+							font-weight: 600;
+							font-size: 36rpx;
+							color: #222222;
+						}
+						.end-time{
+							font-size: 24rpx;
+							color: #AAAAAA;
+							margin-top: 20rpx;
+						}
+					}
+					.type-box{
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
+						margin-left: 80rpx;
+						.type{
+							font-size: 28rpx;
+							color: #222222;
+						}
+						.room{
+							font-size: 24rpx;
+							color: #AAAAAA;
+						}
+					}
+				}
+				.price-box{
+					display: flex;
+					align-items: center;
+					.price{
+						font-size: 36rpx;
+						color: #FF4D3A;
+					}
+					.btn{
+						width: 120rpx;
+						height: 52rpx;
+						line-height: 52rpx;
+						text-align: center;
+						background: rgba(238,67,32,0.1);
+						border-radius: 26rpx;
+						margin-left: 20rpx;
+						font-size: 28rpx;
+						color: #EE4320;
+					}
+				}
+			}
 		}
 	}
 		

+ 189 - 0
movie/movieList.vue

@@ -0,0 +1,189 @@
+<template>
+	<view class="movieList">
+		<!-- 列表 -->
+		<zs-list :mt="(height+8) +'px'" :status="status">
+				<view class="item" v-for="(item,index) in list" :key="index">
+					<view class="img-box">
+						<view class="tag" v-if="item.version">
+							{{item.version}}
+						</view>
+						<zs-img class="icon" :src="item.posterUrl" radius="full" width="120rpx" height="150rpx" mode="widthFix" ></zs-img>
+					</view>
+					<view class="info">
+						<view class="name">
+							{{item.name}}
+						</view>
+						<view class="score-box">
+							<view class="score">
+								评分 <view class="num">
+									{{item.score}}
+								</view>
+							</view>
+							<view class="want-num" v-if="item.wish">
+								{{item.wish | filterNum}}人想看
+							</view>
+						</view>
+						<view class="actor">
+							{{item.description}}
+						</view>
+					<!-- 	<view class="play-movie-num">
+							今天 269家影院放映2507场
+						</view> -->
+					</view>
+					<button class="buy-btn" type="default" @click="buy(item.movieId)">购票</button>
+				</view>
+			</zs-list>
+	</view>
+</template>
+
+<script>
+	import {cinema_shows} from '@/api/movie.js'
+	export default {
+		data() {
+			return {
+				list:[],
+				query:{
+					cinemaId:0
+				}
+			}
+		},
+		methods: {
+			cinema_shows() {
+				this.status = 'loading'
+				cinema_shows(this.query).then(res=>{
+					this.status = 'noMore'
+					this.list = res.content.data.movieShows
+				})
+			},
+			buy(id){
+				uni.navigateTo({
+					url:`/movie/movieDetail?id=${id}&cinemaId=${this.query.cinemaId}`
+				})
+			},
+		},
+		onLoad(options) {
+			this.query.cinemaId = options.id
+			this.cinema_shows()
+		}
+	}
+</script>
+
+<style lang="scss" >
+	.movieList{
+	background: #F9F9F9;
+	.zs-list{
+			padding: 20rpx 24rpx;
+			.item{
+				background: #FFFFFF;
+				border-radius: 16rpx 16rpx 16rpx 16rpx;
+				padding: 24rpx;
+				display: flex;
+				margin-bottom: 20rpx;
+				position: relative;
+				.img-box{
+					position: relative;
+					.tag{
+						position: absolute;
+						top: 8rpx;
+						left: 12rpx;
+						background: rgba(0, 0, 0, .8);
+						padding: 6rpx 4rpx;
+						border-radius: 8rpx 8rpx 8rpx 8rpx;
+						font-size: 18rpx;
+						color: #FFFFFF;
+					}
+					.icon{
+						width: 160rpx;
+						height: 200rpx;
+						border-radius: 16rpx;
+						background: #F9F9F9;
+					}
+				}
+				.info{
+					font-size: 24rpx;
+					color: #AAAAAA;
+					display: flex;
+					flex-direction: column;
+					// justify-content: space-between;
+					margin-left: 20rpx;
+					.name{
+						font-weight: 600;
+						font-size: 28rpx;
+						color: #222222;
+						width: 400rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					.score-box{
+						display: flex;
+						margin-top: 20rpx;
+						.score{
+							
+							display: flex;
+							align-items: center;
+							.num{
+								font-size: 28rpx;
+								color: #FF4D3A;
+								padding: 0 12rpx;
+							}
+						}
+						.want-num{
+							padding: 0 12rpx;
+							border-left: 2rpx solid #F0F0F0;
+							align-self: flex-end;
+							// font-size: 24rpx;
+							// color: #AAAAAA;
+						}
+					}
+					.actor{
+						margin-top: 20rpx;
+						width: 350rpx;
+						line-height: 44rpx;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						/* 弹性伸缩盒子模型显示 */
+						display: -webkit-box;
+						/* 限制在一个块元素显示的文本的行数 */
+						-webkit-line-clamp: 2;
+						/* 设置或检索伸缩盒对象的子元素的排列方式 */
+						-webkit-box-orient: vertical;
+						// font-size: 24rpx;
+						// color: #AAAAAA;
+					}
+					.play-movie-num{
+						// font-size: 24rpx;
+						// color: #AAAAAA;
+					}
+				}
+				.buy-btn{
+					position: absolute;
+					top: 50%;
+					right: 24rpx;
+					transform: translateY(-50%);
+					width: 120rpx;
+					height: 52rpx;
+					line-height: 52rpx;
+					background: #EE4320;
+					border-radius: 26rpx;
+					font-size: 28rpx;
+					color: #FFFFFF;
+				}
+				.presell-btn{
+					position: absolute;
+					top: 50%;
+					right: 0;
+					transform: translateY(-50%);
+					width: 120rpx;
+					height: 52rpx;
+					line-height: 52rpx;
+					background: #3879F9;
+					border-radius: 26rpx;
+					font-size: 28rpx;
+					color: #FFFFFF;
+				}
+			}
+			
+		}
+	}
+</style>

+ 59 - 15
my/coupon/index.vue

@@ -1,9 +1,20 @@
 <template>
 	<view class="coupon">
+		<view class="tab-box">
+			<view class="tab" :class="[query.status == 1?'active':'']" @click="handleTab(1)">
+				待使用
+			</view>
+			<view class="tab" :class="[query.status == 2?'active':'']" @click="handleTab(2)">
+				已使用
+			</view>
+			<view class="tab" :class="[query.status == 3?'active':'']" @click="handleTab(3)">
+				已失效
+			</view>
+		</view>
 		<!-- 列表 -->
-		<zs-list class="store-box" mt="0" @load="loadMore" :status="status">
+		<zs-list class="store-box" mt="84rpx" @load="loadMore" :status="status">
 			
-			<view class="discounts-item" v-for="(item,index) in list" :key="index" >
+			<view class="discounts-item" :class="[query.status != 1?'disabled':'']" v-for="(item,index) in list" :key="index" >
 					<view class="type-box">
 						<view class="price">
 							{{item | filterPrice}}
@@ -24,9 +35,13 @@
 							{{item.usrDetail || '-'}}
 						</view>
 					</view>
-					<view class="btn" :class="[item.exist > 0?'used':'']" @click="claim(item.id,item.exist)">
-						{{item.exist > 0?'已领取':'领取'}}
+					
+					<view class="btn" v-if="query.status == 1">
+						待使用
 					</view>
+				   <image class="icon" v-else-if="query.status == 2" src="../../static/used-icon.png" mode=""></image>
+				   <image class="icon" v-else-if="query.status == 3" src="../../static/disable-icon.png" mode=""></image>
+					
 			</view>
 		</zs-list>
 		
@@ -35,17 +50,17 @@
 </template>
 
 <script>
-	import {getCouponList,claim} from '@/api/coupon.js'
+	import {couponByUser,claim} from '@/api/coupon.js'
 	export default {
 		data() {
 			return {
-				active: '',
+				active: 0,
 				open:999,
 				status:'more',
 				query:{
 					currentPage:1,
 					pageSize:10,
-					showType:1,
+					status:1,
 				},
 				list:[],
 				tabList:[]
@@ -84,6 +99,13 @@
 			},
 		},
 		methods: {
+			handleTab(val){
+				this.query.status = val
+				this.query.currentPage = 1
+				this.list = []
+				this.status = 'more'
+				this.getCouponList()
+			},
 			handleOpen(val,open){
 				if(val === this[open]){
 					this[open] = 999
@@ -96,7 +118,7 @@
 			},
 			getCouponList(){
 				this.status = 'loading'
-				getCouponList(this.query).then(res=>{
+				couponByUser(this.query).then(res=>{
 					if(res.state == 'Success'){
 						this.list = this.list.concat(res.content.records)
 						this.list.length>= res.content.total?this.status = 'noMore':this.status = 'more'
@@ -132,6 +154,26 @@
 	background: #f5f5f5;
 	height: 100vh;
 	padding: 20rpx 24rpx;
+	.tab-box{
+		display: flex;
+		align-items: center;
+		background: #fff;
+		position: fixed;
+		width: 100%;
+		top: 0%;
+		left: 0%;
+		.tab{
+			flex: 1;
+			text-align: center;
+			font-size: 28rpx;
+			color: #222222;
+			line-height: 84rpx;
+		}
+		.tab.active{
+			font-weight: 600;
+			font-size: 32rpx;
+		}
+	}
 	.discounts-item {
 		margin-bottom: 20rpx;
 			display: flex;
@@ -179,17 +221,19 @@
 					line-height: 48rpx;
 					text-align: center;
 					font-size: 24rpx;
-					background: #EE4320;
-					border-radius: 24rpx;
-					color: #FFF;
+					color: #FF4D3A;
 					box-sizing: border-box;
 				}
-				.btn.used{
-					border: 2rpx solid #EE421F;
-					color: #EE421F;
-					background: none;
+				
+				.icon{
+					width: 100rpx;
+					height: 100rpx;
 				}
 	}
+	
+	.discounts-item.disabled{
+		filter: grayscale(1);
+	}
 
 }
 </style>

+ 20 - 5
my/edit/edit.vue

@@ -1,12 +1,15 @@
 <template>
 	<view class="edit">
-		<view class="head-box">
+	<!-- 	<view class="head-box">
 			<image @click="chooseHead" class="head" :src="headImg||defaultImg" mode=""></image>
 			<image class="icon" src="../../static/take_photo.png" mode=""></image>
-		</view>
-		<view class="">
-			<u-cell size="large" title="修改昵称" :isLink="true" url="/my/edit/editName"></u-cell>
-			<!-- <u-cell size="large" title="关于" :isLink="true"></u-cell> -->
+		</view> -->
+		<view class="content">
+			<u-cell size="large" title="头像" :border="false" isLink>
+				<image @click="chooseHead" slot="value" class="head" :src="headImg||defaultImg" mode=""></image>
+			</u-cell>
+			<u-cell size="large" title="修改昵称" :border="false" :isLink="true" url="/my/edit/editName"></u-cell>
+			<u-cell size="large" title="退订移动套餐" :border="false" :isLink="true" url="/my/edit/unSubscribe"></u-cell>
 		</view>
 		<button class="login-out" @click="loginOut">退出当前账号</button>
 	</view>
@@ -129,6 +132,18 @@
 
 <style lang="scss" scoped>
 	.edit {
+		padding: 20rpx 24rpx ;
+		background: #F9F9F9;
+		min-height: 100vh;
+		.content{
+			background: #fff;
+			border-radius: 12rpx 12rpx 12rpx 12rpx;
+		}
+		.head{
+			width: 60rpx;
+			height: 60rpx;
+			border-radius: 50%;
+		}
 		.head-box {
 			margin: 80rpx auto 50rpx;
 			width: 150rpx;

+ 52 - 0
my/edit/unSubscribe.vue

@@ -0,0 +1,52 @@
+<template>
+	<view class="unSubscribe">
+		<view class="content">
+			<view class="title">
+				如需取消移动套餐代扣服务,请通过短信发送0000到
+				10086
+			</view>
+			
+			<button class="close" @click="close">关闭</button>
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		methods: {
+			close() {
+				uni.navigateBack()
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+.unSubscribe{
+	padding: 20rpx 24rpx;
+	min-height: 100vh;
+	background: #F9F9F9;
+	.content{
+		background: #FFFFFF;
+		border-radius: 12rpx 12rpx 12rpx 12rpx;
+		padding: 36rpx 24rpx;
+		.title{
+			font-size: 28rpx;
+			color: #181818;
+			line-height: 40rpx;
+		}
+		.close{
+			width: 340rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			background: #DDDDDD;
+			border-radius: 46rpx 46rpx 46rpx 46rpx;
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #FFFFFF;
+			margin-top: 80rpx;
+		}
+	}
+}
+</style>

+ 216 - 151
my/memberCenter/index.vue

@@ -1,55 +1,73 @@
 <template>
 	<view class="memberCenter">
 		<zs-header title="会员中心" :background="background"></zs-header>
-		<view class="top-box target">
+		<view class="top-box target" :style="{backgroundImage:`url(${list[current].backImg})`}">
 			<view class="user-info">
 				<image class="image" :src="userInfo.imgPath || defaultImg" lazy-load mode=""></image>
 				<view class="info">
-					<view class="user-name">{{userInfo.nickname ||'用户'}}</view>
-					<view class="tel">{{userInfo.phoneNum ||'您当前未开通会员'}}</view>
+					<view class="user-name" :style="{color:`${list[current].backColour}`}">{{userInfo.nickname ||'用户'}}</view>
+					<view class="tel">{{currentLevelName ||'您当前未开通会员'}}</view>
 				</view>
 
 			</view>
 
-			<swiper @change="changeSwiper" :current="current" class="swiper" previous-margin="70rpx"
-				next-margin="40rpx">
-				<swiper-item class="swiper-item" v-for="(item,index) in list" :key="item">
-					<view class="content" :class="[current == index?'active':'']">
-						<view :style="{background:item.color}" v-if="userInfo.setMealId == index" class="tag">
-							当前等级
+			<view class="swiper-box">
+					<image v-if="current!=0" class="click left" src="../../static/member/click.gif" mode=""></image>
+					<image v-if="current!=list.length-1" class="click" src="../../static/member/click.gif" mode=""></image>
+				<swiper @change="changeSwiper" :current="current" class="swiper" 
+					>
+					<swiper-item class="swiper-item" v-for="(item,index) in list" :key="item.setMealCode">
+						<view class="content">
+							<view :style="{background:item.backColour,color:item.colour}" v-if="userInfo.setMealCode == item.setMealCode" class="tag">
+								当前等级
+							</view>
+							<image class="icon" :src="item.imgUrl" mode=""></image>
+							<!-- <view class="price" :style="{color:item.color}">
+								{{`开通会员${item.price}/月`}}
+							</view>
+							<view class="notice" :style="{color:item.color}">
+								开通会员预计节省 <text class="num">¥99元</text>
+							</view> -->
 						</view>
-						<image class="icon" :src="item.url" mode=""></image>
-						<view class="price" :style="{color:item.color}">
-							{{`开通会员${item.price}/月`}}
-						</view>
-						<view class="notice" :style="{color:item.color}">
-							开通会员预计节省 <text class="num">¥99元</text>
-						</view>
-					</view>
-				</swiper-item>
-			</swiper>
+					</swiper-item>
+				</swiper>
+			</view>
 
 		</view>
 
 
-		<view class="title-box">
-			<view class="title">
-				餐饮
-			</view>
-			<view class="desc">
-				享受多达24种餐饮权益
+		<view v-if="list1.length">
+			<view class="title-box">
+				<view class="title">
+					基础权益
+				</view>
 			</view>
-		</view>
 
-		<u-grid :border="false" col="3">
-			<u-grid-item v-for="(item,listIndex) in list1" :key="listIndex">
-				<image class="icon" :src="item.icon" mode=""></image>
-				<text class="title">{{item.title}}</text>
-				<text class="desc">{{item.desc}}</text>
-			</u-grid-item>
-		</u-grid>
+			<u-grid :border="false" col="3">
+				<u-grid-item v-for="(item,d) in list1" :key="d">
+					<image class="icon" :src="item.equityImg" mode=""></image>
+					<text class="title">{{item.equityName}}</text>
+					<text class="desc">{{item.equityDetail}}</text>
+				</u-grid-item>
+			</u-grid>
+		</view>
 		
+		<view v-if="list2.length">
+			<view class="title-box">
+				<view class="title">
+					专属权益
+				</view>
+			</view>
 		
+			<u-grid :border="false" col="3">
+				<u-grid-item v-for="(item,d) in list2" :key="d">
+					<image class="icon" :src="item.equityImg" mode=""></image>
+					<text class="title">{{item.equityName}}</text>
+					<text class="desc">{{item.equityDetail}}</text>
+				</u-grid-item>
+			</u-grid>
+		</view>
+		<!-- 
 		<view class="title-box">
 			<view class="title">
 				娱乐
@@ -65,7 +83,7 @@
 				<text class="title">{{item.title}}</text>
 				<text class="desc">{{item.desc}}</text>
 			</u-grid-item>
-		</u-grid>
+		</u-grid> -->
 
 
 
@@ -81,19 +99,24 @@
 					</view>
 				</view>
 			</view>
-			<view class="btn">
+			<button class="btn" :loading="btnLoading" @click="goOrder">
 				立即开通
-			</view>
+			</button>
 		</view>
+		
+		
+		<web-view v-if="H5url" :src="H5url"></web-view>
 
 	</view>
 </template>
 
 <script>
+	import {mealList,equityList,getH5url} from '@/api/combo.js'
 	export default {
 		data() {
 			return {
-				current: 0,
+				current: 0,//轮播套餐index
+				currentMeal: 0,//套餐id
 				background: false,
 				defaultImg: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fci.xiaohongshu.com%2Fc34b7b74-ba38-0456-982a-43c0f97522fe%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fci.xiaohongshu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1693532127&t=a2e186c12aecaab7723611cb52a6778f',
 				userInfo: {
@@ -108,72 +131,88 @@
 					sex: 1,
 					userId: "",
 				},
-				list: [
-					
-					{
-						url: 'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/VXjgNzREXaLm34375320879043fd01ef78548b828ff5.png/1.png',
-						price: 10,
-						color: '#8B97BC'
-					},
-					{
-						url: 'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/lDVkXHSqADn3e2d4da72a4807077a435dcf58d1e3d9d.png/1.png',
-						price: 10,
-						color: '#3E5C91'
-					},
-					{
-						url: 'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/DPFfUdNJ8gON5dded7da8e6b8447b2d3d6baaf07dc6d.png/1.png',
-						price: 20,
-						color: '#FF532A'
-					},
-					{
-						url: 'http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/fbBsRJWDEGuB567f38e56cd936f4420701c00e7df8c4.png/1.png',
-						price: 30,
-						color: '#5488FF'
-					}
-				],
-				list1:[
-					{
-						icon:"http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/QrH1JQHzmpa33b795d99f971897d53e94cea47ba18df.png/1.png",
-						title:"7-Eleven",
-						desc:"免费领取大额券",
-					},
-					{
-						icon:"http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/zWIsNbwQcmQge4240fa235d866f75bbc322e1ef7756f.png/1.png",
-						title:"麦当劳",
-						desc:"免费领取5.5折优惠券",
-					},
-					{
-						icon:"http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/MjZqLNBMHNtEfe0a7f6ac7120012b62b33138bab2e10.png/1.png",
-						title:"星巴克",
-						desc:"免费领取5.5折优惠券",
-					},
-					{
-						icon:"http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/VZhjgXDiHKQgd2766fddc816dad7c6b9ac8021026b75.png/1.png",
-						title:"瑞幸咖啡",
-						desc:"免费领取5.5折优惠券",
-					},
-					{
-						icon:"http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/QyMgjyjtcgW24aa6472ddcd269575c14f9eae02bd884.png/1.png",
-						title:"海底捞",
-						desc:"一元秒杀无限购",
-					},
-					{
-						icon:"http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/7sZ1eKfRy10d2a01d9d6f15945535f8319a3a4fe28ea.png/1.png",
-						title:"KFC",
-						desc:"免费领取5.5折优惠券",
-					},
-					{
-						icon:"http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/niFQ6Pcda58Sa6a4ace3d302fdd2eae6b3e4beef70a1.png/1.png",
-						title:"汉堡王",
-						desc:"免费领取5.5折优惠券",
-					}
-				]
+				list: [],
+				list1:[],
+				list2:[],
+				query:{
+					"channelCode": "",
+				    "channelType": "",
+				    "discount": 5,
+				    "extension": "",
+				    "phone": "",
+				    "saleModalId": ""
+				},
+				H5url:'',
+				btnLoading:false,
+			}
+		},
+		computed: {
+			currentLevelName() {
+				let list = this.list.filter(item=>{ 
+						if(item.setMealCode == this.userInfo.setMealCode){
+							return item
+						}
+					})
+				if(list.length){
+					return list[0].setMealName
+				}else{
+					return ''
+				}
 			}
 		},
 		methods: {
+			goOrder(){
+				if(this.btnLoading) return
+				this.query.saleModalId = this.list[this.current].setMealCode
+				// this.H5url = 'http://iot-pay-server.dev.zonelife.cn/app-h5/task/dist/index.html#/localLife/orderResult?businessName=%E7%A0%94%E5%AD%A620%E5%85%83%E5%8C%85&lifeId=fcbfbb7ea3ada89ad160da82dc9c75e6'
+				this.getH5url()
+			},
 			changeSwiper(val) {
 				this.current = val.target.current
+				this.currentMeal = this.list[val.target.current].setMealCode
+				this.equityList(this.currentMeal,1)
+				this.equityList(this.currentMeal,2)
+				
+			},
+			mealList(){
+				return new Promise((resolve,reject)=>{
+					mealList({currentPage:1,pageSize:99,status:1}).then(res=>{
+						if (res.state == 'Success') {
+							this.list = res.content.records
+							this.currentMeal = this.list[0].id
+							
+							resolve(this.currentMeal)
+						}
+					})
+				})
+			},
+			equityList(setMealCode,equityType){
+				return new Promise((resolve,reject)=>{
+					equityList({currentPage:1,pageSize:99,setMealCode,equityType,status:1,showType:1}).then(res=>{
+						if (res.state == 'Success') {
+							this['list'+equityType] = res.content.records
+							resolve(setMealCode)
+						}
+					})
+				})
+			},
+			getData(){
+				this.mealList().then(id=>{
+					return this.equityList(id,1)
+				}).then(id1=>{
+					this.equityList(id1,2)
+				})
+			},
+			getH5url(){
+				this.btnLoading = true
+				getH5url(this.query).then(res=>{
+					this.btnLoading = false
+					if (res.state == 'Success') {
+						this.H5url = res.content
+					}
+				})
 			}
+			
 		},
 		onPageScroll(e) {
 				if (e.scrollTop >= 50) {
@@ -185,8 +224,13 @@
 		created() {
 			if(uni.getStorageSync('userInfo')) {
 				this.userInfo = JSON.parse(uni.getStorageSync('userInfo'))
+				this.query.phone = this.userInfo.phoneNum
 			}
-			this.current = this.userInfo.setMealId 
+			// this.current = this.userInfo.setMealId 
+			this.getData()
+		},
+		onLoad(options) {
+			console.log('onload',options);
 		}
 	}
 </script>
@@ -196,69 +240,84 @@
 		min-height: 100vh;
 		background: #FFF;
 		padding-bottom: 180rpx;
-		.swiper {
-			width: 750rpx !important;
-			height: 272rpx !important;
+		.swiper-box{
 			position: relative;
-			left: -30rpx;
-			top: 20rpx;
-		}
-
-		.swiper-item {
-			width: 600rpx !important;
-			height: 272rpx !important;
-			position: relative;
-
-			.active {
-				transform: scale(1) !important;
+			.click{
+				position: absolute;
+				top: calc(50% - 25rpx) ;
+				right: 0;
+				width: 100rpx;
+				height: 100rpx;
+				z-index: 999;
+			}
+			.click.left{
+				left: 0;
+				transform: rotateY(180deg);
+			}
+			.swiper {
+				width: 750rpx !important;
+				height: 272rpx !important;
+				position: relative;
+				left: -30rpx;
+				top: 20rpx;
 			}
 
-			.content {
-				transform: scale(.9);
-				transition: transform .3s;
-				transform-origin: center center;
-
-				.icon {
-					width: 600rpx;
-					height: 272rpx;
-					border-radius: 16rpx;
+			.swiper-item {
+				width: 640rpx !important;
+				height: 272rpx !important;
+				position: relative;
+				padding: 0 55rpx;
+				.active {
+					// transform: scale(1) !important;
 				}
 
+				.content {
+					// transform: scale(.9);
+					// transition: transform .3s;
+					// transform-origin: center center;
 
-				.tag {
-					width: 104rpx;
-					height: 34rpx;
-					line-height: 34rpx;
-					text-align: center;
-					font-size: 22rpx;
-					color: #fff;
-					border-radius: 16rpx 0rpx 16rpx 0rpx;
-					position: absolute;
-					top: 0%;
-					left: 0;
-					z-index: 2;
-				}
+					.icon {
+						width: 640rpx;
+						height: 272rpx;
+						border-radius: 16rpx;
+					}
 
-				.price {
-					font-size: 24rpx;
-					position: absolute;
-					left: 40rpx;
-					top: 140rpx;
-				}
 
-				.notice {
-					font-size: 24rpx;
-					position: absolute;
-					left: 40rpx;
-					bottom: 40rpx;
+					.tag {
+						width: 104rpx;
+						height: 34rpx;
+						line-height: 34rpx;
+						text-align: center;
+						font-size: 22rpx;
+						color: #fff;
+						border-radius: 16rpx 0rpx 16rpx 0rpx;
+						position: absolute;
+						top: 0%;
+						left: 55rpx;
+						z-index: 2;
+					}
 
-					.num {
-						font-weight: bold;
-						font-size: 36rpx;
+					.price {
+						font-size: 24rpx;
+						position: absolute;
+						left: 95rpx;
+						top: 140rpx;
+					}
+
+					.notice {
+						font-size: 24rpx;
+						position: absolute;
+						left: 95rpx;
+						bottom: 40rpx;
+
+						.num {
+							font-weight: bold;
+							font-size: 36rpx;
+						}
 					}
 				}
-			}
 
+			}
 		}
 
 
@@ -267,9 +326,9 @@
 			height: 600rpx;
 			padding: 150rpx 30rpx 0;
 			box-sizing: border-box;
-			background: linear-gradient(180deg, #C0F3FE 0%, #F8F3FF 47%, #C3DEFF 80%, #FFFFFF 100%);
 			position: relative;
-
+			background-size: 100% 495rpx;
+			background-repeat: no-repeat;
 			.user-info {
 				display: flex;
 				align-items: center;
@@ -332,13 +391,18 @@
 				border-radius: 50%;
 			}
 			.title{
+				width: 200rpx;
 				font-size: 28rpx;
 				color: #222222;
 				margin-top: 10rpx;
+				text-align: center;
+				font-weight: bold;
 			}
 			.desc{
+				width: 150rpx;
 				color: #AAAAAA;
 				font-size: 20rpx;
+				text-align: center;
 			}
 		}
 
@@ -383,6 +447,7 @@
 				width: 340rpx;
 				height: 80rpx;
 				line-height: 80rpx;
+				margin: 0;
 				text-align: center;
 				background: #FF4C3A;
 				color: #fff;

+ 110 - 46
my/order/detail.vue

@@ -7,7 +7,7 @@
 						等待支付,剩余<u-count-down :time="closeTime" format="mm:ss" @finish="finish"></u-count-down>
 					</view>
 					<view class="status" v-else>
-						{{info.goodsList[0].goodsState | filterType}}
+						{{info.goodsList[0] |filterType }}
 					</view>
 				</view>
 			</view>
@@ -83,17 +83,18 @@
 			</view>
 			
 			<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">
 						券码信息
 					</view>
-					<view class="codeNum">
-						
-					</view>
-				</view>
-				<view class="code-btn"  @click="checkCode">
+				<!-- <view class="code-btn"  @click="checkCode">
 					查看券码 <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
-				</view>
+				</view> -->
+					
+					<uqrcode class="qrcode" ref="uqrcode" type="2d" auto canvas-id="qrcode" :value="codeData" :loading="loading" :options="{ margin: 20 }">
+						 <template v-slot:loading>
+							<text style="color: black;">拼命加载中...</text>
+						  </template>
+					</uqrcode>
 			</view>
 			<!-- <view class="content" v-if="info.goodsList[0].goodsState == 'USED'">
 				<view class="title">
@@ -132,14 +133,14 @@
 					</view>
 				</view>
 				
-				<!-- <view class="item">
+				<view class="item" v-if="info.goodsList[0].goodsState == 'WAIT_USE'">
 					<view class="label">
 						付款方式
 					</view>
 					<view class="value">
-						{{info.payment?(info.payment.paymentWay | filterPay):'-'}}
+						{{info.payment | filterPay}}
 					</view>
-				</view> -->
+				</view>
 				<view class="item">
 					<view class="label">
 						下单时间
@@ -243,8 +244,8 @@
 				</view>
 			</view>
 			
-			<template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
-				<view class="content refund-box">
+			<template>
+				<view class="content refund-box" v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'||(info.goodsList[0].refundLog&&info.goodsList[0].refundLog.remark)">
 					<view class="title">
 						退款原因
 					</view>
@@ -253,7 +254,7 @@
 						{{info.goodsList[0].refundLog.remark}}
 					</view>
 				</view>
-				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
+				<button type="default" :loading="btnLoading" v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'" class="pay-btn" @click="cancelReply" >取消退款</button>
 			</template>
 			
 			
@@ -277,7 +278,7 @@
 				</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="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&info.goodsList[0].refundLog.refund != 'REFUSAL_REFUND'&&isRefund()&&info.goodsList[0].jobFlowMap !== 'XiaoJu'" @click="apply">
 				<view class="label">
 					退款申请
 				</view>
@@ -287,6 +288,16 @@
 				<image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
 			</view>
 			
+				<view class="content apply-box" v-if="info.goodsList[0].refundLog&&info.goodsList[0].refundLog.refund == 'REFUSAL_REFUND'">
+					<view class="title">
+						已拒绝
+					</view>
+					<view class="value">
+						拒绝理由:{{info.goodsList[0].refundLog.conclusion}}
+					</view>
+				</view>
+				<button type="default" :loading="btnLoading1" v-if="info.goodsList[0].refundLog&&info.goodsList[0].refundLog.refund == 'REFUSAL_REFUND'&&!info.goodsList[0].refundLog.platInter" class="pay-btn" @click="refundIntervene" >申请介入处理</button>
+			
 			
 			
 			<!-- 二维码 -->
@@ -305,7 +316,7 @@
 
 <script>
 	import {qrCode} from '@/api/order.js'
-	import {payDetails,queryPayOrder,unRefund} from '@/api/payment.js';
+	import {payDetails,queryPayOrder,unRefund,refundIntervene} from '@/api/payment.js';
 	import {cancelOrder} from '@/api/refuel.js'
 	export default {
 		data() {
@@ -316,9 +327,10 @@
 				loading:false,
 				pageLoading:true,
 				btnLoading:false,
+				btnLoading1:false,
 				oldBright:0,
 				info:{
-					goodsList:[{goodsState:'CLOSE'}]
+					// goodsList:[{goodsState:'CLOSE'}]
 				},
 				isNotTime:false
 			}
@@ -332,30 +344,40 @@
 		},
 		filters: {
 			filterType: function(val) {
-				if(val == 'APPLY_REFUND'){
+				if(val.refundLog&&val.refundLog.refund == 'REFUSAL_REFUND'&&!val.change){
+					return '拒绝退款'
+				}
+				else if(val.goodsState == 'APPLY_REFUND'){
 					return '退款审核中'
-				}else if(val == 'CLOSE'){
+				}else if(val.goodsState == 'CLOSE'){
 					return '关闭订单'
-				}else if(val == 'REFUNDED'){
+				}else if(val.goodsState == 'REFUNDED'){
 					return '已退款'
-				}else if(val == 'REFUSAL_REFUND'){
+				}else if(val.goodsState == 'REFUSAL_REFUND'){
 					return '拒绝退款'
-				}else if(val == 'USED'){
+				}else if(val.goodsState == 'APPLY_REFUNDING'){
+					return '退款中'
+				}else if(val.goodsState == 'USED'){
 					return '订单已完成'
-				}else if(val == 'WAIT_PAYMENT'){
+				}else if(val.goodsState == 'WAIT_PAYMENT'){
 					return '待付款'
-				}else if(val == 'WAIT_USE'){
+				}else if(val.goodsState == 'WAIT_USE'){
 					return '待使用'
+				}else{
+					return ''
 				}
 			},
 			filterPay(val){
-				if(val == 'wx.unifiedOrder'){
-					return '微信支付'
-				}else if(val == 'trade.create'){
-					return '支付宝支付'
-				}else if(val == 'uac.miniOrder'){
-					return '云闪付支付'
-				}else{
+				if(val){
+					if(val.paymentWay == 'wx.unifiedOrder'){
+						return '微信支付'
+					}else if(val.paymentWay == 'trade.create'){
+						return '支付宝支付'
+					}else if(val.paymentWay == 'uac.miniOrder'){
+						return '云闪付支付'
+					}
+				}
+				else{
 					return '-'
 				}
 			}
@@ -381,6 +403,28 @@
 			}
 		},
 		methods: {
+			// 申请客服介入
+			refundIntervene(){
+				let that = this
+				uni.showModal({
+					title: '提示',
+					content: '确认申请客服介入吗?',
+					success: function (res) {
+						if (res.confirm) {
+							that.btnLoading1 = true
+							refundIntervene(that.info.goodsList[0].id).then(res=>{
+								that.btnLoading1 = false
+								if(res.state == 'Success'){
+									that.payDetails(that.info.orderNo)
+								}
+							})
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
+				
+			},
 			isRefund(){
 				if(!this.info.goodsList[0].verifyModel){//没核销
 					return true
@@ -417,12 +461,14 @@
 					// 		},200)
 					// 	}
 					// })
+				
 					qrCode(this.info.goodsList[0].id).then(res=>{
 						this.loading = false
 						if(res.state == 'Success'){
 							this.codeData = res.content
 						}
 					})
+					
 				})
 			},
 			close(){
@@ -460,6 +506,18 @@
 					if(this.info.goodsList[0].jobFlowMap == 'P802'){
 						this.isVisual = true
 					}
+					if(!this.info.goodsList[0].refundLog){
+						this.info.goodsList[0].refundLog = {}
+					}
+					if(this.info.goodsList[0].jobFlowMap != 'P802'&&this.info.goodsList[0].goodsState == 'WAIT_USE'&&this.info.goodsList[0].goodsName!='二维码支付'){
+					
+						qrCode(this.info.goodsList[0].id).then(res=>{
+							this.loading = false
+							if(res.state == 'Success'){
+								this.codeData = res.content
+							}
+						})
+					}
 					// try{
 					// 	let extend = JSON.parse(this.info.goodsList[0].extend)
 					// 	if(extend.account){
@@ -661,21 +719,26 @@
 	}
 	
 	.code-box{
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		.left{
-			.title{
-				font-weight: 500;
-				font-size: 28rpx;
-				color: #222222;
-			}
-			.codeNum{
-				font-weight: 300;
-				font-size: 24rpx;
-				color: #AAAAAA;
-				margin-top: 15rpx;
-			}
+	
+		// .left{
+		// 	.title{
+		// 		font-weight: 500;
+		// 		font-size: 28rpx;
+		// 		color: #222222;
+		// 	}
+		// 	.codeNum{
+		// 		font-weight: 300;
+		// 		font-size: 24rpx;
+		// 		color: #AAAAAA;
+		// 		margin-top: 15rpx;
+		// 	}
+		// }
+	
+		.qrcode{
+			display: flex;
+			align-items: center;
+			justify-content: center;
+			margin-top: 20rpx;
 		}
 		.code-btn{
 			display: flex;
@@ -843,6 +906,7 @@
 					justify-content: space-between;
 					.price{
 						color: #181818;
+						color: $uni-color-primary;
 						font-size: 32rpx;
 						font-weight: bold;
 					}

+ 129 - 62
my/order/hotel/detail.vue

@@ -3,16 +3,20 @@
 		<zs-skeleton type="orderDetail" :loading="pageLoading"></zs-skeleton>
 			<view class="status-box">
 				<view class="text-box">
-					<view class="status" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'&&!isNotTime">
+					<view class="status" v-if="JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus=='待付款'&&!isNotTime">
 						等待支付,剩余<u-count-down :time="closeTime" format="mm:ss" @finish="finish"></u-count-down>
 					</view>
 					<view class="status" v-else>
-						{{info.goodsList[0].goodsState | filterType}}
+						{{JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus}}
 					</view>
+					<!-- <view class="notice" v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
+						订单已取消。正在为您操作退款,预计1~7个工作日原路退回到
+						您的帐户。
+					</view> -->
 				</view>
 			</view>
 			
-			<view class="content progress"  v-if="info.goodsList[0].goodsState == 'APPLY_REFUND' || info.goodsList[0].goodsState == 'REFUNDED'"  @click="refundDetail">
+		<!-- 	<view class="content progress"  v-if="info.goodsList[0].goodsState == 'APPLY_REFUND' || info.goodsList[0].goodsState == 'REFUNDED'"  @click="refundDetail">
 				<view class="progress-title">
 					退款进度
 				</view>
@@ -20,7 +24,7 @@
 				<view class="progress-desc">
 					查看退款详情
 				</view>
-			</view>
+			</view> -->
 			
 			
 			<view class="content pay-box" >
@@ -54,7 +58,7 @@
 					</view>
 				</view>
 				
-				<view class="notice">
+				<view class="notice" v-if="JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus!='待付款'">
 					{{info.goodsList[0].goodsInfo.hotelInfo.cancelRule}}
 				</view>
 			</view>
@@ -65,7 +69,7 @@
 					{{info.shopInfo.chineseName}}
 				</view>
 				<view class="notice">
-					{{info.goodsList[0].goodsInfo.numberofRooms}}间房 每间房1成人 0儿童
+					{{info.shopInfo.address}}
 				</view>
 				
 				<view class="tab-box">
@@ -88,7 +92,7 @@
 					<view class="start-box" @click="show = true">
 						<view class="time-box">
 							<view class="time">
-								{{info.goodsList[0].goodsInfo.checkin}}
+								{{info.goodsList[0].goodsInfo.checkin.substr(5)}}
 							</view>
 							<view class="date">
 								({{info.goodsList[0].goodsInfo.checkin | filterDate('day')}})
@@ -98,20 +102,20 @@
 							</view>
 						</view>
 						<view class="label">
-							{{info.shopInfo.policy.checkInTime.split(':')[1]}}
+							{{info.shopInfo.policy.checkInTime}}
 						</view>
 					</view>
 					<view class="end-box" @click="show = true">
 						<view class="time-box">
 							<view class="time">
-								{{info.goodsList[0].goodsInfo.checkout}}
+								{{info.goodsList[0].goodsInfo.checkout.substr(5)}}
 							</view>
 							<view class="date">
 								({{info.goodsList[0].goodsInfo.checkout | filterDate('day')}})
 							</view>
 						</view>
 						<view class="label">
-							{{info.shopInfo.policy.checkOutTime.split(':')[1]}}
+							{{info.shopInfo.policy.checkOutTime}}
 						</view>
 					</view>
 				</view>
@@ -119,7 +123,7 @@
 				<view class="room-box">
 					<view class="name-box">
 						<view class="name">
-							{{info.goodsList[0].goodsInfo.goodsName}}
+							{{info.goodsList[0].goodsInfo.goodsName}}   {{info.goodsList[0].goodsInfo.numberofRooms}}间{{(new Date(info.goodsList[0].goodsInfo.checkout).getTime()-new Date(info.goodsList[0].goodsInfo.checkin).getTime())/(1000*60*60*24)}}晚 
 						</view>
 						<view class="room-btn-box" @click="handleRoom">
 							查看房型
@@ -127,7 +131,7 @@
 						</view>
 					</view>
 					<view class="notice">
-						大床·早餐·不可取消·可2人入住
+						{{info.goodsList[0].goodsInfo.hotelInfo.bedType}}·{{info.goodsList[0].goodsInfo.hotelInfo.breakfastDesc}}·{{info.goodsList[0].goodsInfo.ratePlan.data.cancel.name}}·可2人入住
 					</view>
 				</view>
 				
@@ -144,7 +148,7 @@
 						联系手机
 					</view>
 					<view class="value">
-						{{info.goodsList[0].goodsInfo.contactPhone}}
+						{{info.goodsList[0].goodsInfo.contactPhone |filterStr('tel')}}
 					</view>
 				</view>
 				<!-- <view class="item">
@@ -171,7 +175,14 @@
 						{{info.orderNo}}
 					</view>
 				</view>
-				
+				<view class="item" v-if="JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus!='待付款'&&JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus!='已取消'">
+					<view class="label">
+						付款方式
+					</view>
+					<view class="value">
+						{{info.payment | filterPay}}
+					</view>
+				</view>
 
 				<view class="item">
 					<view class="label">
@@ -182,7 +193,7 @@
 					</view>
 				</view>
 				
-				<view class="item" v-if="info.goodsList[0].goodsState != 'WAIT_PAYMENT' && info.goodsList[0].goodsState != 'CLOSE'">
+				<view class="item" v-if="JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus!='待付款'&&JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus!='已取消'">
 					<view class="label">
 						支付时间
 					</view>
@@ -192,11 +203,20 @@
 				</view>
 			</view>
 			
+			<view class="content">
+				<view class="title">
+					发票信息
+				</view>
+				<view class="item">
+					<view class="notice">
+						需要发票可以 联系 400-797-5000 客服开票
+					</view>
+				</view>
+			</view>
 			
 			
 			
-			
-			<template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
+		<!-- 	<template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
 				<view class="content refund-box">
 					<view class="title">
 						退款原因
@@ -207,18 +227,33 @@
 					</view>
 				</view>
 				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
-			</template>
+			</template> -->
 			
-			<view class="btn-box" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'">
-				<button class="cancel-btn" @click="cancel" :loading="btnLoading">
+			<view class="btn-box" v-if="JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus == '待付款'">
+				<!-- <button class="cancel-btn" @click="cancel" :loading="btnLoading">
 					取消订单
-				</button>
-				<button class="btn" @click="pay" :loading="btnLoading">
+				</button> -->
+				<button class="book-btn" @click="pay" :loading="btnLoading">
 					立即支付
 				</button>
 			</view>
 			
-			<!-- <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-else-if="JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus == '待确认'||JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus == '已确认'||JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus == '已完成'||JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus == '酒店确认中'">
+				<button class="cancel-btn" @click="cancel(1)" :loading="btnLoading">
+					取消订单
+				</button>
+				<button class="btn" @click="handleRoom">
+					再次预定 
+				</button>
+			</view>
+			
+			<view class="btn-box" v-else-if="JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus == '已取消'">
+				<button class="book-btn" @click="handleRoom">
+					再次预定 
+				</button>
+			</view>
+			
+			<!-- <view class="content apply-box" v-if="(JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus == '已确认'||JSON.parse(info.goodsList[0].extend).orderInfo.orderStatus == '已完成')&&isRefund()" @click="apply">
 				<view class="label">
 					退款申请
 				</view>
@@ -277,11 +312,11 @@
 				}
 			},
 			filterPay(val){
-				if(val == 'wx.unifiedOrder'){
+				if(val.paymentWay == 'wx.unifiedOrder'){
 					return '微信支付'
-				}else if(val == 'trade.create'){
+				}else if(val.paymentWay == 'trade.create'){
 					return '支付宝支付'
-				}else if(val == 'uac.miniOrder'){
+				}else if(val.paymentWay == 'uac.miniOrder'){
 					return '云闪付支付'
 				}else{
 					return '-'
@@ -310,29 +345,26 @@
 					return `周${arr[num]}`
 				}
 			},
+			filterStr(val,type){
+				let len = val.length
+				if(type == 'tel'){
+					return val.substring(0,3)+'****'+val.substring(len-4)
+				}else{
+					return val.substring(0,10)+'****'+val.substring(len-4)
+				}
+			}
 		},
 		computed: {
 			closeTime() {
 				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') 
+						return this.info.payment.paymentTime
+						// return uni.$u.timeFormat(this.info.payment.paymentTime,'yyyy-mm-dd hh:MM:ss') 
 					}else{
-						console.log(4);
 						return '-'
 					}
-				}
 			}
 		},
 		methods: {
@@ -359,9 +391,10 @@
 						});
 			},
 			handleCall() {
-				if(this.info.tel){
+				if(this.info.shopInfo.tel){
+					let phoneNumber =  this.info.shopInfo.tel.split('/')[0]
 					uni.makePhoneCall({
-						phoneNumber: this.info.shopInfo.tel //仅为示例
+						phoneNumber //仅为示例
 					});
 				}else{
 					uni.showToast({
@@ -388,11 +421,6 @@
 					url:`/my/order/refundDetail?id=${this.info.orderNo}`
 				})
 			},
-			handleCall(){
-				uni.makePhoneCall({
-					phoneNumber: '4000016553'//仅为示例
-				});
-			},
 			apply(){
 				let that = this
 				uni.navigateTo({
@@ -412,23 +440,44 @@
 				})
 			},
 			// 取消支付
-			cancel(){
-				uni.showLoading({
-					title: '取消中'
-				})
+			cancel(type){
 				let obj = {
 					orderId:this.info.orderNo,
 					remark:'退款',
 				}
-				cancelOrder(obj).then(res=>{
-					if(res.state == 'Success'){
-						uni.showToast({
-							title: '取消成功',
-							icon: 'success'
-						})
-						this.payDetails(this.info.orderNo)
-					}
-				})
+				if(type == 1){
+					uni.showModal({
+						title:'确认要取消该订单吗?',
+						confirmText:'确认',
+						success(res){
+							console.log(res);
+							if(res.confirm){
+								uni.showLoading({
+									title: '取消中'
+								})
+								cancelOrder(obj).then(res1=>{
+									if(res1.state == 'Success'){
+										uni.showToast({
+											title: res1.content,
+											icon: 'success'
+										})
+										this.payDetails(this.info.orderNo)
+									}
+								})
+							}
+						}
+					})
+				}else{
+					cancelOrder(obj).then(res=>{
+						if(res.state == 'Success'){
+							uni.showToast({
+								title: '取消成功',
+								icon: 'success'
+							})
+							this.payDetails(this.info.orderNo)
+						}
+					})
+				}
 			},
 			// 支付
 			pay(){
@@ -511,7 +560,7 @@
 			
 		},
 		onLoad(options) {
-			this.info.orderNo = options.id
+			this.info.orderNo =  options.id
 		},
 		onShow() {
 			this.pageLoading = true
@@ -674,6 +723,7 @@
 				align-items: center;
 				position: relative;
 				.start-box,.end-box{
+					flex: 1;
 					padding-right: 24rpx;
 					.label{
 						font-size: 24rpx;
@@ -685,11 +735,12 @@
 						align-items: center;
 						.time{
 							font-weight: 600;
-							font-size: 28rpx;
+							font-size: 30rpx;
 							color: #222222;
 						}
 						.date{
-							font-size: 24rpx;
+							font-weight: 600;
+							font-size: 30rpx;
 							color: #222222;
 							margin-left: 16rpx;
 						}
@@ -766,6 +817,10 @@
 				color: #222222;
 			}
 		}
+		.notice{
+			font-size: 24rpx;
+			color: #AAAAAA;
+		}
 	}
 	.pay-btn{
 		background: $uni-color-primary;
@@ -844,6 +899,18 @@
 			margin: 0;
 			margin-left: 20rpx;
 		}
+		.book-btn{
+			width: 702rpx;
+			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;
+		}
 	}
 	.info{
 		.order-info{

+ 29 - 13
my/order/index.vue

@@ -26,7 +26,7 @@
 						{{item.shopInfo.shopName}}
 					</view>
 					<view class="status">
-						{{item.goodsModelList[0].goodsState |filterType}}
+						{{ item.goodsModelList[0] |filterType}}
 					</view>
 				</view>
 				<view class="order-box">
@@ -63,27 +63,36 @@
 					userId:JSON.parse(uni.getStorageSync('userInfo')).userId
 				},
 				total:0,
-				list: []
+				list: [],
+				requestTask:null
 			}
 		},
 		filters: {
 			filterType: function(val) {
-				if(val == 'APPLY_REFUND'){
-					return '申请退款'
-				}else if(val == 'CLOSE'){
+				if(val.refundLog&&val.refundLog.refund == 'REFUSAL_REFUND'){
+					return '拒绝退款'
+				}
+				else if(val.jobFlowMap == 'Hotel'&&JSON.parse(val.extend).orderInfo){
+					return JSON.parse(val.extend).orderInfo.orderStatus
+				}
+				else if(val.goodsState == 'APPLY_REFUND'){
+					return '退款审核中'
+				}else if(val.goodsState == 'CLOSE'){
 					return '关闭订单'
-				}else if(val == 'REFUNDED'){
+				}else if(val.goodsState == 'REFUNDED'){
 					return '已退款'
-				}else if(val == 'REFUSAL_REFUND'){
+				}else if(val.goodsState == 'REFUSAL_REFUND'){
 					return '拒绝退款'
-				}else if(val == 'USED'){
-					return '已使用'
-				}else if(val == 'WAIT_PAYMENT'){
+				}else if(val.goodsState == 'APPLY_REFUNDING'){
+					return '退款中'
+				}else if(val.goodsState == 'USED'){
+					return '订单已完成'
+				}else if(val.goodsState == 'WAIT_PAYMENT'){
 					return '待付款'
-				}else if(val == 'WAIT_USE'){
+				}else if(val.goodsState == 'WAIT_USE'){
 					return '待使用'
-				}else if(val =='AOUTO_REFUNDED'){
-					return '自动退款'
+				}else{
+					return ''
 				}
 			}
 		},
@@ -110,6 +119,11 @@
 						url: '/my/order/hotel/detail?id='+item.orderNo
 					})
 				}
+				else if(item.goodsModelList[0].jobFlowMap == 'YPP'){
+					uni.navigateTo({
+						url: '/my/order/movie/detail?id='+item.orderNo
+					})
+				}
 				else if(item.goodsModelList[0].goodsInfo.activityName){
 					uni.navigateTo({
 						url: '/my/order/signUp/signUpDetail?id='+item.orderNo
@@ -121,8 +135,10 @@
 				}
 			},
 			getOrderList(){
+				this.requestTask&&this.requestTask.abort()
 				this.status = 'loading'
 				getOrderList(this.query).then(res=>{
+					this.requestTask =res.task
 					if(res.state == 'Success'){
 						this.total = res.content.totalElements
 						this.list = this.list.concat(res.content.content) 

+ 842 - 0
my/order/movie/detail.vue

@@ -0,0 +1,842 @@
+<template>
+	<view class="movie-order-detail">
+		<zs-skeleton type="orderDetail" :loading="pageLoading"></zs-skeleton>
+			<view class="status-box">
+				<view class="text-box">
+					<view class="status" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'&&!isNotTime">
+						等待支付,剩余<u-count-down :time="closeTime" format="mm:ss" @finish="finish"></u-count-down>
+					</view>
+					<view class="status" v-else>
+						{{info.goodsList[0] | filterType}}
+					</view>
+				</view>
+			</view>
+			
+			
+			<view class="content shop-box">
+				<view class="shop-name">
+					{{info.shopInfo.shopName}}
+				</view>
+				<view class="address">
+					{{info.goodsList[0].goodsInfo.cinemaAddress}}
+				</view>
+			</view>
+		
+			
+			<view class="content info">
+				<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" >
+							{{ $u.timeFormat(info.goodsList[0].goodsInfo.sessionBeginTime,'yyyy-mm-dd hh:MM')}}
+						</view>
+						<view class="goods-desc" >
+							{{info.goodsList[0].goodsInfo.hallName}} {{info.goodsList[0].goodsInfo.seatNames}}
+						</view>
+						<view class="price-box">
+							<view class="price">
+								¥{{info.goodsList[0].payAmount}} 
+							</view>
+							<view class="num">
+								{{`(${info.goodsList[0].goodsInfo.seatNames.split(',').length}张电影票)`}}
+							</view>
+							
+						</view>
+						
+					</view>
+				</view>
+			</view>
+			
+<!-- 			<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">
+						券码信息
+					</view>
+					<view class="codeNum">
+						
+					</view>
+				</view>
+				<view class="code-btn"  @click="checkCode">
+					查看券码 <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
+				</view>
+			</view> -->
+			
+			<view class="content">
+				<view class="title">
+					订单信息
+				</view>
+				<view class="item">
+					<view class="label">
+						订单编号
+					</view>
+					<view class="value">
+						{{info.orderNo}}
+					</view>
+				</view>
+				
+				<view class="item">
+					<view class="label">
+						付款方式
+					</view>
+					<view class="value">
+						{{info.payment | filterPay}}
+					</view>
+				</view>
+				<view class="item">
+					<view class="label">
+						下单时间
+					</view>
+					<view class="value">
+						{{$u.timeFormat(info.createTime,'yyyy-mm-dd hh:MM:ss')}}
+					</view>
+				</view>
+				
+				<view class="item" v-if="info.goodsList[0].goodsState != 'WAIT_PAYMENT' && info.goodsList[0].goodsState != 'CLOSE'">
+					<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">
+						¥{{(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" v-else>
+				<view class="title">
+					交易信息
+				</view>
+				
+				<view class="item">
+					<view class="label">
+						商品金额
+					</view>
+					<view class="value black">
+						¥{{info.totalAmount}}
+					</view>
+				</view>
+				<view class="item" >
+					<view class="label">
+						优惠券
+					</view>
+					<view class="value red">
+						-¥{{info.discountAmount}}
+					</view>
+				</view>
+				
+				<view class="item">
+					<view class="label">
+						合计
+					</view>
+					<view class="value">
+						<text class="red fs28">¥{{info.payAmount}}</text>
+					</view>
+				</view>
+			</view>
+			
+		<!-- 	<template>
+				<view class="content refund-box" v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'||(info.goodsList[0].refundLog&&info.goodsList[0].refundLog.remark)">
+					<view class="title">
+						退款原因
+					</view>
+					
+					<view class="refund-msg">
+						{{info.goodsList[0].refundLog.remark}}
+					</view>
+				</view>
+				<button type="default" :loading="btnLoading" v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'" class="pay-btn" @click="cancelReply" >取消退款</button>
+			</template> -->
+			
+			
+			<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')&&isRefund()&&info.goodsList[0].jobFlowMap !== 'XiaoJu'" @click="apply">
+				<view class="label">
+					退款申请
+				</view>
+				<view class="value">
+					如引发商品争议,可申请平台介入处理
+				</view>
+				<image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
+			</view>
+			
+				<view class="content apply-box" v-if="info.goodsList[0].refundLog&&info.goodsList[0].refundLog.refund == 'REFUSAL_REFUND'">
+					<view class="title">
+						已拒绝
+					</view>
+					<view class="value">
+						拒绝理由:{{info.goodsList[0].refundLog.conclusion}}
+					</view>
+				</view>
+				<button type="default" :loading="btnLoading1" v-if="info.goodsList[0].refundLog&&!info.goodsList[0].refundLog.platInter" class="pay-btn" @click="refundIntervene" >申请介入处理</button> -->
+			
+			
+			
+			<!-- 二维码 -->
+			<u-overlay :show="show" v-if="show" :opacity="0.6">
+				<view class="wrap"  @click.stop="close">
+					<uqrcode ref="uqrcode" type="2d" auto canvas-id="qrcode" :value="codeData" :loading="loading" :options="{ margin: 20 }">
+						 <template v-slot:loading>
+							<text style="color: black;">拼命加载中...</text>
+						  </template>
+					</uqrcode>
+				</view>
+			</u-overlay>
+		
+	</view>
+</template>
+
+<script>
+	import {qrCode} from '@/api/order.js'
+	import {payDetails,queryPayOrder,unRefund,refundIntervene} from '@/api/payment.js';
+	import {cancelOrder} from '@/api/refuel.js'
+	export default {
+		data() {
+			return {
+				isVisual:false,//是否是虚拟商品
+				codeData:'123',
+				show:false,
+				loading:false,
+				pageLoading:true,
+				btnLoading:false,
+				btnLoading1:false,
+				oldBright:0,
+				info:{
+					goodsList:[{goodsState:'CLOSE'}]
+				},
+				isNotTime:false
+			}
+		},
+		watch: {
+			// isNotTime(val) {
+			// 	if(this.isNotTime){
+			// 		this.payDetails(this.info.orderNo)
+			// 	}
+			// }
+		},
+		filters: {
+			filterType: function(val) {
+				if(val.refundLog&&val.refundLog.refund == 'REFUSAL_REFUND'){
+					return '拒绝退款'
+				}
+				else if(val.goodsState == 'APPLY_REFUND'){
+					return '退款审核中'
+				}else if(val.goodsState == 'CLOSE'){
+					return '关闭订单'
+				}else if(val.goodsState == 'REFUNDED'){
+					return '已退款'
+				}else if(val.goodsState == 'APPLY_REFUNDING'){
+					return '退款中'
+				}else if(val.goodsState == 'REFUSAL_REFUND'){
+					return '拒绝退款'
+				}else if(val.goodsState == 'USED'){
+					return '订单已完成'
+				}else if(val.goodsState == 'WAIT_PAYMENT'){
+					return '待付款'
+				}else if(val.goodsState == 'WAIT_USE'){
+					return '待使用'
+				}
+			},
+			filterPay(val){
+				if(val.paymentWay == 'wx.unifiedOrder'){
+					return '微信支付'
+				}else if(val.paymentWay == 'trade.create'){
+					return '支付宝支付'
+				}else if(val.paymentWay == 'uac.miniOrder'){
+					return '云闪付支付'
+				}else{
+					return '-'
+				}
+			}
+		},
+		computed: {
+			closeTime() {
+				// return (this.info.createTime + 1000*60*30) - new Date().getTime()
+				return (this.info.createTime + 1000*10) - 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')){
+						return JSON.parse(this.info.goodsList[0].extend).notifyOrderInfo.payTime
+					}else{
+						return '-'
+					}
+				}else{
+					if(this.info.payment && this.info.payment.paymentTime){
+						return uni.$u.timeFormat(this.info.payment.paymentTime,'yyyy-mm-dd hh:MM:ss') 
+					}else{
+						return '-'
+					}
+				}
+			}
+		},
+		methods: {
+			// 申请客服介入
+			refundIntervene(){
+				let that = this
+				uni.showModal({
+					title: '提示',
+					content: '确认申请客服介入吗?',
+					success: function (res) {
+						if (res.confirm) {
+							that.btnLoading1 = true
+							refundIntervene(that.info.goodsList[0].id).then(res=>{
+								that.btnLoading1 = false
+								if(res.state == 'Success'){
+									that.payDetails(that.info.orderNo)
+								}
+							})
+						} else if (res.cancel) {
+							console.log('用户点击取消');
+						}
+					}
+				});
+				
+			},
+			isRefund(){
+				if(!this.info.goodsList[0].verifyModel){//没核销
+					return true
+				}else if(this.info.goodsList[0].verifyModel && (new Date().getTime() < (this.info.goodsList[0].verifyModel.checkTime + 1000*60*60*48))){// 已核销 并且没超过48小时
+					return true
+				}else{
+					return false
+				}
+			},
+			finish(){
+				this.isNotTime = true
+				this.payDetails(this.info.orderNo)
+			},
+			refundDetail(){
+				uni.navigateTo({
+					url:`/my/order/refundDetail?id=${this.info.orderNo}`
+				})
+			},
+			checkCode() {
+				this.codeData = ''
+				this.$nextTick(()=>{
+					
+					this.show = true
+					this.loading = true
+					let that = this
+					// uni.getScreenBrightness({
+					// 	success(res) {
+					// 		// 获取用户手机亮度 保存起来 
+					// 		that.oldBright = res.value
+					// 		setTimeout(()=>{
+					// 			uni.setScreenBrightness({
+					// 				value:1
+					// 			})
+					// 		},200)
+					// 	}
+					// })
+					qrCode(this.info.goodsList[0].id).then(res=>{
+						this.loading = false
+						if(res.state == 'Success'){
+							this.codeData = res.content
+						}
+					})
+				})
+			},
+			close(){
+				this.show = false
+				// uni.setScreenBrightness({
+				// 	value:this.oldBright
+				// })
+			},
+			handleCall(){
+				uni.makePhoneCall({
+					phoneNumber: '4000016553'//仅为示例
+				});
+			},
+			apply(){
+				let that = this
+				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.pageLoading = false
+					this.info = res.content
+					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
+					// }
+				})
+			},
+			// 取消支付
+			cancel(){
+				uni.showLoading({
+					title: '取消中'
+				})
+				let obj = JSON.parse(this.info.goodsList[0].extend)
+				cancelOrder(obj).then(res=>{
+					if(res.state == 'Success'){
+						uni.showToast({
+							title: '取消成功',
+							icon: 'success'
+						})
+						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
+				this.btnLoading = true
+				uni.showLoading({
+					title: '取消中'
+				})
+				unRefund({id:this.info.goodsList[0].id}).then(res=>{
+					this.btnLoading = false
+					uni.hideLoading()
+					
+					if (res.state == 'Success') {
+						this.payDetails(this.info.orderNo)
+						uni.showToast({
+							title:'取消成功',
+							icon:'success'
+						})
+					}
+				})
+			}
+		},
+		onReady() {
+			
+		},
+		onLoad(options) {
+			this.info.orderNo = options.id
+		},
+		onShow() {
+			this.pageLoading = true
+			this.payDetails(this.info.orderNo)
+		},
+		created() {
+			// this.info = JSON.parse(uni.getStorageSync('order'))
+		}
+	}
+</script>
+
+<style lang="scss">
+.movie-order-detail{
+	background: #F9F9F9;
+	min-height: 100vh;
+	padding-bottom: 100rpx;
+	.status-box{
+		padding: 24rpx 24rpx 4rpx;
+		display: flex;
+		justify-content: space-between;
+		.text-box{
+			color: #181818;
+			.status{
+				font-weight: bold;
+				font-size: 32rpx;
+				display: flex;
+				.u-count-down__text{
+					color: $uni-color-primary!important;
+				}
+			}
+			.notice{
+				font-size: 24rpx;
+				margin-top: 20rpx;
+			}
+		}
+	}
+	
+	.progress{
+		.progress-title{
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #181818;
+		}
+		
+		.progress-desc{
+			font-weight: 300;
+			font-size: 24rpx;
+			color: #AAAAAA;
+			margin-top: 15rpx;
+		}
+	}
+	
+	.shop-box{
+		width: 690rpx;
+		// margin: 0 30rpx;
+		// padding: 24rpx 24rpx 30rpx;
+		background: #fff;
+		border-radius: 16rpx;
+		margin-top: -30rpx;
+		box-sizing: border-box;
+		.shop-name{
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #181818;
+			width: 100%;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+		.address{
+			font-weight: 300;
+			font-size: 24rpx;
+			color: #AAAAAA;
+			margin-top: 20rpx;
+			width: 100%;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+	}
+	
+	.black{
+		color: #222222!important;
+	}
+	
+	.red{
+		color: red!important;
+	}
+	.fs28{
+		font-size: 28rpx!important;
+		font-weight: bold;
+	}
+	
+	.code-box{
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.left{
+			.title{
+				font-weight: 500;
+				font-size: 28rpx;
+				color: #222222;
+			}
+			.codeNum{
+				font-weight: 300;
+				font-size: 24rpx;
+				color: #AAAAAA;
+				margin-top: 15rpx;
+			}
+		}
+		.code-btn{
+			display: flex;
+			align-items: center;
+			font-weight: 300;
+			font-size: 24rpx;
+			color: #AAAAAA;
+			.jiantou{
+				width: 24rpx;
+				height: 24rpx;
+			}
+		}
+		
+	}
+	
+	.input-box{
+		margin: 20rpx 30rpx;
+		padding: 28rpx 24rpx;
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.label {
+			color: #222;
+			font-size: 28rpx;
+		}
+		
+		.value {
+			font-size: 28rpx;	
+			color: #AAAAAA;
+		}
+	}
+	
+	.content{
+		margin: 20rpx 30rpx;
+		padding: 28rpx 24rpx;
+		border-radius: 16rpx;
+		background: #fff;
+		.title{
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #222222;
+		}
+		.item{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			margin-top: 28rpx;
+			.label{
+				font-size: 28rpx;
+				color: #AAAAAA;
+			}
+			.value{
+				font-size: 28rpx;
+				color: #222222;
+			}
+		}
+	}
+	.pay-btn{
+		background: $uni-color-primary;
+		width: 688rpx;
+		height: 80rpx;
+		line-height: 80rpx;
+		border-radius: 46rpx;
+		color: #fff;
+		margin-top: 50rpx;
+	}
+	.refund-box{
+		.refund-msg{
+			font-weight: 300;
+			font-size: 24rpx;
+			color: #222222;
+			margin-top: 15rpx;
+			line-height: 40rpx;
+		}
+	}
+	.apply-box{
+		position: relative;
+		.label{
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #222222;
+		}
+		.value{
+			color: #999999;
+			font-size: 24rpx;
+			margin-top: 15rpx;
+		}
+		
+		.jiantou{
+			position: absolute;
+			top: 50%;
+			right: 24rpx;
+			transform: translateY(-50%);
+			width: 24rpx;
+			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;
+			.icon{
+				width: 164rpx;
+				height: 164rpx;
+				border-radius: 16rpx;
+				flex-shrink: 0;
+			}
+			.shop-info{
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				padding-left: 24rpx;
+				flex: 1;
+				box-sizing: border-box;
+				.title{
+					color: #181818;
+					font-size: 28rpx;
+					width: 450rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.price-box{
+					display: flex;
+					align-items: center;
+					.price{
+						font-size: 24rpx;
+						color: #FF4D3A;
+					}
+					.num{
+						font-size: 24rpx;
+						color: #AAAAAA;
+						margin-left: 10rpx;
+					}
+					
+				}
+				.start-time,.goods-desc{
+					font-size: 24rpx;
+					color: #AAAAAA;
+					width: 450rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+			}
+		}
+		
+		
+	}
+	
+	.wrap{
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100vh;
+		overflow: hidden;
+	}
+	
+}
+</style>

+ 5 - 1
my/order/refund.vue

@@ -67,7 +67,7 @@
 			</u--form>
 		</view>
 
-		<button class="save-btn" type="default" @click="submit">提交</button>
+		<button class="save-btn" type="default" :loading="loading" @click="submit">提交</button>
 
 	</view>
 </template>
@@ -77,6 +77,7 @@ import {applyRefund} from '@/api/payment.js'
 	export default {
 		data() {
 			return {
+				loading:false,
 				info: {},
 				query:{
 					  "remark": "",
@@ -98,7 +99,10 @@ import {applyRefund} from '@/api/payment.js'
 		methods: {
 			submit() {
 				this.$refs.query.validate().then(() => {
+					if(this.loading) return
+					this.loading = true
 					applyRefund(this.query).then(res=>{
+						this.loading = false
 						if(res.state == 'Success'){
 							uni.showToast({
 								title:'申请成功',

+ 21 - 9
my/order/refundDetail.vue

@@ -103,7 +103,7 @@
 						{{info.goodsList[0].refundLog.remark}}
 					</view>
 				</view>
-				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
+				<!-- <button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button> -->
 			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.orderType == 'WAIT_PAYMENT'" @click="pay" >立即支付</button>
 			<view class="content apply-box" v-else-if="info.orderType == 'WAIT_USE'||info.orderType == 'USED'||info.orderType == 'CLOSE'" @click="apply">
 				<view class="label">
@@ -148,20 +148,27 @@
 		},
 		filters: {
 			filterType: function(val) {
-				if(val == 'APPLY_REFUND'){
+				if(val.refundLog&&val.refundLog.refund == 'REFUSAL_REFUND'&&!val.change){
+					return '拒绝退款'
+				}
+				else if(val.goodsState == 'APPLY_REFUND'){
 					return '退款审核中'
-				}else if(val == 'CLOSE'){
+				}else if(val.goodsState == 'CLOSE'){
 					return '关闭订单'
-				}else if(val == 'REFUNDED'){
+				}else if(val.goodsState == 'REFUNDED'){
 					return '已退款'
-				}else if(val == 'REFUSAL_REFUND'){
+				}else if(val.goodsState == 'REFUSAL_REFUND'){
 					return '拒绝退款'
-				}else if(val == 'USED'){
+				}else if(val.goodsState == 'APPLY_REFUNDING'){
+					return '退款中'
+				}else if(val.goodsState == 'USED'){
 					return '订单已完成'
-				}else if(val == 'WAIT_PAYMENT'){
+				}else if(val.goodsState == 'WAIT_PAYMENT'){
 					return '待付款'
-				}else if(val == 'WAIT_USE'){
+				}else if(val.goodsState == 'WAIT_USE'){
 					return '待使用'
+				}else{
+					return ''
 				}
 			},
 			filterPay(val){
@@ -297,7 +304,12 @@
 	background: #F9F9F9;
 	min-height: 100vh;
 	padding-bottom: 100rpx;
-	
+	.u-steps{
+		margin-top: 20rpx;
+		.u-text__value--main,.u-text__value--content,.u-text__value--tips{
+			font-size: 22rpx!important;
+		}
+	}
 	.progress{
 		.progress-title{
 			font-weight: 600;

+ 79 - 58
my/order/scenic/detail.vue

@@ -31,7 +31,7 @@
 					<view class="text">
 						预定须知 
 					</view>
-					<image class="jiantou" src="../static/right.png" mode=""></image>
+					<image class="jiantou" src="@/static/right.png" mode=""></image>
 				</view>
 
 				<view class="item">
@@ -77,7 +77,7 @@
 						入园方式
 					</view>
 					<view class="value">
-						{{ticketInfo.admissionVoucher.smsMessage}}
+						{{ticketInfo.admissionVoucher.admissionVoucherCode | filterVoucherType}}
 					</view>
 				</view>
 				<view class="item" v-if="info.goodsList[0].goodsState == 'USED'||info.goodsList[0].goodsState == 'WAIT_USE'">
@@ -107,7 +107,7 @@
 						手机号
 					</view>
 					<view class="value">
-						{{info.goodsList[0].goodsInfo.contact.contactTel}}
+						{{info.goodsList[0].goodsInfo.contact.contactTel | filterStr('tel')}}
 					</view>
 				</view>
 				<view class="item" v-if="info.goodsList[0].goodsInfo.contact.psptId">
@@ -123,7 +123,7 @@
 						证件号
 					</view>
 					<view class="value">
-						{{info.goodsList[0].goodsInfo.contact.psptId}}
+						{{info.goodsList[0].goodsInfo.contact.psptId | filterStr}}
 					</view>
 				</view>
 			</view>
@@ -132,39 +132,39 @@
 				<view class="title">
 					出游人信息
 				</view>
-				<view class="box" v-for="(item,index) in info.goodsList[0].goodsInfo.touristList" :key="index">
-					<view class="item">
-						<view class="label">
-							姓名
-						</view>
-						<view class="value">
-							{{item.name}}
-						</view>
-					</view>
-					<view class="item">
-						<view class="label">
-							手机号
+				<view class="border-top" v-for="(item,index) in info.goodsList[0].goodsInfo.touristList" :key="index">
+						<view class="item">
+							<view class="label">
+								姓名
+							</view>
+							<view class="value">
+								{{item.name}}
+							</view>
 						</view>
-						<view class="value">
-							{{item.tel}}
+						<view class="item">
+							<view class="label">
+								手机号
+							</view>
+							<view class="value">
+								{{item.tel| filterStr('tel')}}
+							</view>
 						</view>
-					</view>
-					<view class="item">
-						<view class="label">
-							证件类型
-						</view>
-						<view class="value">
-							{{item.psptType |filterPsptType }}
-						</view>
-					</view>
-					<view class="item">
-						<view class="label">
-							证件号
+						<view class="item" v-if="item.psptId">
+							<view class="label">
+								证件类型
+							</view>
+							<view class="value">
+								{{item.psptType |filterPsptType }}
+							</view>
 						</view>
-						<view class="value">
-							{{item.psptId}}
+						<view class="item" v-if="item.psptId">
+							<view class="label">
+								证件号
+							</view>
+							<view class="value">
+								{{item.psptId | filterStr}}
+							</view>
 						</view>
-					</view>
 				</view>
 			</view>
 			
@@ -181,7 +181,14 @@
 						{{info.orderNo}}
 					</view>
 				</view>
-				
+				<view class="item">
+					<view class="label">
+						付款方式
+					</view>
+					<view class="value">
+						{{info.payment | filterPay}}
+					</view>
+				</view>
 
 				<view class="item">
 					<view class="label">
@@ -236,7 +243,7 @@
 			
 			
 			
-			<template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
+		<!-- 	<template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
 				<view class="content refund-box">
 					<view class="title">
 						退款原因
@@ -247,7 +254,7 @@
 					</view>
 				</view>
 				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
-			</template>
+			</template> -->
 			
 			<view class="btn-box" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'">
 				<button class="cancel-btn" @click="cancel" :loading="btnLoading">
@@ -258,7 +265,8 @@
 				</button>
 			</view>
 			
-			<!-- <view class="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&isRefund()" @click="apply">
+			<view class="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&isRefund()" @click="apply">
+					<!-- <view class="content apply-box" @click="apply"> -->
 				<view class="label">
 					退款申请
 				</view>
@@ -266,10 +274,10 @@
 					如引发商品争议,可申请平台介入处理
 				</view>
 				<image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
-			</view> -->
+			</view>
 			
 			
-			<u-popup :show="show" round="16rpx" mode="bottom" @close="show = false">
+			<u-popup :show="show" round="16rpx" mode="bottom" @close="close">
 				<view class="popup-title">
 					{{info.shopInfo.shopName}}
 				</view>
@@ -323,7 +331,7 @@
 <script>
 	import {qrCode} from '@/api/order.js'
 	import {payDetails,queryPayOrder,unRefund} from '@/api/payment.js';
-	import {getTicketDetail,cancelOrder} from '@/api/scenic.js'
+	import {getTicketDetail,cancelOrder,tuiPiao} from '@/api/scenic.js'
 	export default {
 		data() {
 			return {
@@ -357,7 +365,10 @@
 					return '已退款'
 				}else if(val == 'REFUSAL_REFUND'){
 					return '拒绝退款'
-				}else if(val == 'USED'){
+				}else if(val == 'APPLY_REFUNDING'){
+					return '退款中'
+				}
+				else if(val == 'USED'){
 					return '订单已完成'
 				}else if(val == 'WAIT_PAYMENT'){
 					return '待付款'
@@ -366,11 +377,11 @@
 				}
 			},
 			filterPay(val){
-				if(val == 'wx.unifiedOrder'){
+				if(val.paymentWay == 'wx.unifiedOrder'){
 					return '微信支付'
-				}else if(val == 'trade.create'){
+				}else if(val.paymentWay == 'trade.create'){
 					return '支付宝支付'
-				}else if(val == 'uac.miniOrder'){
+				}else if(val.paymentWay == 'uac.miniOrder'){
 					return '云闪付支付'
 				}else{
 					return '-'
@@ -387,6 +398,14 @@
 					return '港澳通行证'
 				}else if(val == 7){
 					return '台胞证'
+				}else if(val == 8){
+					return '回乡证'
+				}else if(val == 9){
+					return '户口簿'
+				}else if(val == 10){
+					return '出生证明'
+				}else if(val == 11){
+					return '台湾通行证'
 				}
 			},
 			filterVoucherType: function(val) {
@@ -427,6 +446,14 @@
 				}else if(val == 307){
 					return '直接验证入园台胞证'
 				}
+			},
+			filterStr(val,type){
+				let len = val.length
+				if(type == 'tel'){
+					return val.substring(0,3)+'****'+val.substring(len-4)
+				}else{
+					return val.substring(0,10)+'****'+val.substring(len-4)
+				}
 			}
 		},
 		computed: {
@@ -434,29 +461,20 @@
 				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: {
 			handleNotice(){
 				this.show = true
 			},
+			close(){
+				this.show = false
+			},
 			isRefund(){
 				if(!this.info.goodsList[0].verifyModel){//没核销
 					return true
@@ -472,7 +490,7 @@
 			},
 			refundDetail(){
 				uni.navigateTo({
-					url:`/my/order/refundDetail?id=${this.info.orderNo}`
+					url:`/my/order/scenic/refundDetail?id=${this.info.orderNo}`
 				})
 			},
 			handleCall(){
@@ -897,7 +915,10 @@
 		height: 100vh;
 		overflow: hidden;
 	}
-	
+	.border-top+.border-top{
+		border-top: 1rpx solid #F0F0F0;
+		margin-top: 28rpx;
+	}
 	.u-popup__content{
 		padding: 0 24rpx 28rpx;
 		position: relative;

+ 396 - 0
my/order/scenic/refund.vue

@@ -0,0 +1,396 @@
+<template>
+	<view class="refund">
+		
+		<view class="content ticket-info">
+			<view class="title">
+				{{info.goodsList[0].goodsInfo.goodsName}}
+			</view>
+		
+			<view class="item">
+				<view class="value">
+					出游日期
+				</view>
+				<view class="value">
+					{{info.goodsList[0].goodsInfo.startTime}}
+				</view>
+			</view>
+			<view class="item">
+				<view class="value">
+					预订数量
+				</view>
+				<view class="value">
+					{{info.goodsList[0].goodsInfo.bookNumber}}
+				</view>
+			</view>
+		</view>
+		
+		<view class="content" >
+			<view class="title">
+				交易信息
+			</view>
+			
+			<view class="item">
+				<view class="label">
+					金额
+				</view>
+				<view class="value black">
+					¥{{info.totalAmount}}
+				</view>
+			</view>
+			<view class="item" >
+				<view class="label">
+					优惠券
+				</view>
+				<view class="value red">
+					-¥{{info.discountAmount}}
+				</view>
+			</view>
+			
+			<view class="item">
+				<view class="label">
+					合计
+				</view>
+				<view class="value">
+					<text class="red fs28">¥{{info.payAmount}}</text>
+				</view>
+			</view>
+		</view>
+
+		
+		
+		<view class="content">
+			
+			<view class="item">
+				<view class="label">
+					实付金额
+				</view>
+				<view class="value">
+					<text class="red fs28">¥{{info.payAmount}}</text>
+				</view>
+			</view>
+			<view class="notice">
+				1-3个工作日退还至原支付方,将以实际退款金额为准
+			</view>
+			
+		</view>
+		
+		<view class="content">
+			<view class="item">
+				<view class="label">
+					说明
+				</view>
+			</view>
+			<u--form labelPosition="left" labelWidth="150rpx" errorType="toast" :model="query" :rules="rules" ref="query">
+				<u-form-item
+						label="退订类型"
+						borderBottom
+						ref="causeType"
+						required
+						prop="causeType"
+				>
+					<view class="type-box" @click="chooseType">
+						{{query.causeType | filterType(that)}}
+						<image class="right-icon" src="@/static/right.png" mode=""></image>
+					</view>
+				</u-form-item>
+				<u-form-item  prop="causeContent" v-if="query.causeType == 5" :borderBottom="false" ref="item1">
+					<textarea class="desc" v-model="query.causeContent" :maxlength="50" placeholder="请输入原因,我们将尽心为您服务"></textarea>
+				</u-form-item>
+			
+			</u--form>
+		</view>
+		
+		 <u-picker :show="show" :columns="columns" closeOnClickOverlay keyName="label" @cancel="close" @close="close" @confirm="confirm"></u-picker>
+
+		<button class="save-btn" type="default" :loading="loading" @click="submit">提交</button>
+
+	</view>
+</template>
+
+<script>
+import {applyRefund} from '@/api/payment.js'
+import {tuiPiao} from '@/api/scenic.js'
+	export default {
+		data() {
+			return {
+				that:this,
+				show:false,
+				loading:false,
+				info: {},
+				query:{
+					  "causeContent": "",
+					  "orderId": "",
+					  'causeType':0
+					 
+				},
+				rules:{
+					'causeContent':{
+						required: true,
+						message: '请输入申请原因',
+						// blur和change事件触发检验
+						trigger: ['blur', 'change'],
+					},
+				},
+				columns: [
+					[	{
+							label: '行程变更',
+							id: 0
+						}, 
+						{
+							label: '价格不优惠',
+							id: 1
+						}, 
+						{
+							label: '门票预订错误',
+							id: 2
+						},
+						{
+							label: '未收到入园凭证',
+							id: 3
+						},
+						{
+							label: '景区闭园',
+							id: 4
+						},
+						{
+							label: '其他原因',
+							id: 5
+						},
+						
+					]
+				],
+					
+					
+			}
+		},
+		filters: {
+			filterType: function(value,that) {
+				let msg
+				that.columns[0].map(item=>{
+					if(value == item.id){
+						msg = item.label
+					}
+				})
+				return msg;
+			},
+		},
+		methods: {
+			confirm(val){
+				this.show = false
+				this.query.causeType = val.value[0].id
+				if(this.query.causeType == 5){
+					this.query.causeContent = ''
+				}
+			},
+			close(){
+				this.show = false
+			},
+			chooseType() {
+				this.show = true
+			},
+			submit() {
+				this.$refs.query.validate().then(() => {
+					if(this.loading) return
+					this.loading = true
+					if(this.query.causeType != 5){
+						this.query.causeContent = this.columns[0][this.query.causeType].label
+					}
+					console.log(this.query);
+					tuiPiao(this.query).then(res=>{
+						this.loading = false
+						if(res.state == 'Success'){
+							uni.showToast({
+								title:'申请成功',
+								icon:'success'
+							})
+							uni.navigateBack()
+						}
+					})
+				})
+			}
+		},
+		onReady() {
+		    	this.$refs.query.setRules(this.rules)
+		},
+		onLoad() {
+			let that = this
+			const eventChannel = this.getOpenerEventChannel();
+			if(JSON.stringify(eventChannel) !=='{}'){
+				eventChannel.on('orderInfo', function(data) {
+					that.info = data
+					that.query.orderId = data.orderNo
+
+				})
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+	.refund {
+		background: #F9F9F9;
+		min-height: 100vh;
+		padding-top: 20rpx;
+		padding-bottom: 80rpx;
+		
+		.type-box{
+			display: flex;
+			justify-content: flex-end;
+			text-align: center;
+			.right-icon{
+				width: 48rpx;
+				height: 48rpx;
+			}
+		}
+
+		.save-btn {
+			width: 688rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			text-align: center;
+			background: $uni-color-primary;
+			box-shadow: inset 0rpx 6rpx 12rpx 2rpx rgba(255, 255, 255, 0.16);
+			border-radius: 46rpx 46rpx 46rpx 46rpx;
+			position: fixed;
+			bottom: 60rpx;
+			left: 50%;
+			color: #fff;
+			font-size: 28rpx;
+			font-weight: bold;
+			transform: translateX(-50%);
+		}
+
+		.content{
+			margin: 20rpx 30rpx;
+			padding: 28rpx 24rpx;
+			border-radius: 16rpx;
+			background: #fff;
+			.title{
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #222222;
+			}
+			.item{
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				margin-top: 28rpx;
+				.label {
+					font-weight: 500;
+					font-size: 28rpx;
+					color: #222222;
+				}
+				
+				.value {
+					color: #999999;
+					font-size: 28rpx;
+				}
+			}
+			.desc {
+				width: 100%;
+				height: 268rpx;
+				border-radius: 14rpx;
+				border: 2rpx solid #DDDDDD;
+				font-size: 24rpx;
+				padding: 24rpx;
+				box-sizing: border-box;
+				margin-top: 16rpx;
+			}
+		}
+		
+		.ticket-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;
+				}
+			}
+		}
+		.notice {
+			margin-top: 16rpx;
+			font-weight: 400;
+			color: #AAAAAA;
+			font-size: 24rpx;
+		}
+
+		.black {
+			color: #222222 !important;
+		}
+
+		.red {
+			color: red !important;
+		}
+
+		.fs28 {
+			font-size: 28rpx !important;
+			font-weight: bold;
+		}
+
+		.info {
+			.order-info {
+				display: flex;
+
+				.icon {
+					width: 164rpx;
+					height: 164rpx;
+					border-radius: 16rpx;
+				}
+
+				.shop-info {
+					display: flex;
+					flex-direction: column;
+					justify-content: space-evenly;
+					margin-left: 24rpx;
+
+					.title {
+						color: #181818;
+						font-size: 28rpx;
+					}
+					.goods-desc{
+						font-size: 24rpx;
+						color: #AAAAAA;
+						width: 450rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						margin-top: 10rpx;
+					}
+
+					.price {
+						font-weight: 600;
+						font-size: 32rpx;
+						color: #FF4D3A;
+					}
+
+					.code-btn {
+						width: 88rpx;
+						height: 32rpx;
+						line-height: 32rpx;
+						text-align: center;
+						font-size: 22rpx;
+						color: #FC8945;
+						border-radius: 0rpx 16rpx 0rpx 16rpx;
+						border: 2rpx solid #FC8945;
+					}
+				}
+			}
+
+
+		}
+	}
+</style>

+ 480 - 0
my/order/scenic/refundDetail.vue

@@ -0,0 +1,480 @@
+<template>
+	<view class="refundDetail">
+			
+			<view class="content progress">
+				<view class="progress-title">
+					 {{info.goodsList[0].goodsState == 'REFUNDED'?'退款成功':'退款中'}}
+				</view>
+				<view class="progress-desc">
+				{{info.goodsList[0].refundLog.refundAmount?'如您未查询到退款,请拨打10086咨询客服':'	请耐心等待,正在为您处理退款'}}
+				</view>
+				<u-steps dot current="0" activeColor="#FF4D3A" direction="column">
+						<u-steps-item v-for="(item,index) in stepList" :key="index" :title="item.desc" :desc="$u.timeFormat(info.goodsList[0].refundLog[item.time], 'yyyy-mm-dd hh:MM:ss')">
+						</u-steps-item>
+					</u-steps>
+			</view>
+			
+			<view class="content info">
+				<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">
+						x{{info.goodsList[0].goodsInfo.bookNumber}}
+						</view>
+						<view class="price-box">
+							<view class="price">
+								¥{{info.goodsList[0].goodsInfo.salePrice}}
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+	
+			
+			<view class="content">
+				<view class="title">
+					商品总价
+				</view>
+				
+				<view class="item" >
+					<view class="label">
+						优惠券
+					</view>
+					<view class="value red">
+						-¥{{info.discountAmount}}
+					</view>
+				</view>
+				
+				
+				<view class="item">
+					<view class="label">
+						合计
+					</view>
+					<view class="value">
+						<text class="red fs28">¥{{info.payAmount}}</text>
+					</view>
+				</view>
+				<view class="item">
+					<view class="label">
+						退款金额
+					</view>
+					<view class="value">
+						<text class="red fs28">¥{{info.goodsList[0].refundLog.refundAmount||info.payAmount}}</text>
+					</view>
+				</view>
+			</view>
+			
+				<view class="content refund-box">
+					<view class="title">
+						退款原因
+					</view>
+					
+					<view class="refund-msg">
+						{{info.goodsList[0].refundLog.remark}}
+					</view>
+				</view>
+				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
+			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.orderType == 'WAIT_PAYMENT'" @click="pay" >立即支付</button>
+			<view class="content apply-box" v-else-if="info.orderType == 'WAIT_USE'||info.orderType == 'USED'||info.orderType == 'CLOSE'" @click="apply">
+				<view class="label">
+					退款申请
+				</view>
+				<view class="value">
+					如引发商品争议,可申请平台介入处理
+				</view>
+				<image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
+			</view>
+			
+		
+	</view>
+</template>
+
+<script>
+	import {qrCode} from '@/api/order.js'
+	import {payDetails,queryPayOrder,unRefund} from '@/api/payment.js'
+	export default {
+		data() {
+			return {
+				isVisual:false,//是否是虚拟商品
+				codeData:'123',
+				loading:false,
+				btnLoading:false,
+				oldBright:0,
+				info:{
+					goodsList:[]
+				},
+				stepList:[
+					
+					{
+						desc:'平台受理中',
+						time:'createTime'
+					},
+					{
+						desc:'提交申请',
+						time:'createTime'
+					},
+				]
+			}
+		},
+		filters: {
+			filterType: function(val) {
+				if(val == 'APPLY_REFUND'){
+					return '退款审核中'
+				}else if(val == 'CLOSE'){
+					return '关闭订单'
+				}else if(val == 'REFUNDED'){
+					return '已退款'
+				}else if(val == 'REFUSAL_REFUND'){
+					return '拒绝退款'
+				}else if(val == 'USED'){
+					return '订单已完成'
+				}else if(val == 'WAIT_PAYMENT'){
+					return '待付款'
+				}else if(val == 'WAIT_USE'){
+					return '待使用'
+				}
+			},
+			filterPay(val){
+				if(val == 'wx.unifiedOrder'){
+					return '微信支付'
+				}else if(val == 'trade.create'){
+					return '支付宝支付'
+				}else if(val == 'uac.miniOrder'){
+					return '云闪付支付'
+				}else{
+					return '-'
+				}
+			}
+		},
+		methods: {
+	
+			apply(){
+				let that = this
+				uni.navigateTo({
+					url:'./refund',
+					success: function(res) {
+					  // 通过eventChannel向被打开页面传送数据
+					  res.eventChannel.emit('orderInfo', that.info)
+					}
+				})
+			},
+			// 获取订单详情
+			payDetails(orderNo){
+				payDetails(orderNo).then(res=>{
+					this.info = res.content
+					console.log(this.info);
+					if(this.info.goodsList[0].goodsState == 'REFUNDED'&&this.info.goodsList[0].refundLog.conclusionTime){
+						console.log(222222222222222);
+						this.stepList.unshift({
+							desc:'退款完成,已原路返回',
+							time:'conclusionTime'
+						})
+					}
+					try{
+						let extend = JSON.parse(this.info.extend)
+						if(extend.account){
+							this.isVisual = true
+						}
+					}catch(e){
+						//TODO handle the exception
+					}
+				})
+			},
+			// 支付
+			pay(){
+				if (this.btnLoading) return
+				this.btnLoading = true
+				uni.showLoading({
+					title: '支付中'
+				})
+				let that = this
+				let miniPayRequest = JSON.parse(this.info.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
+				this.btnLoading = true
+				uni.showLoading({
+					title: '取消中'
+				})
+				unRefund({id:this.info.goodsList[0].id}).then(res=>{
+					this.btnLoading = false
+					uni.hideLoading()
+					
+					if (res.state == 'Success') {
+						this.payDetails(this.info.orderNo)
+						uni.showToast({
+							title:'取消成功',
+							icon:'success'
+						})
+					}
+				})
+			}
+		},
+		onReady() {
+			
+		},
+		onLoad(options) {
+			this.info.orderNo = options.id
+		},
+		onShow() {
+			this.payDetails(this.info.orderNo)
+		},
+		created() {
+			// this.info = JSON.parse(uni.getStorageSync('order'))
+		}
+	}
+</script>
+
+<style lang="scss">
+.refundDetail{
+	background: #F9F9F9;
+	min-height: 100vh;
+	padding-bottom: 100rpx;
+	.u-steps{
+		margin-top: 20rpx;
+		.u-text__value--main,.u-text__value--content,.u-text__value--tips{
+			font-size: 22rpx!important;
+		}
+	}
+	.progress{
+		.progress-title{
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #181818;
+		}
+		
+		.progress-desc{
+			font-weight: 300;
+			font-size: 24rpx;
+			color: #AAAAAA;
+			margin-top: 15rpx;
+		}
+	}
+	
+	.shop-box{
+		width: 690rpx;
+		// margin: 0 30rpx;
+		// padding: 24rpx 24rpx 30rpx;
+		background: #fff;
+		border-radius: 16rpx;
+		margin-top: -30rpx;
+		box-sizing: border-box;
+		.shop-name{
+			font-weight: 600;
+			font-size: 32rpx;
+			color: #181818;
+			width: 100%;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+		.address{
+			font-weight: 300;
+			font-size: 24rpx;
+			color: #AAAAAA;
+			margin-top: 20rpx;
+			width: 100%;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
+		}
+	}
+	
+	.black{
+		color: #222222!important;
+	}
+	
+	.red{
+		color: red!important;
+	}
+	.fs28{
+		font-size: 28rpx!important;
+		font-weight: bold;
+	}
+	
+
+	
+	.input-box{
+		margin: 20rpx 30rpx;
+		padding: 28rpx 24rpx;
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		.label {
+			color: #222;
+			font-size: 28rpx;
+		}
+		
+		.value {
+			font-size: 28rpx;	
+			color: #AAAAAA;
+		}
+	}
+	
+	.content{
+		margin: 20rpx 30rpx;
+		padding: 28rpx 24rpx;
+		border-radius: 16rpx;
+		background: #fff;
+		.title{
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #222222;
+		}
+		.item{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			margin-top: 28rpx;
+			.label{
+				color: #222222;
+				font-size: 28rpx;
+			}
+			.value{
+				color: #999999;
+				font-size: 28rpx;
+			}
+		}
+	}
+	.pay-btn{
+		background: $uni-color-primary;
+		width: 688rpx;
+		height: 80rpx;
+		line-height: 80rpx;
+		border-radius: 46rpx;
+		color: #fff;
+		margin-top: 50rpx;
+	}
+	.refund-box{
+		.refund-msg{
+			font-weight: 300;
+			font-size: 24rpx;
+			color: #222222;
+			margin-top: 15rpx;
+			line-height: 40rpx;
+		}
+	}
+	.apply-box{
+		position: relative;
+		.label{
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #222222;
+		}
+		.value{
+			color: #999999;
+			font-size: 24rpx;
+			margin-top: 15rpx;
+		}
+		
+		.jiantou{
+			position: absolute;
+			top: 50%;
+			right: 24rpx;
+			transform: translateY(-50%);
+			width: 24rpx;
+			height: 24rpx;
+		}
+	}
+	.info{
+		.order-info{
+			display: flex;
+			.icon{
+				width: 164rpx;
+				height: 164rpx;
+				border-radius: 16rpx;
+				flex-shrink: 0;
+			}
+			.shop-info{
+				display: flex;
+				flex-direction: column;
+				justify-content: space-between;
+				padding-left: 24rpx;
+				flex: 1;
+				box-sizing: border-box;
+				.title{
+					color: #181818;
+					font-size: 28rpx;
+					width: 450rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.price-box{
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					.price{
+						color: #181818;
+						font-size: 32rpx;
+						font-weight: bold;
+					}
+					
+				}
+				.start-time,.goods-desc{
+					font-size: 24rpx;
+					color: #AAAAAA;
+					width: 450rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					margin-top: 10rpx;
+				}
+			}
+		}
+		
+		
+	}
+	
+	.wrap{
+		display: flex;
+		justify-content: center;
+		align-items: center;
+		height: 100vh;
+		overflow: hidden;
+	}
+	
+}
+</style>

+ 8 - 3
my/order/signUp/refundDetail.vue

@@ -31,7 +31,7 @@
 							{{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">
@@ -99,7 +99,7 @@
 						{{info.goodsList[0].refundLog.remark}}
 					</view>
 				</view>
-				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
+				<!-- <button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button> -->
 			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.orderType == 'WAIT_PAYMENT'" @click="pay" >立即支付</button>
 			<view class="content apply-box" v-else-if="info.orderType == 'WAIT_USE'||info.orderType == 'USED'||info.orderType == 'CLOSE'" @click="apply">
 				<view class="label">
@@ -283,7 +283,12 @@
 	background: #F9F9F9;
 	min-height: 100vh;
 	padding-bottom: 100rpx;
-	
+	.u-steps{
+		margin-top: 20rpx;
+		.u-text__value--main,.u-text__value--content,.u-text__value--tips{
+			font-size: 22rpx!important;
+		}
+	}
 	.progress{
 		.progress-title{
 			font-weight: 600;

+ 36 - 13
my/order/signUp/signUpDetail.vue

@@ -9,7 +9,7 @@
 						等待支付,剩余<u-count-down :time="closeTime" format="mm:ss" @finish="finish"></u-count-down>
 					</view>
 					<view class="status" v-else>
-						{{info.goodsList[0].goodsState | filterType}}
+						{{info.goodsList[0] | filterType}}
 					</view>
 				</view>
 			</view>
@@ -32,7 +32,7 @@
 							{{info.goodsList[0].goodsInfo.activityName}}
 						</view>
 						<view class="goods-desc">
-							活动时间:{{info.goodsList[0].goodsInfo.activityStartTime.replace('T',' ')}} 至 {{info.goodsList[0].goodsInfo.activityEndTime.replace('T',' ')}}
+							活动时间:{{info.goodsList[0].goodsInfo&&info.goodsList[0].goodsInfo.activityStartTime.replace('T',' ')}} 至 {{info.goodsList[0].goodsInfo&&info.goodsList[0].goodsInfo.activityEndTime.replace('T',' ')}}
 						</view>
 						<view class="num-box">
 							<view class="label">
@@ -169,7 +169,9 @@
 						{{info.goodsList[0].refundLog.remark}}
 					</view>
 				</view>
-				<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
+				<template>
+					<button type="default" :loading="btnLoading" v-if="!info.payment.transferAll" class="pay-btn" @click="cancelReply" >取消退款</button>
+				</template>
 			</template>
 			
 			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'" @click="pay" >立即支付</button>
@@ -205,9 +207,6 @@
 	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,
@@ -232,22 +231,46 @@
 		},
 		filters: {
 			filterType: function(val) {
-				if(val == 'APPLY_REFUND'){
+				if(val.refundLog&&val.refundLog.refund == 'REFUSAL_REFUND'&&!val.change){
+					return '拒绝退款'
+				}
+				else if(val.goodsState == 'APPLY_REFUND'){
 					return '退款审核中'
-				}else if(val == 'CLOSE'){
+				}else if(val.goodsState == 'CLOSE'){
 					return '关闭订单'
-				}else if(val == 'REFUNDED'){
+				}else if(val.goodsState == 'REFUNDED'){
 					return '已退款'
-				}else if(val == 'REFUSAL_REFUND'){
+				}else if(val.goodsState == 'REFUSAL_REFUND'){
 					return '拒绝退款'
-				}else if(val == 'USED'){
+				}else if(val.goodsState == 'APPLY_REFUNDING'){
+					return '退款中'
+				}else if(val.goodsState == 'USED'){
 					return '订单已完成'
-				}else if(val == 'WAIT_PAYMENT'){
+				}else if(val.goodsState == 'WAIT_PAYMENT'){
 					return '待付款'
-				}else if(val == 'WAIT_USE'){
+				}else if(val.goodsState == 'WAIT_USE'){
 					return '待使用'
+				}else{
+					return ''
 				}
 			},
+			// filterType: function(val) {
+			// 	if(val == 'APPLY_REFUND'){
+			// 		return '退款审核中'
+			// 	}else if(val == 'CLOSE'){
+			// 		return '关闭订单'
+			// 	}else if(val == 'REFUNDED'){
+			// 		return '已退款'
+			// 	}else if(val == 'REFUSAL_REFUND'){
+			// 		return '拒绝退款'
+			// 	}else if(val == 'USED'){
+			// 		return '订单已完成'
+			// 	}else if(val == 'WAIT_PAYMENT'){
+			// 		return '待付款'
+			// 	}else if(val == 'WAIT_USE'){
+			// 		return '待使用'
+			// 	}
+			// },
 			filterPay(val){
 				if(val == 'wx.unifiedOrder'){
 					return '微信支付'

+ 0 - 0
pages/service/index.vue → my/service/index.vue


+ 47 - 47
pages.json

@@ -24,16 +24,9 @@
 			}
 		},
 		{
-			"path": "pages/service/index",
+			"path": "pages/activity/index",
 			"style": {
-				"navigationBarTitleText": "客服",
-				"enablePullDownRefresh": false
-			}
-		},
-		{
-			"path": "pages/service/chatRoom",
-			"style": {
-				"navigationBarTitleText": "在线客服",
+				"navigationBarTitleText": "活动",
 				"enablePullDownRefresh": false
 			}
 		},
@@ -86,8 +79,8 @@
 				{
 					"path": "refuelDetail",
 					"style": {
-						"navigationBarTitleText": "加油站",
-						"navigationStyle": "custom"
+						"navigationBarTitleText": "确认下单"
+						// "navigationStyle": "custom"
 					}
 				}
 			]
@@ -103,12 +96,6 @@
 						// "enablePullDownRefresh": true
 					}
 				},
-				{
-					"path": "discountsDetail/refuel",
-					"style": {
-						"navigationBarTitleText": "加油充电"
-					}
-				},
 				{
 					"path": "discountsDetail/index",
 					"style": {
@@ -155,7 +142,7 @@
 			"pages": [{
 					"path": "coupon/index",
 					"style": {
-						"navigationBarTitleText": "领券中心",
+						"navigationBarTitleText": "我的优惠券",
 						"enablePullDownRefresh": true
 					}
 				},
@@ -171,6 +158,12 @@
 						"navigationBarTitleText": "账号设置"
 					}
 				},
+				{
+					"path": "edit/unSubscribe",
+					"style": {
+						"navigationBarTitleText": "账号信息"
+					}
+				},
 				{
 					"path": "order/index",
 					"style": {
@@ -222,12 +215,30 @@
 						"navigationBarTitleText": "订单详情"
 					}
 				},
+				{
+					"path": "order/scenic/refund",
+					"style": {
+						"navigationBarTitleText": "退款申请"
+					}
+				},
+				{
+					"path": "order/scenic/refundDetail",
+					"style": {
+						"navigationBarTitleText": "退款详情"
+					}
+				},
 				{
 					"path": "order/hotel/detail",
 					"style": {
 						"navigationBarTitleText": "订单详情"
 					}
 				},
+				{
+					"path": "order/movie/detail",
+					"style": {
+						"navigationBarTitleText": "订单详情"
+					}
+				},
 				{
 					"path": "order/webView",
 					"style": {
@@ -246,6 +257,12 @@
 						"navigationBarTitleText": "会员中心",
 						"navigationStyle": "custom"
 					}
+				},
+				{
+					"path": "service/index",
+					"style": {
+						"navigationBarTitleText": "客服"
+					}
 				}
 			]
 		},
@@ -301,30 +318,6 @@
 				}
 			]
 		},
-		// {
-		// 	"root": "integral",
-		// 	"pages": [{
-		// 			"path": "store",
-		// 			"style": {
-		// 				"navigationBarTitleText": "积分权益"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "shop",
-		// 			"style": {
-		// 				"navigationBarTitleText": "积分商城"
-		// 			}
-		// 		},
-		// 		{
-		// 			"path": "logs",
-		// 			"style": {
-		// 				"navigationBarTitleText": "积分明细"
-		// 			}
-		// 		}
-
-		// 	]
-		// },
-		
 		{
 			"root": "trip", //出行
 			"pages": [
@@ -356,7 +349,8 @@
 				{
 					"path": "index",
 					"style": {
-						"navigationBarTitleText": "景区门票"
+						"navigationBarTitleText": "景区门票",
+						"navigationStyle": "custom"
 					}
 				},
 				{
@@ -396,6 +390,12 @@
 						"navigationBarTitleText": "电影"
 					}
 				},
+				{
+					"path": "movieList",
+					"style": {
+						"navigationBarTitleText": "电影列表"
+					}
+				},
 				{
 					"path": "chooseSeat",
 					"style": {
@@ -562,10 +562,10 @@
 				"pagePath": "pages/index/index"
 			},
 			{
-				"iconPath": "static/service_off.png",
-				"selectedIconPath": "static/service_on.png",
-				"text": "客服",
-				"pagePath": "pages/service/index"
+				"iconPath": "static/activity_off.png",
+				"selectedIconPath": "static/activity_on.png",
+				"text": "活动",
+				"pagePath": "pages/activity/index"
 			},
 			{
 				"iconPath": "static/my_off.png",

+ 115 - 0
pages/activity/index.vue

@@ -0,0 +1,115 @@
+<template>
+	<view class="activity">
+		<zs-list mt="0" @load="loadMore" :status="status">
+			<view class="item" v-for="item in list" :key="item.id" @click="goDetail(item.id)">
+				<zs-img :src="item.activityCover" width="710rpx" height="320rpx"></zs-img>
+				<view class="info">
+					<view class="title">
+						{{item.activityName}}
+					</view>
+					<view class="desc">
+					活动时间: {{ item.activityStartTime }} 至 {{ item.activityEndTime }}
+					</view>
+				</view>
+			</view>
+			
+		</zs-list>
+	</view>
+</template>
+
+<script>
+	import {activityList} from '@/api/activity'
+	export default {
+		data() {
+			return {
+				status: 'more',
+				list:[],
+				query:{
+					currentPage:1,
+					pageSize:10,
+					shopId:0,
+					state:2
+				}
+				
+			}
+		},
+		methods: {
+			loadMore(){
+				this.activityList()
+			},
+			goDetail(id){
+				uni.navigateTo({
+					url:'/signUp/index?scene='+id
+				})
+			},
+			activityList(){
+				this.status = 'loading'
+				activityList(this.query).then(res=>{
+					if(res.state == 'Success'){
+						this.list = this.list.concat(res.content.records)
+						if (this.list.length >= res.content.total) {
+							this.status = 'noMore'
+						} else {
+							this.status = 'more'
+							this.query.pageCurrent++
+						}
+					}
+				})
+			}
+		},
+		onLoad() {
+			// this.activityList()
+		},
+		onShareTimeline() {
+		  return {
+		    title: "慧研学惠生活",
+		    query: "id=1",
+		  };
+		},
+		onShareAppMessage() {
+		  return {
+		    title: "慧研学惠生活",
+		    path: "/pages/activity/index",
+		  };
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.activity {
+		padding: 20rpx;
+		background: #F9F9F9;
+		min-height: 100vh;
+		.zs-list {
+			.item{
+				margin-bottom: 20rpx;
+				border-radius: 16rpx 16rpx 16rpx 16rpx;
+				.info{
+					background: #fff;
+					padding: 20rpx 24rpx;
+					.title{
+						font-size: 28rpx;
+						color: #222222;
+						width: 640rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					.desc{
+						font-size: 24rpx;
+						color: #AAAAAA;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						/* 弹性伸缩盒子模型显示 */
+						display: -webkit-box;
+						/* 限制在一个块元素显示的文本的行数 */
+						-webkit-line-clamp: 2;
+						/* 设置或检索伸缩盒对象的子元素的排列方式 */
+						-webkit-box-orient: vertical;
+						margin-top: 20rpx;
+					}
+				}
+			}
+		}
+	}
+</style>

+ 81 - 41
pages/index/index.vue

@@ -19,19 +19,7 @@
 				</view>
 			</view>
 			
-			<view class="swiper-box">
-				<view class="progress">
-					{{current+1+'/'+advList.length}}
-				</view>
-				<swiper class="swiper" @change="swiperChange" :current="current" :indicator-dots="false" circular :autoplay="true"
-					:interval="3000" :duration="1000">
-					<swiper-item v-for="(item,index) in advList" :key="item.id"  @click="jump(item.jumpUrl)">
-						<image class="swiper-item" mode="" :src="item.advertsImg">
-						</image>
-					</swiper-item>
-						
-				</swiper>
-			</view>
+			
 
 
 			<!-- 广告位 -->
@@ -48,31 +36,34 @@
 				<!-- 列表 -->
 				<zs-list class="store-box" mt="0" @load="loadMore" :status="status">
 					<view class="left">
-						<!-- 广告banner -->
-					<!-- 	<swiper class="adv-swiper" v-if="advList1.length" indicator-active-color="#fff" indicator-color="rgba(255, 255, 255, .46)" :indicator-dots="advList1.length>1" circular  autoplay>
-						
-							<swiper-item v-for="item in advList1" :key="item" @click="jump(item.jumpUrl)">
-								<image class="adv-item"
-									:src="item.advertsImg"
-									mode=""></image>
-							</swiper-item>
-						</swiper> -->
-
+						<view class="swiper-box">
+						<!-- 	<view class="progress">
+								{{current+1+'/'+advList.length}}
+							</view> -->
+							<swiper class="swiper" @change="swiperChange" skip-hidden-item-layout indicator-dots indicator-color="#fff" indicator-active-color="#FF4D3A" circular :autoplay="true"
+								:interval="3000" :duration="1000">
+								<swiper-item v-for="(item,index) in advList" :key="item.id"  @click="jump(item.jumpUrl)">
+									<image class="swiper-item" mode="" :src="item.advertsImg">
+									</image>
+								</swiper-item>
+									
+							</swiper>
+						</view>
 						
 						<view class="store-item" v-for="(item,index) in list" :key="index">
 							<template v-if="item.isAdv">
 								<!-- <image class="ad" :src="item.advertsImg" mode="widthFix"></image> -->
-								<zs-img :src="item.advertsImg" radius="full" width="340rpx" mode="widthFix" @click.native="jump(item.jumpUrl)"></zs-img>
+								<zs-img :src="item.advertsImg" radius="full" width="344rpx" 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=""></zs-img>
+								<zs-img :src="item.goodsVos[0].goodsImg" width="344rpx" height="344rpx" mode=""></zs-img>
 								<view class="info">
 									<view class="title">
 										{{item.goodsVos[0].goodsName}}
 									</view>
-									<view class="desc">
+									<!-- <view class="desc">
 										{{item.goodsVos[0].goodsDescribe}}
-									</view>
+									</view> -->
 									<view class="price-box">
 										<view class="left">
 											<!-- <view class="unit">
@@ -81,6 +72,9 @@
 											<view class="price">
 											¥{{item.goodsVos[0].realPrice}}
 											</view>
+											<view class="old-price">
+											¥{{item.goodsVos[0].marketPrice}}
+											</view>
 										</view>
 										
 										<view class="right">
@@ -96,18 +90,18 @@
 						
 						<view class="store-item" v-for="(item,index) in list1" :key="index">
 							<template v-if="item.isAdv">
-								<zs-img :src="item.advertsImg" radius="full" width="340rpx" mode="widthFix" @click.native="jump(item.jumpUrl)"></zs-img>
+								<zs-img :src="item.advertsImg" radius="full" width="344rpx" mode="widthFix" @click.native="jump(item.jumpUrl)"></zs-img>
 								<!-- <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=""></zs-img>
+								<zs-img :src="item.goodsVos[0].goodsImg" width="344rpx" height="344rpx" mode=""></zs-img>
 								<view class="info">
 									<view class="title">
 										{{item.goodsVos[0].goodsName}}
 									</view>
-									<view class="desc">
+									<!-- <view class="desc">
 										{{item.goodsVos[0].goodsDescribe}}
-									</view>
+									</view> -->
 									<view class="price-box">
 										<view class="left">
 											<!-- <view class="unit">
@@ -116,6 +110,10 @@
 											<view class="price">
 											¥{{item.goodsVos[0].realPrice}}
 											</view>
+											<view class="old-price">
+											¥{{item.goodsVos[0].marketPrice}}
+											</view>
+											
 										</view>
 										
 										<view class="right">
@@ -132,6 +130,8 @@
 
 		</view>
 
+		<!-- 广告弹窗 -->
+	  <zs-adv-dialog :list="dialogAdvList"></zs-adv-dialog>
 	</view>
 </template>
 
@@ -159,6 +159,7 @@
 				discountsList: [],//菜单
 				advList:[],
 				advList1:[],
+				dialogAdvList:[],
 				list: [],
 				copyList: [],
 				list1: [],
@@ -168,7 +169,7 @@
 					'location.lat':0,
 					'location.lon':0,
 					pageCurrent:1,
-					pageSize:10
+					pageSize:100
 				},
 				
 			}
@@ -397,7 +398,7 @@
 			// 金刚区
 			getMenu(){
 				return new Promise((resolve,reject)=>{
-					getMenu({currentPage:1,pageSize:10,status:2}).then(res=>{
+					getMenu({currentPage:1,pageSize:10,status:2,belongType:2}).then(res=>{
 						if(res.state == 'Success'){
 							this.discountsList = res.content.records
 							resolve(1)
@@ -418,6 +419,27 @@
 					})
 				})
 			},
+			// 弹窗广告
+			getDialogAdv() {
+				let loginShow
+				if(uni.getStorageSync('token')){
+					loginShow = 2
+				}else{
+					loginShow = 1
+				}
+			    getAdv({
+			      currentPage: 1,
+			      pageSize: 99,
+				  status:1,
+			      belongType: 2,
+				  loginShow,
+			      advertsType: 6,
+			    }).then((res) => {
+			      if (res.state == "Success") {
+			        this.dialogAdvList = res.content.records
+			      }
+			    });
+			},
 			// 获取商品列表内广告位
 			getGoodsAdv(){
 				return new Promise((resolve,reject)=>{
@@ -444,11 +466,24 @@
 		},
 		onHide() {},
 		onLoad(query){
-			
 			 uni.setStorageSync('inviteCode',decodeURIComponent(query.scene))
 		},
+		onShareTimeline() {
+		  return {
+		    title: "慧研学惠生活",
+		    query: "id=1",
+		    imageUrl: "https://hyxhsh.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/XHBjBiMRhVYG8f1a30bbbd80c2346197b81470444c9a.png/1.png",
+		  };
+		},
+		onShareAppMessage() {
+		  return {
+		    title: "慧研学惠生活",
+		    path: "/pages/index/index",
+		  };
+		},
 		created() {
 			this.loading = true
+			this.getDialogAdv()
 			Promise.all([this.getMenu(),this.getAdv(),this.getCity()]).then(res=>{
 				this.search()
 			})
@@ -547,11 +582,10 @@
 			}
 			.swiper-box{
 				position: relative;
-				margin: 0 24rpx 20rpx;
-				padding-top: 20rpx;
-				width: 702rpx;
-				height: 284rpx;
+				width: 344rpx;
+				height: 482rpx;
 				border-radius: 16rpx;
+				margin-bottom: 20rpx;
 				.progress{
 					position: absolute;
 					top: 38rpx;
@@ -567,8 +601,8 @@
 					position: relative;
 					height: 100%;
 					.swiper-item {
-						width: 100%;
-						height: 100%;
+						width: 344rpx;
+						height: 462rpx;
 						border-radius: 16rpx;
 						object-fit: cover;
 					}
@@ -611,7 +645,7 @@
 					}
 
 				.store-item {
-					width: 340rpx;
+					width: 344rpx;
 					margin-bottom: 20rpx;
 					// box-shadow: 0rpx 0rpx 24rpx 2rpx rgba(0, 0, 0, 0.08);
 					border-radius: 16rpx;
@@ -672,6 +706,12 @@
 									color: $uni-color-primary;
 									font-weight: bold;
 								}
+								.old-price{
+									font-size: 20rpx;
+									color: #AAAAAA;
+									text-decoration: line-through;
+									margin-left: 12rpx;
+								}
 							}
 							.right{
 								font-size: 24rpx;

+ 7 - 2
pages/index/searchResult.vue

@@ -118,8 +118,13 @@
 		},
 		methods: {
 			goShopDetail(item) {
-				console.log(11111111);
-				uni.setStorageSync('shopInfo', JSON.stringify(item))
+				let shopInfo = {
+					shopId:item.shopVo.shopId,
+					shopName:item.shopVo.shopName,
+					detailContent:item.detailContent,
+					logoPath:item.logoPath,
+				}
+				uni.setStorageSync('shopInfo', JSON.stringify(shopInfo))
 				uni.navigateTo({
 					url: '/detail/shopDetail/shopDetail'
 				})

+ 123 - 75
pages/my/index.vue

@@ -7,52 +7,58 @@
 				<image class="image" :src="userInfo.imgPath || defaultImg" lazy-load mode=""></image>
 				<view class="info">
 					<view class="user-name">{{userInfo.nickname ||'用户'}}</view>
-					<view class="tel">{{userInfo.phoneNum ||'-'}}</view>
+					<view class="tel" :style="{color:filterMeal(userInfo.setMealCode).color,backgroundColor:filterMeal(userInfo.setMealCode).bgColor}">{{filterMeal(userInfo.setMealCode).setMealName ||'开通会员'}}</view>
 				</view>
-				<image class="setting" src="../../static/setting.png" @click="setting" mode=""></image>
+				<image class="setting" src="../../static/edit-icon.png" @click="setting" mode=""></image>
 			</view>
-			<view class="level-box">
+			<view class="level-box"  @click="jump('../../my/memberCenter/index')">
 				<view class="level-content">
-					<image class="level" :src="`../../static/level${userInfo.setMealId || 0}.png`" mode=""></image>
-					<view class="num" :style="{color:filterMeal(userInfo.setMealId)}">
-						已为您节省0
+					<image class="level" :src="`../../static/level${userInfo.setMealCode|| 0}.png`" mode=""></image>
+					<view class="num" v-if="userInfo.setMealCode&&(userInfo.setMealCode!=0)" :style="{color:filterMeal(userInfo.setMealCode).bgColor}">
+						已为您节省99
 					</view>
 				</view>
 			</view>
 		</view>
-		<view class="btn-group">
-			<view class="item" @click="jump('../../my/order/index')">
+		<view class="box">
+			<view class="box-title">
+				我的订单
+			</view>
+			<view class="btn-group">
+				<view class="item" @click="jump('../../my/order/index')">
 
-				<image class="icon" src="../../static/icon1.png" mode=""></image>
-				<view class="label">
-					全部订单
+					<image class="icon" src="../../static/my/icon1.png" mode=""></image>
+					<view class="label">
+						全部订单
+					</view>
 				</view>
-			</view>
-			<view class="item" @click="jump('../../my/order/index?type=WAIT_PAYMENT')">
-				<image class="icon" src="../../static/icon2.png" mode=""></image>
-				<view class="label">
-					待付款
+				<view class="item" @click="jump('../../my/order/index?type=WAIT_PAYMENT')">
+					<image class="icon" src="../../static/my/icon2.png" mode=""></image>
+					<view class="label">
+						待付款
+					</view>
 				</view>
-			</view>
-			<view class="item" @click="jump('../../my/order/index?type=WAIT_USE')">
-				<image class="icon" src="../../static/icon3.png" mode=""></image>
-				<view class="label">
-					待使用
+				<view class="item" @click="jump('../../my/order/index?type=WAIT_USE')">
+					<image class="icon" src="../../static/my/icon3.png" mode=""></image>
+					<view class="label">
+						待使用
+					</view>
 				</view>
-			</view>
-			<view class="item" @click="jump('../../my/order/index?type=APPLY_REFUND')">
-				<image class="icon" src="../../static/icon4.png" mode=""></image>
-				<view class="label">
-					退款
+				<view class="item" @click="jump('../../my/order/index?type=APPLY_REFUND')">
+					<image class="icon" src="../../static/my/icon4.png" mode=""></image>
+					<view class="label">
+						退款
+					</view>
 				</view>
 			</view>
 		</view>
-
+		
+		
 		<view class="type-box">
-			<view class="type-item"  @click="jump('../../my/memberCenter/index')">
+			<view class="type-item"  @click="jump('/my/coupon/index')">
 				<view class="left">
 					<view class="title">
-						会员中心
+						我的优惠券
 					</view>
 					<view class="desc">
 						会员享受更多优惠
@@ -77,8 +83,14 @@
 			<!-- <u-cell title="优惠券" @click="jump('../../my/coupon/index')" :border="false" :isLink="true" arrow-direction="right">
 				<image slot="icon" class="cell-icon" src="../../static/icon7.png" mode=""></image>
 			</u-cell> -->
-			<u-cell title="研学MBTI测试"  @click="jump('../../study/test')" :border="false" :isLink="true" arrow-direction="right">
+		<!-- 	<u-cell title="研学MBTI测试"  @click="jump('../../study/test')" :border="false" :isLink="true" arrow-direction="right">
 				<image slot="icon" class="cell-icon" src="../../static/icon8.png" mode=""></image>
+			</u-cell> -->
+			<u-cell title="设置"  @click="jump('../../my/edit/edit')" :border="false" :isLink="true" arrow-direction="right">
+				<image slot="icon" class="cell-icon" src="../../static/setting-icon.png" mode=""></image>
+			</u-cell>
+			<u-cell title="客服"  @click="jump('../../my/service/index')" :border="false" :isLink="true" arrow-direction="right">
+				<image slot="icon" class="cell-icon" src="../../static/service-icon.png" mode=""></image>
 			</u-cell>
 		</u-cell-group>
 
@@ -91,6 +103,7 @@
 	import {
 		getUserDetail
 	} from '@/api/common.js'
+	import {mealList} from '@/api/combo.js'
 	export default {
 		data() {
 			return {
@@ -109,9 +122,10 @@
 					phoneNum: "",
 					sex: 0,
 					userId: "",
-					valid: 0
+					valid: 0,
+					setMealCode:0
 				},
-
+				list:[],//套餐列表
 			}
 		},
 		onShow() {
@@ -145,17 +159,25 @@
 
 		},
 		onLoad() {
-
+			this.mealList()
+			
 		},
 		
 		methods: {
+			
 			filterMeal(val) {
-				if(val == 1){
-					return '#3E5C91'
-				}else if(val == 2){
-					return '#FF532A'
-				}else if(val == 3){
-					return '#F3CC90'
+				let color
+				let bgColor
+				let setMealName
+				this.list.filter(item=>{
+					if(item.setMealCode == val){
+						color = item.colour
+						bgColor = item.backColour
+						setMealName = item.setMealName
+					}
+				})
+				return {
+					color,bgColor,setMealName
 				}
 			},
 			// 点击设置
@@ -209,6 +231,14 @@
 					}
 				})
 			},
+			// 获取套餐列表
+			mealList(){
+				mealList({currentPage:1,pageSize:99,status:1}).then(res=>{
+					if (res.state == 'Success') {
+						this.list = res.content.records
+					}
+				})
+			},
 			
 		}
 	}
@@ -217,17 +247,17 @@
 <style lang="scss">
 	.my {
 		height: 100vh;
-		padding: 0 30rpx;
+		padding: 0 24rpx;
 		background: #F9F9F9;
 
 		.top-box {
 			width: 750rpx;
 			height: 460rpx;
-			margin-left: -30rpx;
+			margin-left: -24rpx;
 			padding: 150rpx 30rpx 0;
 			box-sizing: border-box;
-			background: url('../../static/top-bg.png') no-repeat;
-			background-size: 100% 500rpx;
+			background: url('https://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/CXvU8kSyyCxUe83c049e4ddb2b66e0c80f6cb5c6b4b1.png/1.png') no-repeat;
+			background-size: 100% 460rpx;
 			position: relative;
 
 			.user-info {
@@ -254,36 +284,43 @@
 					}
 
 					.tel {
-						font-size: 24rpx;
+						font-size: 20rpx;
 						margin-top: 10rpx;
+						display: inline-block;
+						padding: 0 12rpx;
+						line-height: 36rpx;
+						border-radius: 18rpx 18rpx 18rpx 18rpx;
+						box-sizing: border-box;
+						background: #423625;
+						color: #F3CC90;
 					}
 				}
 
 				.setting {
-					width: 60rpx;
-					height: 60rpx;
+					width: 40rpx;
+					height: 40rpx;
 				}
 			}
 
 			.level-box {
 				position: absolute;
 				left: 0;
-				bottom: 0;
+				bottom: -24rpx;
 				padding: 0 35rpx 22rpx;
 				width: 750rpx;
 				box-sizing: border-box;
 				
 				.level-content {
-					width: 686rpx;
-					height: 100rpx;
+					width: 702rpx;
+					height: 134rpx;
 					position: absolute;
 					bottom: 0rpx;
 					left: 50%;
 					transform: translateX(-50%);
 
 					.level {
-						width: 100%;
-						height: 100%;
+						width: 702rpx;
+						height: 134rpx;
 					}
 
 					.num {
@@ -291,38 +328,47 @@
 						color: #F3CC90;
 						position: absolute;
 						right: 25rpx;
-						top: 50%;
-						transform: translateY(-50%);
+						top: 30rpx;
 					}
 				}
 			}
 
 		}
-
-		.btn-group {
-			display: flex;
-			align-items: center;
-			padding: 30rpx 20rpx;
-			margin-top: 20rpx;
-			border-radius: 16rpx;
+		
+		.box{
 			background: #fff;
-			width: 690rpx;
-			box-sizing: border-box;
-
-			.item {
-				flex: 1;
+			padding-top: 10rpx;
+			.box-title{
+				font-size: 32rpx;
+				font-weight: bold;
+				color: #222222;
+				padding-top: 20rpx;
+				margin-left: 24rpx;
+			}
+			.btn-group {
 				display: flex;
-				flex-direction: column;
 				align-items: center;
+				padding: 30rpx 20rpx;
+				// margin-top: 20rpx;
+				border-radius: 0 0 16rpx 16rpx;
+				width: 690rpx;
+				box-sizing: border-box;
 
-				.icon {
-					width: 100rpx;
-					height: 100rpx;
-				}
+				.item {
+					flex: 1;
+					display: flex;
+					flex-direction: column;
+					align-items: center;
+
+					.icon {
+						width: 100rpx;
+						height: 100rpx;
+					}
 
-				.label {
-					font-size: 24rpx;
-					color: #121212;
+					.label {
+						font-size: 24rpx;
+						color: #121212;
+					}
 				}
 			}
 		}
@@ -330,11 +376,13 @@
 		.type-box {
 			display: flex;
 			justify-content: space-between;
-
+			.type-item+.type-item{
+				background: linear-gradient( 91deg, rgba(132,176,255,0.2) 0%, #FFFFFF 100%);
+			}
 			.type-item {
 				width: 335rpx;
 				border-radius: 16rpx;
-				background: #FFFFFF;
+				background: linear-gradient( 91deg, rgba(254,198,92,0.3) 0%, #FFFFFF 100%);
 				padding: 32rpx 24rpx;
 				margin-top: 20rpx;
 				box-sizing: border-box;

+ 0 - 154
pages/service/chatRoom.vue

@@ -1,154 +0,0 @@
-<template>
-	<view class="chat-room">
-		
-		<view class="chat-list">
-			<view class="chat-item" v-for="(item,index) in list" :key="index">
-				<view class="chat-msg">
-					{{item.msg}}
-				</view>
-				<view class="head">
-					我
-				</view>
-			</view>
-		</view>
-		
-		<view class="tool-box">
-			<view class="input-box">
-				<input class="input" type="text" confirm-type="send" @confirm="send" placeholder="请输入" v-model="value" />
-				<image class="btn" src="../../static/emoji.png" mode=""></image>
-				<image class="btn" src="../../static/add.png" mode="" @click="this.show = !this.show"></image>
-			</view>
-			<view class="box" v-if="show">
-				<view class="item">
-					<image class="icon" src="../../static/picture.png" mode=""></image>
-					<view class="label">
-						照片
-					</view>
-				</view>
-				<view class="item">
-					<image class="icon" src="../../static/camera.png" mode=""></image>
-					<view class="label">
-						拍照
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		data() {
-			return {
-				show: false,
-				value:'',
-				list:[
-					{
-						type:'me',
-						msg:'你好,为什么我的加油时不能使用'
-					}
-				]
-			}
-		},
-		methods: {
-			send() {
-				console.log(this.value);
-				this.list.push(
-					{
-						type:'me',
-						msg:this.value
-					}
-				)
-				this.value = ''
-			}
-		},
-	}
-</script>
-
-<style lang="scss" scoped>
-	.chat-room {
-		background: #F9F9F9;
-		min-height: 100vh;
-		padding: 0 30rpx 120rpx;
-		
-		.chat-list{
-			display: flex;
-			flex-direction: column;
-			.chat-item{
-				display: flex;
-				align-items: center;
-					align-self: flex-end;
-					margin-bottom: 35rpx;
-				.chat-msg{
-					padding: 20rpx 40rpx;
-					font-size: 28rpx;
-					line-height: 38rpx;
-					background: $uni-color-primary;
-					border-radius: 40rpx 40rpx 0rpx 40rpx;
-					color: #fff;
-					margin: 0 30rpx;
-					max-width: 460rpx;
-					word-break: break-all;
-				}
-				.head{
-					width: 92rpx;
-					height: 92rpx;
-					text-align: center;
-					line-height: 92rpx;
-					border-radius: 50%;
-					background-color: #568FFF;
-					color: #fff;
-				}
-			}
-		}
-		
-		
-		.tool-box{
-			padding: 0 30rpx;
-			position: fixed;
-			bottom: 0%;
-			left: 0;
-			width: 750rpx;
-			box-sizing: border-box;
-				background: #fff;
-			.input-box {
-				display: flex;
-				align-items: center;
-				padding: 8rpx 0;
-				.input {
-					height: 80rpx;
-					line-height: 80rpx;
-					border-radius: 40rpx;
-					background: #F9F9F9;
-					padding-left: 30rpx;
-					flex: 1;
-				}
-
-				.btn {
-					width: 48rpx;
-					height: 48rpx;
-					margin: 0 10rpx;
-				}
-			}
-			
-			.box{
-				display: flex;
-				.item{
-					display: flex;
-					flex-direction: column;
-					align-items: center;
-					padding: 25rpx;
-					.icon{
-						width: 48rpx;
-						height: 48rpx;
-					}
-					.label{
-						font-size: 24rpx;
-						color: #707070;
-						margin-top: 10rpx;
-					}
-				}
-			}
-		}
-	}
-</style>

+ 3 - 2
pay/coupon.vue

@@ -27,7 +27,7 @@
 						</view> -->
 					</view>
 					<view class="radio-box">
-						<image class="radio" v-if="item.couponId == choose" @click="handleRadio(item.couponId)" :src="item.couponId == choose?require('@/static/choosed.png'):require('@/static/unChoose.png')" mode=""></image>
+						<image class="radio"  @click="handleRadio(item.couponId)" :src="item.couponId == choose?require('@/static/choosed.png'):require('@/static/unChoose.png')" mode=""></image>
 					</view>
 					
 				<!-- <view class="card-desc" v-show="open == index">
@@ -50,6 +50,7 @@
 
 <script>
 	import {getMyCouponList} from '@/api/coupon.js'
+	import {couponByUser,claim} from '@/api/coupon.js'
 	export default {
 		data() {
 			return {
@@ -123,7 +124,7 @@
 			},
 			getMyCouponList(){
 				this.status = 'loading'
-				getMyCouponList(this.query).then(res=>{
+				couponByUser(this.query).then(res=>{
 					if(res.state == 'Success'){
 						this.list = this.list.concat(res.content.records)
 						this.list.length>= res.content.total?this.status = 'noMore':this.status = 'more'

+ 1 - 0
pay/pay.vue

@@ -164,6 +164,7 @@
 						uni.hideLoading()
 						if (res.state == 'Success') {
 							this.realPay = res.content
+							this.info.couponId = res.content.couponId
 						}
 					})
 				})

+ 110 - 85
pay/pay1.vue

@@ -1,34 +1,24 @@
 <template>
 	<view class="pay">
 
-		<!-- <view class="shop-info" v-if="!isVisual">
-			<view class="shop-name">
-				{{info.shopName}}
-			</view>
-			<view class="address">
-				{{info.address}}
-			</view>
-		</view> -->
-
 		<view class="pay-info">
 			<view class="goods-info">
-				<!-- <image class="goods-img" :src="info.goodsImg" mode=""></image> -->
-				<view class="goods-img">
-					
-				</view>
+				<image class="goods-img" :src="createQuery.postImageUrl" mode=""></image>
+
 				<view class="info">
 					<view class="goods-name">
-						第二十条
+						{{createQuery.movieName}}
 					</view>
 					<view class="time">
-						2024-03-04 22:55
+						{{$u.timeFormat(createQuery.sessionBeginTime,'yyyy-mm-dd hh:MM')}}
 					</view>
 					<view class="desc">
-						2号厅 4排4座 4排5座  4排6座  4排7座
+						{{createQuery.seatNames}}
+						
 					</view>
 					<view class="price">
-						¥19.9 <view class="include">
-							(4张电影票)
+						¥{{totalPrice}} <view class="include">
+							({{createQuery.seatNames.split(',').length}}张电影票)
 						</view>
 					</view>
 				</view>
@@ -59,17 +49,6 @@
 			</view> -->
 
 		</view>
-		
-		<view class="input-box" v-if="isVisual">
-			
-			<view class="label">
-				充值账号
-			</view>
-			<view class="value">
-				{{form.account}}
-			</view>
-		</view>
-
 
 		<view class="btn-box">
 			<view class="total-price">
@@ -77,11 +56,14 @@
 					合计:
 				</view>
 				<view class="price">
-					¥ 19.9
+					¥ {{totalPrice}}
+				</view>
+				<view class="originPrice">
+					原价¥ {{totalOriginPrice}}
 				</view>
 			</view>
 
-			<button class="btn" type="default" :loading="loading" @click="creat1">提交订单</button>
+			<button class="btn" type="default" :loading="loading" @click="creat">提交订单</button>
 		</view>
 
 	</view>
@@ -91,9 +73,8 @@
 	import {
 		calculate
 	} from '@/api/order.js';
-	import {
-		creat
-	} from '@/api/goods.js'
+
+	import {create_order} from '@/api/movie.js'
 	import {
 		creatPayOrder,
 		queryPayOrder,
@@ -116,6 +97,7 @@
 					condition: '', //优惠条件
 					originalPrice: '', //原价
 				},
+				price:0,//显示价格
 				form:{
 					account:''
 				},
@@ -134,6 +116,34 @@
 					"subOpenId": "",
 					"userId": ""
 				},
+				createQuery:{
+					"channel":"ZhongShu",
+					"sessionId": "",//场次ID
+					"cityId": "",//城市ID
+					"cinemaId": "",//影院ID
+					"movieId": "",//电影ID
+					"cinemaCode": "",
+					"movieCode": "",
+					"cityName": "",//城市名称
+					"cinemaName": "",//影院名称
+					"hallName": "",//影厅名称
+					"movieName": "",//电影名称
+					"seatNames": "",//座位名称(多个用逗号分隔)
+					"postImageUrl": "",
+					"cinemaAddress": "",//影院地址
+					"sessionBeginTime": "",//开场时间
+					"sessionEndTime": "",
+					"movieVersion": "",
+					"userMobile": "",
+					// "cinemaLat": 0,
+					// "cinemaLng": 0,
+					// "audience": "",
+					// "entPara": "",
+					originPrice:[],
+					"buyModel": 0,
+					"originalSeatIds": "",//座位id,多个座位用逗号分隔
+					"sourceId": ""
+				},
 				// 支付信息
 				payData: {
 
@@ -153,7 +163,25 @@
 					condition: this.realPay.condition || '', //优惠条件
 					originalPrice: this.realPay.originalPrice, //原价
 				}
-			}
+			},
+			totalPrice(){
+				let total = 0
+				if(this.price.length){
+					this.price.map(item=>{
+						total+=item*10000
+					})
+				}
+				return total/10000
+			},
+			totalOriginPrice(){
+				let total = 0
+				if(this.createQuery.originPrice.length){
+					this.createQuery.originPrice.map(item=>{
+						total+=item*10000
+					})
+				}
+				return total/10000
+			},
 		},
 		methods: {
 			calculate(goodsId, shopId) {
@@ -180,12 +208,6 @@
 					}
 				})
 			},
-			creat1(){
-				uni.showToast({
-					title:'测试店铺不能支付',
-					icon:'none'
-				})
-			},
 			//创建订单
 			creat() {
 				if (this.loading) return
@@ -196,36 +218,20 @@
 					})
 					let that = this
 					if (!this.payData.timeStamp) {
-						// 处理扩展字段  暂时只有研学商品和视频会员  视频会员是字符串的JSON  研学是字符串
-						let extend 
-						try{
-							if(JSON.parse(this.info.extend)){
-								extend = this.info.extend
-							}
-						}catch(e){
-							extend = this.info.reservationTime || ''
-						}
-						
-						creat({
-							discountId: (this.payInfo.couponGoodsLogId || this.payInfo.couponGoodsLogId == -1) ? [this
-								.payInfo.couponGoodsLogId
-							] : [],
-							extend,
-							goodsList: this.info.goodsId ? [this.info.goodsId] : [],
-							idempotent: guid(),
-							shopId: this.info.shopId
-						}).then(res => {
+						let createQuery = JSON.parse(JSON.stringify(this.createQuery))
+						createQuery.originPrice = Math.max.apply(null,createQuery.originPrice)
+						create_order(createQuery).then(res => {
 							this.loading = false
 							if (res.state == 'Success') {
-								if (!this.payInfo.price) { //价格为0
-									uni.hideLoading()
-									uni.reLaunch({
-										url: '/my/order/index'
-									})
-								} else {
+								// if (!this.payInfo.price) { //价格为0
+								// 	uni.hideLoading()
+								// 	uni.reLaunch({
+								// 		url: '/my/order/index'
+								// 	})
+								// } else {
 									this.query.orderNo = res.content.orderNo
 									this.query.subOpenId = JSON.parse(uni.getStorageSync('userInfo')).openId
-									this.query.orderDesc = this.info.goodsName
+									this.query.orderDesc = this.createQuery.movieName +'电影票'
 									creatPayOrder(this.query).then(data => {
 										that.payData = JSON.parse(data.content.miniPayRequest)
 										if (data.content.miniPayRequest == null) return uni.hideLoading()
@@ -256,20 +262,24 @@
 												that.loading = false
 												uni.hideLoading()
 												uni.showToast({
-													title: '取消支付',
+													title: '取消支付1',
 													icon: 'fail'
 												})
-												// 取消支付后,获取支付信息以备再次支付
-												payDetails(that.query.orderNo).then(r => {
-													if (r.state == 'Success') {
-
-													}
+												// 取消支付后
+												uni.reLaunch({
+													url:'/my/order/movie/detail?id='+that.query.orderNo
 												})
+												// // 取消支付后,获取支付信息以备再次支付
+												// payDetails(that.query.orderNo).then(r => {
+												// 	if (r.state == 'Success') {
+
+												// 	}
+												// })
 											}
 										})
 
 									})
-								}
+								// }
 
 							}
 						})
@@ -324,16 +334,26 @@
 			let that = this
 			const eventChannel = this.getOpenerEventChannel();
 			eventChannel.on('pay', function(data) {
-				that.info = data
-				try{
-					let extend = JSON.parse(that.info.extend)
-					if(extend.account){
-						that.isVisual = true
-						that.form.account = extend.account
-					}
-				}catch(e){
-					//TODO handle the exception
-				}
+				that.createQuery.sessionId = data.sessionId
+				that.createQuery.cityId = data.cityId
+				that.createQuery.cinemaId = data.cinemaId
+				that.createQuery.movieId = data.movieId
+				that.createQuery.movieCode = data.movieCode
+				that.createQuery.cityName = data.cityName
+				that.createQuery.cinemaName = data.cinemaName
+				that.createQuery.hallName = data.hallName
+				that.createQuery.movieName = data.movieName
+				that.createQuery.seatNames = data.seatNames
+				that.createQuery.cinemaAddress = data.cinemaAddress
+				that.createQuery.sessionBeginTime = data.sessionBeginTime
+				that.createQuery.sessionEndTime = data.sessionEndTime
+				that.createQuery.originalSeatIds = data.originalSeatIds
+				that.createQuery.cinemaCode = data.cinemaCode
+				
+				that.createQuery.postImageUrl = data.postImageUrl
+				that.createQuery.originPrice = data.originPrice 
+				that.price = data.price 
+
 				console.log('data', data);
 				// that.calculate(that.info.goodsId, that.info.shopId)
 			})
@@ -381,7 +401,6 @@
 					width: 160rpx;
 					height: 200rpx;
 					border-radius: 16rpx;
-					background: #aaa;
 				}
 
 				.info {
@@ -528,6 +547,12 @@
 					color: #FF4848;
 					margin-left: 10rpx;
 				}
+				.originPrice{
+					font-size: 20rpx;
+					color: #AAAAAA;
+					margin-left: 10rpx;
+					text-decoration: line-through;
+				}
 			}
 
 			.btn {

+ 110 - 35
refuel/index.vue

@@ -1,28 +1,47 @@
 <template>
 	<view class="refuel">
+		<image class="banner" src="https://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/03uYm9N6msBkfcb964559107edb57a716b835f90fde5.jpg/1.jpg" mode=""></image>
+		
+		<view class="notice-box">
+			<image class="icon" src="../static/notice.png" mode=""></image>
+			进入加油站后,请前往安全区域使用手机
+		</view>
 		<!-- 内容 -->
 		<zs-list class="store-box" mt="0" @load="loadMore" :status="status">
 				<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>
+					<image class="tag" src="../static/refuel-tag.png" mode=""></image>
+					<!-- <zs-img :src="item.logo" width="200rpx" height="200rpx" radius="full" ></zs-img> -->
 					<view class="info">
-						<view class="title">
-							{{item.storeName}}
+						<view class="title-box">
+							<view class="title">
+								{{item.storeName}}
+							</view>
+							<view class="diatance-box">
+								<image class="icon" src="../static/refuel/nav-icon-black.png" mode=""></image>
+								{{(item.distance/1000).toFixed(2)}}km
+							</view>
 						</view>
 						<view class="address" >
 							距离你 {{(item.distance/1000).toFixed(2)}} 公里
 						</view>
 						<view  class="activity">
+							<view class="coupon">
+								<image class="icon" src="../static/refuel/card-icon.png" mode=""></image>
+								优惠券省999
+							</view>
+							
 							<view class="price-box">
+								<view class="label">
+									特惠价
+								</view>
 								<view class="price">
 									¥{{item |filterVipPrice}}/L
 								</view>
-								<view class="old-price">
-									国际价 ¥{{item|filterPrice}}/L
-								</view>
-							</view>
-							<view class="coupon">
-								可使用优惠券
 							</view>
+							
+						</view>
+						<view class="discount">
+							满200元减50
 						</view>
 						
 					</view>
@@ -66,7 +85,8 @@
 					'location.lat': 0,
 					'location.lon': 0,
 					pageCurrent: 1,
-					pageSize: 10
+					pageSize: 10,
+					userId: JSON.parse(uni.getStorageSync('userInfo')).userId
 				},
 			}
 		},
@@ -190,6 +210,24 @@
 	.refuel {
 		background: #F9F9F9;
 		padding: 20rpx 24rpx;
+		.banner{
+			width: 100%;
+			height: 132rpx;
+			border-radius: 16rpx;
+		}
+		.notice-box{
+			display: flex;
+			align-items: center;
+			font-weight: 300;
+			font-size: 22rpx;
+			color: #EE4927;
+			margin: 20rpx 0;
+			.icon{
+				width: 26rpx;
+				height: 26rpx;
+				margin-right: 10rpx;
+			}
+		}
 		.zs-list {
 			// padding-top: 20rpx;
 			.item {
@@ -198,60 +236,97 @@
 				background: #fff;
 				border-radius: 16rpx;
 				margin-bottom: 20rpx;
-				.icon {
-					width: 200rpx;
-					height: 180rpx;
-					border-radius: 8px;
+				position: relative;
+				.tag{
+					position: absolute;
+					top: 0%;
+					left: 0%;
+					width: 150rpx;
+					height: 53rpx;
 				}
 
 				.info{
 					flex: 1;
-					padding: 16rpx 0 16rpx 20rpx;
-					display: flex;
-					flex-direction: column;
-					justify-content: space-between;
-					.title{
-						font-size: 28rpx;
-						font-weight: bold;
-						width: 340rpx;
-						white-space: nowrap;
-						overflow: hidden;
-						text-overflow: ellipsis;
-						margin-top: 10rpx;
+					padding: 26rpx 0 0;
+					.title-box{
+						display: flex;
+						align-items: center;
+						justify-content: space-between;
+						.title{
+							font-size: 28rpx;
+							font-weight: bold;
+							width: 500rpx;
+							white-space: nowrap;
+							overflow: hidden;
+							text-overflow: ellipsis;
+							margin-top: 10rpx;
+						}
+						.diatance-box{
+							display: flex;
+							align-items: center;
+							font-weight: 400;
+							font-size: 24rpx;
+							color: #222222;
+							.icon{
+								width: 20rpx;
+								height: 20rpx;
+								margin-right: 8rpx;
+							}
+						}
 					}
 					.address{
 						font-weight: 300;
 						font-size: 24rpx;
 						color: #AAAAAA;
+						margin-top: 12rpx;
 					}
 					
 					.activity{
 						display: flex;
 						align-items: center;
 						justify-content: space-between;
+						margin-top: 20rpx;
 						.price-box{
 							display: flex;
 							align-items: center;
+							.label{
+								font-weight: 300;
+								font-size: 20rpx;
+								color: #FF4D3A;
+							}
 							.price{
 								font-weight: 600;
 								font-size: 32rpx;
 								color: $uni-color-primary;
-							}
-							.old-price{
-								font-weight: 300;
-								font-size: 18rpx;
-								color: #AAAAAA;
-								text-decoration: line-through;
-								margin-left: 10rpx;
+								margin-left: 8rpx;
 							}
 						}
 						.coupon{
 							font-weight: 300;
+							padding: 4rpx 16rpx;
+							font-weight: 400;
 							font-size: 24rpx;
-							color: $uni-color-primary;
+							color: #FFFFFF;
+							border-radius: 8rpx 8rpx 8rpx 8rpx;
+							background: linear-gradient( 270deg, #EE4320 0%, #FF9C87 100%);
+							display: flex;
+							align-items: center;
+							.icon{
+								width: 30rpx;
+								height: 30rpx;
+							}
 						}
 					}
-				
+					.discount{
+						display: inline-block;
+						font-weight: 300;
+						font-size: 22rpx;
+						color: #AAAAAA;
+						padding: 2rpx 12rpx;
+						border: 1rpx solid #F0F0F0;
+						border-radius: 4rpx 4rpx 4rpx 4rpx;
+						margin-top: 10rpx;
+					}
 				}
 			}
 		}

+ 248 - 133
refuel/refuelDetail.vue

@@ -1,35 +1,49 @@
 <template>
 	<view class="refuelDetail">
-		<zs-header :background="background"></zs-header>
-		<image class="banner" :src="info.logo" mode=""></image>
+		<!-- <zs-header :background="background"></zs-header> -->
+		<!-- <image class="banner" :src="info.logo" mode=""></image> -->
+		<view class="tag-title">
+			超值优惠券·加油更便宜
+		</view>
 		<view class="content">
-			<view class="title">
-				{{info.storeName}}
-			</view>
-			<view class="time">
-				营业时间 周一至周日  {{info.openTimeHourStart}}:00 - {{info.openTimeHourEnd}}:00
-			</view>
-			<view class="distance">
-				距离您{{(distance/1000).toFixed(2)}}公里
-			</view>
-			<view class="address-box">
+			<view class="block shopInfo">
+				<view class="title-box">
+					<view class="title">
+						{{info.storeName}}
+					</view>
+					<view class="diatance-box">
+						<image class="icon" src="../static/refuel/nav-icon-black.png" mode=""></image>
+						{{(distance/1000).toFixed(2)}}km
+					</view>
+				</view>
 				<view class="address">
 					{{info.address}}
 				</view>
+				<view class="time">
+					营业时间 周一至周日  {{info.openTimeHourStart}}:00 - {{info.openTimeHourEnd}}:00
+				</view>
 				
-				<view class="btn-box">
-					<view class="btn" @click="handleNavigation">
-						导航
+				<view class="address-box">
+					<view class="distance">
+						距离您{{(distance/1000).toFixed(2)}}公里
 					</view>
-					<view class="btn" @click="handleCall">
-						电话
+					
+					<view class="btn-box">
+						<view class="btn" @click="handleNavigation">
+							<image class="icon" src="../static/refuel/nav-icon.png" mode=""></image>
+							导航
+						</view>
+						<view class="btn" @click="handleCall">
+							<image class="icon" src="../static/refuel/tel-icon.png" mode=""></image>
+							电话
+						</view>
 					</view>
 				</view>
 			</view>
 			
-			<view class="price-box">
+			<view class="price-box block">
 				<view class="price">
-					优惠加油 ¥{{price.vipPrice?(price.vipPrice/100).toFixed(2):'--'}}/L
+					 ¥{{price.vipPrice?(price.vipPrice/100).toFixed(2):'--'}}/L <view class="label">优惠价</view> 
 				</view>
 				<view class="right-box">
 					<view class="old-price">
@@ -41,57 +55,69 @@
 				</view>
 			</view>
 			
-			<view class="choose-box">
-				<view class="item" :class="[num?'active':'']" @click="hanleChoose">
-					 {{num||"请选择油号"}}
-					<image class="icon" src="../static/shop-desc.png" mode=""></image>
+			<view class="block">
+				<view class="block-title">
+					选择油号/油枪
 				</view>
-				<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 class="choose-box">
+					<view class="item" :class="[num?'active':'']" @click="hanleChoose">
+						 {{num||"请选择油号"}}
+						<image class="icon" src="../static/shop-desc.png" mode=""></image>
 					</view>
-					<view class="value-box">
-						<view class="num">
-							约{{(payInfo.litre/1000).toFixed(2)}}升
-						</view>
-						<view class="value">
-							{{'¥'+ (payInfo.totalPrice/100).toFixed(2) }}
-						</view>
+					<view class="item" :class="[gun?'active':'']" @click="hanleChoose">
+						{{gun ? (gun + '号枪'):"请选择油枪"}}
+						<image class="icon" src="../static/shop-desc.png" mode=""></image>
 					</view>
 				</view>
-				<view class="item">
-					<view class="label">
-						服务费
-					</view>
-					<view class="value" :class="[!payInfo.totalPrice?'gray':'']">
-						{{payInfo.totalPrice?'¥'+(payInfo.serviceFee/100).toFixed(2) : '输入金额后查看服务费'}}
+				<view class="input-box">
+				<input class="price-input" type="digit" v-model="amount" placeholder-class="placeholder" placeholder-style="color:#AAAAAA;font-weight: 500;" placeholder="请输入加油金额,优惠价格计算" />
+					<view class="unit">
+						¥
 					</view>
 				</view>
-				<view class="item">
-					<view class="label">
-						优惠券减免金额
+				
+			</view>
+			
+				<view class="order-box block">
+					<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="value" :class="[!payInfo.totalPrice?'gray':'']">
-						{{payInfo.totalPrice?'¥'+(payInfo.promotionAmount/100).toFixed(2) : '输入金额后查看优惠金额'}}
+					<view class="item">
+						<view class="label">
+							服务费
+						</view>
+						<view class="value" :class="[!payInfo.totalPrice?'gray':'']">
+							{{payInfo.totalPrice?'¥'+(payInfo.serviceFee/100).toFixed(2) : '输入金额后查看服务费'}}
+						</view>
 					</view>
-				</view>
-				<view class="item">
-					<view class="label">
-						优惠券
+					<view class="item">
+						<view class="label">
+							优惠券减免金额
+						</view>
+						<view class="value" :class="[!payInfo.totalPrice?'gray':'',payInfo.promotionAmount?'red':'']">
+							{{payInfo.totalPrice?'-¥'+(payInfo.promotionAmount/100).toFixed(2) : '输入金额后查看优惠金额'}}
+						</view>
 					</view>
-					<view class="value gray">
-						{{payInfo.totalPrice?'暂无可用' : '输入金额后查看优惠券'}}
-						
+					<view class="item">
+						<view class="label">
+							优惠券
+						</view>
+						<view class="value gray">
+							{{payInfo.totalPrice?'暂无可用' : '输入金额后查看优惠券'}}
+							
+						</view>
 					</view>
 				</view>
-			</view>
 			
 		</view>
 
@@ -105,7 +131,8 @@
 				</view>
 			</view>
 		
-			<button class="btn" :class="[btnDisabled?'disabled':'']" type="default" :loading="loading" :disabled="btnDisabled" @click="handlePay">立即支付</button>
+	<!-- 		<button class="btn" :class="[btnDisabled?'disabled':'']" type="default" :loading="loading" :disabled="btnDisabled" @click="handlePay">立即支付</button> -->
+				<button class="btn" type="default" :loading="loading" :disabled="btnDisabled" @click="handlePay">立即支付</button>
 		</view>
 		
 		<u-popup :show="show" round="16rpx" mode="bottom" @close="close">
@@ -155,7 +182,6 @@
 		data() {
 			return {
 				type:1,
-				background:false,
 				map:null,
 				show:false,
 				loading:false,
@@ -433,13 +459,6 @@
 				})
 			}
 		},
-		onPageScroll(e) {
-				if (e.scrollTop >= 50) {
-					this.background = true
-				} else {
-					this.background = false
-				}
-		},
 		onReady() {
 			this.map = uni.createMapContext("map", this);
 		},
@@ -462,49 +481,79 @@
 
 <style lang="scss" >
 .refuelDetail{
+	background: #F5F5F6;
+	height: 100vh;
+	padding-bottom: 200rpx;
 	.banner{
 		width: 100%;
 		height: 382rpx;
 	}
-	.content{
-		margin-top: -20rpx;
-		min-height: 500rpx;
-		border-radius: 16rpx 16rpx 0 0;
-		position: relative;
-		z-index: 2;
+	.tag-title{
+		font-weight: 600;
+		font-size: 32rpx;
+		color: #EE4320;
+		height: 220rpx;
+		background: linear-gradient( 180deg, rgba(238,67,32,0.15) 0%, rgba(255,255,255,0) 100%);
+		padding: 20rpx 24rpx;
+		box-sizing: border-box;
+	}
+	.block{
+		margin: 0 24rpx 20rpx;
 		background: #fff;
-		padding: 28rpx 24rpx;
-		.title{
-			font-weight: 600;
-			font-size: 32rpx;
-			color: #222222;
-		}
-		.time{
-			font-weight: 300;
-			font-size: 24rpx;
-			color: #AAAAAA;
-			padding: 20rpx 0;
-			border-bottom: 1rpx solid #F0F0F0;
-		}
-		.distance{
-			font-weight: 300;
-			font-size: 24rpx;
-			color: #AAAAAA;
-			padding: 20rpx 0;
-		}
-		.address-box{
-			display: flex;
-			align-items: center;
-			justify-content: space-between;
-			width: 702rpx;
-			height: 140rpx;
+		border-radius: 8rpx 8rpx 8rpx 8rpx;
+		padding: 28rpx 24rpx ;
+	}
+	.content{
+		margin-top: -142rpx;
+		// min-height: 500rpx;
+		// border-radius: 16rpx 16rpx 0 0;
+		// position: relative;
+		// z-index: 2;
+		// background: #fff;
+		// padding: 28rpx 24rpx;
+		.shopInfo{
 			background-image: url('@/static/white-map.png');
-			background-repeat: repeat;
-			background-size: 100% 140rpx;
-			box-sizing: border-box;
-			padding: 36rpx 24rpx;
+			background-repeat: no-repeat;
+			background-size: 318rpx 295rpx;
+			background-position: right top;
+			.title-box{
+				display: flex;
+				align-items: flex-end;
+				justify-content: space-between;
+				.title{
+					font-weight: 600;
+					font-size: 32rpx;
+					color: #222222;
+					width: 500rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+					margin-top: 10rpx;
+				}
+				.diatance-box{
+					display: flex;
+					align-items: center;
+					font-weight: 400;
+					font-size: 24rpx;
+					color: #222222;
+					.icon{
+						width: 20rpx;
+						height: 20rpx;
+						margin-right: 8rpx;
+					}
+				}
+			}
+			
+			.time{
+				font-weight: 300;
+				font-size: 24rpx;
+				color: #AAAAAA;
+				padding: 20rpx 0;
+				border-bottom: 1rpx solid #F0F0F0;
+			}
+			
 			.address{
-				font-weight: 600;
+				font-weight: 400;
 				font-size: 24rpx;
 				color: #222222;
 				line-height: 40rpx;
@@ -517,22 +566,46 @@
 				-webkit-line-clamp: 2;
 				/* 设置或检索伸缩盒对象的子元素的排列方式 */
 				-webkit-box-orient: vertical;
+				margin-top: 10rpx;
 			}
-			.btn-box{
+			.address-box{
 				display: flex;
-				.btn+.btn{
-					margin-left: 16rpx;
-				}
-				.btn{
-					width: 120rpx;
-					height: 52rpx;
-					line-height: 52rpx;
-					text-align: center;
-					background: #E2ECFF;
-					border-radius: 26rpx 26rpx 26rpx 26rpx;
+				align-items: center;
+				justify-content: space-between;
+				// width: 702rpx;
+				// height: 140rpx;
+				// background-image: url('@/static/white-map.png');
+				// background-repeat: repeat;
+				// background-size: 100% 140rpx;
+				box-sizing: border-box;
+				padding-top: 20rpx;
+				
+				.distance{
 					font-weight: 300;
-					font-size: 28rpx;
-					color: #3879F9;
+					font-size: 24rpx;
+					color: #AAAAAA;
+				}
+				.btn-box{
+					display: flex;
+					.btn+.btn{
+						margin-left: 16rpx;
+					}
+					.btn{
+						width: 120rpx;
+						height: 52rpx;
+						line-height: 52rpx;
+						text-align: center;
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #222222;
+						display: flex;
+						align-items: center;
+						.icon{
+							width: 30rpx;
+							height: 30rpx;
+							padding-right: 10rpx;
+						}
+					}
 				}
 			}
 		}
@@ -540,11 +613,15 @@
 			display: flex;
 			align-items: center;
 			justify-content: space-between;
-			padding: 20rpx 0;
 			.price{
 				font-weight: 600;
-				font-size: 28rpx;
-				color: #222222;
+				font-size: 36rpx;
+				color: #EE4320;
+				display: flex;
+				align-items: center;
+				.label{
+					font-size: 22rpx;
+				}
 			}
 			.right-box{
 				display: flex;
@@ -557,11 +634,17 @@
 				}
 			}
 		}
+		.block-title{
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #222222;
+			padding-bottom: 24rpx;
+		}
 		.choose-box{
 			display: flex;
 			justify-content: space-between;
 			.item{
-				width: 340rpx;
+				width: 316rpx;
 				height: 80rpx;
 				line-height: 80rpx;
 				text-align: center;
@@ -585,21 +668,47 @@
 				color: #FF4D3A;
 			}
 		}
-		.price-input{
-			width: 702rpx;
+		.input-box{
+			position: relative;
+			overflow: hidden;
+			margin-top: 20rpx;
+			width: 100%;
 			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;
+			border-radius: 16rpx;
+			background: #F0F0F0;
+			.price-input{
+				position: absolute;
+				top: 50%;
+				left: 72rpx;
+				height: 70rpx;
+				line-height: 70rpx;
+				width: 450rpx;
+				transform: translateY(-50%);
+				font-weight: bold;
+				font-size: 32rpx;
+				color: #222;
+				box-sizing: border-box;
+			}
+			.placeholder{
+				font-size: 32rpx;
+				color: #AAAAAA;
+				height: 64rpx;
+				line-height: 64rpx;
+			}
+			.unit{
+				position: absolute;
+				top: 50%;
+				left: 28rpx;
+				transform: translateY(-50%);
+				font-size: 32rpx;
+				color: #222222;
+				font-weight: bold;
+			}
 		}
 		
 		.order-box{
+			padding: 0 24rpx;
 			.item{
 				display: flex;
 				align-items: center;
@@ -629,6 +738,11 @@
 				.gray{
 					color: #AAAAAA!important;
 				}
+				.red{
+					color: #EE4320!important;
+					font-weight: 600!important;
+					font-size: 28rpx!important;
+				}
 			}
 		}
 		
@@ -644,7 +758,7 @@
 		box-sizing: border-box;
 		padding: 10rpx 30rpx env(safe-area-inset-bottom);
 		border-top: 1rpx solid #EEEEEE;
-	
+		background: #fff;
 		.total-price {
 			display: flex;
 			align-items: center;
@@ -657,7 +771,7 @@
 			.price {
 				font-size: 36rpx;
 				font-weight: 800;
-				color: #222222;
+				color: #EE4320;
 				margin-left: 10rpx;
 			}
 		}
@@ -737,6 +851,7 @@
 				.item.active{
 					background: #FFF6F5;
 					color: #EE4320;
+					font-weight: bold;
 				}
 				.item.m0{
 					margin-right: 0!important;

+ 11 - 3
scenic/detail.vue

@@ -76,9 +76,10 @@
 			<view class="sub-title">
 				景区简介
 			</view>
-			<view class="intro border-bottom">
-				{{info.recommend|| '-'}}
-			</view>
+			<rich-text class="intro border-bottom" :nodes="info.scenicDescription"></rich-text>
+		<!-- 	<view class="intro border-bottom">
+				{{info.scenicDescription|| '-'}}
+			</view> -->
 			
 			<view class="sub-title">
 				交通信息
@@ -282,6 +283,7 @@
 					if(res.state == 'Success'){
 						this.info = res.content.data
 						this.info.bookNotice = JSON.parse(this.info.bookNotice)
+						this.info.scenicDescription = this.info.scenicDescription.replace(/<img/gi, '<img class="img_class" ')
 						console.log(this.info.bookNotice);
 					}
 				})
@@ -318,6 +320,9 @@
 
 <style lang="scss" >
 .scenic-detail{
+	.img_class{
+		max-width: 100% !important;
+	}
 	.top-banner{
 		width: 750rpx;
 		height: 382rpx;
@@ -562,6 +567,9 @@
 						.unit{
 							font-size: 20rpx;
 						}
+						.price{
+							font-weight: bold;
+						}
 					}
 				}
 			}

+ 110 - 80
scenic/index.vue

@@ -1,24 +1,30 @@
 <template>
 	<view class="scenic">
 		<zs-skeleton type="scenic" :loading="loading"></zs-skeleton>
-		<view class="search-box" @click="handleSearch">
-			<view class="city-box">
-		  <image class="icon" src="@/static/blue-position.png" mode=""></image>	
-		  <view class="city">
-		  	{{city}}
-		  </view>
+		<zs-header :background="background" title="景区门票"></zs-header>
+		<view class="bg-box">
+			<image class="bg" src="http://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/Nv8k50xQcNng4a51b33fc54f9dd85fefc3245bce0f91.jpg/1.jpg" mode=""></image>
+			<view class="fixed-box">
+				<view class="search-box" @click="handleSearch">
+					<view class="city-box">
+				  <image class="icon" src="@/static/blue-position.png" mode=""></image>	
+				  <view class="city">
+					{{city}}
+				  </view>
+					</view>
+				  <input class="search" disabled v-model="value" type="text" placeholder="景点名称" />
+				</view>
+				
 			</view>
-		  <input class="search" disabled v-model="value" type="text" placeholder="景点名称" />
 		</view>
-		
-		<view class="more-box">
-			<view class="title">
-				猜你喜欢
+			<view class="more-box">
+				<view class="title">
+					猜你喜欢
+				</view>
+				<!-- <view class="btn-box">
+					更多 <image class="btn" src="@/static/right.png" mode=""></image>
+				</view> -->
 			</view>
-			<!-- <view class="btn-box">
-				更多 <image class="btn" src="@/static/right.png" mode=""></image>
-			</view> -->
-		</view>
 		
 		<zs-list class="list" mt="20rpx" @load="loadMore" :status="status">
 			<view class="left">
@@ -92,11 +98,12 @@
 	export default {
 		data() {
 			return {
+				background:false,
 				city: uni.getStorageSync('city'),
 				value:'',
 				status:'more',
 				// query:{
-				//   key: uni.getStorageSync('city'),
+				//   key: '黄山风景区',
 				//   page: 1,
 				//   pageSize: 20
 				// },
@@ -106,7 +113,7 @@
 					'location.lat':0,
 					'location.lon':0,
 					pageCurrent:1,
-					pageSize:20
+					pageSize:10
 				},
 				list:[],
 				list1:[],
@@ -133,7 +140,7 @@
 			filterMinPrice(list){
 				if(list.length){
 					let arr = JSON.parse(JSON.stringify(list))
-					arr.sort(function(a,b){a.salePrice - b.salePrice})
+					arr.sort(function(a,b){ return a.salePrice - b.salePrice})
 					return arr[0].salePrice
 					console.log(arr);
 				}else{
@@ -154,7 +161,7 @@
 			},
 			loadMore(){
 				// this.getScenicList()
-				// this.search()
+				this.search()
 			},
 			getScenicList(){
 				this.status = 'loading'
@@ -184,7 +191,6 @@
 			},
 			search() {
 				if(this.status == 'noMore' || this.status == 'loading' || !this.query['location.lat']) return
-				console.log('加载数据',this.status,this.list,this.list1,this.query.pageCurrent);
 				this.status = 'loading'
 				search(this.query).then(res=>{
 					if(res.state == 'Success'){
@@ -204,17 +210,24 @@
 						// 存储原始数据
 						this.list = this.list.concat(list)
 						this.list1 = this.list1.concat(list1)
-						this.status = 'noMore'
-						// if(this.query.pageCurrent == res.content.pages){
-						// 	this.status = 'noMore'
-						// }else{
-						// 	this.status = 'more'
-						// 	this.query.pageCurrent++
-						// }
+						console.log('加载数据',this.status,this.list,this.list1,this.query.pageCurrent);
+						if(this.query.pageCurrent == res.content.pages){
+							this.status = 'noMore'
+						}else{
+							this.status = 'more'
+							this.query.pageCurrent++
+						}
 					}
 				})
 			}
 		},
+		onPageScroll(e) {
+			if (e.scrollTop >= 50) {
+				this.background = true
+			} else {
+				this.background = false
+			}
+		},
 		onLoad() {
 			this.loading = true
 			uni.getLocation({
@@ -237,72 +250,89 @@
 .scenic{
 	background: #F9F9F9;
 	min-height: 100vh;
-	padding: 112rpx 24rpx 0;
-	.search-box{
-		position: fixed;
-		top: 20rpx;
-		left: 24rpx;
-		width: 702rpx;
-		height: 72rpx;
-		// padding: 16rpx;
-		box-sizing: border-box;
-		
-		z-index: 9;
-		.city-box{
+	// padding: 0 24rpx ;
+	.bg-box{
+		width: 100%;
+		height: 624rpx;
+		position: relative;
+		.bg{
+			width: 100%;
+			height: 624rpx;
+		}
+		.fixed-box{
 			position: absolute;
+			top: 150rpx;
 			left: 0;
-			top: 50%;
-			transform: translateY(-50%);
-			display: flex;
-			align-items: center;
-			padding: 0 28rpx;
-			border-right: 1rpx solid #F0F0F0;
-			.icon{
-				width: 30rpx;
-				height: 30rpx;
-			}
-			.city{
-				font-weight: 600;
-				font-size: 28rpx;
-				color: #222222;
-				margin-left: 6rpx;
+			padding: 20rpx 24rpx;
+			z-index: 9;
+			// background: #F9F9F9;
+			.search-box{
+				width: 702rpx;
+				height: 72rpx;
+				// padding: 16rpx;
+				box-sizing: border-box;
+				position: relative;
+				z-index: 9;
+				.city-box{
+					position: absolute;
+					left: 0;
+					top: 50%;
+					transform: translateY(-50%);
+					display: flex;
+					align-items: center;
+					padding: 0 28rpx;
+					border-right: 1rpx solid #F0F0F0;
+					.icon{
+						width: 30rpx;
+						height: 30rpx;
+					}
+					.city{
+						font-weight: 600;
+						font-size: 28rpx;
+						color: #222222;
+						margin-left: 6rpx;
+					}
+				}
+				.search{
+					width: 702rpx;
+					height: 72rpx;
+					background: #FFFFFF;
+					border-radius: 40rpx 40rpx 40rpx 40rpx;
+					padding-left: 230rpx;
+					padding-right: 100rpx;
+					box-sizing: border-box;
+				}
 			}
 		}
-		.search{
-			width: 702rpx;
-			height: 72rpx;
-			background: #FFFFFF;
-			border-radius: 40rpx 40rpx 40rpx 40rpx;
-			padding-left: 230rpx;
-			padding-right: 100rpx;
-			box-sizing: border-box;
-		}
 	}
-	.more-box{
-		display: flex;
-		align-items: center;
-		justify-content: space-between;
-		.title{
-			font-weight: 600;
-			font-size: 32rpx;
-			color: #222222;
-		}
-		.btn-box{
+		.more-box{
 			display: flex;
 			align-items: center;
-			font-weight: 300;
-			font-size: 24rpx;
-			color: #AAAAAA;
-			.btn{
-				width: 48rpx;
-				height: 48rpx;
+			justify-content: space-between;
+			margin-top: 20rpx;
+			padding: 0 24rpx;
+			.title{
+				font-weight: 600;
+				font-size: 32rpx;
+				color: #222222;
+			}
+			.btn-box{
+				display: flex;
+				align-items: center;
+				font-weight: 300;
+				font-size: 24rpx;
+				color: #AAAAAA;
+				.btn{
+					width: 48rpx;
+					height: 48rpx;
+				}
 			}
 		}
-	}
 	.zs-list{
 		display: flex;
 		flex-wrap: wrap;
 		justify-content: space-between;
+		margin: 0 24rpx;
 		.item{
 			background: #FFFFFF;
 			border-radius: 16rpx;

+ 128 - 81
scenic/makeOut.vue

@@ -31,7 +31,7 @@
 				<view class="signUp-box">
 					<view class="label-box">
 						<view class="label">
-							报名人数
+							预订数量
 						</view>
 						<view class="desc">
 							(最多10张)
@@ -124,76 +124,79 @@
 				</u-form-item>
 			</view>
 			
-			<view class="content" v-for="(item,index) in form.touristList" :key="item">
-				<view class="sub-title">
-					出游人信息
-				</view>
-				<view class="no">
-					第{{index+1}}位
-				</view>
-				<u-form-item
-						label="姓名"
-						borderBottom
-						:ref="'touristList'+index+'name'"
-						:prop="`touristList.${index}.name`"
-						:required="required"
-				>
-					<u--input
-							v-model="item.name"
-							border="none"
-							placeholder="请输入姓名"
-					></u--input>
-				</u-form-item>
-				<u-form-item
-						label="手机号"
-						borderBottom
-						:ref="'touristList'+index+'tel'"
-						:prop="'touristList.'+index+'.tel'"
-						:required="required"
-				>
-					<u--input
-							v-model="item.tel"
-							border="none"
-							:maxlength="11"
-							placeholder="请输入手机号"
-					></u--input>
-				</u-form-item>
-				<u-form-item
-						label="证件类型"
-						borderBottom
-						ref="item13"
-						prop="name"
-						:required="required"
-						v-if="required"
-				>
-					<view class="time-box" @click="chooseType(index)">
-						{{item.psptType | filterType(that)}}
-						<image class="right-icon" src="../static/right.png" mode=""></image>
+			<template v-if="required">
+				
+				<view class="content" v-for="(item,index) in form.touristList" :key="item">
+					<view class="sub-title">
+						出游人信息
 					</view>
-				</u-form-item>
-				<u-form-item
-						label="证件号"
-						ref="item14"
-						:ref="'touristList'+index+'psptId'"
-						:prop="'touristList.'+index+'.psptId'"
-						:required="required"
-						v-if="required"
-				>
-					<u--input
-							v-model="item.psptId"
-							border="none"
-							placeholder="请输入证件号"
-							:maxlength="18"
-					></u--input>
-				</u-form-item>
-			</view>
+					<view class="no">
+						第{{index+1}}位
+					</view>
+					<u-form-item
+							label="姓名"
+							borderBottom
+							:ref="'touristList'+index+'name'"
+							:prop="`touristList.${index}.name`"
+							:required="required"
+					>
+						<u--input
+								v-model="item.name"
+								border="none"
+								placeholder="请输入姓名"
+						></u--input>
+					</u-form-item>
+					<u-form-item
+							label="手机号"
+							borderBottom
+							:ref="'touristList'+index+'tel'"
+							:prop="'touristList.'+index+'.tel'"
+							:required="required"
+					>
+						<u--input
+								v-model="item.tel"
+								border="none"
+								:maxlength="11"
+								placeholder="请输入手机号"
+						></u--input>
+					</u-form-item>
+					<u-form-item
+							label="证件类型"
+							borderBottom
+							ref="item13"
+							prop="name"
+							:required="idRequired"
+							v-if="idRequired"
+					>
+						<view class="time-box" @click="chooseType(index)">
+							{{item.psptType | filterType(that)}}
+							<image class="right-icon" src="../static/right.png" mode=""></image>
+						</view>
+					</u-form-item>
+					<u-form-item
+							label="证件号"
+							ref="item14"
+							:ref="'touristList'+index+'psptId'"
+							:prop="'touristList.'+index+'.psptId'"
+							:required="idRequired"
+							v-if="idRequired"
+					>
+						<u--input
+								v-model="item.psptId"
+								border="none"
+								placeholder="请输入证件号"
+								:maxlength="18"
+						></u--input>
+					</u-form-item>
+				</view>
+			</template>
 			
 		</u--form>
 		
 		<view class="btn-box">
 			<view class="left">
 				<view class="num">
-					共{{form.touristList.length}}件
+					共{{form.bookNumber}}件
 				</view>
 				<view class="total">
 					合计 <view class="price-box">
@@ -225,7 +228,7 @@
 		>
 		</u-calendar>
 		
-		 <u-picker :show="show1" :columns="columns" closeOnClickOverlay keyName="label" @close="show = false" @confirm="confirm"></u-picker>
+		 <u-picker :show="show1" :columns="columns" closeOnClickOverlay keyName="label" @cancel="close" @close="close" @confirm="confirm"></u-picker>
 		 
 		 <!-- 预定须知 -->
 		 <u-popup :show="showNotice" round="16rpx" mode="bottom" @close="showNotice = false">
@@ -325,6 +328,7 @@
 				  ]
 				},
 				required:false,//游客信息是否必填
+				idRequired:false,//游客身份证信息是否必填
 				showContact:false,//取票人信息是否必填
 				rules: {
 					'startTime':[
@@ -412,6 +416,22 @@
 							label: '台胞证',
 							id: 7
 						},
+						{
+							label: '回乡证',
+							id: 8
+						},
+						{
+							label: '户口簿',
+							id: 9
+						},
+						{
+							label: '出生证明',
+							id: 10
+						},
+						{
+							label: '台湾通行证',
+							id: 11
+						},
 					]
 				],
 				active:0,
@@ -483,7 +503,6 @@
 		},
 		methods: {
 			confirmTime(val){
-				console.log(11111111,val);
 				if(!val.length) return uni.showToast({
 					title:'请选择日期',
 					icon:'none'
@@ -501,6 +520,10 @@
 					this.form.touristList[this.active].psptType = val.value[0].id
 				}
 			},
+			close(){
+				console.log(9999);
+				this.show1 = false
+			},
 			chooseTime() {
 				this.show = true
 			},
@@ -510,14 +533,16 @@
 			},
 			add(val){
 				if((val==-1&&this.form.bookNumber == 1)||(val==1&&this.form.bookNumber == 10)) return
-				if(val){
-					this.form.touristList.push({
-					  "email": "",
-					  "name": "",
-					  "psptId": "",
-					  "psptType": 1,
-					  "tel": ""
-					})
+				if(val == 1){
+					if(this.required){
+						this.form.touristList.push({
+						  "email": "",
+						  "name": "",
+						  "psptId": "",
+						  "psptType": 1,
+						  "tel": ""
+						})
+					}
 				}else{
 					this.form.touristList.pop()
 				}
@@ -585,6 +610,16 @@
 						
 						})
 						
+					}else{
+						that.loading = false
+						uni.hideLoading()
+						uni.hideToast()
+						if(res.content.indexOf('不符合资源') != -1){
+							uni.showToast({
+								title: res.content.split('不符合资源')[0]+'不合法',
+								icon: 'none'
+							})
+						}
 					}
 				})
 			},
@@ -615,13 +650,15 @@
 							trigger: ['change','blur'],
 						  }
 						])
-						this.$set(this.rules, `touristList.${index}.psptId`, [
-						  {
-							required: true,
-							message: '请填写证件号码',
-							trigger: ['blur', 'change']
-						  }
-						])
+						if(this.idRequired){
+							this.$set(this.rules, `touristList.${index}.psptId`, [
+							  {
+								required: true,
+								message: '请填写证件号码',
+								trigger: ['blur', 'change']
+							  }
+							])
+						}
 					  })
 				 }
 				 console.log('rule',this.rules);
@@ -652,6 +689,12 @@
 				// 这几种类型 才需要填写游客信息
 				if([2,3,6,7].includes(that.ticketInfo.custInfoLimit)){
 					that.required = true
+					// 必填游客身份证
+					if([3,6].includes(that.ticketInfo.custInfoLimit)){
+						that.idRequired = true
+					}else{
+						that.idRequired = false
+					}
 				}else{
 					that.required = false
 					that.form.touristList = []
@@ -695,6 +738,7 @@
 		padding: 24rpx 0;
 		font-size: 28rpx;
 		color: #222222;
+		font-weight: bold;
 	}
 	.time-box{
 		display: flex;
@@ -814,6 +858,9 @@
 					.unit{
 						font-size: 20rpx;
 					}
+					.price{
+						font-weight: bold;
+					}
 				}
 			}
 		}

+ 92 - 45
scenic/search.vue

@@ -7,33 +7,33 @@
 		  	{{city}}
 		  </view>
 			</view>
-		  <input class="search" v-model="query.key" focus type="text" placeholder="景点名称" />
+		  <input class="search" v-model="query.queryName" focus type="text" placeholder="景点名称" />
 		</view>
 		
 		<zs-list class="list" mt="0" @load="loadMore" :status="status">
-			<view class="item" v-for="item in list" :key="item.scenicId" @click="goDetail(item)">
-				<zs-img :src="item.newPicUrl" width="200rpx" height="200rpx" radius="full" mode="center"></zs-img>
+			<view class="item" v-for="(item,index) in list" :key="index" @click="goDetail(item)">
+				<zs-img :src="item.logoPath" width="200rpx" height="200rpx" radius="full" mode="center"></zs-img>
 				<view class="info">
 					<view class="title">
-						{{item.scenicName}}
-					</view>
-					<view class="price-box">
-						<view class="unit">
-							¥
-						</view>
-						<view class="price">
-							580
-						</view>
-						<view class="text">
-							起
-						</view>
+						{{item.tripartiteJson.scenicName}}
 					</view>
 					<view class="address-box">
-						<view class="address">
-							重庆
+						<view class="price-box">
+							<view class="unit">
+								¥
+							</view>
+							<view class="price">
+									{{item.tripartiteJson.ticketList | filterMinPrice}}
+							</view>
+							<view class="text">
+								起
+							</view>
 						</view>
+						<!-- <view class="address">
+							重庆
+						</view> -->
 						<view class="distance">
-							{{item|filterDistance}} KM
+							{{(item.shopVo.distance/1000).toFixed(2)}} KM
 						</view>
 					</view>
 				</view>
@@ -46,7 +46,7 @@
 
 <script>
 	import {debounce} from '@/utils/tool.js'
-	import {getScenicList} from '@/api/scenic.js'
+	import { search } from '@/api/shop.js';
 	export default {
 		data() {
 			return {
@@ -54,21 +54,27 @@
 				status:'more',
 				list:[],
 				query:{
-				  key: "",
-				  page: 1,
-				  pageSize: 10
+					queryName:'',
+					menuId: 1,
+					range:1000,
+					'location.lat':0,
+					'location.lon':0,
+					pageCurrent:1,
+					pageSize:10
 				},
 			}
 		},
 		watch: {
-			'query.key':debounce(function(val) {
-				console.log(111111);
-					this.query.page = 1
-					this.list = []
-					this.status = 'more'
-					this.getScenicList()
+			'query.queryName':debounce(function(val) {
+				this.query.pageCurrent = 1
+				this.list = []
+				this.status = 'more'
 				if(val){
+					this.query.range = 9999
+				}else{
+					this.query.range = 1000
 				}
+					this.search()
 			})
 		},
 		filters: {
@@ -88,30 +94,60 @@
 				    s = s.toFixed(0)
 				    return s
 				
+			},
+			filterMinPrice(list){
+				if(list.length){
+					let arr = JSON.parse(JSON.stringify(list))
+					arr.sort(function(a,b){ return a.salePrice - b.salePrice})
+					return arr[0].salePrice
+					console.log(arr);
+				}else{
+					return 0
+				}
 			}
 		},
 		methods: {
 			loadMore(){
-				this.getScenicList()
+				this.search()
 			},
-			getScenicList(){
-				// if(!this.query.key) return
+			// getScenicList(){
+			// 	// if(!this.query.key) return
+			// 	this.status = 'loading'
+			// 	getScenicList(this.query).then(res=>{
+			// 		if(res.state == 'Success'){
+			// 			this.list = this.list.concat(res.content.data.rows)
+			// 			if(this.list.length>= res.content.data.totalCount){
+			// 				this.status = 'noMore'
+			// 			}else{
+			// 				this.status = 'more'
+			// 				this.query.page++
+			// 			}
+			// 		}
+			// 	})
+			// },
+			search() {
+				if(this.status == 'noMore' || this.status == 'loading' || !this.query['location.lat']) return
 				this.status = 'loading'
-				getScenicList(this.query).then(res=>{
+				search(this.query).then(res=>{
 					if(res.state == 'Success'){
-						this.list = this.list.concat(res.content.data.rows)
-						if(this.list.length>= res.content.data.totalCount){
+						let data = res.content.records
+						data.map((item,index)=>{
+							item.tripartiteJson = JSON.parse(item.tripartiteJson)
+						})
+						this.list = this.list.concat(data)
+						console.log('加载数据',this.status,this.list,this.query.pageCurrent);
+						if(this.query.pageCurrent >= res.content.pages){
 							this.status = 'noMore'
 						}else{
 							this.status = 'more'
-							this.query.page++
+							this.query.pageCurrent++
 						}
 					}
 				})
 			},
 			goDetail(item){
 				uni.navigateTo({
-					url:'/scenic/detail?id='+item.scenicId
+					url:`/scenic/detail?id=${item.tripartiteJson.scenicId}&epId=${item.shopVo.shopId}`
 				})
 			}
 		},
@@ -119,6 +155,18 @@
 			uni.setNavigationBarTitle({
 				title: uni.getStorageSync('city')
 			});
+			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>
@@ -129,18 +177,16 @@
 	padding: 112rpx 24rpx 0;
 	.search-box{
 		position: fixed;
-		top: 20rpx;
-		left: 24rpx;
-		width: 702rpx;
+		top: 0;
+		left: 0;
+		width: 100%;
 		height: 72rpx;
-		// padding: 16rpx;
-		box-sizing: border-box;
+		padding: 20rpx 24rpx;
 		z-index: 9;
-		background: #F6F6F6;
-		border-radius: 40rpx 40rpx 40rpx 40rpx;
+		background: #fff;
 		.city-box{
 			position: absolute;
-			left: 0;
+			left: 20rpx;
 			top: 50%;
 			transform: translateY(-50%);
 			display: flex;
@@ -165,6 +211,7 @@
 			padding-left: 230rpx;
 			padding-right: 100rpx;
 			box-sizing: border-box;
+			background: #F6F6F6;
 		}
 	}
 	.zs-list{
@@ -216,7 +263,7 @@
 				}
 				.address-box{
 					display: flex;
-					align-items: center;
+					align-items: flex-end;
 					justify-content: space-between;
 					font-weight: 300;
 					font-size: 20rpx;

+ 55 - 40
signUp/index.vue

@@ -1,53 +1,56 @@
 <template>
 	<view class="signUp">
-		<image class="good-img" :src="info.activityCover" mode="aspectFit"></image>
-		<view class="goods-info">
-			<view class="goods-name">
-				{{info.activityName}}
-			</view>
-			<view class="price-box" v-if="info.activityEnable == 1">
-				<view class="left">
-					<view class="unit">
-						¥
-					</view>
-					<view class="price">
-						{{info.price}}
+		<template v-if="info.activityType != 1">
+			<image class="good-img" :src="info.activityMain" mode="aspectFit"></image>
+			<view class="goods-info">
+				<view class="goods-name">
+					{{info.activityName}}
+				</view>
+				<view class="price-box" v-if="info.activityEnable == 1">
+					<view class="left">
+						<view class="unit">
+							¥
+						</view>
+						<view class="price">
+							{{info.price}}
+						</view>
 					</view>
+					
 				</view>
-				
 			</view>
-		</view>
-		
-		<view class="list">
-			<view class="item">
-				<view class="label">
-					活动时间
-				</view>
-				<view class="value">
-					{{info.activityStartTime}} 至 {{info.activityEndTime}}
+			
+			<view class="list">
+				<view class="item">
+					<view class="label">
+						活动时间
+					</view>
+					<view class="value">
+						{{info.activityStartTime}} 至 {{info.activityEndTime}}
+					</view>
 				</view>
-			</view>
-			<view class="item" v-if="info.activityEnable == 1">
-				<view class="label">
-					报名时间
+				<view class="item" v-if="info.activityEnable == 1">
+					<view class="label">
+						报名时间
+					</view>
+					<view class="value">
+						{{info.signupStartTime}} 至 {{info.signupEndTime}}
+					</view>
 				</view>
-				<view class="value">
-					{{info.signupStartTime}} 至 {{info.signupEndTime}}
+				<view class="item" v-if="info.address">
+					<view class="label">
+						活动地址
+					</view>
+					<view class="value">
+						{{info.address}}
+					</view>
 				</view>
 			</view>
-			<view class="item" v-if="info.address">
-				<view class="label">
-					活动地址
-				</view>
-				<view class="value">
-					{{info.address}}
-				</view>
+			
+			<view class="sub-title">
+				活动详情
 			</view>
-		</view>
+		</template>
 		
-		<view class="sub-title">
-			活动详情
-		</view>
 		<view class="desc-box">
 			<rich-text class="goods-desc" :nodes="info.activityDetail"></rich-text>
 		</view>
@@ -123,7 +126,19 @@
 		onLoad(options) {
 			this.id = decodeURIComponent(options.scene)
 			this.getActivityDetail(this.id)
-		}
+		},
+		onShareTimeline() {
+		  return {
+		    title: "慧研学惠生活-"+this.info.activityName,
+		    query: "scene="+this.id,
+		  };
+		},
+		onShareAppMessage() {
+		  return {
+		    title: "慧研学惠生活-"+this.info.activityName,
+		    path: "/signUp/index?scene="+this.id,
+		  };
+		},
 		
 	}
 </script>

+ 2 - 2
signUp/makeOut.vue

@@ -38,7 +38,7 @@
 				:ref="'uForm'+d"
 				labelWidth="150rpx"
 			>
-				<template v-for="(item,index) in setQuery.data">
+				<view v-for="(item,index) in setQuery.data" :key="index">
 					<u-form-item
 						:label="item.dataName"
 						:prop="'data_'+index+'_value'"
@@ -84,7 +84,7 @@
 							:maxCount="item.num"
 						></u-upload>
 					</u-form-item>
-				</template>
+				</view>
 			</u--form>
 		</view>
 		

+ 1 - 1
special/water.vue

@@ -1,7 +1,7 @@
 <template>
 	<view class="water">
 		<view class="bg-box">
-			<image class="bg" src="../static/water-bg.png" mode=""></image>
+			<image class="bg" src="https://zswl-dev.oss-cn-chengdu.aliyuncs.com/63b7c68b71a69169d1b33f92/store/bdb/user/avatar/P2up4p3ELZAH766942076ec3d579665764a3355f5ec7.png/1.png" mode=""></image>
 			<view class="btn" @click="handleBtn">
 				立即领取
 			</view>

BIN
static/activity_off.png


BIN
static/activity_on.png


BIN
static/close.png


BIN
static/cricle-white.png


BIN
static/disable-icon.png


BIN
static/down.png


BIN
static/edit-icon.png


BIN
static/error-img.png


BIN
static/half_star.png


BIN
static/home_off.png


BIN
static/home_on.png


BIN
static/icon1.png


BIN
static/icon2.png


BIN
static/icon3.png


BIN
static/icon4.png


BIN
static/jiayou.png


BIN
static/level0.png


BIN
static/level1.png


BIN
static/level2.png


BIN
static/level2023110101.png


BIN
static/level2023110102.png


BIN
static/level2023110103.png


BIN
static/level3.png


BIN
static/loading-img.png


BIN
static/map-bg.png


BIN
static/member/click.gif


BIN
static/member/vip1/card.png


BIN
static/member/vip1/icon1.png


Энэ ялгаанд хэт олон файл өөрчлөгдсөн тул зарим файлыг харуулаагүй болно