Pārlūkot izejas kodu

添加忽略文件

wenjie 1 gadu atpakaļ
vecāks
revīzija
68e50cf001
100 mainītis faili ar 5283 papildinājumiem un 1111 dzēšanām
  1. 1 1
      .gitignore
  2. 4 1
      App.vue
  3. 19 1
      api/goods.js
  4. 20 20
      api/order.js
  5. 8 6
      api/payment.js
  6. 8 1
      api/study.js
  7. 178 0
      components/zs-choose-tab/index.vue
  8. 6 4
      components/zs-img/index.vue
  9. 281 217
      detail/discountsDetail/index.vue
  10. 363 66
      detail/goodsDetail/index.vue
  11. 206 0
      detail/hotel/index.vue
  12. 43 0
      detail/movie/chooseSeat.vue
  13. 350 0
      detail/movie/index.vue
  14. 472 0
      detail/movie/movieDetail.vue
  15. 324 512
      detail/shopDetail/shopDetail.vue
  16. 70 0
      detail/shopList/index.vue
  17. 8 6
      detail/virtualGoods/index.vue
  18. 3 1
      login/login/login.vue
  19. 4 3
      login/login/otherLogin.vue
  20. 4 1
      my/edit/edit.vue
  21. 249 85
      my/order/detail.vue
  22. 6 6
      my/order/index.vue
  23. 57 35
      my/order/refund.vue
  24. 502 0
      my/order/refundDetail.vue
  25. 51 2
      pages.json
  26. 214 90
      pages/index/index.vue
  27. 19 7
      pages/index/search.vue
  28. 293 0
      pages/index/searchResult.vue
  29. 3 3
      pages/my/index.vue
  30. 1 1
      pay/offlinePayment.vue
  31. 31 19
      pay/pay.vue
  32. 549 0
      pay/pay1.vue
  33. BIN
      static/new-card.png
  34. BIN
      static/rePosition.png
  35. BIN
      static/right.png
  36. BIN
      static/shop-desc.png
  37. 1 1
      study/community/index.vue
  38. 4 2
      study/index.vue
  39. 9 1
      study/type.vue
  40. 7 1
      trip/index/index.vue
  41. 8 0
      uni_modules/anil-seat/changelog.md
  42. 741 0
      uni_modules/anil-seat/components/anil-seat/anil-seat.vue
  43. 81 0
      uni_modules/anil-seat/package.json
  44. 55 0
      uni_modules/anil-seat/readme.md
  45. BIN
      uni_modules/anil-seat/static/bought.png
  46. BIN
      uni_modules/anil-seat/static/close.png
  47. BIN
      uni_modules/anil-seat/static/selected-l.png
  48. BIN
      uni_modules/anil-seat/static/selected-r.png
  49. BIN
      uni_modules/anil-seat/static/selected.png
  50. BIN
      uni_modules/anil-seat/static/unselected-l.png
  51. BIN
      uni_modules/anil-seat/static/unselected-r.png
  52. BIN
      uni_modules/anil-seat/static/unselected.png
  53. 9 1
      unpackage/dist/build/mp-weixin/app.json
  54. 0 0
      unpackage/dist/build/mp-weixin/common/runtime.js
  55. 0 0
      unpackage/dist/build/mp-weixin/common/vendor.js
  56. 0 0
      unpackage/dist/build/mp-weixin/components/zs-img/index.js
  57. 1 1
      unpackage/dist/build/mp-weixin/components/zs-img/index.wxml
  58. 1 1
      unpackage/dist/build/mp-weixin/components/zs-img/index.wxss
  59. 0 0
      unpackage/dist/build/mp-weixin/detail/discountsDetail/index.js
  60. 3 3
      unpackage/dist/build/mp-weixin/detail/discountsDetail/index.json
  61. 1 1
      unpackage/dist/build/mp-weixin/detail/discountsDetail/index.wxml
  62. 0 0
      unpackage/dist/build/mp-weixin/detail/discountsDetail/index.wxss
  63. 0 0
      unpackage/dist/build/mp-weixin/detail/shopDetail/shopDetail.js
  64. 3 1
      unpackage/dist/build/mp-weixin/detail/shopDetail/shopDetail.json
  65. 0 0
      unpackage/dist/build/mp-weixin/detail/shopDetail/shopDetail.wxml
  66. 0 0
      unpackage/dist/build/mp-weixin/detail/shopDetail/shopDetail.wxss
  67. 0 0
      unpackage/dist/build/mp-weixin/login/login/login.js
  68. 1 1
      unpackage/dist/build/mp-weixin/login/login/login.json
  69. 0 0
      unpackage/dist/build/mp-weixin/login/login/otherLogin.js
  70. 0 0
      unpackage/dist/build/mp-weixin/login/login/otherLogin.wxml
  71. 2 2
      unpackage/dist/build/mp-weixin/login/login/otherLogin.wxss
  72. 0 0
      unpackage/dist/build/mp-weixin/my/edit/edit.js
  73. 1 1
      unpackage/dist/build/mp-weixin/my/edit/edit.wxml
  74. 1 1
      unpackage/dist/build/mp-weixin/my/edit/edit.wxss
  75. 0 0
      unpackage/dist/build/mp-weixin/my/order/detail.js
  76. 1 0
      unpackage/dist/build/mp-weixin/my/order/detail.json
  77. 0 0
      unpackage/dist/build/mp-weixin/my/order/detail.wxml
  78. 0 0
      unpackage/dist/build/mp-weixin/my/order/detail.wxss
  79. 0 0
      unpackage/dist/build/mp-weixin/my/order/index.js
  80. 1 1
      unpackage/dist/build/mp-weixin/my/order/index.wxml
  81. 0 0
      unpackage/dist/build/mp-weixin/pages/index/index.js
  82. 0 0
      unpackage/dist/build/mp-weixin/pages/index/index.wxml
  83. 0 0
      unpackage/dist/build/mp-weixin/pages/index/index.wxss
  84. 0 0
      unpackage/dist/build/mp-weixin/pages/my/index.js
  85. 0 0
      unpackage/dist/build/mp-weixin/pages/my/index.wxml
  86. 1 0
      unpackage/dist/build/mp-weixin/project.config.json
  87. 0 0
      unpackage/dist/build/mp-weixin/study/index.js
  88. 0 0
      unpackage/dist/build/mp-weixin/study/index.wxml
  89. 0 0
      unpackage/dist/build/mp-weixin/study/index.wxss
  90. 2 2
      unpackage/dist/build/mp-weixin/uni_modules/cc-dropDownMenu/components/cc-dropDownMenu/cc-dropDownMenu.json
  91. 2 2
      unpackage/dist/build/mp-weixin/uni_modules/uview-ui/components/u-status-bar/u-status-bar.json
  92. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map
  93. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map
  94. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map
  95. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/city-select/city-select.js.map
  96. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-banner/index.js.map
  97. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-img/index.js.map
  98. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-list/index.js.map
  99. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-load-more/index.js.map
  100. 0 0
      unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-search/index.js.map

+ 1 - 1
.gitignore

@@ -1 +1 @@
-unpackage/
+unpackage

+ 4 - 1
App.vue

@@ -3,11 +3,14 @@
 		getGoodsTypeObj,
 		getUserDetail
 	} from '@/api/common.js';
+	// 腾讯地图
+	// var QQMapWX = require('@/libs/qqmap-wx-jssdk.min.js');
+	// var qqmapsdk = new QQMapWX({key:'KX5BZ-B64RC-RO62W-AMWAZ-VVTC3-YAFXF'});
 	export default {
 
 		onLaunch: function() {
 			console.log('App Launch')
-			
+		
 			
 		},
 		onShow: function() {

+ 19 - 1
api/goods.js

@@ -1,5 +1,23 @@
 import {request} from '@/utils/request.js'
 
+
+// 获取商品列表
+export function getGoods(data) {
+	return request({
+		url: '/zswl-cloud-shop/goodsInfo/search',
+		data
+	})
+}
+
+// 获取商品详情
+export function detail(data) {
+	return request({
+		url: '/zswl-cloud-shop/goodsInfo/detail',
+		data
+	})
+}
+
+
 // 获取优惠券  店铺优惠券 多功能
 export function allCouponByUser(data) {
 	return request({
@@ -11,7 +29,7 @@ export function allCouponByUser(data) {
 // 购买商品
 export function creat(data) {
 	return request({
-		url: '/paymentserver/order/creat',
+		url: '/springbatchservice/order/creat',
 		method:'post',
 		data
 	})

+ 20 - 20
api/order.js

@@ -3,7 +3,7 @@ import {request} from '@/utils/request.js'
 // 订单列表
 export function getOrderList(data) {
 	return request({
-		url: '/paymentserver/order/user/search',
+		url: '/springbatchservice/order/user/search',
 		method:'post',
 		data
 	})
@@ -12,7 +12,7 @@ export function getOrderList(data) {
 // 生成二维码
 export function qrCode(data) {
 	return request({
-		url: '/paymentserver/order/qrCode/'+data,
+		url: '/springbatchservice/order/qrCode/'+data,
 	})
 }
 
@@ -20,7 +20,7 @@ export function qrCode(data) {
 // 创建扫码支付订单
 export function creatScanOrder(data) {
 	return request({
-		url: '/paymentserver/order/creatScanOrder',
+		url: '/springbatchservice/order/creatScanOrder',
 		method:'post',
 		data
 	})
@@ -29,7 +29,7 @@ export function creatScanOrder(data) {
 // 获取订单最优优惠券
 export function calculate(data) {
 	return request({
-		url: '/zswl-cloud-shop/goodsCouponLog/calculate',
+		url: '/zswl-cloud-shop/goodsInfo/calculate',
 		method:'post',
 		data
 	})
@@ -45,20 +45,20 @@ export function calculateByInput(data) {
 }
 
 
-// 计算商品价格
-export function getOrderPrice(data) {
-	return request({
-		url: '/paymentserver​/order​/orderPrice',
-		method:'post',
-		data
-	})
-}
+// // 计算商品价格
+// export function getOrderPrice(data) {
+// 	return request({
+// 		url: '/springbatchservice​/order​/orderPrice',
+// 		method:'post',
+// 		data
+// 	})
+// }
 
-// 申请退款
-export function applyRefund(data) {
-	return request({
-		url: '/zswl-cloud-bdb/orderRefund/applyRefund',
-		method:'post',
-		data
-	})
-}
+// // 申请退款
+// export function applyRefund(data) {
+// 	return request({
+// 		url: '/zswl-cloud-bdb/orderRefund/applyRefund',
+// 		method:'post',
+// 		data
+// 	})
+// }

+ 8 - 6
api/payment.js

@@ -3,7 +3,7 @@ import {request} from '@/utils/request.js'
 // 生成订单
 export function creatPayOrder(data) {
 	return request({
-		url: '/paymentserver/payment/creatPayOrder',
+		url: '/springbatchservice/pay/creatPayOrder',
 		method:'post',
 		data
 	})
@@ -12,14 +12,14 @@ export function creatPayOrder(data) {
 // 查询订单状态
 export function queryPayOrder(data) {
 	return request({
-		url: '/paymentserver/payment/query/'+data,
+		url: '/springbatchservice/pay/query/'+data,
 	})
 }
 
 // 退款申请
 export function applyRefund(data) {
 	return request({
-		url: '/paymentserver/payment/applicantRefund',
+		url: '/springbatchservice/pay/applicantRefund',
 		method:'post',
 		data
 	})
@@ -28,21 +28,23 @@ export function applyRefund(data) {
 // 支付详情
 export function payDetails(data) {
 	return request({
-		url: '/paymentserver/order/user/userDetails/'+data,
+		url: '/springbatchservice/order/user/orderDetail/'+data,
 	})
 }
 
 // 取消退款申请
 export function unRefund(data) {
 	return request({
-		url: '/paymentserver/payment/unRefund/'+data,
+		url: '/springbatchservice/pay/unRefund',
+		method:'post',
+		data
 	})
 }
 
 // 关闭订单
 export function close(data) {
 	return request({
-		url: '/paymentserver/payment/close/'+data,
+		url: '/springbatchservice/pay/close/'+data,
 	})
 }
 

+ 8 - 1
api/study.js

@@ -51,7 +51,7 @@ export function studyGoodsList(data) {
 // 研学商品推荐
 export function studyGoodsByUser(data) {
 	return request({
-		url: '/zswl-cloud-shop/goodsCoupon/studyGoodsByUser',
+		url: '/zswl-cloud-shop/goodsInfo/studyGoodsByUser',
 		data
 	})
 }
@@ -139,3 +139,10 @@ export function likes(data) {
 	})
 }
 
+// 研学商品列表
+export function studyGoods(data) {
+	return request({
+		url: '/zswl-cloud-shop/goodsInfo/studyGoods',
+		data
+	})
+}

+ 178 - 0
components/zs-choose-tab/index.vue

@@ -0,0 +1,178 @@
+<template>
+	<view class="">
+		
+	<view class="choose-tab" :style="{position}">
+		<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}}
+			</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)">
+					{{item.label}}
+				 </view>
+				
+			 </view>
+		
+	</view>
+		<view class="choose-modal" :style="{background:showModal?'rgba(0, 0, 0, .4)':'none'}" v-show="show" @click="show = false">
+		</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		props: {
+			position: {
+				type: String,
+				default: 'fixed'
+			},
+			showModal: {
+				type: Boolean,
+				default: true
+			},
+			tabList: {
+				type: Array,
+				default: ()=>{
+					return []
+				}
+			},
+		},
+		data() {
+			return {
+				show:false,
+				chooseList:['','','',''],
+				list:[],
+				active:0,
+				// tabList: [{
+				// 		id: 1,
+				// 		label: '区域',
+				// 		list: [
+
+				// 			{
+				// 				label: '观山湖'
+				// 			},
+				// 			{
+				// 				label: '白云区'
+				// 			},
+				// 			{
+				// 				label: '花果山区'
+				// 			}
+				// 		]
+				// 	},
+				// 	{
+				// 		id: 1,
+				// 		label: '全部分类',
+				// 		list: [{
+				// 				label: '甜点饮品'
+				// 			},
+				// 			{
+				// 				label: '特色美食'
+				// 			},
+				// 			{
+				// 				label: '风味小吃'
+				// 			}
+				// 		]
+				// 	},
+				// 	{
+				// 		id: 1,
+				// 		label: '智能排序',
+				// 		list: [
+
+				// 			{
+				// 				label: '距离优先'
+				// 			},
+				// 			{
+				// 				label: '销量优先'
+				// 			},
+				// 			{
+				// 				label: '低价优先'
+				// 			}
+				// 		]
+				// 	},
+				// 	{
+				// 		id: 1,
+				// 		label: '附近',
+				// 		list: [
+
+				// 			{
+				// 				label: '500m'
+				// 			},
+				// 			{
+				// 				label: '1KM'
+				// 			},
+				// 			{
+				// 				label: '2KM'
+				// 			}
+				// 		]
+				// 	},
+				// ]
+			}
+		},
+		methods: {
+			handleTab(item,index) {
+				this.active = index
+				this.$nextTick(()=>{
+					this.show = true
+				})
+			},
+			choose(item){
+				this.show = false
+				this.chooseList[this.active] = item.id == this.chooseList[this.active].id?'':item
+				this.$emit('choose',this.chooseList)
+			},
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.choose-modal {
+		position: fixed;
+		top: 0;
+		left: 0;
+		width: 100%;
+		height: 100%;
+		background: rgba(0, 0, 0, .4);
+		z-index: 99;
+	}
+
+	.choose-tab {
+		// position: fixed;
+		top: 0;
+		left: 0;
+		width: 100%;
+		z-index: 100;
+		.tab-list{
+			display: flex;
+			align-items: center;
+			padding: 22rpx;
+			background: #fff;
+			.tab {
+				background: #F0F0F0;
+				border-radius: 8rpx 8rpx 8rpx 8rpx;
+				height: 40rpx;
+				line-height: 40rpx;
+				color: #222222;
+				font-size: 24rpx;
+				padding: 0 20rpx;
+				margin-right: 16rpx;
+			}
+		}
+		
+		.box{
+			background: #fff;
+			border-radius: 0rpx 0rpx 16rpx 16rpx;
+			padding: 14rpx 0;
+			max-height: 600rpx;
+			overflow: auto;
+			.item{
+				font-size: 24rpx;
+				color: #222222;
+				padding: 14rpx 24rpx;
+			}
+		}
+			.active{
+				color: $uni-color-primary!important;
+			}
+	}
+</style>

+ 6 - 4
components/zs-img/index.vue

@@ -6,7 +6,8 @@
 </template>
 
 <script>
-	import guid from '@/utils/guid.js'
+	import guid from '@/utils/guid.js';
+	import {rpxTopx} from '@/utils/tool.js'
 	export default {
 		props: {
 			src: {
@@ -52,7 +53,7 @@
 		computed: {
 			url1:{
 				get:function(){
-					return this.imgSrc 
+					return this.imgSrc
 				},
 				set:function(val){
 					 this.imgSrc = val
@@ -67,11 +68,12 @@
 		onReady() {
 			this.Observer = uni.createIntersectionObserver(this)
 			this.Observer.relativeToViewport({bottom: -50}).observe('.lazy' + this.elIndex, (res) => {
-			  this.url1 = this.src
+				let width = this.width.replace('rpx','')
+			  this.url1 = this.src +'?x-oss-process=image/resize,w_'+ Math.ceil(rpxTopx(width)) 
 			})
 		},
 		beforeDestroy() {
-			this.Observer.disconnect()
+			this.Observer&&this.Observer.disconnect()
 		}
 	}
 </script>

+ 281 - 217
detail/discountsDetail/index.vue

@@ -1,104 +1,220 @@
 <template>
 	<view class="discountsDetail">
-		<zs-img width="100%" height="310rpx" :src="banner"></zs-img>
-		
-		<!-- titleArr: 选择项数组 dropArr: 下拉项数组 二维数组 @finishDropClick: 下拉筛选完成事件-->
-		<cc-dropDownMenu :titleArr="titleArr" :dropArr="dropArr" @finishDropClick="finishClick"></cc-dropDownMenu>
+		<zs-choose-tab :tabList="tabList" @choose="chooseTab"></zs-choose-tab>
 
 		<!-- 内容 -->
-			<zs-list  class="store-box" mt="0" @load="loadMore" :status="status">
+		<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 class="box">
+					<zs-img :src="item.logoPath" width="200rpx" height="200rpx" radius="full"
+						@click.native="goDetail(item)"></zs-img>
+					<view class="info">
+						<view class="title">
+							{{item.shopVo.shopName}}
+						</view>
+						<view class="desc">
+							{{item.district}}
+						</view>
 					</view>
-					<view  class="activity" :class="!item.activityContent?'white':''">
-						<image class="card" src="../../static/card-icon.png" mode=""></image>
-						{{item.activityContent || '-'}}
+				</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>
 					</view>
-					<view class="address" >
-						<image class="position" src="../../static/address-icon.png" mode=""></image>
-						距离你{{(item.shopVo.distance/1000).toFixed(2)}}km ·{{item.district}}
+					<view class="price-box">
+							<view class="unit">
+								¥
+							</view>
+							<view class="price">
+								{{i.realPrice}}
+							</view>
+							<view class="old-price">
+								市场价 ¥{{i.marketPrice}}
+							</view>
 					</view>
-					
 				</view>
+
 			</view>
-			</zs-list>
-		
+		</zs-list>
+
+
 
-		
 	</view>
 </template>
 
 <script>
-	import { search } from '@/api/shop.js';
+	import {
+		search
+	} from '@/api/shop.js';
+	import {
+		getMenu
+	} from '@/api/common.js'
 	export default {
-		options: { styleIsolation: 'shared' },
+		options: {
+			styleIsolation: 'shared'
+		},
 		data() {
 			return {
 				longitude: '',
 				latitude: '',
 				destination: '',
 				_mapContext: null,
-				status:'more',
+				status: 'more',
 				list: [],
-				btnText:'去使用',
-				titleArr: ['全城', '距离最近'],
-				dropArr: [
-					// 距离
-					[
-						{
-							text: '全城',
-							value: "440103"
-						}
-					],
+				btnText: '去使用',
+				banner: '',
+				menuId:'',
+				query: {
+					district:'',
+					menuId: '',
+					queryName: '',
+					range:'',
+					'location.lat': 0,
+					'location.lon': 0,
+					pageCurrent: 1,
+					pageSize: 10
+				},
+				location:'',
+				tabList: [{
+						id: 1,
+						label: '区域',
+						list: [
+
+							{
+								id: 1,
+								label: '观山湖'
+							},
+							{
+								id: 2,
+								label: '白云区'
+							},
+							{
+								id: 3,
+								label: '花果山区'
+							}
+						]
+					},
+					{
+						id: 1,
+						label: '全部分类',
+						list: [{
+								label: '甜点饮品'
+							},
+							{
+								label: '特色美食'
+							},
+							{
+								label: '风味小吃'
+							}
+						]
+					},
 					
-					// 类型
-					[
-						{
-							text: '距离最近',
-							value: "40-60"
-						}
-					],
-				],
-				banner:'',
-				filterResultData: [],
-				query:{
-					menuId:'',
-					queryName:'',
-					'location.lat':0,
-					'location.lon':0,
-					pageCurrent:1,
-					pageSize:10
-				}
+					{
+						id: 1,
+						label: '附近',
+						list: [
+							{
+								id:5,
+								label: '5KM'
+							},
+							{
+								id:10,
+								label: '10KM'
+							},
+							{
+								id:20,
+								label: '20KM'
+							},
+							{
+								id:50,
+								label: '50KM'
+							}
+						]
+					},
+				]
 			}
 		},
 		methods: {
-			finishClick(resultData) {
-				this.filterResultData = resultData;
+			// 筛选前两个商品
+			filterData(data){
+				return data.slice(0,2)
+			},
+			// 金刚区
+			getMenu(parentId) {
+				return new Promise((resolve, reject) => {
+					getMenu({
+						currentPage: 1,
+						pageSize: 10,
+						status: 2,
+						parentId
+					}).then(res => {
+						if (res.state == 'Success') {
+							let list = []
+							res.content.records.map(item => {
+								list.push({
+									id: item.id,
+									label: item.menuName
+								})
+							})
+							this.tabList[1].list = list
+							console.log(this.tabList);
+						}
+					})
+				})
 			},
-	
-			goDetail(item){
-				uni.setStorageSync('shopInfo',JSON.stringify(item))
+			chooseTab(val) {
+				console.log(val);
+				this.query.range = val[2].id
+				if(val[0]){
+					this.query['location.lat'] = val[0].location.lat
+					this.query['location.lon'] = val[0].location.lng
+					this.query.range = 50
+					this.query.district = val[0].label
+				}else if(!val[0]){
+					this.query['location.lat'] = this.location.latitude
+					this.query['location.lon'] = this.location.longitude
+					this.query.district = ''
+				}
+				if(val[1]){
+					this.query.menuId = val[1].id
+				}else if(!val[1]){
+					this.query.menuId = this.menuId
+				}
+				this.query.pageCurrent = 1
+				this.status = 'more'
+				this.list = []
+				this.search()
+			},
+			goDetail(item) {
+				uni.setStorageSync('shopInfo', JSON.stringify(item))
 				uni.navigateTo({
-					url:'../shopDetail/shopDetail'
+					url: '../shopDetail/shopDetail'
 				})
 			},
-			loadMore(){
+			loadMore() {
 				this.search()
 			},
 			search() {
-				return new Promise((resolve,reject)=>{
-					if(this.status == 'noMore') return
+				return new Promise((resolve, reject) => {
+					if (this.status == 'noMore') return
 					this.status = 'loading'
-					search(this.query).then(res=>{
-						if(res.state == 'Success'){
+					let obj = JSON.parse(JSON.stringify(this.query))
+					if(!obj.range){
+						delete obj.range
+					}
+					search(obj).then(res => {
+						if (res.state == 'Success') {
 							this.list = this.list.concat(res.content.records)
-							if(this.list.length >= res.content.total){
+							if (this.list.length >= res.content.total) {
 								this.status = 'noMore'
-							}else{
+							} else {
 								this.status = 'more'
 								this.query.pageCurrent++
 							}
@@ -112,14 +228,17 @@
 			this.query.pageCurrent = 1
 			this.list = []
 			this.status = 'more'
-			this.search().then(()=>{
+			this.search().then(() => {
 				uni.stopPullDownRefresh()
 			})
 		},
 		onLoad(option) {
+			this.tabList[0].list = JSON.parse(uni.getStorageSync('districtList'))
+			this.menuId = option.id
+			this.getMenu(option.id)
 			let that = this
 			const eventChannel = this.getOpenerEventChannel();
-			if(JSON.stringify(eventChannel) !=='{}'){
+			if (JSON.stringify(eventChannel) !== '{}') {
 				eventChannel.on('banner', function(data) {
 					that.banner = data
 				})
@@ -128,18 +247,17 @@
 				title: option.title
 			});
 			this.query.menuId = option.id
-			let location = JSON.parse(uni.getStorageSync('location'))
-			this.query['location.lat'] = location.latitude
-			this.query['location.lon'] = location.longitude
+			this.location = JSON.parse(uni.getStorageSync('location'))
+			this.query['location.lat'] = this.location.latitude
+			this.query['location.lon'] = this.location.longitude
 			this.search()
 
 		},
-		
+
 	}
 </script>
 
 <style lang="scss">
-
 	.bar-item-text {
 		max-width: 250rpx !important;
 	}
@@ -147,186 +265,132 @@
 	.screen-bar::after {
 		display: none;
 	}
-	.discountsDetail  cc-drop-down-menu .screen-bar{
+
+	.discountsDetail cc-drop-down-menu .screen-bar {
 		// position: fixed;
 		top: 0%;
 		left: 0;
 		width: 100%;
 	}
+
 	.discountsDetail {
-		.banner{
+		background: #F9F9F9;
+		padding-top: 80rpx;
+
+		.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;
+
+		.zs-list {
+			margin: 0 24rpx;
+
+			.item {
+				padding: 24rpx;
+				background: #fff;
 				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;
+				margin: 20rpx 0 0;
+
+				.box {
 					display: flex;
-					.icon{
-						width: 116rpx;
-						height: 116rpx;
-						margin-left: 15rpx;
+
+					.icon {
+						border-radius: 16px;
 					}
-					.info{
-						padding: 16rpx;
+
+					.info {
+						flex: 1;
+						padding-left: 20rpx;
 						display: flex;
 						flex-direction: column;
-						justify-content: space-between;
-						.title{
-							font-size: 20rpx;
-							font-weight: bold;
+						position: relative;
+
+						.title {
+							font-weight: 600;
+							font-size: 36rpx;
+							color: #222222;
+							width: 340rpx;
+							white-space: nowrap;
+							overflow: hidden;
+							text-overflow: ellipsis;
+							margin-top: 25rpx;
 						}
-						.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;
-							}
+
+						.desc {
+							margin-top: 30rpx;
+							font-size: 24rpx;
+							color: #AAAAAA;
+							overflow: hidden;
+							text-overflow: ellipsis;
+							/* 弹性伸缩盒子模型显示 */
+							display: -webkit-box;
+							/* 限制在一个块元素显示的文本的行数 */
+							-webkit-line-clamp: 2;
+							/* 设置或检索伸缩盒对象的子元素的排列方式 */
+							-webkit-box-orient: vertical;
 						}
+
+						
+
 					}
 				}
-			}
-		}
-
-		.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{
-					border-radius: 8px;
-				}	
-				.info{
-					flex: 1;
-					padding-left: 20rpx;
+				.goods-item.none{
+					border: none;
+					padding-bottom: 0;
+				}
+				.goods-item{
 					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;
+					padding: 20rpx 0;
+					border-bottom: 1rpx solid #F0F0F0;
+					.goods-info{
 						display: flex;
 						align-items: center;
-						font-size: 24rpx;
-						.u-icon{
-							align-self: flex-start;
+						.tag{
+							text-align: center;
+							font-size: 24rpx;
+							color: #FFFFFF;
+							width: 30rpx;
+							height: 30rpx;
+							line-height: 30rpx;
+							background: #EE4320;
+							border-radius: 8rpx 8rpx 8rpx 8rpx;
 						}
-						.position {
-								width: 30rpx;
-								height: 30rpx;
-								margin-right: 8rpx;
-							}
-					}
-					.activity.white{
-						color: #fff;
-						background: #fff;
-						.card{
-							display: none;
+						.goods-name{
+							font-weight: 400;
+							font-size: 24rpx;
+							color: #222222;
+							margin-left: 18rpx;
 						}
 					}
-					.activity{
-						font-size: 24rpx;
-						color: #FF4D3A;
-						line-height: 42rpx;
+					.price-box {
 						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%);
+							.unit {
+								font-size: 20rpx;
+								color: #FF4D3A;
+								font-weight: bold;
+							}
+					
+							.price {
+								font-size: 32rpx;
+								color: #FF4D3A;
+								font-weight: bold;
+							}
+					
+							.old-price {
+								font-size: 20rpx;
+								color: #AAAAAA;
+								text-decoration: line-through;
+								margin-left: 12rpx;
+							}
+						
 					}
-
 				}
 			}
 		}
 
-		#map {
-			position: relative;
-			top: -100000px;
-			left: -1000000px;
-		}
 	}
 </style>

+ 363 - 66
detail/goodsDetail/index.vue

@@ -1,43 +1,147 @@
 <template>
 	<view class="goodsDetail">
-		<image class="good-img" :src="info.studyItem" mode=""></image>
-		<view class="goods-box">
+		<image class="good-img" :src="info.goodsPath" mode="aspectFit"></image>
+		<view class="goods-info">
+			<view class="price-box">
+				<view class="left">
+					<view class="unit">
+						¥
+					</view>
+					<view class="price">
+						{{info.realPrice}}
+					</view>
+					<view class="old-price">
+						市场价 ¥{{info.marketPrice}}
+					</view>
+				</view>
+				
+				<view class="right">
+					销量{{info.saleNum}}
+				</view>
+			</view>
 			<view class="goods-name">
 				{{info.goodsName}}
 			</view>
-			<view class="tab">
-				{{goodsTypeObj[info.goodsCode]}}
+			<view class="desc">
+				{{info.goodsDescribe}}
+			</view>
+		</view>
+		<template v-if="info.specs[0].specValues.length">
+			<view class="type-box" v-for="item in info.specs" :key="item.specId">
+				<view class="type-title">
+					{{item.specName}}
+				</view>
+				<view class="type-list">
+					<view class="type-item" :class="[active == d?'active':'' ]" v-for="(i,d) in item.specValues" :key="i.specId">
+						{{i.specValue}}
+					</view>
+				</view>
+			</view>
+		</template>
+		
+		<view class="shop-limit" @click="jump('/detail/shopList/index')">
+			<view class="info">
+				<view class="shop-name">
+					<!-- 朱光玉火锅(天河店) -->
+					{{shopInfo.shopVo.shopName}}
+				</view>
+				<view class="address">
+					<!-- 花溪区天河潭旅游度假区天河潭  22.65km -->
+					{{shopInfo.district}}  {{(shopInfo.shopVo.distance/1000).toFixed(2)}} KM
+				</view>
+			</view>
+			<view class="num">
+				{{shopList.length}}家店适用
+				<image class="icon" src="../../static/shop-desc.png" mode=""></image>
+			</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)">
+				购买须知
 			</view>
 		</view>
-		<view class="price">
-			¥ {{info.buyPrice}}
+		<view class="desc-box" v-show="tab == 1">
+			<rich-text class="goods-desc" :nodes="info.goodsDetail"></rich-text>
 		</view>
-		<view class="desc-box">
-			<view class="title">
-				商品说明
+		<view class="list" v-show="tab == 2">
+			<view class="item" v-for="(item,index) in info.attrs">
+				<view class="label">
+					{{item.attrName == 'validDay'?'有效期':item.attrName}}
+				</view>
+				<view class="value" v-html="filterMsg(item.attrValue)">
+					
+				</view>
 			</view>
-<!-- 			<view class="goods-desc">
-					{{info.goodsDescribe}}
+			<!-- <view class="item">
+				<view class="label">
+					使用时间
+				</view>
+				<view class="value">
+					营业时间内可用
+				</view>
 			</view> -->
-			<rich-text class="goods-desc" :nodes="info.goodsDescribe"></rich-text>
 		</view>
 		
-		<button class="buy-btn" type="default" @click="handleBuy">立即购买</button>
+		
+		<view class="buy-box">
+			<image class="head" :src="shopInfo.logoPath" @click="goShopDetail(shopInfo)" mode=""></image>
+			<view class="btn-box">
+				
+			<!-- 	<view class="group-btn" @click="handleBuy">
+					<view class="label">
+						团购
+					</view>
+					<view class="price">
+						¥{{info.realPrice}}
+					</view>
+				</view> -->
+				<view class="buy-btn" :class="[info.realStockNum?'':'none']" @click="handleBuy">
+					<view class="label">
+					 {{info.realStockNum?'购买':'售罄'}}	
+					</view>
+					<view class="price">
+						¥{{info.realPrice}}
+					</view>
+				</view>
+			</view>
+		</view>
+		
 	</view>
 </template>
 
 <script>
+	import {detail} from '@/api/goods.js'
+	import {search} from '@/api/shop.js'
 	export default {
 		data() {
 			return {
+				active:0,
+				tab:1,
+				shopList:[],
 				info: {},
-				goodsTypeObj:{}
+				shopInfo:{}
 			}
 		},
 		methods: {
+			filterMsg(val){
+				return val.replace(/\n/g, "<br>")
+			},
+			jump(url){
+				uni.navigateTo({
+					url
+				})
+			},
+			handleTab(val){
+				this.tab = val
+			},
 			handleBuy() {
-				if (uni.getStorageSync('token')) {
+				if(!this.info.realStockNum) return
 					let that = this
+				if (uni.getStorageSync('token')) {
 					uni.navigateTo({
 						url:`/pay/pay`,
 						  success: function(res) {
@@ -53,20 +157,53 @@
 							console.log(res);
 							if(res.confirm){
 								uni.navigateTo({
-									url:'/login/login/login?redirect=/detail/goodsDetail/index'
+									url:`/login/login/login?redirect=/detail/goodsDetail/index&id=${that.info.goodsId}`
 								})
 							}
 						}
 					})
 				}
-				
 			
+			},
+			detail(goodsId){
+				detail({goodsId,resource:2}).then(res=>{
+					if(res.state == 'Success'){
+						this.info = res.content
+						this.info.goodsDetail = res.content.goodsDetail.replace(/<img/gi, '<img class="img_class" ')
+					}
+				})
+			},
+			goShopDetail(shopInfo) {
+				uni.setStorageSync('shopInfo', JSON.stringify(shopInfo))
+				uni.navigateTo({
+					url: `../../detail/shopDetail/shopDetail`
+				})
+			},
+			getShopList(goodsId){
+				let location = JSON.parse(uni.getStorageSync('location'))
+				let obj = {
+					goodsId,
+					pageCurrent:1,
+					pageSize:99
+				}
+				obj['location.lat'] = location.latitude
+				obj['location.lon'] = location.longitude
+				search(obj).then(res=>{
+					if(res.state == 'Success'){
+						this.shopList = res.content.records
+						uni.setStorageSync('shopList',JSON.stringify(this.shopList))
+					}
+				})
 			}
+			
 		},
-		onLoad() {
+		onLoad(option) {
+			
+			this.shopInfo = JSON.parse(uni.getStorageSync('shopInfo')) 
+			this.detail(option.id)
+			this.getShopList(option.id)
 			let that = this
-			this.goodsTypeObj = JSON.parse(uni.getStorageSync('goodsTypeObj'))
-			this.info = JSON.parse(uni.getStorageSync('goodsInfo')) 
+			// this.info = JSON.parse(uni.getStorageSync('goodsInfo')) 
 			// const eventChannel = this.getOpenerEventChannel();
 			// if(JSON.stringify(eventChannel) !=='{}'){
 			// 	eventChannel.on('goodsInfo', function(data) {
@@ -78,72 +215,232 @@
 	}
 </script>
 
-<style lang="scss" scoped>
+<style lang="scss" >
 .goodsDetail{
+	background: #F9F9F9;
+	padding-bottom: 200rpx;
+	min-height: 100vh;
 	.good-img{
 		width: 100%;
-		height: 420rpx;
+		height: 660rpx;
+		vertical-align: bottom;
 	}
-	.goods-box{
-		display: flex;
-		align-items: center;
-		margin-left: 32rpx;
-		margin-top: 28rpx;
+	.goods-info{
+		padding: 24rpx;
+		margin-bottom: 20rpx;
+		background: #fff;
+		.price-box{
+			display: flex;
+			justify-content: space-between;
+			align-items: center;
+			.left{
+				display: flex;
+				align-items: flex-end;
+				.unit{
+					font-size: 20rpx;
+					color: #FF4D3A;
+					font-weight: bold;
+				}
+				.price{
+					font-size: 32rpx;
+					color: #FF4D3A;
+					font-weight: bold;
+				}
+				.old-price{
+					font-size: 20rpx;
+					color: #AAAAAA;
+					text-decoration: line-through;
+					margin-left: 12rpx;
+				}
+			}
+			.right{
+				font-size: 24rpx;
+				color: #AAAAAA;
+			}
+		}
 		.goods-name{
-			font-weight: bold;
-			color: #222222;
 			font-size: 32rpx;
+			color: #222222;
+			font-weight: bold;
+			margin-top: 20rpx;
 		}
-		.tab{
-			height: 36rpx;
-			line-height: 36rpx;
-			text-align: center;
-			color: #FFFFFF;
+		.desc{
 			font-size: 24rpx;
-			background: #FF4C3A;
-			border-radius: 0rpx 12rpx 0rpx 12rpx;
-			margin-left: 20rpx;
-			padding: 0 6rpx;
+			color: #AAAAAA;
+			overflow: hidden;
+			text-overflow: ellipsis;
+			white-space: nowrap;
+			margin-top: 12rpx;
 		}
 	}
-	.price{
-		font-weight: 800;
-		color: #FF4C3A;
-		font-size: 36rpx;
-		margin-left: 32rpx;
-		margin-top: 20rpx;
-		padding-bottom: 28rpx;
+	.type-box{
+		padding: 24rpx;
+		background: #fff;
+		margin-bottom: 20rpx;
+		.type-title{
+			font-size: 28rpx;
+			color: #222222;
+		}
+		.type-list{
+			display: flex;
+			flex-wrap: wrap;
+			justify-content: space-between;
+			.type-item{
+				width: 316rpx;
+				height: 52rpx;
+				text-align: center;
+				line-height: 52rpx;
+				background: #F0F0F0;
+				border-radius: 26rpx 26rpx 26rpx 26rpx;
+				font-weight: 300;
+				font-size: 24rpx;
+				color: #AAAAAA;
+				margin-top: 28rpx;
+			}
+			.type-item.active{
+				background: #EE4320;
+				color: #FFFFFF;
+			}
+		}
 	}
-	.desc-box{
-		padding: 0 32rpx 150rpx;
-		.title{
-			font-weight: bold;
+	
+	.shop-limit{
+		padding: 24rpx;
+		background: #fff;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-bottom: 20rpx;
+		.info{
+			.shop-name{
+				font-size: 28rpx;
+				color: #222222;
+			}
+			.address{
+				font-size: 24rpx;
+				color: #AAAAAA;
+				margin-top: 16rpx;
+			}
+		}
+		.num{
+			display: flex;
+			align-items: center;
+			font-size: 24rpx;
+			color: #AAAAAA;
+			.icon{
+				width: 48rpx;
+				height: 48rpx;
+				transform: rotate(-90deg);
+			}
+		}
+	}
+	
+	.tab-group{
+		display: flex;
+		background: #fff;
+		.tab{
+			flex:1;
+			padding: 24rpx 0;
+			text-align: center;
+			font-size: 28rpx;
 			color: #222222;
-			font-size: 32rpx;
-			padding: 30rpx 0;
-			border-top: 1rpx solid #F0F0F0;
 		}
+		.tab.active{
+			font-weight: 600;
+		}
+	}
+	
+	.desc-box{
 		.goods-desc{
 			color: #222222;
 			font-size: 24rpx;
+			.img_class{
+				max-width: 100%!important;
+			}
+		}
+	}
+	
+	.list{
+		background: #fff;
+		.item{
+			padding: 24rpx;
+			border-top:1rpx solid #F0F0F0;
+			.label{
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #222222;
+			}
+			.value{
+				font-size: 24rpx;
+				color: #AAAAAA;
+				margin-top: 16rpx;
+				line-height: 40rpx;
+			}
 		}
 	}
 	
-	.buy-btn{
+	.buy-box{
 		position: fixed;
-		bottom: 60rpx;
-		left: 50%;
-		transform: translateX(-50%);
-		width: 688rpx;
-		height: 80rpx;
-		line-height: 80rpx;
-		text-align: center;
-		font-weight: bold;
-		color: #FFFFFF;
-		font-size: 28rpx;
-		background: $uni-color-primary;
-		box-shadow: inset 0rpx 6rpx 12rpx 2rpx rgba(255,255,255,0.16);
-		border-radius: 46rpx 46rpx 46rpx 46rpx;
+		bottom: 0%;
+		left: 0%;
+		width: 100%;
+		background: #fff;
+		padding: 10rpx 24rpx 76rpx;
+		display: flex;
+		justify-content: space-between;
+		box-sizing: border-box;
+		.head{
+			width: 80rpx;
+			height: 80rpx;
+			background: #aaa;
+			border-radius: 50%;
+		}
+		.btn-box{
+			display: flex;
+			text-align: center;
+			.group-btn{
+				width: 280rpx;
+				height: 80rpx;
+				background: #6499FF;
+				border-radius: 40rpx 0rpx 0rpx 40rpx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-around;
+				.label{
+					font-weight: 600;
+					font-size: 28rpx;
+					color: #FFFFFF;
+				}
+				.price{
+					font-size: 24rpx;
+					color: #FFFFFF;
+				}
+			}
+			.buy-btn.none{
+				filter: grayscale(1);
+			}
+			.buy-btn{
+				// width: 280rpx;
+				width: 560rpx;
+				height: 80rpx;
+				background: #3879F9;
+				border-radius: 40rpx;
+				// border-radius: 0rpx 40rpx 40rpx 0rpx;
+				display: flex;
+				flex-direction: column;
+				justify-content: space-around;
+				.label{
+					font-weight: 600;
+					font-size: 28rpx;
+					color: #FFFFFF;
+				}
+				.price{
+					font-size: 24rpx;
+					color: #FFFFFF;
+				}
+			}
+		}
 	}
+	
 }
 </style>

+ 206 - 0
detail/hotel/index.vue

@@ -0,0 +1,206 @@
+<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>
+	
+	<view class="search-box">
+		<view class="address-box">
+			<view class="address">
+				重庆江北国际机场T3航站楼楼楼楼楼楼楼楼
+			</view>
+			<image class="more" src="../../static/right.png" mode=""></image>
+			<view class="nearby">
+				附近酒店
+			</view>
+			<image class="position" src="../../static/rePosition.png" mode=""></image>
+		</view>
+		
+		<view class="chooose-box">
+			<view class="time-box">
+				
+				<view class="start-time">
+					03月07日
+				</view>
+				<view class="day">
+					周四
+				</view>
+				<view class="line">
+					—
+				</view>
+				<view class="end-time">
+					03月07日
+				</view>
+				<view class="day">
+					周五
+				</view>
+			</view>
+			
+			<view class="total">
+				共1晚 
+				<image class="more" src="../../static/right.png" mode=""></image>
+			</view>
+		</view>
+		
+		<view class="input-box">
+			<input class="input" type="text" v-model="value" placeholder="搜索酒店名/地名/关键词" />
+			<image class="more" src="../../static/right.png" mode=""></image>
+		</view>
+		
+		<view class="btn-box">
+			<button class="btn" type="default">特惠购票</button>
+		</view>
+		
+	</view>
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				value: ''
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+.hotel{
+	background: #F9F9F9;
+	min-height: 100vh;
+	.banner{
+		
+	}
+	.search-box{
+		padding: 28rpx 24rpx;
+		width: 702rpx;
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		margin: 0 24rpx 20rpx;
+		position: relative;
+		top: -224rpx;
+		box-sizing: border-box;
+		.address-box{
+			display: flex;
+			align-items: center;
+			padding-bottom: 30rpx;
+			.address{
+				flex: 1;
+				font-weight: 600;
+				font-size: 32rpx;
+				color: #222222;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+			}
+			.more{
+				width: 48rpx;
+				height: 48rpx;
+				margin: 0 16rpx;
+			}
+			.nearby{
+				font-weight: 300;
+				font-size: 24rpx;
+				color: #222222;
+			}
+			.position{
+				width: 48rpx;
+				height: 48rpx;
+			}
+		}
+		.chooose-box{
+			padding: 78rpx 0 24rpx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			border-top:1rpx solid #F0F0F0;
+			border-bottom: 1rpx solid #F0F0F0;
+			.time-box{
+				display: flex;
+				align-items: flex-end;
+				.start-time,.end-time{
+					font-weight: 600;
+					font-size: 32rpx;
+					color: #222222;
+					position: relative;
+				}
+				.start-time::before{
+					content: '入住';
+					position: absolute;
+					top:calc(-100% - 20rpx);
+					left: 0;
+					font-weight: 300;
+					font-size: 24rpx;
+					color: #222222;
+				}
+				.end-time::before{
+					content: '离店';
+					position: absolute;
+					top:calc(-100% - 20rpx);
+					left: 0;
+					font-weight: 300;
+					font-size: 24rpx;
+					color: #222222;
+				}
+				
+				.line{
+					font-weight: 600;
+					font-size: 32rpx;
+					color: #222222;
+					margin: 0 16rpx;
+				}
+				.day{
+					font-weight: 300;
+					font-size: 28rpx;
+					color: #222222;
+					margin-left: 16rpx;
+					vertical-align: bottom;
+				}
+			}
+			.total{
+				display: flex;
+				align-items: center;
+				font-weight: 300;
+				font-size: 24rpx;
+				color: #222222;
+				.more{
+					width: 48rpx;
+					height: 48rpx;
+				}
+			}
+		}
+		
+		.input-box{
+			position: relative;
+			line-height: 84rpx;
+			border-bottom: 1rpx solid #F0F0F0;
+			.input{
+				width: 100%;
+				height: 84rpx;
+				line-height: 84rpx;
+				padding-right: 48rpx;
+				font-size: 24rpx;
+				color: #222222;
+			}
+			.more{
+				width: 48rpx;
+				height: 48rpx;
+				position: absolute;
+				top: 50%;
+				right: 0%;
+				transform: translateY(-50%);
+			}
+		}
+		.btn-box{
+			padding-top: 28rpx;
+			.btn{
+				height: 80rpx;
+				background: #EE4320;
+				border-radius: 40rpx;
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #FFFFFF;
+			}
+		}
+	}
+}
+</style>

+ 43 - 0
detail/movie/chooseSeat.vue

@@ -0,0 +1,43 @@
+<template>
+	<view class="movie">
+		<anil-seat
+		ref="anilSeat"
+		  title="皮皮鲁与鲁西西之罐头小人"
+		  info="2021年01月22日 国语 奇幻 喜剧 儿童"
+		  room-name="5号厅"
+		  :seat-data="seatData" 
+		  :max="4" 
+		  @confirm="onConfirmSeat">
+		</anil-seat>
+	</view>
+</template>
+
+<script>
+	import {
+		seatData
+	} from '@/utils/seat-data.js'
+	export default {
+		data() {
+			return {
+			}
+		},
+		methods: {
+			onConfirmSeat (items) {
+			  console.log(items)
+			  uni.navigateTo({
+			  	url:`/pay/pay1`,
+			  })
+			}
+		},
+		onLoad() {
+			 // 座位图初始化 - seatData座位数据
+			this.$refs['anilSeat'].initData(seatData)
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.movie{
+	
+}
+</style>

+ 350 - 0
detail/movie/index.vue

@@ -0,0 +1,350 @@
+<template>
+	<view class="movie">
+		<view class="header" :style="{height:height +'px'}">
+			<image class="back" src="../../static/back-btn.png" @click="back" mode=""></image>
+			<view class="tab" :class="[tab == 1?'active':'']" @click="handleTab(1)">
+				热映
+			</view>
+			<view class="tab" :class="[tab == 2?'active':'']" @click="handleTab(2)">
+				影院
+			</view>
+			<view class="tab" :class="[tab == 3?'active':'']" @click="handleTab(3)">
+				待映
+			</view>
+		</view>
+		<!-- 列表 -->
+		<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="img-box">
+						<view class="tag">
+							IMAX 2D
+						</view>
+						<view class="icon">
+							
+						</view>
+					</view>
+					<view class="info">
+						<view class="name">
+							熊出没·逆转时空
+						</view>
+						<view class="score-box">
+							<view class="score">
+								评分 <view class="num">
+									9.6
+								</view>
+							</view>
+							<view class="want-num">
+								4.2万人想看
+							</view>
+						</view>
+						<view class="actor">
+							张伟 张秉君
+						</view>
+						<view class="play-movie-num">
+							今天 269家影院放映2507场
+						</view>
+					</view>
+					<button class="buy-btn" type="default" @click="buy">购票</button>
+				</view>
+			</template>
+			
+			<template v-else-if="tab == 2">
+				<view class="cinema-item" v-for="(item,index) in list2" :key="index">
+					<view class="name-box">
+						<view class="name">
+							熊出没·逆转时空1111
+						</view>
+						<view class="price">
+							¥19.9 <view class="label">起</view>
+						</view>
+					</view>
+					<view class="address-box">
+						<view class="address">
+							沙坪坝区大学城景苑路(美丽熙街)8号附1027号
+						</view>
+						<view class="distance">
+							700m
+						</view>
+					</view>
+					<view class="movie-name">
+						飞驰人生2/熊出没·逆转时空/第二十条
+					</view>
+				</view>
+			</template>
+			
+			<template v-else-if="tab == 3">
+				<view class="item" v-for="(item,index) in list3" :key="index">
+					<view class="img-box">
+						<view class="tag">
+							IMAX 2D
+						</view>
+						<view class="icon">
+							
+						</view>
+					</view>
+					<view class="info">
+						<view class="name">
+							熊出没·逆转时空222222
+						</view>
+						<view class="score-box">
+							<view class="score">
+								评分 <view class="num">
+									9.6
+								</view>
+							</view>
+							<view class="want-num">
+								4.2万人想看
+							</view>
+						</view>
+						<view class="actor">
+							张伟 张秉君
+						</view>
+						<view class="play-movie-num">
+							今天 269家影院放映2507场
+						</view>
+					</view>
+					<button class="presell-btn" type="default" @click="buy">预售</button>
+				</view>
+			</template>
+		</zs-list>
+	</view>
+</template>
+
+<script>
+	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],
+			}
+		},
+		methods: {
+			list() {
+				return this['list'+this.tab]
+			}
+		},
+		methods: {
+			back(){
+				uni.switchTab({
+					url:'/pages/index/index'
+				})
+			},
+			handleTab(val){
+				this.tab = val
+			},
+			buy(){
+				uni.navigateTo({
+					url:'/detail/movie/movieDetail'
+				})
+			},
+			loadMore() {
+				
+			}
+		},
+		created() {
+			//去除
+			//#ifndef H5 || MP-ALIPAY ||APP-PLUS
+			//获取小程序胶囊的高度
+			let {
+				bottom
+			} = uni.getMenuButtonBoundingClientRect()
+			this.height = bottom
+			//#endif
+		}
+	}
+</script>
+
+<style lang="scss" >
+.movie{
+	background: #F9F9F9;
+	.header{
+		display: flex;
+		justify-content: center;
+		align-items: flex-end;
+		background: #fff;
+		padding-bottom: 8px;
+		position: fixed;
+		top: 0;
+		left: 0;
+		width: 100%;
+		.back{
+			position: absolute;
+			left: 32rpx;
+			bottom: 8px;
+			width: 40rpx;
+			height: 40rpx;
+		}
+		.tab{
+			font-size: 36rpx;
+			color: #AAAAAA;
+			padding: 0 20rpx;
+			vertical-align: bottom;
+		}
+		.tab.active{
+			color: #222222;
+			font-weight: 600;
+		}
+	}
+	.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;
+					.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{
+					// font-size: 24rpx;
+					// color: #AAAAAA;
+				}
+				.play-movie-num{
+					// font-size: 24rpx;
+					// color: #AAAAAA;
+				}
+			}
+			.buy-btn{
+				position: absolute;
+				top: 50%;
+				right: 0;
+				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;
+			}
+		}
+		
+		.cinema-item{
+			background: #FFFFFF;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			padding: 24rpx;
+			margin-bottom: 20rpx;
+			.name-box{
+				display: flex;
+				justify-content: space-between;
+				.name{
+					font-weight: 600;
+					font-size: 28rpx;
+					color: #222222;
+					width: 450rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.price{
+					display: flex;
+					align-items: center;
+					font-size: 28rpx;
+					color: #FF4D3A;
+					.label{
+						font-size: 24rpx;
+						color: #AAAAAA;
+					}
+				}
+			}
+			.address-box{
+				display: flex;
+				justify-content: space-between;
+				font-size: 24rpx;
+				color: #AAAAAA;
+				margin-top: 16rpx;
+				.address{
+					width: 460rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.distance{
+					
+				}
+			}
+			.movie-name{
+				font-size: 24rpx;
+				color: #222222;
+				margin-top: 16rpx;
+				width: 100%;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+			}
+		}
+	}
+}
+</style>

+ 472 - 0
detail/movie/movieDetail.vue

@@ -0,0 +1,472 @@
+<template>
+	<view class="movieDetail">
+		<view class="info-box">
+			<view class="info">
+				<view class="icon">
+					
+				</view>
+				<view class="box">
+					<view class="name">
+						第二十条
+					</view>
+					<view class="score-box">
+						<view class="score">
+							评分 <view class="num">
+								9.6
+							</view>
+						</view>
+						<view class="want-num">
+							4.2万人想看
+						</view>
+					</view>
+					
+					<view class="type-box">
+						喜剧 剧情 <view class="tag">
+							IMAX 2D
+						</view>
+					</view>
+					
+					<view class="publish-info">
+						2024年3月25日上映 141分钟
+					</view>
+				</view>
+			</view>
+			
+			<view class="title-box">
+				<view class="title">
+					简介
+				</view>
+				<view class="open">
+					展开
+					<image class="icon" src="../../static/shop-desc.png" mode=""></image>
+				</view>
+			</view>
+			
+			<view class="desc">
+				这一年的不容易谁能懂?自打挂职到市检察院,韩明(雷佳音
+				饰)的糟心事就接二连三。儿子韩雨辰(刘耀文 饰)打了校领导
+				(张译 饰)儿子并拒绝道歉,妻子李茂娟(马丽 饰)义愤填…
+			</view>
+			
+		</view>
+		
+		<view class="actor-box">
+			<view class="title-box1">
+				<view class="title">
+					演员列表
+				</view>
+				<view class="total">
+					全部67
+					<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="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="name">
+						高叶
+					</view>
+					<view class="sub-desc">
+						饰 吕玲玲
+					</view>
+				</view>
+				
+			</scroll-view>
+			
+		</view>
+		
+		<view class="btn-box">
+			<button class="buy-btn" type="default" @click="buy">特惠购票</button>
+		</view>
+		
+		<u-popup :show="show" round="32rpx" mode="bottom" @close="show = false" @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>
+				<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">
+						<view class="name-box">
+							<view class="name">
+								保利万和学府影城(熙街店)
+							</view>
+							<view class="price">
+								¥19.9 <view class="label">起</view>
+							</view>
+						</view>
+						<view class="address-box">
+							<view class="address">
+								沙坪坝区大学城景苑路(美丽熙街)8号附1027号
+							</view>
+							<view class="distance">
+								700m
+							</view>
+						</view>
+						<view class="movie-name">
+							近期场次:19:00 | 20:40 | 21:40
+						</view>
+					</view>
+				</view>
+			</view>
+		</u-popup>
+		
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				show: false,
+				tab:''
+			}
+		},
+		methods: {
+			openPop(){
+				
+			},
+			buy() {
+				this.show = true
+				// uni.navigateTo({
+				// 	url:'./chooseSeat'
+				// })
+			},
+			chooseTab(val){
+				
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+.movieDetail{
+	background: #F9F9F9;
+	padding: 20rpx 24rpx ;
+	min-height: 100vh;
+	.info-box{
+		padding: 24rpx;
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		.info{
+			display: flex;
+			.icon{
+				width: 160rpx;
+				height: 200rpx;
+				background: #aaa;
+				border-radius: 16rpx;
+			}
+			.box{
+				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;
+					font-size: 24rpx;
+					color: #AAAAAA;
+					.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;
+					}
+				}
+				.type-box{
+					display: flex;
+					align-items: center;
+					font-size: 24rpx;
+					color: #AAAAAA;
+					.tag{
+						padding: 6rpx 10rpx;
+						background: #F0F0F0;
+						border-radius: 8rpx 8rpx 8rpx 8rpx;
+						font-size: 24rpx;
+						color: #AAAAAA;
+						margin-left: 10rpx;
+					}
+				}
+				.publish-info{
+					font-size: 24rpx;
+					color: #AAAAAA;
+				}
+			}
+		}
+		.title-box{
+			display: flex;
+			justify-content: space-between;
+			margin-top: 28rpx;
+			.title{
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #222222;
+			}
+			.open{
+				display: flex;
+				align-items: center;
+				font-size: 24rpx;
+				color: #AAAAAA;
+				.icon{
+					width: 24rpx;
+					height: 24rpx;
+				}
+			}
+		}
+		
+		.desc{
+			font-size: 24rpx;
+			color: #222222;
+			font-weight: 300;
+			margin-top: 20rpx;
+			line-height: 40rpx;
+		}
+	}
+	
+	.actor-box{
+		padding: 28rpx 24rpx;
+		background: #FFFFFF;
+		margin-top: 20rpx;
+		border-radius: 16rpx;
+		.title-box1{
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			.title{
+				font-weight: 600;
+				font-size: 28rpx;
+				color: #222222;
+			}
+			.total{
+				font-weight: 300;
+				font-size: 24rpx;
+				display: flex;
+				align-items: center;
+				margin-right: -20rpx;
+				.icon{
+					width: 48rpx;
+					height: 48rpx;
+				}
+			}
+		}
+		
+		.actor-list {
+				white-space: nowrap;
+				width: 100%;
+				padding-top: 20rpx;
+				.item {
+					display: inline-block;
+					width: 120rpx;
+					margin-right: 20rpx;
+					text-align: center;
+					.icon{
+						width: 120rpx;
+						height: 150rpx;
+						border-radius: 16rpx;
+						background: #aaa;
+					}
+					.name{
+						font-weight: 400;
+						font-size: 24rpx;
+						color: #222222;
+						margin-top: 15rpx;
+					}
+					.sub-desc{
+						font-weight: 300;
+						font-size: 20rpx;
+						color: #AAAAAA;
+						margin-top: 12rpx;
+					}
+				}
+			}
+	}
+	
+	.btn-box{
+		position: fixed;
+		left: 0%;
+		bottom: 0%;
+		width: 100%;
+		padding: 10rpx 24rpx 76rpx;
+		box-sizing: border-box;
+		background: #FFFFFF;
+		border-top: 1rpx solid #EEEEEE;
+		.buy-btn{
+			width: 702rpx;
+			height: 80rpx;
+			line-height: 80rpx;
+			background: #EE4320;
+			border-radius: 46rpx 46rpx 46rpx 46rpx;
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #FFFFFF;
+			padding: 0;
+			margin: 0;
+		}
+	}
+	
+	.content{
+		padding: 24rpx;
+		.tabList {
+			white-space: nowrap;
+			width: 100%;
+			.tab {
+				display: inline-block;
+				padding: 0 12rpx 20rpx;
+				font-weight: 400;
+				font-size: 28rpx;
+				color: #222222;
+			}
+			.tab.active{
+				position: relative;
+				&::after{
+					content: '';
+					position: absolute;
+					bottom: 0%;
+					left: 50%;
+					transform: translateX(-50%);
+					width: 60rpx;
+					height: 8rpx;
+					background: #EE4320;
+					border-radius: 4rpx 4rpx 4rpx 4rpx;
+				}
+			}
+		}
+		.list{
+			height: 600rpx;
+			overflow: auto;
+			.cinema-item{
+				background: #FFFFFF;
+				border-radius: 16rpx 16rpx 16rpx 16rpx;
+				padding: 28rpx 0;
+				border-top: 1rpx solid #F0F0F0;
+				.name-box{
+					display: flex;
+					justify-content: space-between;
+					.name{
+						font-weight: 600;
+						font-size: 28rpx;
+						color: #222222;
+						width: 450rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					.price{
+						display: flex;
+						align-items: center;
+						font-size: 28rpx;
+						color: #FF4D3A;
+						.label{
+							font-size: 24rpx;
+							color: #AAAAAA;
+						}
+					}
+				}
+				.address-box{
+					display: flex;
+					justify-content: space-between;
+					font-size: 24rpx;
+					color: #AAAAAA;
+					margin-top: 16rpx;
+					.address{
+						width: 460rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					.distance{
+						
+					}
+				}
+				.movie-name{
+					font-size: 24rpx;
+					color: #222222;
+					margin-top: 16rpx;
+					width: 100%;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+			}
+		}
+	}
+		
+	
+}
+</style>

+ 324 - 512
detail/shopDetail/shopDetail.vue

@@ -1,7 +1,5 @@
 <template>
 	<view class="shopDetail">
-		<!-- 导航栏 -->
-		<!-- <zs-header title="店铺详情" :background="background"></zs-header> -->
 		<view class="top-box">
 			
 			<image class="bg target" :src="info.logoPath" mode="aspectFill"></image>
@@ -15,172 +13,108 @@
 					</view>
 					<view class="address-box">
 						<view class="distance">
-							距你直线距离{{(info.shopVo.distance/1000).toFixed(2)}}km
-						</view>
-						<view class="address">
-							·{{info.district}}
+						<image class="address-icon" src="../../static/address-icon.png" mode=""></image>	距你直线距离{{(info.shopVo.distance/1000).toFixed(2)}}km &nbsp;·&nbsp;{{info.district}}
 						</view>
 					</view>
 				</view>
 			</view>
-			<view class="shop-desc">
-				伊藤洋华堂(Ito Yokado,日文:イトーヨーカドー),又名伊藤荣堂,于1904年...
-			</view>
-		</view>
-		
-		<view class="tab-box">
-			<view class="tab" :class="tab == 1?'active':''" @click="handleTab(1)">
-				商品
-			</view>
-			<view class="tab" :class="tab == 2?'active':''" @click="handleTab(2)">
-				优惠券
-			</view>
-		</view>
-		
-		<view class="content ">
-			<view class="discounts" v-if="freeList.length && tab == 2">
-				<view class="title">
-					免费领取
-				</view>
-				<view class="discounts-item" v-for="(item,index) in freeList" :key="index" >
-					<view class="card-content" :class="item.buySet == 2&&item.useCount==0?'card-used':''">
-						<view class="info">
-							<view class="title">
-								{{item.goodsName}}
-							</view>
-							<view class="limit">
-								{{item.useType | filterType(item)}}
-							</view>
-							
-							<view class="desc" :class="[open == index?'open':'']" @click="handleOpen(index,'open')">
-								展开详情 <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
-							</view>
-						</view>
-						<view class="btn-box">
-							<view class="btn" @click="handleBuy(item)">
-								领取
-							</view>
-						</view>
-						<view class="num" v-if="item.buySet == 2">
-							剩余领取次数:{{item.useCount}}次
-						</view>
-					</view>
-					<view class="card-desc" v-show="open == index">
-						<view class="time">
-							{{item.validType | filterType1(item)}}
-						</view>
-						<view class="desc" v-html="item.goodsDescribe">
-							{{item.goodsDescribe}}
-						</view>
-					</view>
+			
+			<view class="card-box">
+				<view class="card"  v-for="(item,index) in freeList" :key="index" @click="openPop">
+					{{item | filterCard}}
 				</view>
+				
 			</view>
-			
-			<view class="goods-list" v-else-if="buyList.length && tab == 1">
-				<view class="goods-item" v-for="item in buyList" :key="item.goodsId" @click="goDetail(item)">
-					<zs-img  :src="item.goodsImg" width="342rpx" height="322rpx" raduis="full"  mode="" ></zs-img>
-					<view class="goods-info">
-						<view class="goods-name">
-							{{item.goodsName}}
-						</view>
-						<view class="type">
-							{{goodsTypeObj[item.goodsCode]}}
-						</view>
-						<view class="price">
-							¥{{item.buyPrice}}
-						</view>
-					</view>
+			<view class="desc-box" :class="[showDesc?'':'hidden']">
+				
+				<view class="shop-desc">
+					{{info.detailContent|| ''}}
 				</view>
+				<image class="icon" @click="handleDesc" src="../../static/shop-desc.png" mode=""></image>
 			</view>
-			<u-empty marginTop="100" textSize="20" v-if="!freeList.length && tab == 2" mode="data"></u-empty>
-			<u-empty marginTop="100" textSize="20" v-if="!buyList.length && tab == 1" mode="data"></u-empty>
 		</view>
 		
-		<!-- <view class="hot-title">
-			<image class="icon" src="../../static/hot.png" mode=""></image>
-			<view class="title">
-				热门推荐
-			</view>
-			<image class="icon" src="../../static/hot.png" mode=""></image>
-		</view> -->
-		
-		<!-- 列表 -->
-		<!-- <zs-list class="store-box" mt="0" @load="loadMore" :status="status">
-			<view class="left">
-				<view class="left-frist">
-					<view class="top-box">
+		<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>
+					<view class="info">
 						<view class="title">
-							天天低价
+							{{item.goodsName}}
 						</view>
-						<view class="type-box">
-							<image class="hot" src="../../static/hot-white.png" mode=""></image>
-							<view class="type">
-								今日超低价
-							</view>
+						<view class="desc">
+							{{item.goodsDescribe}}
 						</view>
-					</view>
-					<view class="image-box">
-						<image class="image" src="https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fsafe-img.xhscdn.com%2Fbw1%2F45f7efd9-3760-4fa0-8cf0-79ca4b44d017%3FimageView2%2F2%2Fw%2F1080%2Fformat%2Fjpg&refer=http%3A%2F%2Fsafe-img.xhscdn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=auto?sec=1695803683&t=09678f8c997578d3e8101dd2b0a597e8" mode=""></image>
-						<view class="btn-box">
-							<view class="btn">
-								折
+						<view class="price-box">
+							<view class="left">
+								<view class="unit">
+									¥
+								</view>
+								<view class="price">
+									{{item.realPrice}}
+								</view>
+								<view class="old-price">
+									市场价 ¥{{item.marketPrice}}
+								</view>
 							</view>
-							<view class="desc">
-								满200享7折
+							
+							<view class="right">
+								销量{{item.saleNum}}
 							</view>
 						</view>
 					</view>
 				</view>
-				<view class="store-item" v-for="(item,index) in list" :key="index" @click="goShopDetail(item)">
-						<zs-img  :src="item.src" width="335rpx"  mode="widthFix" ></zs-img>
-						<view class="info">
-							<view class="title">
-								{{item.title}}
+			<!-- </view> -->
+			</zs-list>
+			<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>
+					<u-empty marginTop="100" textSize="20" v-if="!freeList.length" mode="data"></u-empty>
+					<view class="discounts-item" v-for="(item,index) in freeList" :key="index" >
+						<view class="card-content" :class="item.buySet == 2&&item.useCount==0?'card-used':''">
+							<view class="price">
+									{{item | filterCard}}
 							</view>
-							<view class="address">
+							<view class="info">
+								<view class="card-title">
+									{{item.goodsName}}
+								</view>
+								<view class="limit">
+									{{item.useType | filterType(item)}}
+								</view>
+								<view class="desc">
+									{{item.validType | filterType1(item)}}
+								</view>
 								
-								<image class="position" src="../../static/position.png" mode=""></image>
-								{{item.distance}}km
-							</view>
-							<image v-if="index==0" class="hot-icon" src="../../static/hot1.png" mode=""></image>
-						</view>
-				</view>
-			</view>
-			<view class="right">
-				<view class="store-item frist" @click="goShopDetail(list1[0])">
-						<zs-img  :src="list1[0].src" width="335rpx"  mode="widthFix" ></zs-img>
-						<view class="info">
-							<view class="title">
-								{{list1[0].title}}
+							<!-- 	<view class="desc" :class="[open == index?'open':'']" @click="handleOpen(index,'open')">
+									展开详情 <image class="jiantou" src="../../static/jiantou-icon.png" mode=""></image>
+								</view> -->
 							</view>
-							<view class="tags">
-								<view class="tag-item">
-									<view class="label">
-										折
-									</view>	
-									<view class="value">
-										满200享8折
-									</view>
+							<view class="btn-box">
+								<view class="btn" @click="handleBuy(item)">
+									领取
 								</view>
 							</view>
+							<view class="num" v-if="item.buySet == 2">
+								剩余领取次数:{{item.useCount}}次
+							</view>
 						</view>
-				</view>
-				
-				<view v-if="index!=0" class="store-item" v-for="(item,index) in list1" :key="index" @click="goShopDetail(item)">
-						<zs-img  :src="item.src" width="335rpx"  mode="widthFix" ></zs-img>
-						<view class="info">
-							<view class="title">
-								{{item.title}}
+						<view class="card-desc" v-show="open == index">
+							<view class="time">
+								{{item.validType | filterType1(item)}}
 							</view>
-							<view class="address">
-								<image class="position" src="../../static/position.png" mode=""></image>
-								{{item.distance}}km
+							<view class="desc" v-html="item.goodsDescribe">
+								{{item.goodsDescribe}}
 							</view>
 						</view>
+					</view>
 				</view>
-			</view>
-		
-		</zs-list> -->
+			</u-popup>
+
 		<!-- 地图 -->
 		<map v-show="false" id="map"></map>
 
@@ -188,31 +122,31 @@
 </template>
 
 <script>
-	import { allCouponByUser,creat } from '@/api/goods.js';
+	import { allCouponByUser,creat,getGoods } from '@/api/goods.js';
 	import guid from '@/utils/guid.js'
 	import {rpxTopx} from '@/utils/tool.js'
 	export default {
 		data() {
 			return {
-				tab:1,
 				open:999,
 				info: null,
-				background:false,
 				status: 'more',
 				_mapContext: null,
 				query:{
 					currentPage:1,
 					pageSize:99,
 					setMealId:0,
-					goodsType:1,
+					goodsType:2,
 					shopId:'',
 					userId:''
 				},
 				
 				freeList:[],
 				buyList:[],
-				goodsTypeObj:{}
-				
+				goodsTypeObj:{},
+				showDesc:false,
+				show:false,
+				currentPage:1
 			};
 		},
 		
@@ -234,10 +168,24 @@
 				}else if(val == 2){
 					return '有效期:' + item.validStartTime + '-' + item.validEndTime
 				}
+			},
+			filterCard:function(val){
+				if(val.goodsCode == '102'){
+					return `减${val.discount}`
+				}else if(val.goodsCode == '103'){
+					return `${val.discount/10}折`
+				}else if(val.goodsCode == '104'){
+					return `满${val.condition}减${val.discount}`
+				}
 			}
 		},
 		methods: {
-			
+			openPop(){
+				this.show = true
+			},
+			handleDesc(){
+				this.showDesc = !this.showDesc
+			},
 			// 地图中打开商家
 			handleAdress(item) {
 				this._mapContext.openMapApp({
@@ -260,12 +208,10 @@
 				this.query.shopId = this.info.shopVo.id
 				this.query.setMealId = userInfo.setMealId
 				this.query.userId = userInfo.userId
-				this.allCouponByUser(this.tab)//优惠券
-			},
-			handleTab(val){
-				this.tab = val
-				this.allCouponByUser(val)
+				this.getGoods()
+				this.allCouponByUser(2)//商品1  优惠券 2 
 			},
+
 			handleOpen(val,open){
 				if(val === this[open]){
 					this[open] = 7
@@ -315,19 +261,14 @@
 					// })
 				}
 			},
-			goShopDetail(item) {
-				uni.setStorageSync('shopInfo', JSON.stringify(item))
-				uni.navigateTo({
-					url: `../../detail/shopDetail/shopDetail`
-				})
-			},
+			
 			goDetail(item){
 				let data = item 
-				data.shopName = this.info.shopVo.shopName
-				data.address = this.info.district
-				uni.setStorageSync('goodsInfo', JSON.stringify(data))
+				// data.shopName = this.info.shopVo.shopName
+				// data.address = this.info.district
+				// uni.setStorageSync('goodsInfo', JSON.stringify(data))
 				uni.navigateTo({
-					url: `../goodsDetail/index`,
+					url: `../goodsDetail/index?id=${item.goodsId}`,
 					// success: function(res) {
 					//   // 通过eventChannel向被打开页面传送数据
 					//   res.eventChannel.emit('goodsInfo', data)
@@ -335,33 +276,32 @@
 				})
 			},
 			loadMore(){
-				// this.status = 'loading'
-				// setTimeout(() => {
-				// 	this.status = 'more'
-				// 	this.list = this.list.concat([{
-				// 		src: 'https://img1.baidu.com/it/u=384382004,2638328762&fm=253&fmt=auto&app=138&f=JPEG?w=667&h=500',
-				// 		title: '万安加油站(中石化)',
-				// 		distance: 13.62
-				// 	}, {
-				// 		src: 'https://img1.baidu.com/it/u=1281595595,1208289696&fm=253&fmt=auto&app=138&f=JPEG?w=667&h=500',
-				// 		title: '万安加油站(中石化)',
-				// 		distance: 13.62
-				// 	}])
-				// }, 1000)
+				this.getGoods()
 			},
 			allCouponByUser(val){
-				this.query.goodsType = val
 				allCouponByUser(this.query).then(res=>{
 					if(res.state == 'Success'){
-						if(val == 1){
-							this.buyList = res.content.records
-						}else{
 							this.freeList = res.content.records
-						}
 						uni.stopPullDownRefresh()
 					}
 				})
 			},
+			getGoods(){
+				if(this.status == 'noMore') return
+				this.status = 'loading'
+				getGoods({currentPage:this.currentPage,status:3,shopId:this.info.shopVo.id}).then(res=>{
+					if(res.state == 'Success'){
+						this.buyList = this.buyList.concat(res.content.records)
+						console.log(res.content.total,this.buyList.length);
+						if(res.content.total>this.buyList.length){
+							this.status = 'more'
+							this.currentPage++
+						}else{
+							this.status = 'noMore'
+						}
+					}
+				})
+			}
 			
 		},
 		onPullDownRefresh() {
@@ -389,9 +329,8 @@
 
 <style lang="scss">
 	.shopDetail {
-		background: #fff;
 		min-height: 100vh;
-		
+		background: #F9F9F9;
 		.top-box{
 			.bg {
 				width: 100%;
@@ -433,390 +372,263 @@
 						// padding: 30rpx 0;
 						margin-top: 12rpx;
 						box-sizing: border-box;
+						font-weight: 300;
 						font-size: 22rpx;
-						.address {
+						color: #222222;
+						.distance{
 							display: flex;
 							align-items: center;
-						}
-						.distance{
+							.address-icon{
+								width: 32rpx;
+								height: 32rpx;
+								margin-right: 10rpx;
+							}
 						}
 					}
 				}
 
 			}
-			.shop-desc{
-				font-size: 20rpx;
-				color: #AAAAAA;
-				padding: 0 24rpx;
-				width: 100%;
-				overflow: hidden;
-				text-overflow: ellipsis;
-				box-sizing: border-box;
-				white-space: nowrap;
+			
+			.card-box{
+				display: flex;
+				align-items: center;
+				padding: 12rpx 24rpx;
+				background: #fff;
+				.card{
+					height: 40rpx;
+					line-height: 40rpx;
+					padding: 0 14rpx;
+					border-radius: 8rpx 8rpx 8rpx 8rpx;
+					border: 1rpx solid #FF4C39;
+					color: #FF4C39;
+					font-size: 20rpx;
+					margin-right: 12rpx;
+				}
 			}
-		}
-		
-		.tab-box{
-			display: flex;
-			height: 80rpx;
-			background: #fff;
-			margin: 20rpx 24rpx;
-			border-bottom: 1rpx solid #F0F0F0;
-			.tab{
-				flex: 1;
-				line-height: 80rpx;
-				text-align: center;
-				font-size: 28rpx;
-				color: #222222;
+			.desc-box.hidden{
+				.shop-desc{
+					overflow: hidden;
+					white-space: nowrap;
+					text-overflow: ellipsis;
+				}
+				.icon{
+					transform: rotateZ(0deg);
+				}
 			}
-			.tab.active{
-				font-weight: bold;
-				color: #222222;
+			.desc-box{
 				position: relative;
-				&::before{
-					content: '';
-					width: 40rpx;
-					height: 8rpx;
-					background: linear-gradient(135deg, #FFA467 0%, #FFC888 100%);
-					border-radius: 4rpx 4rpx 4rpx 4rpx;
+				padding-right: 30rpx;
+				background: #fff;
+				padding-bottom: 24rpx;
+				.shop-desc{
+					font-size: 20rpx;
+					color: #AAAAAA;
+					padding: 0 24rpx;
+					width: 100%;
+					box-sizing: border-box;
+				}
+				.icon{
 					position: absolute;
-					bottom: 0%;
-					left: calc(50% - 20rpx);
+					right: 0;
+					top: 0;
+					transform-origin: center;
+					transform: rotateZ(180deg);
+					transition: transform .3s;
+					width: 32rpx;
+					height: 32rpx;
 				}
 			}
+			
 		}
+		
 
-		.content {
-			padding: 0 30rpx 100rpx;
-
-			.discounts {
-				padding: 30rpx 0;
-				border-radius: 8px;
-
-				.title {
-					font-weight: bold;
-					font-size: 28rpx;
-				}
-
-				.discounts-item {
-					 filter: drop-shadow(0 6rpx 2rpx rgba(0,0,0,.1));
-					.card-content.card-used{
-						background: url('../../static/card-used.png') no-repeat;
-						background-size: 100% 144rpx;
-					}
-					.card-content{
-						display: flex;
-						align-items: center;
-						justify-content: space-between;
-						background-color: rgb(239, 239, 239);
-						background: url('../../static/card.png') no-repeat;
-						background-repeat: no-repeat;
-						background-size: 100% 144rpx;
-						filter: drop-shadow(0rpx 0rpx 6rpx 2rpx rgba(0,0,0,0.1)); 
-						border-radius: 16rpx;
-						height: 144rpx;
-						padding: 0 30rpx 0 48rpx;
-						margin-top: 20rpx;
-						position: relative;
-						box-sizing: border-box;
-						.info {
-							.title {
-								color: #FFAA6C;
-								font-size: 28rpx;
-								font-weight: bold;
-							}
-							.desc{
-								display: flex;
-								align-items: center;
-								font-size: 20rpx;	
-								color: #AAAAAA;
-								.jiantou{
-									width: 20rpx;
-									height: 20rpx;
-									transform: rotateZ(90deg);
-									display: block;
-									margin-left: 10rpx;
-									transition: transform .3s;
-								}
-							}
-							.open{
-								.jiantou{
-									transform: rotateZ(270deg)!important;
-								}
-							}
-							.red{
-								color: $uni-text-primary!important;
-							}
-							.limit{
-								font-size: 20rpx;
-								color: #AAAAAA;
-								margin:10rpx 0;
-							}
-							.time {
-								color: #9a9a9a;
-								font-size: 24rpx;
-								margin-top: 15rpx;
-							}
-						}
-						.btn-box{
-							.btn {
-								width: 118rpx;
-								height: 48rpx;
-								line-height: 48rpx;
-								text-align: center;
-								font-size: 24rpx;
-								font-weight: bold;
-								background: linear-gradient(135deg, #FFA467 0%, #FFC888 100%);
-								border-radius: 24rpx;
-								color: #fff;
-								margin-top: 15rpx;
-							}
-							
-						}
-						.num{
-							position: absolute;
-							white-space: nowrap;
-							bottom: 10rpx;
-							right: 26rpx;
-							font-size: 18rpx;
-							color: #222222;
-						}
-					}
-					.card-desc{
-						font-size: 20rpx;
-						color: #AAAAAA;
-						padding: 20rpx 10rpx;
-						background: #FFFFFF;
-						border-radius: 0rpx 0rpx 16rpx 16rpx;
-						.time{
-							
-						}
-						.desc{
-							margin-top: 22rpx;
-						}
-					}
-				}
-			}
-			
 			.goods-list{
-				display: flex;
-				justify-content: space-between;
-				flex-wrap: wrap;
+				margin: 0 24rpx;
 				.goods-item{
-					background: #F9F9F9;
-					// box-shadow: 0rpx 0rpx 24rpx 2rpx rgba(0,0,0,0.08);
-					border-radius: 16rpx;
-					width: 342rpx;
-					box-sizing: border-box;
-					margin-top: 20rpx;
 					display: flex;
-					flex-direction: column;
-					.goods-info{
+					padding: 24rpx;
+					background: #fff;
+					border-radius: 16rpx;
+					margin: 20rpx 0 0;
+					.info{
+						flex: 1;
+						padding-left: 20rpx;
 						display: flex;
 						flex-direction: column;
 						justify-content: space-between;
-						padding: 8rpx;
-						flex:1;
-						.goods-name{
+						position: relative;
+						.title{
+							font-size: 28rpx;
 							font-weight: bold;
-							color: #222222;
+							width: 340rpx;
+							white-space: nowrap;
+							overflow: hidden;
+							text-overflow: ellipsis;
+							margin-top: 10rpx;
+						}
+						
+						.desc{
 							font-size: 24rpx;
-							margin: 16rpx 0;
+							color: #AAAAAA;
 							overflow: hidden;
-							width: 100%;
 							text-overflow: ellipsis;
+							/* 弹性伸缩盒子模型显示 */
 							display: -webkit-box;
-							-moz-box-orient: vertical;
+							/* 限制在一个块元素显示的文本的行数 */
 							-webkit-line-clamp: 2;
+							/* 设置或检索伸缩盒对象的子元素的排列方式 */
+							-webkit-box-orient: vertical;
 						}
-						.type{
-							color: #AAAAAA;
-							font-size: 20rpx;
-						}
-						.price{
-							font-weight: bold;
-							color: #FF4C3A;
-							font-size: 28rpx;
-							margin-top: 16rpx;
+						
+						.price-box{
+							display: flex;
+							justify-content: space-between;
+							align-items: center;
+							.left{
+								display: flex;
+								align-items: flex-end;
+								.unit{
+									font-size: 20rpx;
+									color: #FF4D3A;
+									font-weight: bold;
+								}
+								.price{
+									font-size: 32rpx;
+									color: #FF4D3A;
+									font-weight: bold;
+								}
+								.old-price{
+									font-size: 20rpx;
+									color: #AAAAAA;
+									text-decoration: line-through;
+									margin-left: 12rpx;
+								}
+							}
+							.right{
+								font-size: 24rpx;
+								color: #AAAAAA;
+							}
 						}
+						
 					}
 				}
 			}
-			
-		}
 		
-		.hot-title{
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			margin: 20rpx 0;
-			.icon{
-				width: 29rpx;
-				height: 35rpx;
-			}
-			.title{
-				font-size: 32rpx;
-				color: #0F0F0F;
+		.discounts {
+			padding: 28rpx 24rpx;
+			max-height: 1000rpx;
+			min-height: 600rpx;
+			.title {
 				font-weight: bold;
-				padding: 0 10rpx;
+				font-size: 32rpx;
+				color: #222222;
+				text-align: center;
+				margin-bottom: 28rpx;
 			}
-		}
 		
-		.zs-list {
-			display: flex;
-			flex-wrap: wrap;
-			justify-content: space-between;
-			padding: 0 30rpx;
-			.left{
-				.left-frist{
-					padding: 15rpx;
+			.discounts-item {
+				 filter: drop-shadow(0 6rpx 2rpx rgba(0,0,0,.1));
+				.card-content.card-used{
+					// background: url('../../static/card-used.png') no-repeat;
+					// background-size: 100% 144rpx;
+				}
+				.card-content{
+					display: flex;
+					align-items: center;
+					justify-content: space-between;
+					background-color: rgb(239, 239, 239);
+					background: url('../../static/new-card.png') no-repeat;
+					background-repeat: no-repeat;
+					background-size: 100% 144rpx;
+					filter: drop-shadow(0rpx 0rpx 6rpx 2rpx rgba(0,0,0,0.1)); 
 					border-radius: 16rpx;
-					width: 332rpx;
-					height: 284rpx;
+					height: 144rpx;
+					padding: 0 24rpx;
+					margin-top: 20rpx;
+					position: relative;
 					box-sizing: border-box;
-					background: linear-gradient(180deg, #FFDEDE 0%, #FFFFFF 100%);
-					box-shadow: 0rpx 6rpx 12rpx 2rpx rgba(0,0,0,0.16);
-					margin-bottom: 25rpx;
-					.top-box{
-						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;
-							background: linear-gradient(90deg, #FE574C 0%, #FE2A5C 100%);
-							.hot{
-								width: 16.7rpx;
-								height: 21.7rpx;
-							}
-							.type{
-								font-size: 20rpx;
-								font-weight: 400;
-								color: #FFFFFF;
-								margin-left: 6rpx;
-							}
-						}
+					.price{
+						width: 150rpx;
+						text-align: center;
+						font-weight: 400;
+						font-size: 40rpx;
+						color: #FF4D3A;
 					}
-					.image-box{
-						position: relative;
-						margin-top: 20rpx;
-						.image{
-							width: 302rpx;
-							height: 182rpx;
-							border-radius: 16rpx;
+					.info {
+						flex: 1;
+						padding-left: 28rpx;
+						.card-title {
+							font-weight: 400;
+							font-size: 28rpx;
+							color: #222222;
 						}
-						.btn-box{
-							position: absolute;
-							left: 0;
-							bottom: 10rpx;
+						.desc{
 							display: flex;
 							align-items: center;
-							.desc{
-								font-size: 24rpx;
-								font-weight: 400;
-								color: #FFFFFF;
+							font-size: 20rpx;	
+							color: #AAAAAA;
+							.jiantou{
+								width: 20rpx;
+								height: 20rpx;
+								transform: rotateZ(90deg);
+								display: block;
 								margin-left: 10rpx;
+								transition: transform .3s;
 							}
-							.btn{
-								height: 36rpx;
-								line-height: 36rpx;
-								padding: 0 14rpx;
-								background: $uni-color-primary;
-								border-radius: 8rpx;
-								color: #FFFFFF;
-								font-size: 20rpx;
+						}
+						.open{
+							.jiantou{
+								transform: rotateZ(270deg)!important;
 							}
 						}
+						.red{
+							color: $uni-text-primary!important;
+						}
+						.limit{
+							font-size: 20rpx;
+							color: #AAAAAA;
+							margin:10rpx 0;
+						}
+						.time {
+							color: #9a9a9a;
+							font-size: 24rpx;
+							margin-top: 15rpx;
+						}
 					}
-				}
-			}
-			.right{
-				.frist{
-					border: 1px solid #FF612E;
-					.info{
-						background: #FF612E;
-						color: #fff;
-						.address{
-							color: #fff;
+					.btn-box{
+						.btn {
+							width: 120rpx;
+							height: 48rpx;
+							border-radius: 24rpx;
+							background: #FF4D3A;
+							line-height: 48rpx;
+							text-align: center;
+							font-weight: bold;
+							font-size: 24rpx;
+							color: #FFFFFF;
 						}
+						
 					}
-				}
-			}
-			.store-item {
-				width: 335rpx;
-				margin-bottom: 25rpx;
-				box-shadow: 0rpx 0rpx 24rpx 2rpx rgba(0, 0, 0, 0.08);
-				border-radius: 16rpx;
-				background: #fff;
-		
-				.icon {
-					width: 100%;
-					height: 300rpx;
-					border-radius: 16rpx 16rpx 0 0;
-				}
-		
-				.info {
-					padding: 20rpx;
-					background: #fff;
-					border-radius: 0 0 16rpx 16rpx;
-					position: relative;
-					.hot-icon{
+					.num{
 						position: absolute;
-						bottom: 20rpx;
-						right: 25rpx;
-						width: 44.6rpx;
-						height: 48.6rpx;
-					}
-					.title {
-						font-weight: bold;
-						width: 100%;
 						white-space: nowrap;
-						text-overflow: ellipsis;
-						overflow: hidden;
+						bottom: 10rpx;
+						right: 26rpx;
+						font-size: 18rpx;
+						color: #222222;
 					}
-					.tags{
-						display: flex;
-						align-items: center;
-						.tag-item{
-							line-height: 50rpx;
-							border-radius: 8rpx;
-							padding: 6rpx 0;
-							font-size: 24rpx;
-							margin-left: 10rpx;
-							display: flex;
-							.label{
-								background: #FFF;
-								color: #FE5B47;
-								padding: 0 10rpx;
-								border-radius: 8rpx 0 0 8rpx;
-							}
-							.value{
-								color: #FFF;
-								background: rgba(255, 255, 255, .2);
-								padding: 0 14rpx;
-								border-radius: 0 8rpx 8rpx 0;
-							}
-						}
+				}
+				.card-desc{
+					font-size: 20rpx;
+					color: #AAAAAA;
+					padding: 20rpx 10rpx;
+					background: #FFFFFF;
+					border-radius: 0rpx 0rpx 16rpx 16rpx;
+					.time{
+						
 					}
-		
-					.address {
-						display: flex;
-						align-items: center;
-						margin-top: 15rpx;
-						color: #999;
-						.position{
-							width: 25rpx;
-							height: 29rpx;
-							margin-right: 8rpx;
-						}
+					.desc{
+						margin-top: 22rpx;
 					}
 				}
 			}

+ 70 - 0
detail/shopList/index.vue

@@ -0,0 +1,70 @@
+<template>
+	<view class="shop-list">
+		<view class="item" v-for="item in list" :key="item.shopVo.shopId" @click="jump('/detail/shopDetail/shopDetail',item)">
+			<view class="info">
+				<view class="shop-name">
+					{{item.shopVo.shopName}}
+				</view>
+				<view class="address">
+					{{item.district}}  {{(item.shopVo.distance/1000).toFixed(2)}} km 
+				</view>
+			</view>
+			<image class="icon" src="../../static/shop-desc.png" mode=""></image>
+		</view>
+	
+	</view>
+</template>
+
+<script>
+	export default {
+		data() {
+			return {
+				list: []
+			}
+		},
+		methods: {
+			jump(url,item) {
+				uni.setStorageSync('shopInfo',JSON.stringify(item))
+				uni.navigateTo({
+					url
+				})
+			},
+			
+		},
+		onLoad() {
+			this.list = JSON.parse(uni.getStorageSync('shopList'))
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.shop-list{
+	background: #F9F9F9;
+	min-height: 100vh;
+	padding: 20rpx 24rpx;
+	.item{
+		padding: 24rpx;
+		background: #fff;
+		display: flex;
+		align-items: center;
+		justify-content: space-between;
+		margin-bottom: 20rpx;
+		.info{
+			.shop-name{
+				font-size: 28rpx;
+				color: #222222;
+			}
+			.address{
+				font-size: 24rpx;
+				color: #AAAAAA;
+				margin-top: 16rpx;
+			}
+		}
+		.icon{
+			width: 48rpx;
+			height: 48rpx;
+			transform: rotate(-90deg);
+		}
+	}
+}
+</style>

+ 8 - 6
detail/virtualGoods/index.vue

@@ -216,23 +216,25 @@
 			.goods-info{
 				display: flex;
 				flex-direction: column;
-				justify-content: space-around;
+				justify-content: center;
 				flex: 1;
 				margin-left: 20rpx;
 				.goods-title{
+					font-weight: 600;
+					font-size: 32rpx;
 					color: #222222;
-					font-weight: bold;
-					font-size: 36rpx;
 				}
 				.goods-desc{
-					font-size: 28rpx;
+					font-weight: 300;
+					font-size: 24rpx;
 					color: #AAAAAA;
+					margin-top: 20rpx;
 				}
 			}
 			.price{
-				color: #FF4D3A;
+				font-weight: 600;
 				font-size: 36rpx;
-				font-weight: bold;
+				color: #FF4D3A;
 				align-self: center;
 			}
 		}

+ 3 - 1
login/login/login.vue

@@ -129,7 +129,7 @@
 											if (res.content.isAuth == 1) {
 												if(that.redirect){
 													uni.reLaunch({
-														url:`${that.redirect}?scene=${that.scene}`
+														url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
 													})
 												}else{
 													uni.switchTab({
@@ -153,6 +153,7 @@
 
 			},
 			goOther() {
+				console.log(this.redirect);
 				uni.navigateTo({
 					url: `../../login/login/otherLogin?redirect=${this.redirect}&scene=${this.scene}&id=${this.id}`
 				})
@@ -214,6 +215,7 @@
 			this.redirect = options.redirect
 			this.scene = options.scene
 			this.id = options.id
+			console.log(1111111,this.redirect);
 		}
 
 	}

+ 4 - 3
login/login/otherLogin.vue

@@ -144,6 +144,7 @@
 				})
 			},
 			save(){
+				let that = this
 				this.$refs.uForm.validate().then(r => {
 					
 					uni.showLoading({
@@ -165,9 +166,9 @@
 								getUserDetail().then(res => {
 									uni.setStorageSync('userInfo', JSON.stringify(res.content))
 									if (res.content.isAuth == 1) {
-										if(this.redirect){
+										if(that.redirect && that.redirect !=  "undefined"){
 											uni.reLaunch({
-												url:`${this.redirect}?scene=${this.scene}&id=${this.id}`
+												url:`${that.redirect}?scene=${that.scene}&id=${that.id}`
 											})
 										}else{
 											uni.switchTab({
@@ -175,7 +176,7 @@
 											})
 										}
 									} else { //未实名认证
-										this.show = true
+										that.show = true
 									}
 								})
 								

+ 4 - 1
my/edit/edit.vue

@@ -6,7 +6,7 @@
 		</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>
+			<!-- <u-cell size="large" title="关于" :isLink="true"></u-cell> -->
 		</view>
 		<button class="login-out" @click="loginOut">退出当前账号</button>
 	</view>
@@ -87,6 +87,9 @@
 										   path:res.content.paths[0]
 									  }]).then(msg=>{
 										  that.headImg = host + '/' + paths.join('/')
+										  let userInfo = JSON.parse(uni.getStorageSync('userInfo'))
+										  userInfo.imgPath = that.headImg
+										  uni.getStorageSync('userInfo',JSON.stringify(userInfo))
 									  })
 								    }
 								  },

+ 249 - 85
my/order/detail.vue

@@ -2,86 +2,102 @@
 	<view class="order-detail">
 			<view class="status-box">
 				<view class="text-box">
-					<view class="status">
-						{{info.orderType | filterType}}
+					<view class="status" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'&&!isNotTime">
+						等待支付,剩余<u-count-down :time="closeTime" format="HH:mm:ss" @finish="finish"></u-count-down>
 					</view>
-					<view class="notice">
-<!-- 						{{info.orderType =="CLOSE"||info.orderType =="USED"?"感谢您对慧研学惠生活的信任,期待您再次选择":''}} -->
-						感谢您对慧研学惠生活的信任,期待您再次选择
+					<view class="status" v-else>
+						{{info.goodsList[0].goodsState | filterType}}
 					</view>
 				</view>
 			</view>
 			
-			<view class="shop-box">
+			<view class="content progress"  v-if="info.goodsList[0].goodsState == 'APPLY_REFUND' || info.goodsList[0].goodsState == 'REFUNDED'"  @click="refundDetail">
+				<view class="progress-title">
+					退款进度
+				</view>
+				
+				<view class="progress-desc">
+					查看退款详情
+				</view>
+			</view>
+			
+			<view class="content shop-box"  v-if="!isVisual">
 				<view class="shop-name">
-					{{info.shopName}}
+					{{info.shopInfo.shopName}}
 				</view>
 				<view class="address">
-					{{info.shopAddr}}
+					{{info.shopInfo.address}}
 				</view>
 			</view>
 			
 			<view class="content info">
 				<view class="order-info">
-					<image class="icon" :src="info.goodsList[0].goodsImg" mode=""></image>
+					<image class="icon" :src="info.goodsList[0].goodsInfo.goodsPath" mode=""></image>
 					<view class="shop-info">
 						<view class="title">
-							{{info.goodsList[0].goodsName}}
+							{{info.goodsList[0].goodsInfo.goodsName}}
+						</view>
+						<view class="goods-desc">
+							{{info.goodsList[0].goodsInfo.goodsDescribe}}
 						</view>
 						<view class="price-box">
 							<view class="price">
-								¥{{info.goodsAmount}}
-							</view>
-							<view class="code-btn" v-if="info.orderType == 'WAIT_USE'&&info.goodsList[0].goodsName!='二维码支付'"  @click="checkCode">
-								查看券码
+								¥{{info.goodsList[0].goodsInfo.realPrice}}
 							</view>
+							
 						</view>
+						
+						
 						<!-- 有extend并且不是虚拟商品 -->
-						<view class="start-time" v-if="info.extend&&!isVisual">
+						<!-- <view class="start-time" v-if="info.extend&&!isVisual">
 							出发时间:{{info.extend}}
-						</view>
+						</view> -->
 						
 					</view>
 				</view>
-				
-				<view class="item">
-					<view class="label">
-						订单金额
+			</view>
+			
+			<view class="content code-box"  v-if="info.goodsList[0].goodsState == 'WAIT_USE'&&info.goodsList[0].goodsName!='二维码支付'">
+				<view class="left">
+					<view class="title">
+						券码信息
 					</view>
-					<view class="value black">
-						¥{{info.goodsAmount}}
+					<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" v-if="info.goodsList[0].goodsState == 'USED'">
+				<view class="title">
+					消费记录
+				</view>
 				
-				<view class="item" >
+				<view class="item">
 					<view class="label">
-						优惠券
+						消费时间
 					</view>
-					<view class="value red">
-						-¥{{info.discountAmount}}
+					<view class="value">
+						{{$u.timeFormat(info.goodsList[0].verifyModel.checkTime,'yyyy-mm-dd hh:MM:ss')}}
 					</view>
 				</view>
-				
 				<view class="item">
 					<view class="label">
-						应付款
+						消费门店
 					</view>
 					<view class="value">
-						共{{info.goodsList.length}}件商品 已优惠:<text class="red">¥{{info.discountAmount}}</text>&nbsp; &nbsp; 合计&nbsp; &nbsp;<text class="red fs28">¥{{info.payAmount}}</text>
+						{{info.goodsList[0].verifyModel.shopName}}
 					</view>
 				</view>
 				
 			</view>
-			<view class="input-box" v-if="isVisual">
-				<view class="label">
-					充值账号
-				</view>
-				<view class="value">
-					{{JSON.parse(info.extend).account}}
-				</view>
-			</view>
 			
 			<view class="content">
+				<view class="title">
+					订单信息
+				</view>
 				<view class="item">
 					<view class="label">
 						订单编号
@@ -93,49 +109,91 @@
 				
 				<view class="item">
 					<view class="label">
-						支付订单编号
+						付款方式
 					</view>
 					<view class="value">
-						{{info.paymentNo || '-'}}
+						{{info.payment.paymentWay | filterPay}}
 					</view>
 				</view>
 				<view class="item">
 					<view class="label">
-						优惠券编号
+						下单时间
 					</view>
 					<view class="value">
-						65456464156486
+						{{$u.timeFormat(info.createTime,'yyyy-mm-dd hh:MM:ss')}}
 					</view>
 				</view>
-				<view class="item">
+				
+				<view class="item" v-if="info.goodsList[0].goodsState != 'WAIT_PAYMENT' && info.goodsList[0].goodsState != 'CLOSE'">
 					<view class="label">
-						付款方式
+						支付时间
 					</view>
 					<view class="value">
-						{{info.paymentWay | filterPay}}
+						{{$u.timeFormat(info.payment.paymentTime,'yyyy-mm-dd hh:MM:ss')}}
 					</view>
 				</view>
+			</view>
+			
+			<view class="content">
+				<view class="title">
+					交易信息
+				</view>
+				
 				<view class="item">
 					<view class="label">
-						创建时间
+						商品金额
 					</view>
-					<view class="value">
-						{{$u.timeFormat(info.createTime,'yyyy-mm-dd hh:MM:ss')}}
+					<view class="value black">
+						¥{{info.goodsList[0].goodsInfo.realPrice}}
 					</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">
-						{{$u.timeFormat(info.paymentTime,'yyyy-mm-dd hh:MM:ss')}}
+						<text class="red fs28">¥{{info.payAmount}}</text>
 					</view>
 				</view>
+				
+			</view>
+			
+			<view class="input-box" v-if="isVisual">
+				<view class="label">
+					充值账号
+				</view>
+				<view class="value">
+					{{JSON.parse(info.extend).account}}
+				</view>
 			</view>
-			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.orderType == 'WAIT_PAYMENT'" @click="pay" >立即支付</button>
-			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.orderType == 'APPLY_REFUND'" @click="cancelReply" >取消退款</button>
-			<view class="content apply-box" v-else-if="info.orderType == 'WAIT_USE'||info.orderType == 'USED'||info.orderType == 'CLOSE'" @click="apply">
+			
+			<template v-if="info.goodsList[0].goodsState == 'APPLY_REFUND'">
+				<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>
+			</template>
+			
+			<button type="default" :loading="btnLoading" class="pay-btn" v-if="info.goodsList[0].goodsState == 'WAIT_PAYMENT'" @click="pay" >立即支付</button>
+			<view class="content apply-box" v-else-if="(info.goodsList[0].goodsState == 'WAIT_USE'||info.goodsList[0].goodsState == 'USED')&&isRefund()" @click="apply">
 				<view class="label">
 					退款申请
 				</view>
@@ -147,14 +205,14 @@
 			
 			<!-- 二维码 -->
 			<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 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>
@@ -172,11 +230,18 @@
 				btnLoading:false,
 				oldBright:0,
 				info:{
-					goodsList:[]
+					goodsList:[{goodsState:''}]
 				},
-				
+				isNotTime:false
 			}
 		},
+		watch: {
+			// isNotTime(val) {
+			// 	if(this.isNotTime){
+			// 		this.payDetails(this.info.orderNo)
+			// 	}
+			// }
+		},
 		filters: {
 			filterType: function(val) {
 				if(val == 'APPLY_REFUND'){
@@ -207,7 +272,36 @@
 				}
 			}
 		},
+		computed: {
+			closeTime() {
+				// if((this.info.createTime + 1000*60*15) - new Date().getTime()){
+				// 	this.isNotTime = false
+				// }else{
+				// 	this.isNotTime = true
+				// }
+				return (this.info.createTime + 1000*60*30) - new Date().getTime()
+			},
+		},
 		methods: {
+			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
+				console.log(222222,this.isNotTime);
+				this.payDetails(this.info.orderNo)
+			},
+			refundDetail(){
+				uni.navigateTo({
+					url:`/my/order/refundDetail?id=${this.info.orderNo}`
+				})
+			},
 			checkCode() {
 				this.codeData = ''
 				this.$nextTick(()=>{
@@ -226,7 +320,7 @@
 					// 		},200)
 					// 	}
 					// })
-					qrCode(this.info.orderNo).then(res=>{
+					qrCode(this.info.goodsList[0].id).then(res=>{
 						this.loading = false
 						if(res.state == 'Success'){
 							this.codeData = res.content
@@ -272,7 +366,7 @@
 					title: '支付中'
 				})
 				let that = this
-				let miniPayRequest = JSON.parse(this.info.miniPayRequest)
+				let miniPayRequest = JSON.parse(this.info.payment.miniPayRequest)
 				uni.requestPayment({
 					"provider": "wxpay",
 					"orderInfo": miniPayRequest,
@@ -317,7 +411,7 @@
 				uni.showLoading({
 					title: '取消中'
 				})
-				unRefund(this.info.orderNo).then(res=>{
+				unRefund({id:this.info.goodsList[0].id}).then(res=>{
 					this.btnLoading = false
 					uni.hideLoading()
 					
@@ -350,8 +444,9 @@
 .order-detail{
 	background: #F9F9F9;
 	min-height: 100vh;
+	padding-bottom: 100rpx;
 	.status-box{
-		padding: 30rpx 30rpx 60rpx;
+		padding: 24rpx 24rpx 4rpx;
 		display: flex;
 		justify-content: space-between;
 		.text-box{
@@ -359,6 +454,10 @@
 			.status{
 				font-weight: bold;
 				font-size: 32rpx;
+				display: flex;
+				.u-count-down__text{
+					color: #FF4D3A!important;
+				}
 			}
 			.notice{
 				font-size: 24rpx;
@@ -367,22 +466,47 @@
 		}
 	}
 	
+	.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;
+		// 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{
-			color: #999999;
+			font-weight: 300;
 			font-size: 24rpx;
-			margin-top: 15rpx;
+			color: #AAAAAA;
+			margin-top: 20rpx;
+			width: 100%;
+			white-space: nowrap;
+			overflow: hidden;
+			text-overflow: ellipsis;
 		}
 	}
 	
@@ -398,6 +522,37 @@
 		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;
@@ -419,9 +574,14 @@
 	
 	.content{
 		margin: 20rpx 30rpx;
-		padding: 24rpx;
+		padding: 28rpx 24rpx;
 		border-radius: 16rpx;
 		background: #fff;
+		.title{
+			font-weight: 600;
+			font-size: 28rpx;
+			color: #222222;
+		}
 		.item{
 			display: flex;
 			align-items: center;
@@ -446,17 +606,26 @@
 		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{
-			color: #222222;
+			font-weight: 600;
 			font-size: 28rpx;
-			font-weight: 500;
+			color: #222222;
 		}
 		.value{
 			color: #999999;
 			font-size: 24rpx;
-			margin-top: 12rpx;
+			margin-top: 15rpx;
 		}
 		
 		.jiantou{
@@ -501,20 +670,15 @@
 						font-size: 32rpx;
 						font-weight: bold;
 					}
-					.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;
-					}
+					
 				}
-				.start-time{
+				.start-time,.goods-desc{
 					font-size: 24rpx;
 					color: #AAAAAA;
+					width: 450rpx;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
 				}
 			}
 		}

+ 6 - 6
my/order/index.vue

@@ -13,7 +13,7 @@
 			<view class="tab" :class="[query.orderType == 'WAIT_USE'?'active':'']" @click="handleTab('WAIT_USE')">
 				待使用
 			</view>
-			<view class="tab" :class="[query.orderType == 'REFUNDED'?'active':'']" @click="handleTab('REFUNDED')">
+			<view class="tab" :class="[query.orderType == 'APPLY_REFUND'?'active':'']" @click="handleTab('APPLY_REFUND')">
 				退款
 			</view>
 		</view>
@@ -23,17 +23,17 @@
 			<view class="order-item" v-for="(item,index) in list" :key="index" @click="jump(item)">
 				<view class="top-box">
 					<view class="label">
-						{{item.shopName}}
+						{{item.shopInfo.shopName}}
 					</view>
 					<view class="status">
-						{{item.orderType |filterType}}
+						{{item.goodsModelList[0].goodsState |filterType}}
 					</view>
 				</view>
 				<view class="order-box">
-					<zs-img radius="full" :src="item.goodsList[0].goodsImg" width="164rpx" height="164rpx"></zs-img>
+					<zs-img radius="full" :src="item.goodsModelList[0].goodsInfo.goodsPath" width="164rpx" height="164rpx"></zs-img>
 					<view class="info">
 						<view class="title">
-							{{item.goodsList[0].goodsName}}
+							{{item.goodsModelList[0].goodsInfo.goodsName}}
 						</view>
 						<view class="time">
 							{{$u.timeFormat(item.createTime,'yyyy-mm-dd hh:MM:ss')}}
@@ -55,11 +55,11 @@
 			return {
 				status: 'more',
 				loading: false,
-				keyword: '',
 				query:{
 					orderType:null,
 					page:0,
 					size:10,
+					userId:JSON.parse(uni.getStorageSync('userInfo')).userId
 				},
 				total:0,
 				list: []

+ 57 - 35
my/order/refund.vue

@@ -2,39 +2,43 @@
 	<view class="refund">
 		<view class="shop-box">
 			<view class="shop-name">
-				{{info.shopName}}
+				{{info.shopInfo.shopName}}
 			</view>
 			<view class="address">
-				贵州省贵阳市花溪区天河潭旅游度假区天河潭奥特莱斯F4
+				{{info.shopInfo.address}}
 			</view>
 		</view>
 
 		<view class="content info">
 			<view class="order-info">
-				<image class="icon" :src="info.goodsList[0].goodsImg" mode=""></image>
+				<image class="icon" :src="info.goodsList[0].goodsInfo.goodsPath" mode=""></image>
 				<view class="shop-info">
 					<view class="title">
-						{{info.goodsList[0].goodsName}}
+						{{info.goodsList[0].goodsInfo.goodsName}}
+					</view>
+					<!-- 电影订单 -->
+		<!-- 			<view class="time">
+						2024-03-04 22:55
+					</view>
+					<view class="desc">
+						2号厅 4排4座 4排5座  4排6座  4排7座
+					</view> -->
+					<view class="goods-desc">
+					{{info.goodsList[0].goodsInfo.goodsDescribe}}
 					</view>
 					<view class="price">
-						¥{{info.goodsAmount}}
+						¥{{info.goodsList[0].goodsInfo.realPrice}}
 					</view>
+						
 
 				</view>
+				
 			</view>
 
-			<view class="item">
-				<view class="label">
-					购买数量
-				</view>
-				<view class="value black">
-					1
-				</view>
-			</view>
-			<view class="notice">
-				最多可退1
-			</view>
-
+		</view>
+		
+		<view class="content">
+			
 			<view class="item">
 				<view class="label">
 					实付金额
@@ -43,11 +47,13 @@
 					<text class="red fs28">¥{{info.payAmount}}</text>
 				</view>
 			</view>
-
 			<view class="notice">
-				1-3个工作日退还至原支付方,将以实退款金额为准
+				1-3个工作日退还至原支付方,将以实退款金额为准
 			</view>
-
+			
+		</view>
+		
+		<view class="content">
 			<view class="item">
 				<view class="label">
 					说明
@@ -57,11 +63,8 @@
 				<u-form-item  prop="remark" :borderBottom="false" ref="item1">
 					<textarea class="desc" v-model="query.remark" placeholder="请输入原因,我们将尽心为您服务"></textarea>
 				</u-form-item>
-
-			</u--form>
-
 			
-
+			</u--form>
 		</view>
 
 		<button class="save-btn" type="default" @click="submit">提交</button>
@@ -77,7 +80,7 @@ import {applyRefund} from '@/api/payment.js'
 				info: {},
 				query:{
 					  "remark": "",
-					  "orderNo": "",
+					  "id": "",
 					 
 				},
 				rules:{
@@ -116,7 +119,7 @@ import {applyRefund} from '@/api/payment.js'
 			if(JSON.stringify(eventChannel) !=='{}'){
 				eventChannel.on('orderInfo', function(data) {
 					that.info = data
-					that.query.orderNo = data.orderNo
+					that.query.id = data.goodsList[0].id
 
 				})
 			}
@@ -156,15 +159,24 @@ import {applyRefund} from '@/api/payment.js'
 			border-radius: 16rpx;
 			box-sizing: border-box;
 
-			.shop-name {
+			.shop-name{
+				font-weight: 600;
 				font-size: 32rpx;
 				color: #181818;
+				width: 100%;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
 			}
-
-			.address {
-				color: #999999;
+			.address{
+				font-weight: 300;
 				font-size: 24rpx;
-				margin-top: 15rpx;
+				color: #AAAAAA;
+				margin-top: 20rpx;
+				width: 100%;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
 			}
 		}
 
@@ -178,11 +190,12 @@ import {applyRefund} from '@/api/payment.js'
 				display: flex;
 				align-items: center;
 				justify-content: space-between;
-				margin-top: 28rpx;
+				// margin-top: 28rpx;
 
 				.label {
-					color: #222222;
+					font-weight: 500;
 					font-size: 28rpx;
+					color: #222222;
 				}
 
 				.value {
@@ -246,11 +259,20 @@ import {applyRefund} from '@/api/payment.js'
 						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 {
-						color: #181818;
+						font-weight: 600;
 						font-size: 32rpx;
-						font-weight: bold;
+						color: #FF4D3A;
 					}
 
 					.code-btn {

+ 502 - 0
my/order/refundDetail.vue

@@ -0,0 +1,502 @@
+<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 shop-box">
+				<view class="shop-name">
+					{{info.shopInfo.shopName}}
+				</view>
+				<view class="address">
+					{{info.shopInfo.address}}
+				</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">
+						{{info.goodsList[0].goodsInfo.goodsDescribe}}
+						</view>
+						<view class="price-box">
+							<view class="price">
+									¥{{info.goodsList[0].goodsInfo.realPrice}}
+							</view>
+							
+						</view>
+						
+						
+						<!-- 有extend并且不是虚拟商品 -->
+						<!-- <view class="start-time" v-if="info.extend&&!isVisual">
+							出发时间:{{info.extend}}
+						</view> -->
+						
+					</view>
+				</view>
+			</view>
+	
+			
+			<view class="content">
+				<view class="title">
+					商品总价
+				</view>
+				
+				<view class="item">
+					<view class="label">
+						商品金额
+					</view>
+					<view class="value black">
+						¥{{info.goodsList[0].goodsInfo.realPrice}}
+					</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 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;
+	
+	.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>

+ 51 - 2
pages.json

@@ -17,6 +17,12 @@
 				"navigationBarTitleText": "搜索"
 			}
 		},
+		{
+			"path": "pages/index/searchResult",
+			"style": {
+				"navigationBarTitleText": "搜索结果"
+			}
+		},
 		{
 			"path": "pages/service/index",
 			"style": {
@@ -113,6 +119,12 @@
 						"enablePullDownRefresh": true
 					}
 				},
+				{
+					"path": "shopList/index",
+					"style": {
+						"navigationBarTitleText": "适用店铺"
+					}
+				},
 				{
 					"path": "qrcode/index",
 					"style": {
@@ -124,8 +136,33 @@
 					"style": {
 						"navigationBarTitleText": "会员充值"
 					}
+				},
+				{
+					"path": "movie/index",
+					"style": {
+						"navigationStyle": "custom",
+						"enablePullDownRefresh": true
+					}
+				},
+				{
+					"path": "movie/movieDetail",
+					"style": {
+						"navigationBarTitleText": "电影"
+					}
+				},
+				{
+					"path": "movie/chooseSeat",
+					"style": {
+						"navigationBarTitleText": "选座",
+						"enablePullDownRefresh": true
+					}
+				},
+				{
+					"path": "hotel/index",
+					"style": {
+						"navigationStyle": "custom"
+					}
 				}
-
 			]
 		},
 		{
@@ -168,6 +205,12 @@
 						"navigationBarTitleText": "退款申请"
 					}
 				},
+				{
+					"path": "order/refundDetail",
+					"style": {
+						"navigationBarTitleText": "退款详情"
+					}
+				},
 				{
 					"path": "favorite/index",
 					"style": {
@@ -219,7 +262,7 @@
 			"pages": [{
 					"path": "login/login",
 					"style": {
-						"navigationBarTitleText": "慧学惠生活"
+						"navigationBarTitleText": "慧学惠生活"
 					}
 				},
 				{
@@ -355,6 +398,12 @@
 						"navigationBarTitleText": "提交订单"
 					}
 				},
+				{
+					"path": "pay1",
+					"style": {
+						"navigationBarTitleText": "提交订单"
+					}
+				},
 				{
 					"path": "offlinePayment",
 					"style": {

+ 214 - 90
pages/index/index.vue

@@ -7,7 +7,7 @@
 		<view class="login-home">
 			<!-- 登录显示的套餐列表 -->
 			<view class="discount-list">
-				<view class="discount-item" v-for="(item,index) in discountsList" :key="index" @click="goDetail(item.linkUrl,item.id,item.secondaryImg,item.menuName)">
+				<view class="discount-item" v-for="(item,index) in discountsList" :key="index" @click="goDetail(item.domainUrl,item.id,item.secondaryImg,item.menuName)">
 					<image class="icon" :src="item.imgUrl" mode=""></image>
 					<view class="title">{{item.menuName}}</view>
 					<view class="tag" v-if="item.labelAbove">
@@ -49,42 +49,79 @@
 				<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 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>
+						</swiper> -->
 
 						
-						<view class="store-item" v-for="(item,index) in list" :key="index" @click="goShopDetail(item)">
-							<zs-img :src="item.logoPath" width="340rpx" height="340rpx" mode="widthFix"></zs-img>
-							<view class="info">
-								<view class="title">
-									{{item.shopVo.shopName}}
+						<view class="store-item" v-for="(item,index) in list" :key="index" @click="goGoodsDetail(item)">
+							<template v-if="item.isAdv">
+								<image class="ad" :src="item.advertsImg" mode="widthFix"></image>
+							</template>
+							<template v-else>
+								<zs-img :src="item.goodsVos[0].goodsImg" width="340rpx" height="340rpx" mode="widthFix"></zs-img>
+								<view class="info">
+									<view class="title">
+										{{item.goodsVos[0].goodsName}}
+									</view>
+									<view class="desc">
+										{{item.goodsVos[0].goodsDescribe}}
+									</view>
+									<view class="price-box">
+										<view class="left">
+											<view class="unit">
+												¥
+											</view>
+											<view class="price">
+											{{item.goodsVos[0].realPrice}}
+											</view>
+										</view>
+										
+										<view class="right">
+											销量{{item.goodsVos[0].saleNum}}
+										</view>
+									</view>
 								</view>
-								<view class="address">
-
-									<image class="position" src="../../static/position.png" mode=""></image>
-									{{(item.shopVo.distance/1000).toFixed(2)}}km
-								</view>
-							</view>
+							</template>
+							
 						</view>
 					</view>
 					<view class="right">
-						<view class="store-item" v-for="(item,index) in list1" :key="index" @click="goShopDetail(item)">
-							<zs-img :src="item.logoPath" width="340rpx" height="340rpx" mode="widthFix"></zs-img>
-							<view class="info">
-								<view class="title">
-									{{item.shopVo.shopName}}
-								</view>
-								<view class="address">
-									<image class="position" src="../../static/position.png" mode=""></image>
-									{{(item.shopVo.distance/1000).toFixed(2)}}km
+						
+						<view class="store-item" v-for="(item,index) in list1" :key="index" @click="goGoodsDetail(item)">
+							<template v-if="item.isAdv">
+								<image class="ad" :src="item.advertsImg" mode="widthFix"></image>
+							</template>
+							<template v-else>
+								<zs-img :src="item.goodsVos[0].goodsImg" width="340rpx" height="340rpx" mode="widthFix"></zs-img>
+								<view class="info">
+									<view class="title">
+										{{item.goodsVos[0].goodsName}}
+									</view>
+									<view class="desc">
+										{{item.goodsVos[0].goodsDescribe}}
+									</view>
+									<view class="price-box">
+										<view class="left">
+											<view class="unit">
+												¥
+											</view>
+											<view class="price">
+											{{item.goodsVos[0].realPrice}}
+											</view>
+										</view>
+										
+										<view class="right">
+											销量{{item.goodsVos[0].saleNum}}
+										</view>
+									</view>
 								</view>
-							</view>
+							</template>
 						</view>
 					</view>
 
@@ -190,13 +227,36 @@
 									success: function(res) {
 										// 市
 										that.city = res.result.address_component.city
-										console.log(9999,that.city);
+										console.log(9999,that.city,res);
+										if(uni.setStorageSync('districtList')&&uni.getStorageSync('city')==that.city) return
+										uni.setStorageSync('city',res.result.address_component.city)
+										// 获取市区的行政区
+										qqmapsdk.getDistrictByCityId({
+										  // 传入对应省份ID获得城市数据,传入城市ID获得区县数据,依次类推
+										  id: res.result.ad_info.city_code.substr(3), //对应接口getCityList返回数据的Id,如:北京是'110000'
+										  success: function(res) {//成功后的回调
+										    console.log('对应城市ID下的区县数据:', res.result[0]);
+											let data = res.result[0]
+											data.map(item=>{
+												item.label = item.fullname
+											})
+											uni.setStorageSync('districtList',JSON.stringify(data))
+										  },
+										  fail: function(error) {
+										    console.error(error);
+										  },
+										  complete: function(res) {
+										    console.log(res);
+										  }
+										});
 										resolve()
 									},
 									fail: function(res) {
 										that.city = '定位失败'
 									},
 								})
+								  
+								
 							},
 							fail: () => {
 								console.log("获取经纬度失败");
@@ -214,10 +274,10 @@
 					}
 				})
 			},
-			goShopDetail(item) {
+			goGoodsDetail(item) {
 				uni.setStorageSync('shopInfo', JSON.stringify(item))
 				uni.reLaunch({
-					url: `../../detail/shopDetail/shopDetail`
+					url: `../../detail/goodsDetail/index?id=${item.goodsVos[0].goodsId}`
 				})
 			},
 
@@ -248,8 +308,9 @@
 						this.loading = false
 						let list = []
 						let list1 = []
-						res.content.records.map((item,index)=>{
-							if(index%2){
+						let data = res.content.records
+						data.map((item,index)=>{
+							if(index%2 == 0){
 								list.push(item)
 							}else{
 								list1.push(item)
@@ -257,13 +318,63 @@
 						})
 						this.list = this.list.concat(list)
 						this.list1 = this.list1.concat(list1)
-						let total = this.list.length+this.list1.length
-						if(total>=res.content.total){
+						if(this.query.pageCurrent == res.content.pages){
 							this.status = 'noMore'
 						}else{
 							this.status = 'more'
 							this.query.pageCurrent++
 						}
+						if(!this.advList1.length){
+							this.getGoodsAdv().then(()=>{
+								this.advList1.map(item=>{
+									if(item.showSort<= (this.list.length + this.list1.length)){
+										if((item.showSort-1)%2 == 0){
+											this.list.splice(Math.ceil(item.showSort/2)-1,0,{isAdv:true,...item})
+										}else{
+											this.list1.splice(Math.ceil(item.showSort/2)-1,0,{isAdv:true,...item})
+										}
+									}
+								})
+							}
+						  )
+						}else{
+							this.advList1.map(item=>{
+								if(item.showSort<= (this.list.length + this.list1.length)){
+									if((item.showSort-1)%2 == 0){
+										this.list.splice(Math.ceil(item.showSort/2)-1,0,{isAdv:true,...item})
+									}else{
+										this.list1.splice(Math.ceil(item.showSort/2)-1,0,{isAdv:true,...item})
+									}
+								}
+							})
+						}
+						// 获取商品里面的广告
+						// getAdv({currentPage:1,pageSize:99,advertsType:2,status:1}).then(res1=>{
+						// 	if(res.state == 'Success'){
+						// 		res1.content.records.map(item=>{
+						// 			data.splice(item.showSort-1,0,{isAdv:true,...item})
+						// 		})
+						// 		console.log(data);
+						// 		data.map((item,index)=>{
+						// 			if(index%2){
+						// 				list.push(item)
+						// 			}else{
+						// 				list1.push(item)
+						// 			}
+						// 		})
+						// 		this.list = this.list.concat(list)
+						// 		this.list1 = this.list1.concat(list1)
+						// 		// let total = this.list.length+this.list1.length
+						// 		// if(total>=res.content.total){
+						// 		if(this.query.pageCurrent == res.content.pages){
+						// 			this.status = 'noMore'
+						// 		}else{
+						// 			this.status = 'more'
+						// 			this.query.pageCurrent++
+						// 		}
+						// 	}
+						// })
+						
 						
 					}
 				})
@@ -271,7 +382,7 @@
 			// 金刚区
 			getMenu(){
 				return new Promise((resolve,reject)=>{
-					getMenu({currentPage:1,pageSize:10}).then(res=>{
+					getMenu({currentPage:1,pageSize:10,status:2}).then(res=>{
 						if(res.state == 'Success'){
 							this.discountsList = res.content.records
 							resolve(1)
@@ -282,16 +393,27 @@
 			// 广告位
 			getAdv(){
 				return new Promise((resolve,reject)=>{
-					getAdv({currentPage:1,pageSize:99,advertsType:1}).then(res=>{
+					getAdv({currentPage:1,pageSize:99,advertsType:1,status:1}).then(res=>{
 						if(res.state == 'Success'){
-							this.advList = res.content.records.filter((item,index)=>index<2)
-							this.advList1 = res.content.records.filter((item,index)=>index>=2)
+							this.advList = res.content.records
+							// this.advList = res.content.records.filter((item,index)=>index<2)
+							// this.advList1 = res.content.records.filter((item,index)=>index>=2)
 							resolve(2)
 						}
 					})
 				})
-			}
-
+			},
+			// 获取商品列表内广告位
+			getGoodsAdv(){
+				return new Promise((resolve,reject)=>{
+					getAdv({currentPage:1,pageSize:99,advertsType:2,status:1}).then(res=>{
+						if(res.state == 'Success'){
+							this.advList1 = res.content.records
+							resolve(2)
+						}
+					})
+				})
+			},
 		},
 		onPageScroll(e) {
 				if(e.scrollTop >= 50){
@@ -323,9 +445,8 @@
 <style lang="scss">
 	.home {
 		// padding-bottom:120rpx;
-		background: linear-gradient(180deg, #FFFFFF 0%, #DCE8FF 100%);
-
-
+		// background: linear-gradient(180deg, #FFFFFF 0%, #DCE8FF 100%);
+		background: #F9F9F9;
 
 		.card-title {
 			display: flex;
@@ -345,14 +466,14 @@
 
 		.login-home {
 			// background: linear-gradient(178deg, #FFFFFF 0%, #F9F9F9 100%);
-			background: #FFF;
+			// background: #FFF;
 
 			.discount-list {
 				display: flex;
 				flex-wrap: wrap;
 				// padding: 30rpx 0;
 				margin: 0 24rpx 20rpx;
-				background: #fff;
+				// background: #fff;
 				border-radius: 16rpx;
 				position: relative;
 				top: 20rpx;
@@ -367,13 +488,15 @@
 					position: relative;
 
 					.icon {
-						width: 56rpx;
-						height: 56rpx;
+						width: 80rpx;
+						height: 80rpx;
 					}
 
 					.title {
-						font-size: 26rpx;
+						font-size: 24rpx;
 						margin-top: 10rpx;
+						font-weight: 300;
+						color: #222222;
 					}
 
 					.tag {
@@ -467,14 +590,14 @@
 						}
 					}
 				}
-
-				.right {
-
-				}
+					.ad{
+						width: 340rpx;
+						border-radius: 16rpx;
+					}
 
 				.store-item {
 					width: 340rpx;
-					margin-bottom: 25rpx;
+					margin-bottom: 20rpx;
 					// box-shadow: 0rpx 0rpx 24rpx 2rpx rgba(0, 0, 0, 0.08);
 					border-radius: 16rpx;
 					background: #fff;
@@ -485,61 +608,62 @@
 						border-radius: 16rpx 16rpx 0 0;
 					}
 
-					.info {
-						padding: 20rpx;
-						background: #fff;
-						border-radius: 0 0 16rpx 16rpx;
+					.info{
+						flex: 1;
+						padding: 16rpx;
+						display: flex;
+						flex-direction: column;
+						justify-content: space-between;
 						position: relative;
-
-						
-						.title {
+						.title{
+							font-size: 28rpx;
 							font-weight: bold;
 							width: 100%;
 							white-space: nowrap;
+							overflow: hidden;
 							text-overflow: ellipsis;
+							margin-top: 10rpx;
+						}
+						
+						.desc{
+							font-size: 24rpx;
+							color: #AAAAAA;
 							overflow: hidden;
+							text-overflow: ellipsis;
+							/* 弹性伸缩盒子模型显示 */
+							display: -webkit-box;
+							/* 限制在一个块元素显示的文本的行数 */
+							-webkit-line-clamp: 2;
+							/* 设置或检索伸缩盒对象的子元素的排列方式 */
+							-webkit-box-orient: vertical;
+							margin-top: 12rpx;
 						}
-
-						.tags {
+						
+						.price-box{
 							display: flex;
+							justify-content: space-between;
 							align-items: center;
-
-							.tag-item {
-								line-height: 50rpx;
-								border-radius: 8rpx;
-								padding: 6rpx 0;
-								font-size: 24rpx;
-								margin-left: 10rpx;
+							margin-top: 12rpx;
+							.left{
 								display: flex;
-
-								.label {
-									background: #FFF;
-									color: #FE5B47;
-									padding: 0 10rpx;
-									border-radius: 8rpx 0 0 8rpx;
+								align-items: flex-end;
+								.unit{
+									font-size: 20rpx;
+									color: #FF4D3A;
+									font-weight: bold;
 								}
-
-								.value {
-									color: #FFF;
-									background: rgba(255, 255, 255, .2);
-									padding: 0 14rpx;
-									border-radius: 0 8rpx 8rpx 0;
+								.price{
+									font-size: 32rpx;
+									color: #FF4D3A;
+									font-weight: bold;
 								}
 							}
-						}
-
-						.address {
-							display: flex;
-							align-items: center;
-							margin-top: 15rpx;
-							color: #999;
-
-							.position {
-								width: 25rpx;
-								height: 29rpx;
-								margin-right: 8rpx;
+							.right{
+								font-size: 24rpx;
+								color: #AAAAAA;
 							}
 						}
+						
 					}
 				}
 			}

+ 19 - 7
pages/index/search.vue

@@ -21,7 +21,7 @@
 			</view>
 		</view>
 		<view class="content" v-show="list.length">
-			<view class="tab-group">
+<!-- 			<view class="tab-group">
 				<view class="tab" :class="[tab == 1?'active':'']" @click="handleTab(1)">
 					店铺
 				</view>
@@ -32,7 +32,6 @@
 
 			<zs-list mt="0" @load="loadMore" :status="status">
 				<view :class="[tab == 1?'item':'goods-item']" v-for="(item,index) in list" :key="index">
-					<!-- 商铺 -->
 					<template v-if="tab == 1">
 						<zs-img :src="item.logoPath" width="164rpx" height="164rpx" radius="full"
 							@click.native="goDetail(item)"></zs-img>
@@ -50,7 +49,6 @@
 
 						</view>
 					</template>
-					<!-- 商品 -->
 					<template v-else>
 							<zs-img  :src="item.goodsImg" width="310rpx" height="310rpx" raduis="full"  mode="" ></zs-img>
 							<view class="goods-name">
@@ -64,7 +62,7 @@
 							</view>
 					</template>
 				</view>
-			</zs-list>
+			</zs-list> -->
 
 		</view>
 	</view>
@@ -99,7 +97,7 @@
 		methods: {
 			handleHistory(val){
 				this.query.queryName = val
-				this.search()
+				this.handleSearch()
 			},
 			goDetail(item) {
 				uni.setStorageSync('shopInfo', JSON.stringify(item))
@@ -113,7 +111,14 @@
 				this.list = []
 			},
 			handleSearch() {
-				this.search()
+				this.status = 'more'
+				this.query.pageCurrent = 1
+				this.list = []
+				this.saveSearchHistory()
+				uni.navigateTo({
+					url:'./searchResult?search='+this.query.queryName
+				})
+				// this.search()
 			},
 			getSearchHistory() {
 				getSearchHistory().then(res => {
@@ -193,7 +198,7 @@
 				line-height: 72rpx;
 				height: 72rpx;
 				padding-left: 100rpx;
-				padding-right: 130rpx;
+				padding-right: 150rpx;
 			}
 
 			.btn {
@@ -228,6 +233,7 @@
 
 		.tab-box {
 			display: flex;
+			flex-wrap: wrap;
 			align-items: center;
 			padding: 24rpx 0;
 
@@ -238,6 +244,12 @@
 				background: #F6F6F6;
 				color: #999999;
 				font-size: 24rpx;
+				max-width: 700rpx;
+				white-space: nowrap;
+				overflow: hidden;
+				text-overflow: ellipsis;
+				margin-bottom: 20rpx;
+				margin-right: 20rpx;
 			}
 		}
 		

+ 293 - 0
pages/index/searchResult.vue

@@ -0,0 +1,293 @@
+<template>
+	<view class="searchResult">
+		<zs-choose-tab :tabList="tabList" @choose="chooseTab"></zs-choose-tab>
+		<zs-list mt="0" @load="loadMore" :status="status">
+			<view class="item" v-for="(item,index) in list" :key="index">
+					<zs-img class="icon" :src="item.logoPath" radius="full" width="120rpx" height="120rpx" @click="goShopDetail(item)"></zs-img>
+				<view class="shop-box">
+					<view class="shop-info">
+						<view class="shop-name" @click="goShopDetail(item)">
+							{{item.shopVo.shopName}}
+						</view>
+						<view class="address-box">
+							<view class="address">
+								{{item.district}} 
+							</view>
+							<view class="distance">
+								{{(item.shopVo.distance/1000).toFixed(2)}}km
+							</view>
+						</view>
+					</view>
+	
+					<!-- <view class="goods-list"> -->
+						<scroll-view class="goods-list" enable-flex scroll-x="true">
+						<view class="goods-item" v-for="(i,d) in item.goodsVos" :key="d"  @click="goGoodsDetail(item,i)">
+							<zs-img :src="i.goodsImg" width="160rpx" height="160rpx"></zs-img>
+							<view class="goods-name">
+							{{i.goodsName}}
+							</view>
+							<view class="price-box">
+									<view class="price">
+									¥{{i.realPrice}}
+									</view>
+									<view class="old-price">
+										 ¥{{i.marketPrice}}
+									</view>
+							</view>
+						</view>
+	
+						</scroll-view>
+					<!-- </view> -->
+				</view>
+			</view>
+		</zs-list>
+	</view>
+</template>
+
+<script>
+	import {
+		search
+	} from '@/api/shop.js';
+	import {
+		getMenu,
+	} from '@/api/common.js'
+	export default {
+		data() {
+			return {
+				location:'',
+				query: {
+					district:'',
+					pageCurrent: 1,
+					pageSize: 10,
+					'location.lat': 0,
+					'location.lon': 0,
+					range:'',
+					queryName: ''
+				},
+				status: 'more',
+				list: [],
+				tabList: [{
+						id: 1,
+						label: '区域',
+						list: [
+				
+							{
+								id: 1,
+								label: '观山湖'
+							},
+							{
+								id: 2,
+								label: '白云区'
+							},
+							{
+								id: 3,
+								label: '花果山区'
+							}
+						]
+					},
+					{
+						id: 1,
+						label: '全部分类',
+						list: []
+					},
+					
+					{
+						id: 1,
+						label: '附近',
+						list: [
+							{
+								id:5,
+								label: '5KM'
+							},
+							{
+								id:10,
+								label: '10KM'
+							},
+							{
+								id:20,
+								label: '20KM'
+							},
+							{
+								id:50,
+								label: '50KM'
+							}
+						]
+					},
+				]
+			}
+		},
+		methods: {
+			goShopDetail(item) {
+				uni.setStorageSync('shopInfo', JSON.stringify(item))
+				uni.navigateTo({
+					url: '/detail/shopDetail/shopDetail'
+				})
+			},
+			goGoodsDetail(item,i) {
+				uni.setStorageSync('shopInfo', JSON.stringify(item))
+				uni.reLaunch({
+					url: `/detail/goodsDetail/index?id=${i.goodsId}`
+				})
+			},
+			chooseTab(val) {
+				console.log(val);
+				this.query.range = val[2].id
+				if(val[0]){
+					this.query['location.lat'] = val[0].location.lat
+					this.query['location.lon'] = val[0].location.lng
+					this.query.range = 50
+					this.query.district = val[0].label
+				}else if(!val[0]){
+					this.query['location.lat'] = this.location.latitude
+					this.query['location.lon'] = this.location.longitude
+					this.query.district = ''
+				}
+				if(val[1]){
+					this.query.menuId = val[1].id
+				}else if(!val[1]){
+					this.query.menuId = ''
+				}
+				this.query.pageCurrent = 1
+				this.status = 'more'
+				this.list = []
+				this.search()
+			},
+			search() {
+				// if(this.status == 'noMore') return
+				this.status = 'loading'
+				let obj = JSON.parse(JSON.stringify(this.query))
+				if(!obj.range){
+					delete obj.range
+				}
+				search(obj).then(res => {
+					if (res.state == 'Success') {
+						this.list = this.list.concat(res.content.records)
+						console.log(res.content.total>=this.list.length);
+						if(res.content.total>this.list.length){
+							this.status = 'more'
+						}else{
+							this.status = 'noMore'
+							this.query.pageCurrent++
+						}
+					}
+				})
+			},
+			loadMore() {
+				this.search()
+			},
+			// 金刚区
+			getMenu(){
+					getMenu({currentPage:1,pageSize:10,status:2}).then(res=>{
+						if(res.state == 'Success'){
+							let list = []
+							res.content.records.map(item => {
+								list.push({
+									id: item.id,
+									label: item.menuName
+								})
+							})
+							this.tabList[1].list = list
+						}
+					})
+			},
+		},
+		onLoad(options) {
+			this.tabList[0].list = JSON.parse(uni.getStorageSync('districtList'))
+			this.location = JSON.parse(uni.getStorageSync('location'))
+			this.query['location.lat'] = this.location.latitude
+			this.query['location.lon'] = this.location.longitude
+			this.query.queryName = options.search
+			this.search()
+			this.getMenu()
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+.searchResult{
+	padding: 100rpx 24rpx 20rpx;
+	background: #F9F9F9;
+	.item{
+		padding: 24rpx;
+		background: #FFFFFF;
+		border-radius: 16rpx 16rpx 16rpx 16rpx;
+		display: flex;
+		align-items: flex-start;
+		margin-bottom: 20rpx;
+		
+		.icon{
+			width: 120rpx;
+		}
+		.shop-box{
+			flex: 1;
+				margin-left: 20rpx;
+			.shop-info{
+				.shop-name{
+					font-weight: 600;
+					font-size: 36rpx;
+					color: #222222;
+					width: 100%;
+					white-space: nowrap;
+					overflow: hidden;
+					text-overflow: ellipsis;
+				}
+				.address-box{
+					display: flex;
+					justify-content: space-between;
+					align-items: center;
+					font-weight: 300;
+					font-size: 24rpx;
+					color: #AAAAAA;
+					margin-top: 25rpx;
+					.address{
+						width: 400rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+				}
+			}
+			.goods-list{
+				display: flex;
+				align-items: flex-start;
+				margin-top: 20rpx;
+				overflow: auto;
+				width: calc(750rpx - 94rpx - 120rpx - 20rpx);
+				.goods-item{
+					display: inline-block;
+					width: 160rpx;
+					margin-right: 20rpx;
+					.goods-name{
+						margin-top: 20rpx;
+						width: 100%;
+						overflow: hidden;
+						text-overflow: ellipsis;
+						/* 弹性伸缩盒子模型显示 */
+						display: -webkit-box;
+						/* 限制在一个块元素显示的文本的行数 */
+						-webkit-line-clamp: 2;
+						/* 设置或检索伸缩盒对象的子元素的排列方式 */
+						-webkit-box-orient: vertical;
+					}
+				}
+				.price-box{
+					display: flex;
+					align-items: center;
+					margin-top: 20rpx;
+					.price{
+						font-weight: 600;
+						font-size: 28rpx;
+						color: #FF4D3A;
+					}
+					.old-price{
+						font-weight: 300;
+						font-size: 20rpx;
+						color: #AAAAAA;
+						text-decoration: line-through;
+					}
+				}
+			}
+		}
+	}
+}
+</style>

+ 3 - 3
pages/my/index.vue

@@ -40,7 +40,7 @@
 					待使用
 				</view>
 			</view>
-			<view class="item" @click="jump('../../my/order/index?type=REFUNDED')">
+			<view class="item" @click="jump('../../my/order/index?type=APPLY_REFUND')">
 				<image class="icon" src="../../static/icon4.png" mode=""></image>
 				<view class="label">
 					退款
@@ -74,9 +74,9 @@
 		</view>
 
 		<u-cell-group :border="false">
-			<u-cell title="优惠券" @click="jump('../../my/coupon/index')" :border="false" :isLink="true" arrow-direction="right">
+			<!-- <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> -->
 			<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>

+ 1 - 1
pay/offlinePayment.vue

@@ -236,7 +236,7 @@
 		},
 		onLoad(options) {
 			let that = this
-			this.shopInfo.shopId = '65767201f802b7333ec795e4'||decodeURIComponent(options.scene)
+			this.shopInfo.shopId = decodeURIComponent(options.scene)
 			
 			this.shopDetail(this.shopInfo.shopId)
 			if(!uni.getStorageSync('token')){

+ 31 - 19
pay/pay.vue

@@ -1,28 +1,28 @@
 <template>
 	<view class="pay">
 
-		<view class="shop-info" v-if="!isVisual">
+		<!-- <view class="shop-info" v-if="!isVisual">
 			<view class="shop-name">
 				{{info.shopName}}
 			</view>
 			<view class="address">
 				{{info.address}}
 			</view>
-		</view>
+		</view> -->
 
 		<view class="pay-info">
 			<view class="goods-info">
-				<image class="goods-img" :src="info.goodsImg" mode=""></image>
+				<image class="goods-img" :src="info.goodsPath" mode=""></image>
 				<view class="info">
 					<view class="goods-name">
 						{{info.goodsName}}
 					</view>
 					<view class="num">
-						商品数量:1
+						{{info.goodsDescribe}}
 					</view>
 					<view class="price">
-						<!-- ¥{{info.buyPrice}} -->
-						¥{{payInfo.originalPrice}}
+						¥{{info.realPrice}}
+						<!-- ¥{{payInfo.originalPrice}} -->
 					</view>
 				</view>
 			</view>
@@ -33,13 +33,14 @@
 				<view class="label">
 					优惠券
 				</view>
-				<view class="choose-coupon" @click="choose">
-					{{payInfo.goodsCouponName}}-¥{{payInfo.offset}}
+				<view class="choose-coupon" :class="[payInfo.offset?'':'none']" @click="choose">
+					<!-- {{payInfo.goodsCouponName}}-¥{{payInfo.offset}} -->
+					{{payInfo.offset?('-¥' + payInfo.offset):'暂无可用'}}
 					<image class="icon" src="../static/jiantou-icon.png" mode=""></image>
 				</view>
 			</view>
 
-			<view class="explain">
+			<!-- <view class="explain">
 				<view class="label">
 					优惠说明
 				</view>
@@ -48,16 +49,12 @@
 					已优惠: <view class="red">¥{{payInfo.offset}} </view> 合计: <view class="red fs28">¥{{payInfo.price}}
 					</view>
 				</view>
-			</view>
+			</view> -->
 
 		</view>
 		
 		<view class="input-box" v-if="isVisual">
-			<!-- <u--form labelPosition="left" errorType="toast" :model="form"  :rules="rules" ref="uForm">
-				<u-form-item required label="充值账号" prop="account" labelWidth="200rpx" ref="item1">
-					<u--input disabled v-model="form.account" placeholder="请输入充值账号" border="none"></u--input>
-				</u-form-item>
-			</u--form> -->
+			
 			<view class="label">
 				充值账号
 			</view>
@@ -154,8 +151,20 @@
 		methods: {
 			calculate(goodsId, shopId) {
 				return new Promise((resolve, reject) => {
+					// uni.request({
+					// 	url:'http://192.168.110.226:9002/goodsInfo/calculate',
+					// 	method:'post',
+					// 	data:{
+					// 		"goodsId": goodsId,
+					// 		// "shopId": shopId,
+					// 		"userId": JSON.parse(uni.getStorageSync('userInfo')).userId
+					// 	},
+					// 	success() {
+							
+					// 	}
+					// })
 					calculate({
-						couponId: this.info.couponId,
+						// couponId: this.info.couponId,
 						"goodsId": goodsId,
 						"shopId": shopId,
 						"userId": JSON.parse(uni.getStorageSync('userInfo')).userId
@@ -252,7 +261,7 @@
 												// 取消支付后,获取支付信息以备再次支付
 												payDetails(that.query.orderNo).then(r => {
 													if (r.state == 'Success') {
-
+													that.payData = JSON.parse(r.content.miniPayRequest)
 													}
 												})
 											}
@@ -419,7 +428,10 @@
 					color: #222222;
 					font-size: 28rpx;
 				}
-
+				
+				.choose-coupon.none{
+					color: #AAAAAA;
+				}
 				.choose-coupon {
 					color: #FF4848;
 					font-size: 28rpx;
@@ -514,7 +526,7 @@
 			}
 
 			.btn {
-				width: 240rpx;
+				width: 280rpx;
 				height: 80rpx;
 				line-height: 80rpx;
 				text-align: center;

+ 549 - 0
pay/pay1.vue

@@ -0,0 +1,549 @@
+<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>
+				<view class="info">
+					<view class="goods-name">
+						第二十条
+					</view>
+					<view class="time">
+						2024-03-04 22:55
+					</view>
+					<view class="desc">
+						2号厅 4排4座 4排5座  4排6座  4排7座
+					</view>
+					<view class="price">
+						¥19.9 <view class="include">
+							(4张电影票)
+						</view>
+					</view>
+				</view>
+			</view>
+
+			
+
+			<view class="coupon">
+				<view class="label">
+					优惠券
+				</view>
+				<view class="choose-coupon" :class="[payInfo.offset?'':'none']" @click="choose">
+					<!-- {{payInfo.goodsCouponName}}-¥{{payInfo.offset}} -->
+					{{payInfo.offset?('-¥' + payInfo.offset):'暂无可用'}}
+					<image class="icon" src="../static/jiantou-icon.png" mode=""></image>
+				</view>
+			</view>
+
+			<!-- <view class="explain">
+				<view class="label">
+					优惠说明
+				</view>
+
+				<view class="right">
+					已优惠: <view class="red">¥{{payInfo.offset}} </view> 合计: <view class="red fs28">¥{{payInfo.price}}
+					</view>
+				</view>
+			</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">
+				<view class="label">
+					合计:
+				</view>
+				<view class="price">
+					¥ 19.9
+				</view>
+			</view>
+
+			<button class="btn" type="default" :loading="loading" @click="creat1">提交订单</button>
+		</view>
+
+	</view>
+</template>
+
+<script>
+	import {
+		calculate
+	} from '@/api/order.js';
+	import {
+		creat
+	} from '@/api/goods.js'
+	import {
+		creatPayOrder,
+		queryPayOrder,
+		payDetails
+	} from '@/api/payment.js'
+	import guid from '@/utils/guid.js'
+	export default {
+		data() {
+			return {
+				isVisual:false,//是否是虚拟商品
+				loading: false,
+				info: {},
+				realPay: {
+					goodsCouponName: '', //优惠券名
+					couponGoodsLogId: '', //优惠券id
+					goodsId: '', //商品id
+					price: '', //支付价格
+					offset: '', //实际抵扣值
+					discount: '', //优惠券值
+					condition: '', //优惠条件
+					originalPrice: '', //原价
+				},
+				form:{
+					account:''
+				},
+				rules: {
+					'account': {
+						type: 'string',
+						required: true,
+						message: '请输入充值账号',
+						trigger: ['blur', 'change']
+					},
+				},
+				query: {
+					"msgType": "wx.unifiedOrder",
+					"orderDesc": "测试",
+					"orderNo": "",
+					"subOpenId": "",
+					"userId": ""
+				},
+				// 支付信息
+				payData: {
+
+				}
+			}
+		},
+		computed: {
+			// 正式支付时的信息
+			payInfo() {
+				return {
+					goodsCouponName: this.realPay.goodsCouponName || '', //优惠券名
+					couponGoodsLogId: this.info.couponId, //优惠券id
+					goodsId: this.realPay.goodsId || this.info.goodsId, //商品id
+					price: this.realPay.price, //支付价格
+					offset: this.realPay.offset, //实际抵扣值
+					discount: this.realPay.discount || 0, //优惠券值
+					condition: this.realPay.condition || '', //优惠条件
+					originalPrice: this.realPay.originalPrice, //原价
+				}
+			}
+		},
+		methods: {
+			calculate(goodsId, shopId) {
+				return new Promise((resolve, reject) => {
+					calculate({
+						couponId: this.info.couponId,
+						"goodsId": goodsId,
+						"shopId": shopId,
+						"userId": JSON.parse(uni.getStorageSync('userInfo')).userId
+					}).then(res => {
+						if (res.state == 'Success') {
+							this.realPay = res.content
+						}
+					})
+				})
+			},
+			choose() {
+				let that = this
+				uni.navigateTo({
+					url: './coupon?couponId=' + this.realPay.couponGoodsLogId,
+					success: function(res) {
+						// 通过eventChannel向被打开页面传送数据
+						res.eventChannel.emit('pay', that.info)
+					}
+				})
+			},
+			creat1(){
+				uni.showToast({
+					title:'测试店铺不能支付',
+					icon:'none'
+				})
+			},
+			//创建订单
+			creat() {
+				if (this.loading) return
+					
+					this.loading = true
+					uni.showLoading({
+						title: '支付中'
+					})
+					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 => {
+							this.loading = false
+							if (res.state == 'Success') {
+								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
+									creatPayOrder(this.query).then(data => {
+										that.payData = JSON.parse(data.content.miniPayRequest)
+										if (data.content.miniPayRequest == null) return uni.hideLoading()
+										uni.requestPayment({
+											"provider": "wxpay",
+											"orderInfo": that.payData,
+											"appid": that.payData
+											.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
+											"paySign": that.payData.paySign,
+											"nonceStr": that.payData.nonceStr, // 随机字符串
+											"package": that.payData.package, // 固定值
+											// "prepayid":  that.payData.package, // 统一下单订单号 
+											"timeStamp": that.payData.timeStamp, // 时间戳(单位:秒)
+											"signType": that.payData.signType, //签名算法
+											success(msg) {
+												console.log('msg', msg, res);
+												queryPayOrder(that.query.orderNo).then(res1 => {
+													if (res1.state == 'Success') {
+														uni.hideLoading()
+														uni.reLaunch({
+															url: '/my/order/index'
+														})
+													}
+												})
+											},
+											fail(e) {
+												console.log('err', e);
+												that.loading = false
+												uni.hideLoading()
+												uni.showToast({
+													title: '取消支付',
+													icon: 'fail'
+												})
+												// 取消支付后,获取支付信息以备再次支付
+												payDetails(that.query.orderNo).then(r => {
+													if (r.state == 'Success') {
+
+													}
+												})
+											}
+										})
+
+									})
+								}
+
+							}
+						})
+					} else { // 取消支付后再次支付
+						uni.requestPayment({
+							"provider": "wxpay",
+							"orderInfo": that.payData,
+							"appid": that.payData.appId, // 微信开放平台 - 应用 - AppId,注意和微信小程序、公众号 AppId 可能不一致
+							"paySign": that.payData.paySign,
+							"nonceStr": that.payData.nonceStr, // 随机字符串
+							"package": that.payData.package, // 固定值
+							// "prepayid":  that.payData.package, // 统一下单订单号 
+							"timeStamp": that.payData.timeStamp, // 时间戳(单位:秒)
+							"signType": that.payData.signType, //签名算法
+							success(msg) {
+								console.log('msg', msg);
+								queryPayOrder(that.query.orderNo).then(res1 => {
+									if (res1.state == 'Success') {
+										uni.hideLoading()
+										uni.reLaunch({
+											url: '/my/order/index'
+										})
+									}
+								})
+							},
+							fail(e) {
+								that.loading = false
+								uni.hideLoading()
+								uni.showToast({
+									title: '取消支付',
+									icon: 'fail'
+								})
+								// 取消支付后,获取支付信息以备再次支付
+								payDetails(that.query.orderNo).then(r => {
+									if (r.state == 'Success') {
+										that.payData = JSON.parse(r.content.miniPayRequest)
+									}
+								})
+								console.log('err', e);
+							}
+						})
+					}
+			}
+
+		},
+		onReady() {
+			
+		},
+		onLoad() {
+			let userInfo = JSON.parse(uni.getStorageSync('userInfo'))
+			this.query.userId = userInfo.userId
+			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
+				}
+				console.log('data', data);
+				// that.calculate(that.info.goodsId, that.info.shopId)
+			})
+		}
+	}
+</script>
+
+<style lang="scss">
+	.pay {
+		background: #F9F9F9;
+		min-height: 100vh;
+		padding-top: 20rpx;
+
+		.shop-info {
+			margin: 0 30rpx 20rpx;
+			width: 690rpx;
+			padding: 24rpx;
+			box-sizing: border-box;
+			background: #FFFFFF;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+
+			.shop-name {
+				color: #181818;
+				font-size: 32rpx;
+			}
+
+			.address {
+				color: #999999;
+				font-size: 24rpx;
+				margin-top: 12rpx;
+			}
+		}
+
+		.pay-info {
+			margin: 0 30rpx;
+			background: #FFFFFF;
+			border-radius: 16rpx 16rpx 16rpx 16rpx;
+			padding: 28rpx 24rpx;
+
+			.goods-info {
+				display: flex;
+				margin-bottom: 30rpx;
+
+				.goods-img {
+					width: 160rpx;
+					height: 200rpx;
+					border-radius: 16rpx;
+					background: #aaa;
+				}
+
+				.info {
+					margin-left: 20rpx;
+					flex: 1;
+					display: flex;
+					flex-direction: column;
+					justify-content: space-between;
+					.goods-name {
+						font-weight: 600;
+						font-size: 28rpx;
+						color: #222222;
+						width: 400rpx;
+						white-space: nowrap;
+						overflow: hidden;
+						text-overflow: ellipsis;
+					}
+					.time{
+						font-weight: 300;
+						font-size: 24rpx;
+						color: #AAAAAA;
+					}
+					.desc{
+						font-weight: 300;
+						font-size: 24rpx;
+						color: #AAAAAA;
+					}
+					.price{
+						display: flex;
+						font-size: 24rpx;
+						color: rgba(255, 77, 58, 1);
+						.include{
+							color: #AAAAAA;
+							margin-left: 10rpx;
+						}
+					}
+				}
+			}
+			
+			
+
+			.coupon {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				border-top: 1rpx solid #F0F0F0;
+				padding: 28rpx 0 0;
+
+				.label {
+					color: #222222;
+					font-size: 28rpx;
+				}
+				
+				.choose-coupon.none{
+					color: #AAAAAA;
+				}
+				.choose-coupon {
+					color: #FF4848;
+					font-size: 28rpx;
+					display: flex;
+					align-items: center;
+
+					.icon {
+						width: 28rpx;
+						height: 28rpx;
+						display: block;
+						margin-left: 10rpx;
+					}
+				}
+			}
+
+			.explain {
+				display: flex;
+				align-items: center;
+				justify-content: space-between;
+				padding-top: 28rpx;
+
+				.label {
+					color: #AAAAAA;
+					font-size: 28rpx;
+				}
+
+				.right {
+					display: flex;
+					align-items: center;
+					font-size: 24rpx;
+
+					.red {
+						font-weight: 500;
+						color: #FF4848;
+						margin: 0 10rpx;
+					}
+
+					.fs28 {
+						font-size: 28rpx !important;
+					}
+				}
+			}
+		}
+		
+		.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;
+			}
+		}
+
+		.btn-box {
+			position: fixed;
+			bottom: 0%;
+			left: 0%;
+			width: 100%;
+			height: 98rpx;
+			display: flex;
+			align-items: center;
+			justify-content: space-between;
+			box-sizing: border-box;
+			padding: 0 30rpx;
+			border-top: 1rpx solid #EEEEEE;
+
+			.total-price {
+				display: flex;
+				align-items: center;
+
+				.label {
+					color: #181818;
+					font-size: 28rpx;
+				}
+
+				.price {
+					font-size: 36rpx;
+					font-weight: 800;
+					color: #FF4848;
+					margin-left: 10rpx;
+				}
+			}
+
+			.btn {
+				width: 280rpx;
+				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;
+				font-weight: 800;
+				color: #FFFFFF;
+				font-size: 28rpx;
+				margin: 0;
+			}
+		}
+	}
+</style>

BIN
static/new-card.png


BIN
static/rePosition.png


BIN
static/right.png


BIN
static/shop-desc.png


+ 1 - 1
study/community/index.vue

@@ -75,7 +75,7 @@
 			//获取社区分类列表
 			getItem(){
 				this.status = 'loading'
-				getItem({communityId:this.id,currentPage:1,pageSize:10}).then(res=>{
+				getItem({communityId:this.id,currentPage:1,pageSize:10,state:2}).then(res=>{
 					if(res.state == 'Success'){
 						let list = []
 						let list1 = []

+ 4 - 2
study/index.vue

@@ -50,7 +50,7 @@
 				<image class="more" src="../static/jiantou-icon.png" mode=""></image>
 			</view>
 		</view>
-		<scroll-view  class="tab-box" enable-flex scroll-y >
+		<scroll-view  class="tab-box" enable-flex scroll-x >
 			<view class="tab" :class="[tab == item.value?'active':'']" v-for="(item,index) in tabList" :key="index" @click="handleTab(item.value)">
 				{{item.label}}
 			</view>
@@ -224,7 +224,7 @@
 			},
 			//获取社区分类列表
 			getItem(communityId){
-				getItem({communityId,currentPage:1,pageSize:2}).then(res=>{
+				getItem({communityId,currentPage:1,pageSize:2,state:2}).then(res=>{
 					if(res.state == 'Success'){
 						this.communityList = res.content.records
 					}
@@ -376,7 +376,9 @@
 		}
 		.tab-box{
 			display: flex;
+			align-items: flex-start;
 			.tab{
+				flex-shrink: 0;
 				padding: 10rpx 24rpx;
 				color: #AAAAAA;
 				background: #EEEEEE;

+ 9 - 1
study/type.vue

@@ -89,7 +89,7 @@
 </template>
 
 <script>
-	import {getMenu,getPage,videoList} from '@/api/study.js';
+	import {getMenu,getPage,videoList,studyGoods} from '@/api/study.js';
 	export default {
 		data() {
 			return {
@@ -127,6 +127,7 @@
 				getPage({currentPage:1,pageSize:10,columnId,status:1}).then(res=>{
 					if(res.state == 'Success'){
 						this.pageContent = res.content
+						this.studyGoods(50)
 					}
 				})
 			},
@@ -155,6 +156,13 @@
 						}
 					}
 				})
+			},
+			studyGoods(columnId){
+				studyGoods({columnId,currentPage:1,pageSize:4}).then(res=>{
+					if(res.state == 'Success'){
+						
+					}
+				})
 			}
 			
 		},

+ 7 - 1
trip/index/index.vue

@@ -121,12 +121,18 @@
 			},
 			// 地图拖动
 			mapChange(val) {
-				console.log(111111111111111);
 				// 绘制出路线后 就不能拖动地图选择起点
 				if(this.step == 2) return
 				let that = this
 				if (val.type == 'end') {
 					this.mapCenter = val.target.centerLocation
+					// 高德
+					// AMap.getPoiAround({
+					// 	location:`${val.target.centerLocation.latitude},${val.target.centerLocation.longitude}`,
+					// 	success(res){
+					// 		console.log(111111111,res)
+					// 	}
+					// })
 				
 					qqmapsdk.reverseGeocoder({
 						location: {

+ 8 - 0
uni_modules/anil-seat/changelog.md

@@ -0,0 +1,8 @@
+## 1.0.2(2022-08-06)
+修改异步调用数据 initData(data) 初始化座位图。
+## 1.0.1(2021-09-29)
+更新文档介绍
+## 1.0.0(2021-09-29)
+插件改自,原作者: markrgba,插件id:1156
+原插件链接:https://ext.dcloud.net.cn/plugin?id=1156
+封装uni_modules组件,修改小程序适应,重新编写样式和布局,新增价格计算、多选限制。

+ 741 - 0
uni_modules/anil-seat/components/anil-seat/anil-seat.vue

@@ -0,0 +1,741 @@
+<template>
+  <view class="sel-seat" :style="{height}">
+    <!-- top -->
+    <view class="seat-head">
+      <text class="sh-title">{{ title }}</text>
+      <text class="sh-info">{{ info }}</text>
+    </view>
+    <!-- main -->
+    <view class="seat-main">
+      <movable-area class="vm-area">
+        <movable-view :style="'width: 750rpx;height:'+(seatRow*40+350)+'rpx;'" :inertia="true" :scale="true" :scale-min="0.95"
+				 :scale-max="2" direction="all" @change="onMove" @scale="onScale">
+          <view class="sm-title">
+          	<text class="text">{{ roomName }}</text>
+          </view>
+          <view class="sm-screen">
+            <text class="text">银幕中央</text>
+          </view>
+          <view class="sm-line-center"></view>
+          <!-- seat content -->
+          <view v-for="(item,index) in seatArray" :key="index" 
+            class="sm-cell" :style="'width:'+boxWidth+'px;height:'+seatSize+'px'">
+          	<view v-for="(seat,col) in item" :key="col" class="dp-ib" :style="'width:'+seatSize+'px;height:'+seatSize+'px'"
+          	 @click="handleChooseSeat(index,col)">
+             <!-- // 情侣左座 -->
+             <template v-if="seat.flag === 1">
+                <image v-if="seat.type===0" class="sm-icon" src="/uni_modules/anil-seat/static/unselected-l.png" mode="aspectFit"></image>
+                <image v-else-if="seat.type===1" class="sm-icon" src="/uni_modules/anil-seat/static/selected-l.png" mode="aspectFit"></image>
+                <image v-else-if="seat.type===2" class="sm-icon" src="/uni_modules/anil-seat/static/bought.png" mode="aspectFit"></image>
+             </template>
+             <!-- // 情侣右座 -->
+             <template v-else-if="seat.flag === 2">
+                <image v-if="seat.type===0" class="sm-icon" src="/uni_modules/anil-seat/static/unselected-r.png" mode="aspectFit"></image>
+                <image v-else-if="seat.type===1" class="sm-icon" src="/uni_modules/anil-seat/static/selected-r.png" mode="aspectFit"></image>
+                <image v-else-if="seat.type===2" class="sm-icon" src="/uni_modules/anil-seat/static/bought.png" mode="aspectFit"></image>
+             </template>
+             <!-- // 普通座位 其他座位 -->
+             <template v-else>
+                <image v-if="seat.type===0" class="sm-icon" src="/uni_modules/anil-seat/static/unselected.png" mode="aspectFit"></image>
+                <image v-else-if="seat.type===1" class="sm-icon" src="/uni_modules/anil-seat/static/selected.png" mode="aspectFit"></image>
+                <image v-else-if="seat.type===2" class="sm-icon" src="/uni_modules/anil-seat/static/bought.png" mode="aspectFit"></image>
+             </template>
+          	</view>
+          </view>
+          <view class="sm-line-index" :style="'left: '+(10-moveX/scale)+'px;'">
+          	<text class="text" :style="'height:'+seatSize+'px;'" v-for="(m,mindex) in mArr"
+          	 :key="mindex">{{m}}</text>
+          </view>
+        </movable-view>
+      </movable-area>
+      <view class="fix-tips">
+      	<view class="v-tips">
+      		<image :style="'width:'+seatSize+'px;height:'+seatSize+'px'" src="/uni_modules/anil-seat/static/unselected.png" mode="aspectFit"></image>
+          <text class="text">可选</text>
+      	</view>
+      	<view class="v-tips">
+      		<image :style="'width:'+seatSize+'px;height:'+seatSize+'px'" src="/uni_modules/anil-seat/static/bought.png" mode="aspectFit"></image>
+          <text class="text">不可选</text>
+      	</view>
+      	<view class="v-tips">
+      		<image :style="'width:'+seatSize+'px;height:'+seatSize+'px'" src="/uni_modules/anil-seat/static/selected.png" mode="aspectFit"></image>
+          <text class="text">选中</text>
+      	</view>
+      </view>
+    </view>
+    <!-- foot -->
+    <view class="seat-foot">
+      <view class="sf-recommend" v-if="SelectNum === 0">
+        <text class="text">推荐选座</text>
+        <view class="sfr-tag" v-for="num in Math.min(max, 6)" :key="num"
+          @click="smartChoose(num+1)">
+          <text class="text">{{ num+1 }}人</text>
+        </view>
+      </view>
+      <view class="sf-arselect" v-else>
+        <text class="text">已选</text>
+        <scroll-view scroll-x="true">
+          <view class="scr-wrap">
+            <view class="sfr-selt" v-for="(optItem,optindex) in optArr" :key="optItem.SeatCode"
+              @click="handleChooseSeat(optItem.rowIndex, optItem.colIndex)">
+              <!-- <image src="static/close.png" class="sfr-close"></image> -->
+              <text class="text">{{ optItem.SeatName }}</text>
+              <text class="price">¥{{ optItem.Price || '' }}</text>
+              <view class="sfr-close">X</view>
+            </view>
+          </view>
+        </scroll-view>
+      </view>
+      <view class="f-btn" :class="{disabled: SelectNum === 0 }" @click="buySeat">
+        <text class="text">{{SelectNum === 0 ? '请选座位' : `¥ ${aPrice} 确认座位`}}</text>
+      </view>
+    </view>
+  </view>
+</template>
+
+<script>
+  export default {
+    name:"anil-seat",
+    props: {
+      seatData: {
+        type: Array
+      },
+      max: {
+        type: Number,
+        default: 4
+      },
+      title: {
+        type: String,
+        default: ''
+      },
+      info: {
+        type: String,
+        default: ''
+      },
+      roomName: {
+        type: String,
+        default: ''
+      },
+      height: {
+        type: String,
+				// #ifndef MP-WEIXIN
+        default: 'calc(100vh - 44px)',
+				// #endif
+				// #ifdef MP-WEIXIN
+        default: '100vh',
+				// #endif
+      }
+    },
+    data() {
+      return {
+        scaleMin:1,//h5端为解决1无法缩小问题,设为0.95
+        boxWidth: 400, //屏幕宽度px
+        space: ' ', //空格
+        seatArray: [], //影院座位的二维数组,-1为非座位,0为未购座位,1为已选座位(绿色),2为已购座位(红色),一维行,二维列
+        seatRow: 0, //影院座位行数
+        seatCol: 0, //影院座位列数
+        seatSize: 0, //座位尺寸
+        SelectNum: 0, //选择座位数
+        moveX: 0, //水平移动偏移量
+        scale: 1, //放大倍数
+        minRow: 0, //从第几行开始排座位
+        minCol: 0, //从第几列开始排座位
+        showTis: true, //显示选座提示
+        seatList: [], //接口获取的原始位置
+        mArr: [], //排数提示
+        optArr: [], //选中的座位数组。
+        isWXAPP:false,
+        areaHeight: 0
+      };
+    },
+		computed: {
+			aPrice() {
+        let totalAmount = ''
+        if (this.optArr && this.optArr.length) {
+          totalAmount = this.optArr.map(item => Number(item.Price)).reduce((prev, curr) => prev + curr)
+        }
+				return Number(totalAmount).toFixed(2)
+			},
+			rpxNum() {
+				return this.boxWidth / 750
+			},
+			pxNum() {
+				return 750 / this.boxWidth
+			},
+		},
+		created() {
+			//获取宽度
+			uni.getSystemInfo({
+				success: (e) => {
+					this.boxWidth = e.screenWidth
+					//#ifdef H5
+					this.scaleMin = 0.95
+					//#endif
+				}
+			})
+			// this.initData()
+		},
+		methods: {
+			initData: function(data) {
+				let arr = data || this.seatData
+				//假数据说明:SeatCode座位编号,RowNum-行号,ColumnNum-纵号,YCoord-Y坐标,XCoord-X坐标,Status-状态
+				let row = 0
+				let col = 0
+				let minCol = parseInt(arr[0].XCoord)
+				let minRow = parseInt(arr[0].YCoord)
+				for (let i of arr) {
+					minRow = parseInt(i.YCoord) < minRow ? parseInt(i.YCoord) : minRow
+					minCol = parseInt(i.XCoord) < minCol ? parseInt(i.XCoord) : minCol
+					row = parseInt(i.YCoord) > row ? parseInt(i.YCoord) : row
+					col = parseInt(i.XCoord) > col ? parseInt(i.XCoord) : col
+				}
+				this.seatList = arr
+				this.seatRow = row - minRow + 1
+				this.seatCol = col - minCol + 3
+				this.minRow = minRow
+				this.minCol = minCol - 1
+				this.initSeatArray()
+			},
+			//初始座位数组
+			initSeatArray: function() {
+				let seatArray = Array(this.seatRow).fill(0).map(() => Array(this.seatCol).fill({
+					type: -1,
+					SeatCode: '',
+					RowNum: '',
+					ColumnNum: ''
+				}));
+				this.seatArray = seatArray
+				this.seatSize = this.boxWidth > 0 ?
+					parseInt(parseInt(this.boxWidth, 10) / (this.seatCol + 1), 10) :
+					parseInt(parseInt(414, 10) / (this.seatCol + 1), 10)
+				this.initNonSeatPlace();
+			},
+			//初始化是座位的地方
+			initNonSeatPlace: function() {
+				let seat = this.seatList.slice()
+				let arr = this.seatArray.slice()
+				for (let num in seat) {
+					let status = 2 //-1为非座位,0为未购座位,1为已选座位(绿色),2为已购座位(红色)
+          switch (seat[num].Status) {
+            case -2:
+            status = 2
+            break;
+            case -1:
+            status = -1
+            break;
+            case 0:
+            status = 2
+            break;
+            case 1:
+            status = 0
+            break;
+          }
+					// if (seat[num].Status === 1) {
+					// 	status = 0
+					// } else if (seat[num].Status === -1) {
+					// 	status = -1
+					// }
+					arr[parseInt(seat[num].YCoord) - this.minRow][parseInt(seat[num].XCoord) - this.minCol] = {
+						type: status,
+						SeatCode: seat[num].SeatCode,
+						RowNum: seat[num].RowNum,
+						ColumnNum: seat[num].ColumnNum,
+						Price: seat[num].Price,
+            SeatName: seat[num].SeatName,
+            flag: seat[num].flag,
+            area: seat[num].area
+					}
+				}
+				this.seatArray = arr.slice()
+				let mArr = []
+				for (let i in arr) {
+					let m = ''
+					for (let n of arr[i]) {
+						if (n.SeatCode) {
+							m = n.RowNum
+						}
+					}
+					if (m) {
+						mArr.push(m)
+					} else {
+						mArr.push('')
+					}
+				}
+				this.mArr = mArr
+			},
+			//放大缩小事件
+			onScale: function(e) {
+				this.showTis = false
+				// this.moveX=-e.detail.x
+				let w = this.boxWidth * 0.5
+				let s = 1 - e.detail.scale
+				this.moveX = w * s
+				this.scale = e.detail.scale
+				if (s > 0 || s === 0) {
+					this.showTis = true
+				}
+			},
+			//移动事件
+			onMove: function(e) {
+				this.showTis = false
+				this.moveX = e.detail.x
+			},
+			//重置座位
+			resetSeat: function() {
+				this.SelectNum = 0
+				this.optArr = []
+				//将所有已选座位的值变为0
+				let oldArray = this.seatArray.slice();
+				for (let i = 0; i < this.seatRow; i++) {
+					for (let j = 0; j < this.seatCol; j++) {
+						if (oldArray[i][j].type === 1) {
+							oldArray[i][j].type = 0
+						}
+					}
+				}
+				this.seatArray = oldArray;
+			},
+			//选定且购买座位
+			buySeat: function() {
+				if (this.SelectNum === 0) return;
+				// let oldArray = [];
+				// for (let i = 0; i < this.seatRow; i++) {
+				// 	for (let j = 0; j < this.seatCol; j++) {
+				// 		if (this.seatArray[i][j].type === 1) {
+				// 			oldArray.push(this.seatArray[i][j])
+				// 		}
+				// 	}
+				// }
+        this.$emit('confirm', this.optArr)
+			},
+			//处理座位选择逻辑
+			handleChooseSeat: function(row, col, isbreak) {
+				let newArray = this.seatArray;
+				let seatValue = newArray[row][col].type;
+        let flag = newArray[row][col].flag
+				//如果是已购座位,直接返回
+				if (seatValue === 2 || seatValue === -1) return
+				//如果是已选座位点击后变未选
+				if (seatValue === 1) {
+					newArray[row][col].type = 0
+					this.SelectNum--
+					this.getOptArr(newArray[row][col], 0)
+				} else if (seatValue === 0) {
+          if (this.SelectNum >= this.max) {
+            return uni.showToast({
+              title: '一次最多选择' + this.max + '张',
+              icon: 'none'
+            })
+          }
+          newArray[row][col].rowIndex = row
+          newArray[row][col].colIndex = col
+					newArray[row][col].type = 1
+					this.SelectNum++
+					this.getOptArr(newArray[row][col], 1)
+				}
+        switch (flag) {
+          case 1: // 情侣左座
+          !isbreak && this.handleChooseSeat(row, col+1, true)
+          break;
+          case 2: // 情侣右座
+          !isbreak && this.handleChooseSeat(row, col-1, true)
+          break;
+        }
+				//必须整体更新二维数组,Vue无法检测到数组某一项更新,必须slice复制一个数组才行
+				// this.seatArray = newArray.slice();
+        // this.$forceUpdate()
+			},
+			//处理已选座位数组
+			getOptArr: function(item, type) {
+				let optArr = this.optArr
+				if (type === 1) {
+					optArr.push(item)
+				} else if (type === 0) {
+					let arr = []
+					optArr.forEach(v => {
+						if (v.SeatCode !== item.SeatCode) {
+							arr.push(v)
+						}
+					})
+					optArr = arr
+				}
+				this.optArr = optArr.slice()
+			},
+			//推荐选座,参数是推荐座位数目,
+			smartChoose: function(num) {
+				// console.log('num===', num)
+				// 先重置
+				this.resetSeat()
+				//找到影院座位水平垂直中间位置的后一排
+				let rowStart = parseInt((this.seatRow - 1) / 2, 10) + 1;
+				//先从中间排往后排搜索
+				let backResult = this.searchSeatByDirection(rowStart, this.seatRow - 1, num);
+				if (backResult.length > 0) {
+					this.chooseSeat(backResult);
+					this.SelectNum += num
+					return
+				}
+				//再从中间排往前排搜索
+				let forwardResult = this.searchSeatByDirection(rowStart - 1, 0, num);
+				if (forwardResult.length > 0) {
+					this.chooseSeat(forwardResult);
+					this.SelectNum += num
+					return
+				}
+				//提示用户无合法位置可选
+        uni.showToast({
+          title: '无合法位置可选!',
+          icon: 'none'
+        })
+			},
+			
+			//搜索函数,参数:fromRow起始行,toRow终止行,num推荐座位数
+			searchSeatByDirection: function(fromRow, toRow, num) {
+				/*
+				 * 推荐座位规则
+				 * (1)初始状态从座位行数的一半处的后一排的中间开始向左右分别搜索,取离中间最近的,如果满足条件,
+				 *    记录下该结果离座位中轴线的距离,后排搜索完成后取距离最小的那个结果座位最终结果,优先向后排进行搜索,
+				 *    后排都没有才往前排搜,前排逻辑同上
+				 *
+				 * (2)只考虑并排且连续的座位,不能不在一排或者一排中间有分隔
+				 *
+				 * */
+
+				/*
+				 * 保存当前方向搜索结果的数组,元素是对象,result是结果数组,offset代表与中轴线的偏移距离
+				 * {
+				 *   result:Array([x,y])
+				 *   offset:Number
+				 * }
+				 *
+				 */
+				let currentDirectionSearchResult = [];
+
+				let largeRow = fromRow > toRow ? fromRow : toRow,
+					smallRow = fromRow > toRow ? toRow : fromRow;
+
+				for (let i = smallRow; i <= largeRow; i++) {
+					//每一排的搜索,找出该排里中轴线最近的一组座位
+					let tempRowResult = [],
+						minDistanceToMidLine = Infinity;
+					try{
+						for (let j = 0; j <= this.seatCol - num; j++) {
+							//如果有合法位置
+							if (this.checkRowSeatContinusAndEmpty(i, j, j + num - 1, num)) {
+								//计算该组位置距离中轴线的距离:该组位置的中间位置到中轴线的距离
+								let resultMidPos = parseInt((j + num / 2), 10);
+								let distance = Math.abs(parseInt(this.seatCol / 2) - resultMidPos);
+								//如果距离较短则更新
+								if (distance < minDistanceToMidLine) {
+									minDistanceToMidLine = distance;
+									//该行的最终结果
+									tempRowResult = this.generateRowResult(i, j, j + num - 1)
+								}
+							}
+						}
+					}catch(e){
+						//TODO handle the exception
+						uni.showToast({
+							title: '暂无推荐选座',
+							icon: 'none'
+						})
+					}
+					//保存该行的最终结果
+					currentDirectionSearchResult.push({
+						result: tempRowResult,
+						offset: minDistanceToMidLine
+					})
+				}
+
+				//处理后排的搜索结果:找到距离中轴线最短的一个
+				//注意这里的逻辑需要区分前后排,对于后排是从前往后,前排则是从后往前找
+				let isBackDir = fromRow < toRow;
+				let finalReuslt = [],
+					minDistanceToMid = Infinity;
+				if (isBackDir) {
+					//后排情况,从前往后
+					currentDirectionSearchResult.forEach((item) => {
+						if (item.offset < minDistanceToMid) {
+							finalReuslt = item.result;
+							minDistanceToMid = item.offset;
+						}
+					});
+				} else {
+					//前排情况,从后往前找
+					currentDirectionSearchResult.reverse().forEach((item) => {
+						if (item.offset < minDistanceToMid) {
+							finalReuslt = item.result;
+							minDistanceToMid = item.offset;
+						}
+					})
+				}
+				//直接返回结果
+				return finalReuslt
+			},
+
+			/*辅助函数,判断每一行座位从i列到j列是否全部空余且连续
+			 *
+			 */
+			checkRowSeatContinusAndEmpty: function(rowNum, startPos, endPos, num) {
+				let isValid = true;
+				for (let i = startPos; i <= endPos; i++) {
+					if (this.seatArray[rowNum][i].type !== 0) {
+						isValid = false;
+						break;
+					}
+					// 忽略情侣座
+					if ([1, 2].includes(this.seatArray[rowNum][i].flag)) {
+						isValid = false;
+						break;
+					}
+				}
+				return isValid
+			},
+			//辅助函数:返回每一行的某个合理位置的座位数组
+			generateRowResult: function(row, startPos, endPos) {
+				let result = [];
+				for (let i = startPos; i <= endPos; i++) {
+					result.push([row, i])
+				}
+				return result
+			},
+			//辅助函数:智能推荐的选座操作
+			chooseSeat: function(result) {
+				let opt = this.optArr
+				let oldArray = this.seatArray.slice();
+				for (let i = 0; i < result.length; i++) {
+					//选定座位
+          oldArray[result[i][0]][result[i][1]].rowIndex = result[i][0]
+          oldArray[result[i][0]][result[i][1]].colIndex = result[i][1]
+					oldArray[result[i][0]][result[i][1]].type = 1
+					this.optArr.push(oldArray[result[i][0]][result[i][1]])
+				}
+				this.seatArray = oldArray;
+			},
+		}
+  }
+</script>
+
+<style lang="scss">
+.sel-seat {
+  display: flex;
+  flex-direction: column;
+  width: 100%;
+  height: 100vh;
+  .seat-head {
+    background-color: #ffffff;
+    display: flex;
+    flex-direction: column;
+    padding: 20rpx 30rpx;
+    position: relative;
+    z-index: 5;
+    .sh-title {
+      font-size: 32rpx;
+      font-weight: bold;
+      color: #333333;
+    }
+    .sh-info {
+      font-size: 24rpx;
+      color: #999999;
+      margin-top: 10rpx;
+    }
+  }
+  .seat-main {
+    width: 100%;
+    height: 100%;
+    position: relative;
+    padding: 10rpx;
+    .vm-area {
+      width: 750rpx;
+      overflow: hidden;
+      height: calc(100% - 40rpx);
+    }
+    .sm-title {
+      background-color: #dddddd;
+      width: 380rpx;
+      height: 34rpx;
+      transform: perspective(34rpx) rotateX(-10deg);
+      margin: 0 auto;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      position: relative;
+      z-index: 2;
+      .text {
+        font-size: 24rpx;
+        color: #333333;
+      }
+    }
+    .sm-screen {
+      width: 100rpx;
+      height: 30rpx;
+      border: 1rpx solid #cccccc;
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      margin: 48rpx auto 0;
+      border-radius: 4rpx;
+      position: relative;
+      z-index: 1;
+      .text {
+        font-size: 20rpx;
+        color: #999999;
+      }
+    }
+    .sm-line-center {
+      height: 610rpx;
+      width: 0;
+      border: 1rpx dashed #e5e5e5;
+      position: fixed;
+      left: 50%;
+      top: 0;
+      display: block;
+      z-index: 0;
+      transform: translateX(-50%);
+    }
+    .fix-tips {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      font-size: 24rpx;
+      position: fixed;
+      bottom: 198rpx;
+      left: 0;
+      width: 100%;
+      z-index: 1;
+      padding: 20rpx;
+      .v-tips {
+        display: flex;
+        align-items: center;
+        color: #999;
+        margin: 0 10rpx;
+        .text {
+          margin-left: 10rpx;
+        }
+      }
+    }
+    // seat style
+    .sm-cell {
+      display: flex;
+      margin-top: 20rpx;
+      align-items: center;
+      justify-content: center;
+      position: relative;
+      z-index: 2;
+      .sm-icon {
+        width: 100%;
+        height: 100%;
+      }
+    }
+    .sm-line-index {
+      position: fixed;
+      top: 114rpx;
+      left: 20rpx;
+      border-radius: 14rpx;
+      overflow: hidden;
+      background-color: rgba($color: #000000, $alpha: 0.3);
+      z-index: 3;
+      display: flex;
+      flex-direction: column;
+      align-items: center;
+      justify-content: center;
+      padding-bottom: 20rpx;
+      width: 30rpx;
+      .text {
+        font-size: 24rpx;
+        color: #ffffff;
+        width: 100%;
+        text-align: center;
+        margin-top: 20rpx;
+      }
+    }
+  }
+  .seat-foot {
+    margin-top: auto;
+    background-color: #ffffff;
+    padding: 20rpx 30rpx;
+    position: relative;
+    z-index: 5;
+    .sf-recommend {
+      display: flex;
+      align-items: center;
+      justify-content: center;
+      padding-bottom: 20rpx;
+      .text {
+        font-size: 28rpx;
+        color: #666666;
+      }
+      .sfr-tag {
+        width: 110rpx;
+        height: 60rpx;
+        border-radius: 4rpx;
+        border: 1rpx solid #ccc;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        margin-left: 20rpx;
+      }
+    }
+    .sf-arselect {
+      @extend .sf-recommend;
+      .text {
+        font-size: 24rpx;
+        color: #666666;
+      }
+      .price {
+        font-size: 20rpx;
+        color: red;
+      }
+      .scr-wrap {
+        display: flex;
+        white-space: nowrap;
+      }
+      .sfr-selt {
+        min-width: 130rpx;
+        height: 60rpx;
+        border-radius: 4rpx;
+        border: 1rpx solid #ccc;
+        display: flex;
+        align-items: flex-start;
+        justify-content: center;
+        flex-direction: column;
+        margin-left: 20rpx;
+        position: relative;
+        margin-left: 20rpx;
+        padding-left: 10rpx;
+        .text {
+          font-size: 20rpx;
+        }
+        .sfr-close {
+          position: absolute;
+          right: 6rpx;
+          top: 10rpx;
+          font-size: 20rpx;
+          color: #999;
+        }
+      }
+    }
+    .f-btn {
+      background-color: #F45664;
+      width: 100%;
+      height: 90rpx;
+      line-height: 90rpx;
+      text-align: center;
+      border-radius: 10rpx;
+      .text {
+        color: #ffffff;
+        font-size: 36rpx;
+      }
+      &.disabled {
+        opacity: .8;
+        &:active {
+          background-color: #F45664;
+        }
+      }
+      &:active {
+        background-color: #de4e5d;
+      }
+    }
+  }
+}
+</style>

+ 81 - 0
uni_modules/anil-seat/package.json

@@ -0,0 +1,81 @@
+{
+  "id": "anil-seat",
+  "displayName": "电影在线选座",
+  "version": "1.0.2",
+  "description": "电影在线选座",
+  "keywords": [
+    "选座",
+    "在线选座",
+    "电影选座",
+    "电影院",
+    "电影票"
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "插件不采集任何数据",
+      "permissions": "无"
+    },
+    "npmurl": "",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "Vue": {
+          "vue2": "u",
+          "vue3": "u"
+        },
+        "App": {
+          "app-vue": "u",
+          "app-nvue": "u"
+        },
+        "H5-mobile": {
+          "Safari": "u",
+          "Android Browser": "u",
+          "微信浏览器(Android)": "u",
+          "QQ浏览器(Android)": "u"
+        },
+        "H5-pc": {
+          "Chrome": "u",
+          "IE": "u",
+          "Edge": "u",
+          "Firefox": "u",
+          "Safari": "u"
+        },
+        "小程序": {
+          "微信": "y",
+          "阿里": "u",
+          "百度": "u",
+          "字节跳动": "u",
+          "QQ": "u"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        }
+      }
+    }
+  }
+}

+ 55 - 0
uni_modules/anil-seat/readme.md

@@ -0,0 +1,55 @@
+# anil-seat
+
+#### 使用方法:
+在 **script** 中引用组件
+```javascript
+import anilSeat from '@/uni_modules/anil-seat/components/anil-seat/anil-seat.vue'
+export default {
+    components: {anilSeat},
+		onLoad () {
+			// 座位图初始化 - seatData座位数据
+			this.$refs['anilSeat'].initData(seatData)
+		}
+}
+```
+在 **template** 中引用组件
+```javascript
+<anil-seat 
+  title="皮皮鲁与鲁西西之罐头小人" 
+  info="2021年01月22日 国语 奇幻 喜剧 儿童"
+  room-name="5号厅">
+</anil-seat>
+```
+#### 属性说明
+
+|  属性名 | 类型  | 	默认值  |  	说明 |
+| ------------ | ------------ | ------------ | ------------ |
+| title  | String  |  | 电影标题  |
+| info  | String  |   | 电影信息  |
+| roomName  | String  |   | 房间名称  |
+| seatData  | Array<Object>  |  | 座位数据-格式如下 |
+| max  | Number  | 4  | 最大一次选择位置  |
+
+```javascript
+// 电影座位格式
+[{
+	"YCoord": "3", // -Y坐标
+	"XCoord": "11", // -X坐标
+	"SeatCode": "4413141101#01#14", // 座位code
+	"Status": 0, // 座位状态
+	"RowNum": "1", // 排
+	"ColumnNum": "14", // 列
+  "Price": "23.6" // 当前座位票价
+}]
+```
+
+#### 事件说明
+|  事件名称 | 说明  | 返回值  |
+| ------------ | ------------ | ------------ |
+| confirm | 确认座位回调事件 | 选择的座位数据 |
+
+PS: 
+原插件作者地址:[markrgba](https://ext.dcloud.net.cn/plugin?id=1156)
+选座算法来自:[houzisbw](https://github.com/houzisbw/MeiTuanCinemaSmartChoose)
+---
+### End

BIN
uni_modules/anil-seat/static/bought.png


BIN
uni_modules/anil-seat/static/close.png


BIN
uni_modules/anil-seat/static/selected-l.png


BIN
uni_modules/anil-seat/static/selected-r.png


BIN
uni_modules/anil-seat/static/selected.png


BIN
uni_modules/anil-seat/static/unselected-l.png


BIN
uni_modules/anil-seat/static/unselected-r.png


BIN
uni_modules/anil-seat/static/unselected.png


+ 9 - 1
unpackage/dist/build/mp-weixin/app.json

@@ -2,6 +2,7 @@
   "pages": [
     "pages/index/index",
     "pages/index/search",
+    "pages/index/searchResult",
     "pages/service/index",
     "pages/service/chatRoom",
     "pages/my/index",
@@ -24,8 +25,13 @@
         "discountsDetail/refuel",
         "discountsDetail/index",
         "goodsDetail/index",
+        "shopList/index",
         "qrcode/index",
-        "virtualGoods/index"
+        "virtualGoods/index",
+        "movie/index",
+        "movie/movieDetail",
+        "movie/chooseSeat",
+        "hotel/index"
       ]
     },
     {
@@ -37,6 +43,7 @@
         "order/index",
         "order/detail",
         "order/refund",
+        "order/refundDetail",
         "favorite/index",
         "memberCenter/index"
       ]
@@ -96,6 +103,7 @@
       "root": "pay",
       "pages": [
         "pay",
+        "pay1",
         "offlinePayment",
         "coupon"
       ]

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/common/runtime.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/common/vendor.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/components/zs-img/index.js


+ 1 - 1
unpackage/dist/build/mp-weixin/components/zs-img/index.wxml

@@ -1 +1 @@
-<view class="zs-img-box data-v-2041694f"><block wx:if="{{!isError}}"><image class="{{['img1','data-v-2041694f','lazy'+elIndex]}}" style="{{'width:'+(width)+';'+('height:'+(height)+';')+('border-radius:'+(radius=='full'?'16rpx':'16rpx 16rpx 0 0')+';')}}" src="{{url1}}" mode="{{mode}}" data-event-opts="{{[['error',[['error',['$event']]]]]}}" binderror="__e"></image></block><block wx:else><image style="{{'width:'+(width)+';'+('height:'+(height)+';')+('border-radius:'+(radius=='full'?'16rpx':'16rpx 16rpx 0 0')+';')}}" src="{{defaultSrc}}" mode="{{mode}}" class="data-v-2041694f"></image></block></view>
+<view class="zs-img-box data-v-0c5cca36"><block wx:if="{{!isError}}"><image class="{{['img1','data-v-0c5cca36','lazy'+elIndex]}}" style="{{'width:'+(width)+';'+('height:'+(height)+';')+('border-radius:'+(radius=='full'?'16rpx':'16rpx 16rpx 0 0')+';')}}" src="{{url1}}" mode="{{mode}}" data-event-opts="{{[['error',[['error',['$event']]]]]}}" binderror="__e"></image></block><block wx:else><image style="{{'width:'+(width)+';'+('height:'+(height)+';')+('border-radius:'+(radius=='full'?'16rpx':'16rpx 16rpx 0 0')+';')}}" src="{{defaultSrc}}" mode="{{mode}}" class="data-v-0c5cca36"></image></block></view>

+ 1 - 1
unpackage/dist/build/mp-weixin/components/zs-img/index.wxss

@@ -1 +1 @@
-.zs-img-box.data-v-2041694f{position:relative}.zs-img-box image.data-v-2041694f{vertical-align:bottom}
+.zs-img-box.data-v-0c5cca36{position:relative}.zs-img-box image.data-v-0c5cca36{vertical-align:bottom}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/detail/discountsDetail/index.js


+ 3 - 3
unpackage/dist/build/mp-weixin/detail/discountsDetail/index.json

@@ -2,8 +2,8 @@
   "navigationBarTitleText": "",
   "enablePullDownRefresh": true,
   "usingComponents": {
-    "zs-img": "/components/zs-img/index",
-    "cc-drop-down-menu": "/uni_modules/cc-dropDownMenu/components/cc-dropDownMenu/cc-dropDownMenu",
-    "zs-list": "/components/zs-list/index"
+    "zs-choose-tab": "/components/zs-choose-tab/index",
+    "zs-list": "/components/zs-list/index",
+    "zs-img": "/components/zs-img/index"
   }
 }

+ 1 - 1
unpackage/dist/build/mp-weixin/detail/discountsDetail/index.wxml

@@ -1 +1 @@
-<view class="discountsDetail"><zs-img vue-id="8ee1a320-1" width="100%" height="310rpx" src="{{banner}}" bind:__l="__l"></zs-img><cc-drop-down-menu vue-id="8ee1a320-2" titleArr="{{titleArr}}" dropArr="{{dropArr}}" data-event-opts="{{[['^finishDropClick',[['finishClick']]]]}}" bind:finishDropClick="__e" bind:__l="__l"></cc-drop-down-menu><zs-list class="store-box" vue-id="8ee1a320-3" mt="0" status="{{status}}" data-event-opts="{{[['^load',[['loadMore']]]]}}" bind:load="__e" bind:__l="__l" vue-slots="{{['default']}}"><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view class="item"><zs-img vue-id="{{('8ee1a320-4-'+index)+','+('8ee1a320-3')}}" src="{{item.$orig.logoPath}}" width="164rpx" height="164rpx" radius="full" data-event-opts="{{[['tap',[['goDetail',['$0'],[[['list','',index]]]]]]]}}" bindtap="__e" bind:__l="__l"></zs-img><view class="info"><view class="title">{{''+item.$orig.shopVo.shopName+''}}</view><view class="{{['activity',!item.$orig.activityContent?'white':'']}}"><image class="card" src="../../static/card-icon.png" mode></image>{{''+(item.$orig.activityContent||'-')+''}}</view><view class="address"><image class="position" src="../../static/address-icon.png" mode></image>{{'距离你'+item.g0+"km ·"+item.$orig.district+''}}</view></view></view></block></zs-list></view>
+<view class="discountsDetail"><zs-choose-tab vue-id="8ee1a320-1" tabList="{{tabList}}" data-event-opts="{{[['^choose',[['chooseTab']]]]}}" bind:choose="__e" bind:__l="__l"></zs-choose-tab><zs-list class="store-box" vue-id="8ee1a320-2" mt="0" status="{{status}}" data-event-opts="{{[['^load',[['loadMore']]]]}}" bind:load="__e" bind:__l="__l" vue-slots="{{['default']}}"><block wx:for="{{$root.l1}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view class="item"><view class="box"><zs-img vue-id="{{('8ee1a320-3-'+index)+','+('8ee1a320-2')}}" src="{{item.$orig.logoPath}}" width="200rpx" height="200rpx" radius="full" data-event-opts="{{[['tap',[['goDetail',['$0'],[[['list','',index]]]]]]]}}" bindtap="__e" bind:__l="__l"></zs-img><view class="info"><view class="title">{{''+item.$orig.shopVo.shopName+''}}</view><view class="desc">{{''+item.$orig.district+''}}</view></view></view><block wx:for="{{item.l0}}" wx:for-item="i" wx:for-index="d" wx:key="d"><view class="{{['goods-item',d!=0?'none':'']}}"><view class="goods-info"><view class="goods-name">{{''+i.goodsName+''}}</view></view><view class="price-box"><view class="unit">¥</view><view class="price">{{''+i.realPrice+''}}</view><view class="old-price">{{'市场价 ¥'+i.marketPrice+''}}</view></view></view></block></view></block></zs-list></view>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/detail/discountsDetail/index.wxss


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/detail/shopDetail/shopDetail.js


+ 3 - 1
unpackage/dist/build/mp-weixin/detail/shopDetail/shopDetail.json

@@ -2,7 +2,9 @@
   "navigationBarTitleText": "店铺详情",
   "enablePullDownRefresh": true,
   "usingComponents": {
+    "zs-list": "/components/zs-list/index",
     "zs-img": "/components/zs-img/index",
-    "u-empty": "/uni_modules/uview-ui/components/u-empty/u-empty"
+    "u-empty": "/uni_modules/uview-ui/components/u-empty/u-empty",
+    "u-popup": "/uni_modules/uview-ui/components/u-popup/u-popup"
   }
 }

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/detail/shopDetail/shopDetail.wxml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/detail/shopDetail/shopDetail.wxss


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/login/login/login.js


+ 1 - 1
unpackage/dist/build/mp-weixin/login/login/login.json

@@ -1,5 +1,5 @@
 {
-  "navigationBarTitleText": "慧学惠生活",
+  "navigationBarTitleText": "慧学惠生活",
   "usingComponents": {
     "u-popup": "/uni_modules/uview-ui/components/u-popup/u-popup",
     "u--form": "/uni_modules/uview-ui/components/u--form/u--form",

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/login/login/otherLogin.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/login/login/otherLogin.wxml


+ 2 - 2
unpackage/dist/build/mp-weixin/login/login/otherLogin.wxss

@@ -1,2 +1,2 @@
-.other-login.data-v-24a0cf7a{padding:10rpx 20rpx}.other-login .code-btn.data-v-24a0cf7a{padding:10rpx 25rpx;background:#a4adb3;color:#fff;border-radius:4px}.other-login .save.data-v-24a0cf7a{width:400rpx;line-height:110rpx;text-align:center;color:#fff;background:#a4adb3;border-radius:55rpx;font-size:30rpx;margin:150rpx auto 0}.other-login .modal.data-v-24a0cf7a{width:680rpx;box-sizing:border-box;padding:30rpx}.other-login .modal .title.data-v-24a0cf7a{text-align:center;font-size:38rpx;font-weight:700;margin-top:30rpx;margin-bottom:50rpx}.other-login .modal .u-form-item.data-v-24a0cf7a{border-radius:46rpx;height:92rpx;background:#f5f5f5;padding:0 30rpx;box-sizing:border-box;margin-top:32rpx}.other-login .modal .u-form-item .u-form-item__body.data-v-24a0cf7a{padding:0!important}.other-login .modal .u-form-item .u-form-item__body__left input.data-v-24a0cf7a,
-.other-login .modal .u-form-item .u-form-item__body__right input.data-v-24a0cf7a{line-height:92rpx;height:92rpx}.other-login .modal .save-btn.data-v-24a0cf7a{width:432rpx;height:92rpx;line-height:92rpx;border-radius:46rpx;font-size:32rpx;font-weight:700;background:#61b5fd;color:#fff;margin-top:32rpx}
+.other-login.data-v-54e198dd{padding:10rpx 20rpx}.other-login .code-btn.data-v-54e198dd{padding:10rpx 25rpx;background:#a4adb3;color:#fff;border-radius:4px}.other-login .save.data-v-54e198dd{width:400rpx;line-height:110rpx;text-align:center;color:#fff;background:#a4adb3;border-radius:55rpx;font-size:30rpx;margin:150rpx auto 0}.other-login .modal.data-v-54e198dd{width:680rpx;box-sizing:border-box;padding:30rpx}.other-login .modal .title.data-v-54e198dd{text-align:center;font-size:38rpx;font-weight:700;margin-top:30rpx;margin-bottom:50rpx}.other-login .modal .u-form-item.data-v-54e198dd{border-radius:46rpx;height:92rpx;background:#f5f5f5;padding:0 30rpx;box-sizing:border-box;margin-top:32rpx}.other-login .modal .u-form-item .u-form-item__body.data-v-54e198dd{padding:0!important}.other-login .modal .u-form-item .u-form-item__body__left input.data-v-54e198dd,
+.other-login .modal .u-form-item .u-form-item__body__right input.data-v-54e198dd{line-height:92rpx;height:92rpx}.other-login .modal .save-btn.data-v-54e198dd{width:432rpx;height:92rpx;line-height:92rpx;border-radius:46rpx;font-size:32rpx;font-weight:700;background:#61b5fd;color:#fff;margin-top:32rpx}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/my/edit/edit.js


+ 1 - 1
unpackage/dist/build/mp-weixin/my/edit/edit.wxml

@@ -1 +1 @@
-<view class="edit data-v-eb851716"><view class="head-box data-v-eb851716"><image class="head data-v-eb851716" src="{{headImg||defaultImg}}" mode data-event-opts="{{[['tap',[['chooseHead',['$event']]]]]}}" bindtap="__e"></image><image class="icon data-v-eb851716" src="../../static/take_photo.png" mode></image></view><view class="data-v-eb851716"><u-cell vue-id="235c9d6c-1" size="large" title="修改昵称" isLink="{{true}}" url="/my/edit/editName" class="data-v-eb851716" bind:__l="__l"></u-cell><u-cell vue-id="235c9d6c-2" size="large" title="关于" isLink="{{true}}" class="data-v-eb851716" bind:__l="__l"></u-cell></view><button data-event-opts="{{[['tap',[['loginOut',['$event']]]]]}}" class="login-out data-v-eb851716" bindtap="__e">退出当前账号</button></view>
+<view class="edit data-v-0b350bf4"><view class="head-box data-v-0b350bf4"><image class="head data-v-0b350bf4" src="{{headImg||defaultImg}}" mode data-event-opts="{{[['tap',[['chooseHead',['$event']]]]]}}" bindtap="__e"></image><image class="icon data-v-0b350bf4" src="../../static/take_photo.png" mode></image></view><view class="data-v-0b350bf4"><u-cell vue-id="235c9d6c-1" size="large" title="修改昵称" isLink="{{true}}" url="/my/edit/editName" class="data-v-0b350bf4" bind:__l="__l"></u-cell></view><button data-event-opts="{{[['tap',[['loginOut',['$event']]]]]}}" class="login-out data-v-0b350bf4" bindtap="__e">退出当前账号</button></view>

+ 1 - 1
unpackage/dist/build/mp-weixin/my/edit/edit.wxss

@@ -1 +1 @@
-.edit .head-box.data-v-eb851716{margin:80rpx auto 50rpx;width:150rpx;height:150rpx;position:relative}.edit .head-box .head.data-v-eb851716{width:150rpx;height:150rpx;border-radius:50%}.edit .head-box .icon.data-v-eb851716{position:absolute;width:44rpx;height:44rpx;bottom:0;right:0}.edit .login-out.data-v-eb851716{position:fixed;bottom:150rpx;left:50%;width:400rpx;line-height:110rpx;text-align:center;color:#fff;background:#a4adb3;border-radius:55rpx;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:30rpx}
+.edit .head-box.data-v-0b350bf4{margin:80rpx auto 50rpx;width:150rpx;height:150rpx;position:relative}.edit .head-box .head.data-v-0b350bf4{width:150rpx;height:150rpx;border-radius:50%}.edit .head-box .icon.data-v-0b350bf4{position:absolute;width:44rpx;height:44rpx;bottom:0;right:0}.edit .login-out.data-v-0b350bf4{position:fixed;bottom:150rpx;left:50%;width:400rpx;line-height:110rpx;text-align:center;color:#fff;background:#a4adb3;border-radius:55rpx;-webkit-transform:translateX(-50%);transform:translateX(-50%);font-size:30rpx}

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/my/order/detail.js


+ 1 - 0
unpackage/dist/build/mp-weixin/my/order/detail.json

@@ -1,6 +1,7 @@
 {
   "navigationBarTitleText": "订单详情",
   "usingComponents": {
+    "u-count-down": "/uni_modules/uview-ui/components/u-count-down/u-count-down",
     "u-overlay": "/uni_modules/uview-ui/components/u-overlay/u-overlay",
     "uqrcode": "/uni_modules/Sansnn-uQRCode/components/uqrcode/uqrcode"
   }

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/my/order/detail.wxml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/my/order/detail.wxss


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/my/order/index.js


+ 1 - 1
unpackage/dist/build/mp-weixin/my/order/index.wxml

@@ -1 +1 @@
-<view class="order"><view class="tab-box"><view data-event-opts="{{[['tap',[['handleTab',[null]]]]]}}" class="{{['tab',query.orderType==null?'active':'']}}" bindtap="__e">全部</view><view data-event-opts="{{[['tap',[['handleTab',['WAIT_PAYMENT']]]]]}}" class="{{['tab',query.orderType=='WAIT_PAYMENT'?'active':'']}}" bindtap="__e">待付款</view><view data-event-opts="{{[['tap',[['handleTab',['WAIT_USE']]]]]}}" class="{{['tab',query.orderType=='WAIT_USE'?'active':'']}}" bindtap="__e">待使用</view><view data-event-opts="{{[['tap',[['handleTab',['REFUNDED']]]]]}}" class="{{['tab',query.orderType=='REFUNDED'?'active':'']}}" bindtap="__e">退款</view></view><block wx:if="{{$root.g0}}"><u-empty vue-id="386bcf8a-1" mode="order" iconSize="200rpx" textSize="28rpx" bind:__l="__l"></u-empty></block><zs-list vue-id="386bcf8a-2" mt="0" status="{{status}}" data-event-opts="{{[['^load',[['loadMore']]]]}}" bind:load="__e" bind:__l="__l" vue-slots="{{['default']}}"><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[['tap',[['jump',['$0'],[[['list','',index]]]]]]]}}" class="order-item" bindtap="__e"><view class="top-box"><view class="label">{{''+item.$orig.shopName+''}}</view><view class="status">{{''+item.f0+''}}</view></view><view class="order-box"><zs-img vue-id="{{('386bcf8a-3-'+index)+','+('386bcf8a-2')}}" radius="full" src="{{item.$orig.goodsList[0].goodsImg}}" width="164rpx" height="164rpx" bind:__l="__l"></zs-img><view class="info"><view class="title">{{''+item.$orig.goodsList[0].goodsName+''}}</view><view class="time">{{''+item.g1+''}}</view><view class="price">{{'¥'+item.$orig.payAmount+''}}</view></view></view></view></block></zs-list></view>
+<view class="order"><view class="tab-box"><view data-event-opts="{{[['tap',[['handleTab',[null]]]]]}}" class="{{['tab',query.orderType==null?'active':'']}}" bindtap="__e">全部</view><view data-event-opts="{{[['tap',[['handleTab',['WAIT_PAYMENT']]]]]}}" class="{{['tab',query.orderType=='WAIT_PAYMENT'?'active':'']}}" bindtap="__e">待付款</view><view data-event-opts="{{[['tap',[['handleTab',['WAIT_USE']]]]]}}" class="{{['tab',query.orderType=='WAIT_USE'?'active':'']}}" bindtap="__e">待使用</view><view data-event-opts="{{[['tap',[['handleTab',['APPLY_REFUND']]]]]}}" class="{{['tab',query.orderType=='APPLY_REFUND'?'active':'']}}" bindtap="__e">退款</view></view><block wx:if="{{$root.g0}}"><u-empty vue-id="386bcf8a-1" mode="order" iconSize="200rpx" textSize="28rpx" bind:__l="__l"></u-empty></block><zs-list vue-id="386bcf8a-2" mt="0" status="{{status}}" data-event-opts="{{[['^load',[['loadMore']]]]}}" bind:load="__e" bind:__l="__l" vue-slots="{{['default']}}"><block wx:for="{{$root.l0}}" wx:for-item="item" wx:for-index="index" wx:key="index"><view data-event-opts="{{[['tap',[['jump',['$0'],[[['list','',index]]]]]]]}}" class="order-item" bindtap="__e"><view class="top-box"><view class="label">{{''+item.$orig.shopInfo.shopName+''}}</view><view class="status">{{''+item.f0+''}}</view></view><view class="order-box"><zs-img vue-id="{{('386bcf8a-3-'+index)+','+('386bcf8a-2')}}" radius="full" src="{{item.$orig.goodsModelList[0].goodsInfo.goodsPath}}" width="164rpx" height="164rpx" bind:__l="__l"></zs-img><view class="info"><view class="title">{{''+item.$orig.goodsModelList[0].goodsInfo.goodsName+''}}</view><view class="time">{{''+item.g1+''}}</view><view class="price">{{'¥'+item.$orig.payAmount+''}}</view></view></view></view></block></zs-list></view>

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/pages/index/index.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/pages/index/index.wxml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/pages/index/index.wxss


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/pages/my/index.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/pages/my/index.wxml


+ 1 - 0
unpackage/dist/build/mp-weixin/project.config.json

@@ -11,6 +11,7 @@
     "minified": true,
     "newFeature": true,
     "bigPackageSizeSupport": true,
+    "ignoreUploadUnusedFiles": true,
     "babelSetting": {
       "ignore": [],
       "disablePlugins": [],

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/study/index.js


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/study/index.wxml


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/build/mp-weixin/study/index.wxss


+ 2 - 2
unpackage/dist/build/mp-weixin/uni_modules/cc-dropDownMenu/components/cc-dropDownMenu/cc-dropDownMenu.json

@@ -1,4 +1,4 @@
 {
-  "component": true,
-  "usingComponents": {}
+  "usingComponents": {},
+  "component": true
 }

+ 2 - 2
unpackage/dist/build/mp-weixin/uni_modules/uview-ui/components/u-status-bar/u-status-bar.json

@@ -1,4 +1,4 @@
 {
-  "component": true,
-  "usingComponents": {}
+  "usingComponents": {},
+  "component": true
 }

Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/main.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/runtime.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/common/vendor.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/city-select/city-select.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-banner/index.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-img/index.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-list/index.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-load-more/index.js.map


Failā izmaiņas netiks attēlotas, jo tās ir par lielu
+ 0 - 0
unpackage/dist/dev/.sourcemap/mp-weixin/components/zs-search/index.js.map


Daži faili netika attēloti, jo izmaiņu fails ir pārāk liels