ソースを参照

Merge branch 'group'

# Conflicts:
#	manifest.json
#	pages-buy/group.vue
#	pages-takeout/takeout.vue
py 1 年間 前
親
コミット
f015963f0a
100 ファイル変更、2910 行追加、459 行削除
  1. 15 0
      api/group.js
  2. 4 0
      api/groupOrder.js
  3. 85 2
      common/css/common.css
  4. 50 0
      components/canvas-code/code.vue
  5. 1 1
      components/en-utils/en-blank/en-blank.vue
  6. 5 3
      components/en-utils/en-nav/en-nav.vue
  7. 11 0
      package-lock.json
  8. 1 0
      package.json
  9. 105 0
      pages-buy/group-code.vue
  10. 664 0
      pages-buy/group-goods-info.vue
  11. 206 0
      pages-buy/group-mod/shop-list.vue
  12. 273 0
      pages-buy/group-pay.vue
  13. 256 0
      pages-buy/group-refund.vue
  14. 553 0
      pages-buy/group-shop.vue
  15. 486 151
      pages-buy/group.vue
  16. 1 1
      pages-buy/save-dry.vue
  17. BIN
      pages-buy/static/bg-2.png
  18. BIN
      pages-buy/static/bg.png
  19. BIN
      pages-buy/static/dh.png
  20. BIN
      pages-buy/static/fz.png
  21. BIN
      pages-buy/static/gmxz.png
  22. BIN
      pages-buy/static/ljtg.png
  23. BIN
      pages-buy/static/qg.png
  24. BIN
      pages-buy/static/right.png
  25. BIN
      pages-buy/static/xl.png
  26. BIN
      pages-buy/static/zk.png
  27. 31 32
      pages-buy/ticket.vue
  28. 119 67
      pages-order/group-info.vue
  29. 33 3
      pages.json
  30. 11 1
      pages/order/index.vue
  31. 0 198
      static/img/blank-box.svg
  32. BIN
      static/img/blank/no-goods.png
  33. BIN
      static/img/buy/group-bg.png
  34. BIN
      static/img/buy/jlzj.png
  35. BIN
      static/img/buy/qiang.png
  36. BIN
      static/img/buy/tg-det-bg.png
  37. BIN
      static/img/buy/tgxq.png
  38. BIN
      static/img/buy/ticket-bg.png
  39. BIN
      static/img/buy/x-jt.png
  40. BIN
      static/img/common/edit.png
  41. BIN
      static/img/common/n-select.png
  42. BIN
      static/img/common/no-order.png
  43. BIN
      static/img/common/wx-zf.png
  44. BIN
      static/img/common/y-select.png
  45. BIN
      static/img/group/bg.png
  46. BIN
      static/img/group/bottom.png
  47. BIN
      static/img/group/fl-bg.png
  48. BIN
      static/img/group/jl.png
  49. BIN
      static/img/group/qbfl.png
  50. BIN
      static/img/group/ss.png
  51. BIN
      static/img/group/zkbg.png
  52. BIN
      static/img/index/bcdxc.png
  53. BIN
      static/img/index/dw.png
  54. BIN
      static/img/index/index-q.png
  55. BIN
      static/img/index/index-x.png
  56. BIN
      static/img/index/index-xsms.png
  57. BIN
      static/img/index/lqgd.png
  58. BIN
      static/img/index/pw.png
  59. BIN
      static/img/index/ss.png
  60. BIN
      static/img/index/tc-top.png
  61. BIN
      static/img/logo/logo.png
  62. BIN
      static/img/my/fx.png
  63. BIN
      static/img/my/gywm.png
  64. BIN
      static/img/my/hf.png
  65. BIN
      static/img/my/ht.png
  66. BIN
      static/img/my/lxkf.png
  67. BIN
      static/img/my/pen.png
  68. BIN
      static/img/my/qszp.png
  69. BIN
      static/img/my/sc.png
  70. BIN
      static/img/my/set-phone.png
  71. BIN
      static/img/my/swhz.png
  72. BIN
      static/img/my/sxnr.png
  73. BIN
      static/img/my/user-img.png
  74. BIN
      static/img/my/wdyhq.png
  75. BIN
      static/img/my/wtfk.png
  76. BIN
      static/img/my/wz-two.png
  77. BIN
      static/img/my/wz.png
  78. BIN
      static/img/my/yzm-icons.png
  79. BIN
      static/img/order/bg.png
  80. BIN
      static/img/order/bottom.png
  81. BIN
      static/img/order/fz.png
  82. BIN
      static/img/order/lxkf.png
  83. BIN
      static/img/order/lxsj.png
  84. BIN
      static/img/order/qxdd.png
  85. BIN
      static/img/order/qzf.png
  86. BIN
      static/img/order/tk.png
  87. BIN
      static/img/order/top.png
  88. BIN
      static/img/order/xgdd.png
  89. BIN
      static/img/order/yhq.png
  90. BIN
      static/img/order/zlyd.png
  91. BIN
      static/img/school/add.png
  92. BIN
      static/img/school/bg.png
  93. BIN
      static/img/school/fs.png
  94. BIN
      static/img/school/fx.png
  95. BIN
      static/img/school/icon.png
  96. BIN
      static/img/school/info.png
  97. BIN
      static/img/tabBar/business-highlight.png
  98. BIN
      static/img/tabBar/business.png
  99. BIN
      static/img/tabBar/home-highlight.png
  100. BIN
      static/img/tabBar/home.png

+ 15 - 0
api/group.js

@@ -0,0 +1,15 @@
+import {request} from '../service/ajax.js'
+
+const newsUrl = '/api/group/'
+// 获取团购商家 
+export const groupShop = (data) => request(newsUrl + 'shop', 'post', { ...data },true)
+// 获取团购商家详情
+export const groupShopInfo = (data) => request(newsUrl + 'shop_info', 'post', { ...data },false)
+// 获取团购商品列表
+export const groupList = (data) => request(newsUrl + 'list', 'post', { ...data },false)
+// 获取团购商品详情
+export const groupInfo = (data) => request(newsUrl + 'info', 'post', { ...data },false)
+// 下单
+export const groupCreate = (data) => request(newsUrl + 'create', 'post', { ...data },false)
+// 获取顶部团购商品列表
+export const groupIndexGoods = (data) => request(newsUrl + 'index_goods', 'post', { ...data },false)

+ 4 - 0
api/groupOrder.js

@@ -18,3 +18,7 @@ export const groupOrderInfo = (data) => request(newsUrlTwo + 'info', 'post', { .
 export const groupOrderStatus = (data) => request(newsUrlTwo + 'status', 'post', { ...data },false)
 // 回显上传订单用户信息
 export const groupOrderFoster = (data) => request(newsUrlTwo + 'foster', 'post', { ...data },false)
+// 申请退款
+export const groupOrderRefund = (data) => request(newsUrlTwo + 'refund', 'post', { ...data },false)
+// 获取订单核销码
+export const groupOrderCode = (data) => request(newsUrlTwo + 'order_code', 'post', { ...data },false)

+ 85 - 2
common/css/common.css

@@ -131,11 +131,14 @@ image {
 	align-items: center;
 }
 
+.align-items-baseline {
+	display: flex;
+	align-items: baseline;
+}
 .align-items-flex-end {
 	display: flex;
 	align-items: flex-end;
 }
-
 .align-items-flex-start {
 	display: flex;
 	align-items: flex-start;
@@ -173,6 +176,14 @@ image {
 	text-align: left;
 }
 
+.letter-spacing-6 {
+	letter-spacing: 6rpx;
+}
+
+.letter-spacing-3 {
+	letter-spacing: 3rpx;
+}
+
 .flex-1 {
 	flex: 1;
 }
@@ -278,6 +289,11 @@ image {
 	color: #333;
 }
 
+.fc-a {
+	color: #aaa;
+}
+
+
 .fc-6 {
 	color: #666;
 }
@@ -310,6 +326,14 @@ image {
 	color: #ff3939;
 }
 
+.fc-F93435 {
+	color: #F93435;
+}
+
+.fc-F75820 {
+	color: #F75820;
+}
+
 .fc-FF7F00 {
 	color: #FF7F00;
 }
@@ -318,10 +342,23 @@ image {
 	color: #FD5C02;
 }
 
+.fc-F7663A {
+	color: #F7663A;
+}
+
 .fc-ED301D {
 	color: #ED301D;
 }
 
+.fc-F6531E {
+	color: #F6531E;
+}
+
+
+.fc-FF5022 {
+	color: #FF5022;
+}
+
 .fc-ADADAD {
 	color: #ADADAD;
 }
@@ -334,6 +371,10 @@ image {
 	color: #FE9E11;
 }
 
+.fc-FCFBF8 {
+	color: #FCFBF8;
+}
+
 /* 背景颜色 */
 .bgc-f {
 	background-color: #fff;
@@ -414,7 +455,16 @@ image {
 .b-b-F9F9F9 {
 	border-bottom: 1rpx solid #F9F9F9;
 }
-.b-r-ccc{
+.b-b-eee {
+	border-bottom: .5rpx solid #eee;
+}
+.b-b-999 {
+	border-bottom: 1rpx solid #999;
+}
+.b-b-EAEAEC {
+	border-bottom: 1rpx solid #EAEAEC;
+}
+.b-r-ccc {
 	border: 1rpx solid #ccc;
 }
 
@@ -461,6 +511,10 @@ image {
 	padding: 32rpx;
 }
 
+.pt-48 {
+	padding-top: 48rpx;
+}
+
 .p-t-4 {
 	padding-top: 4rpx;
 }
@@ -472,6 +526,7 @@ image {
 .p-t-20 {
 	padding-top: 20rpx;
 }
+
 .p-t-80 {
 	padding-top: 80rpx;
 }
@@ -479,6 +534,7 @@ image {
 .pb-5 {
 	padding-bottom: 5rpx;
 }
+
 .pb-10 {
 	padding-bottom: 10rpx;
 }
@@ -499,6 +555,10 @@ image {
 	padding: 0 24rpx;
 }
 
+.p-12-30 {
+	padding: 12rpx 30rpx;
+}
+
 .plr-32 {
 	padding: 0 32rpx;
 }
@@ -511,9 +571,24 @@ image {
 	padding: 12rpx 24rpx;
 }
 
+.p-28-20-39 {
+	padding: 28rpx 20rpx 39rpx
+}
+.p-38-20-24 {
+	padding: 38rpx 20rpx 24rpx;
+}
+
+.pl-15 {
+	padding-left: 15rpx;
+}
+
 .pl-24 {
 	padding-left: 24rpx;
 }
+.pl-42 {
+	padding-left: 42rpx;
+}
+
 
 .pr-24 {
 	padding-right: 24rpx;
@@ -564,6 +639,10 @@ image {
 	margin-right: 8rpx;
 }
 
+.mr-10 {
+	margin-right: 10rpx;
+}
+
 .mr-12 {
 	margin-right: 12rpx;
 }
@@ -649,6 +728,10 @@ image {
 	margin-bottom: 28rpx;
 }
 
+.mb-30 {
+	margin-bottom: 30rpx;
+}
+
 .mb-32 {
 	margin-bottom: 32rpx;
 }

+ 50 - 0
components/canvas-code/code.vue

@@ -0,0 +1,50 @@
+<template>
+	<view class="">
+		<canvas id="qrcode" canvas-id="qrcode" :style="[{'width': width +'px','height': width +'px'}]"></canvas>
+	</view>
+</template>
+
+<script>
+	import UQRCode from 'uqrcodejs';
+	export default {
+		components: {},
+		props: {
+			width: {
+				type: Number,
+				default: 150
+			},
+			// backgroundImg: {
+			// 	type: Number,
+			// 	default: '@/static/img/logo/logo.png'
+			// }
+		},
+		data() {
+			return {};
+		},
+		onLoad(data) {},
+		mounted() {},
+		onReady() {},
+		methods: {
+			getCode(dataValue) {
+				// 获取uQRCode实例
+				var qr = new UQRCode();
+				// 设置二维码内容
+				qr.data = dataValue;
+				// 设置二维码大小,必须与canvas设置的宽高一致
+				qr.size = this.width;
+				// 调用制作二维码方法
+				qr.make();
+				// 获取canvas上下文
+				var canvasContext = uni.createCanvasContext('qrcode', this); // 如果是组件,this必须传入
+				// 设置uQRCode实例的canvas上下文
+				qr.canvasContext = canvasContext;
+				// 调用绘制方法将二维码图案绘制到canvas上
+				qr.drawCanvas();
+			}
+		}
+	}
+</script>
+
+<style lang="scss" scoped>
+
+</style>

+ 1 - 1
components/en-utils/en-blank/en-blank.vue

@@ -57,7 +57,7 @@
 <style scoped lang="scss">
   @import url("../../static/css/en-common.css") ;
 	.blank-page {
-		width: 100vw;
+		// width: 100vw;
 		padding-top: 200rpx;
 		z-index: 2;
 		display: flex;

+ 5 - 3
components/en-utils/en-nav/en-nav.vue

@@ -7,10 +7,10 @@
 		  'align-items-center':!customNav,
 		  }" :style="[{'height': customBarH + 'px', 'padding-top': statusBarH + 'px','background':bgckgroundBox}]">
 				<view @tap="goBack" v-if="leftShow">
-					<!-- <uni-icons type="left" :color="leftColor" size="18"  ></uni-icons> -->
-					<image class="toLeft" src="@/static/img/toLeft.png" mode=""></image>
+					<uni-icons type="left" :color="leftColor" size="18"  ></uni-icons>
+					<!-- <image class="toLeft" src="@/static/img/toLeft.png" mode=""></image> -->
 				</view>
-				<view v-if="!customNav" :style="[{'color': titleColor}]" class="title-text">{{title}}</view>
+				<view v-if="!customNav" :style="[{'color': titleColor}]" class="title-text text-overflow-ellipsis-one">{{title}}</view>
 				<view v-else class="">
 					<slot name="custom"></slot>
 				</view>
@@ -154,6 +154,7 @@
 			// display: flex;
 			// align-items: center;
 			// justify-content: space-between;
+			transition: background-color 1s ease-in-out;
 			padding: 0 24rpx;
 
 			.iconfont {
@@ -162,6 +163,7 @@
 			}
 
 			.title-text {
+				max-width: 275rpx;
 				font-size: 36rpx;
 				font-weight: 600;
 			}

+ 11 - 0
package-lock.json

@@ -11,6 +11,7 @@
         "uni-simple-router": "2.0.7",
         "uniapp-qrcode": "^1.0.2",
         "uploading-oss": "1.0.3",
+        "uqrcodejs": "^4.0.7",
         "wecomjsdk": "1.0.2"
       },
       "devDependencies": {
@@ -168,6 +169,11 @@
       "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz",
       "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ=="
     },
+    "node_modules/uqrcodejs": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npmmirror.com/uqrcodejs/-/uqrcodejs-4.0.7.tgz",
+      "integrity": "sha512-84+aZmD2godCVI+93lxE3YUAPNY8zAJvNA7xRS7R7U+q57KzMDepBSfNCwoRUhWOfR6eHFoAOcHRPwsP6ka1cA=="
+    },
     "node_modules/vue": {
       "version": "2.7.10",
       "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.10.tgz",
@@ -315,6 +321,11 @@
         }
       }
     },
+    "uqrcodejs": {
+      "version": "4.0.7",
+      "resolved": "https://registry.npmmirror.com/uqrcodejs/-/uqrcodejs-4.0.7.tgz",
+      "integrity": "sha512-84+aZmD2godCVI+93lxE3YUAPNY8zAJvNA7xRS7R7U+q57KzMDepBSfNCwoRUhWOfR6eHFoAOcHRPwsP6ka1cA=="
+    },
     "vue": {
       "version": "2.7.10",
       "resolved": "https://registry.npmjs.org/vue/-/vue-2.7.10.tgz",

+ 1 - 0
package.json

@@ -6,6 +6,7 @@
     "uni-simple-router": "2.0.7",
     "uniapp-qrcode": "^1.0.2",
     "uploading-oss": "1.0.3",
+    "uqrcodejs": "^4.0.7",
     "wecomjsdk": "1.0.2"
   },
   "devDependencies": {

+ 105 - 0
pages-buy/group-code.vue

@@ -0,0 +1,105 @@
+<template>
+	<view class="flex-common-css">
+		<Nav title=" " leftIconColor="#333" titleColor="#333" bgckgroundBox='transparent'></Nav>
+		<scroll-view :scroll-y="true" class="scroll-view-css p-24 box-border-box" @scrolltolower="scrolltolower">
+			<view class="text-align-center fs-34 fc-3 fw-600 mb-20">
+				{{codeData.goods_name || ''}}
+			</view>
+			<view class="fs-26 fc-9 mb-20 text-align-center">
+				有效期:{{codeData.end_time || ''}}
+			</view>
+			<view class="bgc-f b-rad-20 p-24 box-border-box">
+				<view class="fs-30 fc-3 fw-500 mb-20">
+					券码 <span class="fs-26 fc-9" v-if="codeData.code">({{codeData.code.length || ''}}张)</span>
+				</view>
+				<view class="align-items-center flex-wrap-wrap">
+					<view class="" v-for="(item,index) in codeData.code" :key="index">
+						<view class="fs-26 fw-600 mr-20" v-show="index<=2">
+							{{item.code}}
+						</view>
+					</view>
+				</view>
+				<view class="fs-28">
+					...
+				</view>
+				<view class="flex-direction align-items-center flex-justify-center">
+					<canvasCode ref="canvasCodeRef" class="mb-20"></canvasCode>
+					<view class="but bgc-41ABF5 b-rad-200 fs-30 fc-f text-align-center" @click="groupOrderCode()">
+						刷新券码
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import canvasCode from '../components/canvas-code/code.vue'
+	import {
+		groupOrderCode
+	} from "@/api/groupOrder.js"
+	import tools from "@/service/tools";
+	export default {
+		components: {
+			canvasCode
+		},
+		data() {
+			return {
+				order_id: 0,
+				codeData: {
+					code: []
+				},
+				time: ''
+			};
+		},
+		onLoad(data) {
+			if (data) {
+				this.order_id = data.order_id
+				this.groupOrderCode()
+				this.time = setInterval(() => {
+					this.groupOrderCode()
+				}, 5000)
+			}
+		},
+		onUnload() {
+			clearInterval(this.time)
+		},
+		mounted() {},
+		methods: {
+			scrolltolower() {
+				console.log('触底');
+			},
+			groupOrderCode() {
+				groupOrderCode({
+					order_id: this.order_id
+				}).then((res) => {
+					if (res.code === 1) {
+						if (res.data.code.length === 0) {
+							tools.error('暂无可用券')
+							setTimeout(() => {
+								tools.leftClick()
+							}, 1000)
+						}
+						if (this.codeData.code.length != 0) {
+							if (this.codeData.code.length == res.data.code.length) {
+								return
+							}
+						}
+						this.codeData = res.data
+						this.$refs.canvasCodeRef.getCode(this.codeData.code[0].code)
+					} else {
+						tools.leftClick()
+					}
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.but {
+		width: 100%;
+		padding: 15rpx 0;
+		box-sizing: border-box;
+	}
+</style>

+ 664 - 0
pages-buy/group-goods-info.vue

@@ -0,0 +1,664 @@
+<template>
+	<view class="flex-common-css iPhone-bottom box-border-box">
+		<Nav :title="shop_name" :bgckgroundBox='"transparent"' leftColor="#fff" titleColor="#fff"></Nav>
+		<image src="/pages-buy/static/bg-2.png" mode="" class="bg-img"></image>
+		<uni-popup ref="popup" type="top" border-radius="0 0 10px 10px">
+			<view class="pop-box bgc-f" :style="[{'padding-top': popTop + 'px'}]">
+				<view class="p-24 box-border-box">
+					<view class="fs-32 fc-3 mb-20">
+						全部团购
+					</view>
+					<view class="align-items-center flex-wrap-wrap">
+						<view class="w-50 p-24 box-border-box text-overflow-ellipsis-one"
+							v-for="(item,index) in sift_data" :key="index" :class="{'active':isActive==index}"
+							@click="popChenked(index)">
+							{{item.title}}
+						</view>
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+		<view class="sift-box p-12-24 box-border-box align-items-center">
+			<scroll-view scroll-x="true" scroll-with-animation :scroll-left="scrollLeft" class="flex-1 tab-scroll">
+				<view class="max-w-200 text-overflow-ellipsis-one tab-scroll_item" v-for="(item,index) in sift_data"
+					:key="index" @click="chenked(index)">
+					<view class="text-overflow-ellipsis-one fs-28 fc-f mb-16">
+						{{item.title}}
+					</view>
+					<view v-if="isActive==index" class="title-hr bgc-f"></view>
+				</view>
+			</scroll-view>
+			<!-- <uni-icons @click="openPop" class="flex-shrink0 ml-16 z-2" type="bars" size="22"></uni-icons> -->
+		</view>
+		<swiper @change="change" :current="isActive" class="swiper-content common-view-css">
+			<swiper-item class="swiperitem-content w-h-100" v-for="(item,index) in swiper_data" :key="index">
+				<view class="w-h-100 flex-direction">
+					<scroll-view v-if="item!==''" :scroll-y="true" class="scroll-view-css p-12-24 box-border-box">
+						<swiper class="swiper-goods mb-30">
+							<swiper-item class="swiper-item-goods" v-for="(goods_item, goods_index) in item.image"
+								:key="goods_index">
+								<image class="goods-img" :src="goods_item" mode="aspectFill"></image>
+							</swiper-item>
+						</swiper>
+						<view class="item-goods-box b-rad-20 bgc-f p-24 box-border-box mb-32">
+							<view class="align-items-center flex-justify-space mb-30">
+								<view class="fs-32 fw-b fc-0 letter-spacing-3">
+									{{item.title}}
+								</view>
+								<view class="xl-box">
+									<image src="/pages-buy/static/xl.png" mode="" class="xl-img"></image>
+									<view class="fc-F7663A fs-24 text-align-center z-2">
+										已拼{{item.sales}}+
+									</view>
+								</view>
+							</view>
+							<view class="align-items-center flex-justify-space mb-60 fg-box">
+								<view class="by-box"></view>
+								<view class="fg-hr"></view>
+								<view class="by-box-two"></view>
+							</view>
+							<view class="align-items-flex-start mb-16" v-show="item.is_quota == 1">
+								<view class="mr-24 fs-28 fw-b fc-0">
+									使用限制
+								</view>
+								<view class="align-items-center">
+									<view class="mr-8 fs-28 fc-0">
+										每人限购{{item.quota_num}}张,
+									</view>
+								</view>
+							</view>
+							<view class="align-items-flex-start mb-16">
+								<view class="mr-24 fs-28 fw-b fc-0">
+									使用限制
+								</view>
+								<view class="align-items-center">
+									<view class="fs-28 fc-0" v-show="item.restricted === 1">
+										不限用
+									</view>
+									<view class="fs-28 fc-0" v-show="item.restricted === 2">
+										每张卷限{{item.restricted_num}}人使用
+									</view>
+									<view class="fs-28 fc-0" v-show="item.restricted === 3">
+										每桌限用{{item.restricted_num}}张
+									</view>
+								</view>
+							</view>
+							<view class="align-items-flex-start mb-16">
+								<view class="mr-24 fs-28 fw-b fc-0">
+									消费须知
+								</view>
+								<view class="fs-28 fc-0" v-show="item.usable_time == 1">
+									24小时可用
+								</view>
+								<view class="fs-28 fc-0" v-show="item.usable_time == 2">
+									{{item.timeData}}
+								</view>
+							</view>
+							<view class="align-items-flex-start">
+								<view class="mr-24 fs-28 fw-b fc-0">
+									服务保障
+								</view>
+								<view class="fs-28 fc-0">
+									随时退,过期自动退
+								</view>
+							</view>
+						</view>
+						<view class="align-items-center flex-justify-center mb-32">
+							<view class="tm-hr"></view>
+							<view class="fs-28 fc-0 plr-12">
+								团购详情
+							</view>
+							<view class="tm-hr"></view>
+						</view>
+						<view class="item-goods-box b-rad-20 bgc-f p-24 box-border-box mb-32">
+							<view class="item-info" v-for="(item_item,item_index) in item.item" :key="item_index">
+								<view class="align-items-center mb-10">
+									<view class="d"></view>
+									<view class="fs-28 fw-b">
+										{{item_item.name}}
+									</view>
+								</view>
+								<view class="align-items-center flex-justify-space goods-info"
+									v-for="(goods_item,goods_index) in item_item.goods" :key="goods_index">
+									<div class="align-items-center">
+										<view class="d d-c"></view>
+										<view class="fs-24">
+											{{goods_item.name}}
+										</view>
+									</div>
+									<view class="align-items-center">
+										<view class="fc-a mr-18 fs-24">
+											({{goods_item.number}}{{goods_item.unit}})
+										</view>
+										<view class="w-100 text-align-right fs-24">
+											¥{{goods_item.price}}
+										</view>
+									</view>
+								</view>
+							</view>
+							<view class="item-info">
+								<view class="align-items-center mb-10">
+									<view class="d"></view>
+									<view class="fs-28 fw-b">
+										备注
+									</view>
+								</view>
+								<view class="fs-24">
+									温馨提示:套餐用餐前请提前验券
+								</view>
+							</view>
+						</view>
+						<!-- 						<view class="fs-34 fc-3 mb-18">
+							购买须知
+						</view> -->
+						<view class="item-goods-box b-rad-20 bgc-f p-38-20-24 box-border-box mb-32">
+							<view class="align-items-center pb-36 mb-24 b-b-EAEAEC">
+								<image src="/pages-buy/static/gmxz.png" mode="" class="gmxz-img mr-10"></image>
+								<view class="fs-28 fc-F7663A">
+									购买须知
+								</view>
+							</view>
+							<view class="align-items-center mb-24">
+								<view class="d"></view>
+								<view class="fs-28 fw-600 fc-3">
+									有效期
+								</view>
+							</view>
+							<view class="align-items-center mb-40">
+								<view class="d d-c"></view>
+								<view class="fs-24" v-if="item.time_type === 1">
+									{{item.start_time}} 至 {{item.end_time}}
+								</view>
+								<view class="fs-24" v-else>
+									购买后{{item.valid_day}}天
+								</view>
+							</view>
+							<view class="align-items-center mb-24">
+								<view class="d"></view>
+								<view class="fs-28 fw-600 fc-3">
+									使用时间
+								</view>
+							</view>
+							<view class="align-items-center mb-40">
+								<view class="d d-c"></view>
+								<view class="fs-24">
+									{{item.usable_time == 1?'24小时可用':item.timeData}}
+								</view>
+							</view>
+							<view class="align-items-center mb-24">
+								<view class="d"></view>
+								<view class="fs-28 fw-600 fc-3">
+									使用规则
+								</view>
+							</view>
+							<view class="align-items-center mb-30"
+								v-for="(use_message_item,use_message_index) in item.use_message"
+								:key="use_message_index">
+								<view class="d d-c"></view>
+								<image src="/pages-buy/static/right.png" mode="" class="right-icon"></image>
+								<view class="fs-24">
+									{{use_message_item.notice}}
+								</view>
+							</view>
+						</view>
+					</scroll-view>
+					<view class="but-box box-border-box">
+						<view class="but align-items-center flex-justify-space">
+							<view class="align-items-baseline pl-42 box-border-box">
+								<view class="fs-24 fc-f">
+									折后 ¥
+								</view>
+								<view class="fs-40 fc-f fw-b mr-12">
+									{{item.price}}
+								</view>
+								<view class="zk-box text-align-center">
+									<image src="/pages-buy/static/zk.png" mode="" class="zk-img"></image>
+									<view class="fs-24 fc-F7663A z-2">
+										{{toFixedOne(item.price,item.line_price)}}折
+									</view>
+								</view>
+							</view>
+							<view class="ljtg-box text-align-center" @click="goToUrl">
+								<image src="/pages-buy/static/ljtg.png" mode="" class="ljtg-bg"></image>
+								<view class="fc-F6531E fs-32 fw-b z-2">
+									立即团购
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+
+			</swiper-item>
+		</swiper>
+
+	</view>
+</template>
+
+<script>
+	import {
+		groupInfo,
+		groupIndexGoods
+	} from '@/api/group.js'
+	export default {
+		components: {},
+		data() {
+			return {
+				shop_id: '',
+				goods_id: '',
+				shop_name: '',
+				sift_data: [],
+				sift_id: 0,
+				currentindex: 0,
+				contentScrollW: 0, // 导航区宽度
+				scrollLeft: 0, // 横向滚动条位置
+				isActive: 0,
+				swiper_data: [],
+				goodsList: [],
+				popTop: 0
+			};
+		},
+		onLoad(data) {
+			if (data) {
+				this.shop_id = data.shop_id
+				this.goods_id = data.goods_id
+				this.shop_name = data.shop_name
+				// this.groupInfo()
+				this.groupIndexGoods()
+			}
+			// console.log(data);
+		},
+		watch: {
+			// swiper与上面选项卡联动
+			currentindex(newval) {
+				this.isActive = newval;
+				this.scrollLeft = 0;
+				// 滑动swiper后,每个选项距离其父元素最左侧的距离
+				console.log(newval);
+				if (newval === 0) {
+					this.scrollLeft = this.sift_data[newval].left - 60
+				} else {
+					this.scrollLeft = (this.sift_data[newval].left - ((this.sift_data[(newval - 1)].width) / 2)) - 60
+				}
+				// for (let i = 0; i < newval - 1; i++) {
+				// 	this.scrollLeft += (this.sift_data[i].width + (this.sift_data[i].left))
+				console.log(this.scrollLeft);
+				// };
+			},
+		},
+		mounted() {
+			this.$nextTick(() => {
+				setTimeout(() => {
+					this.getScrollW()
+				}, 500)
+				uni.getSystemInfo({
+					success: (e) => {
+						let statusBarH = e.statusBarHeight + 10
+						let custom = 0;
+						custom = wx.getMenuButtonBoundingClientRect()
+						let customBarH = custom.height;
+						this.popTop = statusBarH + customBarH;
+					}
+				})
+			})
+		},
+		methods: {
+			toFixedOne(price, line_price) {
+				let num = (Number(price) / Number(line_price) * 10).toFixed(1)
+				// 转换为字符串,以便进行操作
+				var numStr = num.toString();
+				// 检查是否有小数部分
+				if (numStr.indexOf('.') !== -1) {
+					// 有小数部分,则移除多余的零
+					numStr = numStr.replace(/0+$/, '').replace(/\.$/, '');
+				}
+				// 返回处理后的数字或整数
+				return parseFloat(numStr);
+			},
+			goToUrl() {
+				uni.navigateTo({
+					url: '/pages-buy/group-pay?shop_id=' + this.sift_data[this.isActive].shop_id + '&goods_id=' +
+						this.sift_data[this.isActive].id
+				});
+			},
+			openPop() {
+				this.$refs.popup.open()
+			},
+			setTimeData(timeData) {
+				let time = ''
+				let array = ''
+				timeData.forEach((v, k) => {
+					v.forEach((i, j) => {
+						let timeTwo = ''
+						if (j == 0 || j == 3) {
+							timeTwo = i + '-'
+						} else {
+							timeTwo = i
+						}
+						array = array + timeTwo
+					})
+					if (timeData.length === k + 1) {
+						time = time + array + '可用'
+					} else {
+						time = time + array + '可用' + ','
+					}
+					array = ''
+				})
+				console.log(time);
+				return time
+			},
+			change(e) {
+				const {
+					current
+				} = e.detail;
+				console.log(current);
+				this.currentindex = current;
+			},
+			getScrollW() {
+				const query = uni.createSelectorQuery().in(this);
+				query.select('.tab-scroll').boundingClientRect(data => {
+					// 拿到 scroll-view 组件宽度
+					this.contentScrollW = data.width
+					// console.log(data, '00000000000000');
+				}).exec();
+				query.selectAll('.tab-scroll_item').boundingClientRect(data => {
+					let dataLen = data.length;
+					// console.log(data, '11111111111111111111');
+					for (let i = 0; i < dataLen; i++) {
+						//  scroll-view 子元素组件距离左边栏的距离
+						this.sift_data[i].left = data[i].left;
+						//  scroll-view 子元素组件宽度
+						this.sift_data[i].width = data[i].width
+						// console.log(this.sift_data);
+					}
+				}).exec()
+			},
+			popChenked(index) {
+				this.chenked(index)
+				this.$refs.popup.close()
+			},
+			chenked(index) {
+				this.isActive = index;
+				this.scrollLeft = 0;
+				console.log(this.scrollLeft);
+				for (let i = 0; i < index - 1; i++) {
+					this.scrollLeft += this.sift_data[i].width + (this.sift_data[i].width / 2)
+					console.log(this.scrollLeft);
+				};
+			},
+			groupIndexGoods() {
+				groupIndexGoods({
+					goods_id: this.goods_id,
+					shop_id: this.shop_id
+				}).then((res) => {
+					if (res.code === 1) {
+						this.sift_data = res.data
+						this.swiper_data = []
+						this.processGroupInfo(0);
+					}
+				})
+			},
+			processGroupInfo(index) {
+				if (index < this.sift_data.length) {
+					const v = this.sift_data[index];
+					this.groupInfo(v.id).then(() => {
+						this.processGroupInfo(index + 1);
+					});
+				}
+			},
+			groupInfo(goodsId) {
+				return new Promise((resolve) => {
+					groupInfo({
+						id: goodsId,
+						shop_id: this.shop_id
+					}).then((res) => {
+						if (res.code === 1) {
+							if (res.data.usable_time === 2) {
+								res.data.timeData = this.setTimeData(res.data.usable_time_arr)
+							}
+							this.swiper_data.push(res.data);
+						}
+						resolve();
+					});
+				});
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.ljtg-box {
+		width: 247rpx;
+		height: 100rpx;
+		line-height: 100rpx;
+		position: relative;
+	}
+
+	.ljtg-bg {
+		position: absolute;
+		right: 0;
+		top: 0;
+		width: 247rpx;
+		height: 100rpx;
+	}
+
+	.zk-box {
+		width: 83rpx;
+		height: 32rpx;
+		line-height: 32rpx;
+		position: relative;
+	}
+
+	.zk-img {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 83rpx;
+		height: 32rpx;
+	}
+
+	.gmxz-img {
+		width: 27rpx;
+		height: 27rpx;
+	}
+
+	.fg-box {
+		position: relative;
+	}
+
+	.by-box {
+		width: 48rpx;
+		height: 48rpx;
+		border-radius: 50%;
+		background: #F5F5F5;
+		position: absolute;
+		left: -48rpx;
+		top: 0;
+	}
+
+	.fg-hr {
+		width: 100%;
+		height: 1rpx;
+		background: #EAEAEC;
+		position: relative;
+		top: 24rpx;
+	}
+
+	.by-box-two {
+		width: 48rpx;
+		height: 48rpx;
+		border-radius: 50%;
+		background: #F5F5F5;
+		position: absolute;
+		right: -48rpx;
+		top: 0;
+	}
+
+	.tm-hr {
+		width: 55rpx;
+		height: 1rpx;
+		background: #000;
+	}
+
+	.xl-box {
+		width: 126rpx;
+		height: 60rpx;
+		position: absolute;
+		right: -3rpx;
+		top: 16rpx;
+		padding-top: 12rpx;
+	}
+
+	.xl-img {
+		width: 126rpx;
+		height: 60rpx;
+		position: absolute;
+		top: 0;
+		right: 0;
+		z-index: 1;
+	}
+
+	.item-goods-box {
+		position: relative;
+	}
+
+	.title-hr {
+		width: 48rpx;
+		height: 6rpx;
+		border-radius: 10rpx;
+		position: relative;
+		left: calc(50% - 24rpx);
+		// position: absolute;
+		// left: 0;
+		bottom: 0;
+	}
+
+	.bg-img {
+		position: fixed;
+		left: 0;
+		top: 0;
+		width: 100%;
+		height: 427rpx;
+	}
+
+	.w-100 {
+		min-width: 100rpx;
+	}
+
+	.w-h-100 {
+		width: 100%;
+		height: 100%;
+	}
+
+	.overflow-auto {
+		overflow: auto;
+	}
+
+	.but-box {
+		padding: 0 30rpx 0;
+		width: 100%;
+	}
+
+	.but {
+		width: 100%;
+		height: 100rpx;
+		line-height: 100rpx;
+		border-radius: 50rpx;
+		position: relative;
+		background: linear-gradient(-90deg, #FF7D2D, #F54F1D);
+		box-shadow: 0rpx 3rpx 8rpx 0rpx rgba(246, 83, 30, 0.32);
+	}
+
+	.w-50 {
+		width: 50%;
+	}
+
+	.pop-box {
+		width: 100%;
+		max-height: 40vh;
+		overflow: auto;
+		border-radius: 0 0 20rpx 20rpx;
+	}
+
+	.d {
+		width: 6rpx;
+		height: 6rpx;
+		border-radius: 50%;
+		background: #000000;
+		margin-right: 20rpx;
+	}
+
+	.d-c {
+		background: transparent;
+	}
+
+	.swiper-goods {
+		width: 100%;
+		height: 381rpx;
+		border-radius: 20rpx;
+	}
+
+	.swiper-item-goods {
+		display: block;
+		height: 381rpx;
+		border-radius: 20rpx;
+	}
+
+	.goods-img {
+		width: 100%;
+		height: 100%;
+		border-radius: 20rpx;
+	}
+
+	.active {
+		position: relative;
+		color: #57CAFF;
+		font-weight: 600;
+	}
+
+	.tab-scroll {
+		width: 100%;
+		// width: calc(100% - 62rpx);
+		white-space: nowrap;
+		position: relative;
+		z-index: 2;
+	}
+
+	.box-b {
+		width: 100%;
+		height: 100vh;
+		background: orangered;
+	}
+
+	.max-w-200 {
+		max-width: 310rpx;
+		// min-width: 200rpx;
+		text-align: center;
+		margin-right: 60rpx;
+		display: inline-block;
+	}
+
+	.max-w-200:last-child {
+		margin-right: 0;
+	}
+
+	.goods-info {
+		margin-bottom: 10rpx;
+	}
+
+	.goods-info:last-child {
+		padding-bottom: 30rpx;
+		margin-bottom: 30rpx;
+		border-bottom: 1rpx solid #EAEAEC;
+	}
+
+	.z-2 {
+		position: relative;
+		z-index: 2;
+	}
+
+	.right-icon {
+		width: 6rpx;
+		height: 10rpx;
+		margin-right: 10rpx;
+	}
+</style>

+ 206 - 0
pages-buy/group-mod/shop-list.vue

@@ -0,0 +1,206 @@
+<template>
+	<view class="min-h-85">
+		<view v-if="list.length == 0" class="scroll-view-css">
+			<EnBlank :customSrc='true'>
+				<template v-slot:blankImg>
+					<image class="black-custom-img" src="@/static/img/common/no-order.png" mode=""></image>
+				</template>
+			</EnBlank>
+		</view>
+		<view v-else class="item-box mb-16 bgc-f p-28-20-39 box-border-box" v-for="(item,index) in list" :key="index"
+			@click="goToUrl(item)">
+			<view class="display-flex">
+				<view class="flex-shrink0">
+					<image :src="item.shop_logo" mode="aspectFill" class="shop_logo mr-30"></image>
+				</view>
+				<view class="item-right flex-1 flex-direction flex-justify-around">
+					<view class="">
+						<view class="w-240 fs-32 fc-0 fw-b mb-12 text-overflow-ellipsis-one">
+							{{item.shop_name}}
+						</view>
+						<view class="align-items-center">
+							<image class="dw mr-8" src="@/static/img/group/jl.png" mode=""></image>
+							<view class="fs-24 fc-a">
+								{{item.address}}
+							</view>
+						</view>
+					</view>
+					<view class="align-items-center flex-justify-space">
+						<view class="align-items-center">
+							<view class="fs-24 fc-a">
+								距离{{item.distance}}Km
+							</view>
+							<view class="hr"></view>
+							<view class="fs-24 fc-a">
+								销量{{item.shop_sales}}
+							</view>
+						</view>
+						<view class="ljqg-but fs-28 fw-b fc-F6531E text-align-center">
+							立即抢购
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="pt-48" v-if="item.goods.length>0">
+				<view class="align-items-center flex-justify-space list-b" v-for="(goodsItem,goodsIndex) in item.goods"
+					:key="goodsIndex">
+					<view class="align-items-center">
+						<view class="mr-8 discount-box flex-shrink0 text-align-center">
+							<image class="zkbg-img" src="@/static/img/group/zkbg.png" mode=""></image>
+							<view class="zkje fs-24 fc-f">
+								{{toFixedOne(goodsItem.price,goodsItem.line_price)}}折
+							</view>
+						</view>
+						<view class="fs-24 fc-0 max-w-252 text-overflow-ellipsis-one">
+							{{goodsItem.title}}
+						</view>
+					</view>
+					<view class="align-items-center">
+						<view class="fs-32 fw-b fc-F93435 mr-12 flex-shrink0">
+							<span class="fs-24 fw-b fc-F93435">¥</span>
+							{{goodsItem.price}}
+						</view>
+						<view class="fc-a fs-24 flex-shrink0 line-price">
+							¥{{goodsItem.line_price}}
+						</view>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import EnBlank from "@/components/en-utils/en-blank/en-blank";
+	import {
+		groupShop
+	} from "@/api/group.js"
+	export default {
+		components: {
+			EnBlank
+		},
+		data() {
+			return {
+				list: [],
+				total: 0
+			};
+		},
+		onLoad(data) {},
+		mounted() {},
+		methods: {
+			toFixedOne(price, line_price) {
+				let num = (Number(price) / Number(line_price) * 10).toFixed(1)
+				// 转换为字符串,以便进行操作
+				var numStr = num.toString();
+				// 检查是否有小数部分
+				if (numStr.indexOf('.') !== -1) {
+					// 有小数部分,则移除多余的零
+					numStr = numStr.replace(/0+$/, '').replace(/\.$/, '');
+				}
+				// 返回处理后的数字或整数
+				return parseFloat(numStr);
+			},
+			goToUrl(item) {
+				uni.navigateTo({
+					url: '/pages-buy/group-shop?shop_id=' + item.shop_id
+				});
+			},
+			groupShop(fromData) {
+				groupShop(fromData).then((res) => {
+					if (res.code === 1) {
+						if (fromData.page === 1) {
+							this.list = []
+							this.list = [...this.list, ...res.data.items];
+						} else {
+							if (this.list.length < this.total) {
+								this.list = [...this.list, ...res.data.items];
+								this.total = res.data.total;
+							}
+						}
+					}
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.hr {
+		width: 1rpx;
+		height: 16rpx;
+		background: #DEDEDE;
+		margin: 0 11rpx 0 17rpx;
+	}
+
+	.ljqg-but {
+		width: 164rpx;
+		height: 54rpx;
+		line-height: 54rpx;
+		background: linear-gradient(-90deg, #FFE192, #FFD568);
+		box-shadow: 0rpx 2rpx 21rpx 0rpx rgba(232, 183, 55, 0.48);
+		border-radius: 27rpx;
+	}
+
+	.max-w-252 {
+		width: 252rpx;
+	}
+
+	.line-price {
+		text-decoration: line-through;
+	}
+
+	.dw {
+		width: 16rpx;
+		height: 18rpx;
+	}
+
+	.w-240 {
+		// width: 480rpx;
+	}
+
+	.min-h-85 {
+		min-height: 85vh;
+	}
+
+	.item-box {
+		width: 100%;
+		border-radius: 10rpx;
+	}
+
+	.shop_logo {
+		width: 180rpx;
+		height: 180rpx;
+		border-radius: 20rpx;
+	}
+
+	.w-150 {
+		// width: 300rpx;
+	}
+
+	.discount-box {
+		width: 82rpx;
+		height: 32rpx;
+		position: relative;
+	}
+
+	.zkbg-img {
+		position: absolute;
+		left: 0;
+		top: 0;
+		width: 82rpx;
+		height: 32rpx;
+	}
+
+	.zkje {
+		position: relative;
+		z-index: 2;
+	}
+
+	.list-b {
+		margin-bottom: 34rpx;
+	}
+
+	.list-b:last-child {
+		margin: 0;
+	}
+</style>

+ 273 - 0
pages-buy/group-pay.vue

@@ -0,0 +1,273 @@
+<template>
+	<view class="flex-common-css iPhone-bottom box-border-box">
+		<Nav title='提交订单' bgckgroundBox='transparent'></Nav>
+		<scroll-view :scroll-y="true" class="scroll-view-css" @scrolltolower="scrolltolower">
+			<view class="p-24 box-border-box bgc-f b-rad-20 mb-20">
+				<view class="align-items-flex-end flex-justify-space p-b-20 b-b-F9F9F9 mb-20">
+					<view class="align-items-flex-start">
+						<image :src="goods_info.cover_img" mode="scaleToFill" class="goods-img mr-18"></image>
+						<view class="">
+							<view class="fs-32 w-150 text-overflow-ellipsis-one mb-10">
+								{{goods_info.title}}
+							</view>
+							<view class="mb-10 fs-22 fc-9">
+								可用时间:
+								{{goods_info.usable_time == 1?'24小时可用':goods_info.timeData}}
+							</view>
+							<view class="fs-22 fc-9 mb-10">
+								{{goods_info.is_quota == 0?'不限购':'限购'+ goods_info.quota_num +'张'}} .
+								{{goods_info.pre_book == 1?'无需预约':'需预约'}}
+							</view>
+							<view class="fs-22 fc-9">
+								随时退 . 过期自动退
+							</view>
+						</view>
+					</view>
+					<view class="">
+						<view class="align-items-center mb-10 flex-justify-end">
+							<view class="fs-22 fc-9 mr-6 sc-class">
+								{{goods_info.line_price}}
+							</view>
+							<view class="goods_info.price fs-22">
+								现价¥<span class="fs-28">{{goods_info.price}}</span>
+							</view>
+						</view>
+						<view class="align-items-center">
+							<image src="@/static/img/takeout/j.png" mode="" class="j" @click="setNum(1)"></image>
+							<input type="number" v-model="fromData.number" class="input" @blur='blur' />
+							<image src="@/static/img/takeout/add.png" mode="" class="j" @click="setNum(2)"></image>
+						</view>
+					</view>
+				</view>
+				<view class="text-align-center flex-justify-end">
+					<view class="fs-28 mr-20">
+						优惠 <span
+							class="fc-41ABF5 fs-28">¥{{((Number(goods_info.line_price) - Number(goods_info.price)) * Number(fromData.number)).toFixed(2)}}</span>
+					</view>
+					<view class="fs-28">
+						小计 <span
+							class="fc-41ABF5 fs-28 fw-600">¥{{(Number(goods_info.price) * Number(fromData.number)).toFixed(2)}}</span>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="but-box align-items-center flex-justify-space bgc-f p-24 box-border-box">
+			<view class="">
+				<view class="fs-34 fw-600 fc-41ABF5">
+					<span class="fs-24 fc-41ABF5 fw-400 mr-12">合计</span><span
+						class="fs-20 fw-600 fc-41ABF5">¥</span>{{(Number(goods_info.price) * Number(fromData.number))}}
+				</view>
+				<view class="fc-9">
+					<span
+						class="mr-12">共{{fromData.number}}件</span>已优惠¥{{((Number(goods_info.line_price) - Number(goods_info.price)) * Number(fromData.number)).toFixed(2)}}
+				</view>
+			</view>
+			<view class="but bgc-41ABF5 fc-f b-rad-200 text-align-center fs-34" @click="toSave()">
+				立即支付
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+	import {
+		groupInfo,
+		groupCreate
+	} from '@/api/group.js'
+	import {
+		groupPay
+	} from '@/api/groupOrder.js';
+	import tools from '@/service/tools';
+	export default {
+		components: {},
+		data() {
+			return {
+				fromData: {
+					id: 0,
+					shop_id: 0,
+					number: 1
+				},
+				goods_info: {},
+				usable_time: '',
+				isAJAX: false
+			};
+		},
+		onLoad(data) {
+			console.log(data);
+			if (data) {
+				this.fromData.id = data.goods_id
+				this.fromData.shop_id = data.shop_id
+				this.groupInfo()
+			}
+		},
+		mounted() {},
+		methods: {
+			toSave() {
+				if (this.isAJAX) {
+					return
+				}
+				this.isAJAX = true;
+				this.fromData.school_id = uni.getStorageSync('school_id');
+				groupCreate(this.fromData).then((res) => {
+					if (res.code === 1) {
+						groupPay({
+							order_id: res.data.order_id
+						}).then((ret) => {
+							if (ret.code === 1) {
+								uni.requestPayment({
+									provider: "wxpay", //支付类型-固定值
+									timeStamp: ret.data.wx_pay.timeStamp + "", // 时间戳(单位:秒)
+									nonceStr: ret.data.wx_pay.nonceStr, // 随机字符串
+									package: ret.data.wx_pay.package, // 固定值
+									signType: ret.data.wx_pay.signType, //固定值
+									paySign: ret.data.wx_pay.paySign, //签名
+									success: (ren) => {
+										this.isAJAX = false;
+										tools.success("支付成功");
+										uni.setStorageSync('orderPayType', 3)
+										setTimeout(() => {
+											uni.switchTab({
+												url: "/pages/order/index"
+											})
+										}, 1000)
+									},
+									fail: (err) => {
+										this.isAJAX = false;
+										tools.error("支付失败");
+										uni.setStorageSync('orderPayType', 3)
+										setTimeout(() => {
+											uni.switchTab({
+												url: "/pages/order/index"
+											})
+										}, 1000)
+									},
+								});
+							} else {
+								this.isAJAX = false;
+								tools.error("支付失败");
+								uni.setStorageSync('orderPayType', 3)
+								setTimeout(() => {
+									uni.switchTab({
+										url: "/pages/order/index"
+									})
+								}, 1000)
+							}
+						})
+					} else {
+						this.isAJAX = false;
+						tools.error(res.msg);
+					}
+				})
+			},
+			scrolltolower() {
+				console.log('触底');
+			},
+			blur() {
+				if (this.goods_info.is_quota == 1) {
+					if (this.fromData.number >= this.goods_info.quota_num) {
+						tools.error('限购'+ this.goods_info.quota_num + '张')
+						this.fromData.number = this.goods_info.quota_num
+					}
+				}
+				if (this.fromData.number >= 99) {
+					tools.error('购买数量最大为99')
+					this.fromData.number = 99
+				} else if (this.fromData.number <= 0) {
+					tools.error('购买数量最少为1')
+					this.fromData.number = 1
+				}
+			},
+			setNum(num) {
+				if (num === 1) {
+					// 减
+					if (this.fromData.number <= 1) {
+						tools.error('购买数量最少为1')
+						return
+					}
+					--this.fromData.number
+				} else {
+					// 加
+					if (this.goods_info.is_quota == 1) {
+						if (this.fromData.number >= this.goods_info.quota_num) {
+							tools.error('限购'+ this.goods_info.quota_num + '张')
+							return
+						} else if (this.fromData.number >= 99) {
+							tools.error('购买数量已达最大值')
+							return
+						}
+					}
+					++this.fromData.number
+				}
+			},
+			setTimeData(timeData) {
+				let time = ''
+				let array = ''
+				timeData.forEach((v, k) => {
+					v.forEach((i, j) => {
+						let timeTwo = ''
+						if (j == 0 || j == 3) {
+							timeTwo = i + '-'
+						} else {
+							timeTwo = i
+						}
+						array = array + timeTwo
+					})
+					if (timeData.length === k + 1) {
+						time = time + array + ''
+					} else {
+						time = time + array + ' / '
+					}
+					array = ''
+				})
+				console.log(time);
+				return time
+			},
+			groupInfo() {
+				groupInfo({
+					id: this.fromData.id,
+					shop_id: this.fromData.shop_id
+				}).then((res) => {
+					if (res.code === 1) {
+						if (res.data.usable_time === 2) {
+							res.data.timeData = this.setTimeData(res.data.usable_time_arr)
+						}
+						this.goods_info = res.data
+					}
+				})
+			},
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.sc-class {
+		text-decoration: line-through
+	}
+
+	.goods-img {
+		width: 120rpx;
+		height: 120rpx;
+		border-radius: 20rpx;
+	}
+
+	.but {
+		width: 40%;
+		height: 80rpx;
+		line-height: 80rpx;
+	}
+
+	.w-150 {
+		width: 340rpx;
+	}
+
+	.j {
+		width: 40rpx;
+		height: 40rpx;
+	}
+
+	.input {
+		max-width: 50rpx;
+		margin: 0 10rpx;
+		text-align: center;
+	}
+</style>

+ 256 - 0
pages-buy/group-refund.vue

@@ -0,0 +1,256 @@
+<template>
+	<view class="flex-common-css iPhone-bottom box-border-box">
+		<Nav title="申请退款" leftIconColor="#333" titleColor="#333" bgckgroundBox='transparent'></Nav>
+		<scroll-view :scroll-y="true" class="scroll-view-css p-24 box-border-box" @scrolltolower="scrolltolower">
+			<view class="b-rad-20 bgc-f p-24 box-border-box">
+				<view class="align-items-center p-b-20 mb-20 b-b-F9F9F9">
+					<image :src="goods_info.goods_img" mode="scaleToFill" class="goods-img mr-24"></image>
+					<view class="fs-28 fc-3 fw-500">
+						{{goods_info.goods_name}}
+					</view>
+				</view>
+				<view class="align-items-center flex-justify-space p-b-20 mb-20 b-b-F9F9F9">
+					<view class="">
+						<view class="mb-8 fs-30 fc-3 fw-b">
+							退款数量
+						</view>
+						<view class="fs-24 fc-9">
+							最多可退 {{(Number(this.goods_info.goods_number) - Number(this.goods_info.finish_number))}} 张
+						</view>
+					</view>
+					<view class="align-items-center">
+						<image src="@/static/img/takeout/j.png" mode="" class="j" @click="setNum(1)"></image>
+						<input type="number" v-model="fromData.number" class="input" @blur='blur' />
+						<image src="@/static/img/takeout/add.png" mode="" class="j" @click="setNum(2)"></image>
+					</view>
+				</view>
+				<view class="p-b-20 mb-20 b-b-F9F9F9">
+					<view class="align-items-center flex-justify-space mb-8">
+						<view class="fs-30 fc-3 fw-b">
+							退款金额
+						</view>
+						<view class="fs-20 fw-600 fc-41ABF5">
+							¥<span
+								class="fs-34 fw-600 fc-41ABF5">{{(Number(goods_info.goods_price) * Number(fromData.number)).toFixed(2)}}</span>
+						</view>
+					</view>
+					<view class="fs-22 fc-9">
+						1-3 个工作日退还至原支付方,以实际退款金额为准
+					</view>
+				</view>
+				<view class="align-items-center flex-justify-space">
+					<view class="fs-30 fc-3 fw-b flex-shrink0">
+						退款原因
+					</view>
+					<view class="align-items-center flex-justify-end flex-1" @click="openPop">
+						<view class="fs-26 fc-3 mr-8">
+							{{refund_id != 0?fromData.refund_msg:'请选择'}}
+						</view>
+						<uni-icons type="right" size="13" color='#333'></uni-icons>
+					</view>
+				</view>
+			</view>
+		</scroll-view>
+		<view class="bgc-f p-24 box-border-box align-items-flex-end flex-justify-space">
+			<view class="fs-34 fw-600 fc-41ABF5">
+				<span class="fs-24 fc-41ABF5 fw-400 mr-12">退款金额</span>
+				<span class="fs-20 fw-600 fc-41ABF5">¥</span>
+				{{(Number(goods_info.goods_price) * Number(fromData.number)).toFixed(2)}}
+			</view>
+			<view class="but bgc-41ABF5 fc-f b-rad-200 text-align-center fs-34" @click="groupOrderRefund">
+				提交
+			</view>
+		</view>
+		<uni-popup ref="popup" type="bottom" border-radius="10px 10px 0 0" background-color='#fff'>
+			<view class="pop-box p-24 box-border-box">
+				<view class="fs-30 fc-3 fw-b mb-20 text-align-center">
+					退款原因
+				</view>
+				<uni-icons class="pop-gb" type="closeempty" size="20"></uni-icons>
+				<view class="scroll-view-css">
+					<view class="align-items-center flex-justify-space p-24 box-border-box"
+						v-for="(item,index) in refund_reason" :key="index" @click="popSelect(item.id,index)">
+						<view class="fs-30" :class="refund_id == item.id?'fc-41ABF5':'fc-3'">
+							{{item.refund_msg}}
+						</view>
+						<uni-icons color='#41ABF5' v-if="refund_id == item.id" type="checkbox-filled"
+							size="20"></uni-icons>
+						<uni-icons color='#333' v-else type="circle" size="20"></uni-icons>
+					</view>
+				</view>
+				<view class="align-items-center p-24 box-border-box">
+					<view class="pop-b flex-1 mr-16 text-align-center fs-30 fc-3 b-rad-200 bgc-E6E6E6" @click="popOn">
+						取消
+					</view>
+					<view class="pop-b flex-1 text-align-center fs-30 fc-f b-rad-200 bgc-41ABF5" @click="popOk">
+						确定
+					</view>
+				</view>
+			</view>
+		</uni-popup>
+	</view>
+</template>
+
+<script>
+	import {
+		groupOrderInfo,
+		groupOrderRefund
+	} from "@/api/groupOrder.js"
+	import {
+		commonRefundReason
+	} from "@/api/common.js"
+	import tools from "@/service/tools";
+	export default {
+		components: {},
+		data() {
+			return {
+				fromData: {
+					order_id: 0,
+					number: 1,
+					refund_msg: '请选择'
+				},
+				refund_id: 0,
+				refund_index: 0,
+				refund_reason: [],
+				goods_info: {},
+				is_ajax: false
+			};
+		},
+		onLoad(data) {
+			if (data) {
+				this.fromData.order_id = data.order_id
+				this.groupOrderInfo()
+				this.commonRefundReason()
+			}
+		},
+		mounted() {},
+		methods: {
+			groupOrderRefund() {
+				if (this.refund_id === 0 || this.fromData.refund_msg === '请选择') {
+					tools.error('请选择退款原因')
+					return
+				}
+				if (this.is_ajax) {
+					return
+				}
+				this.is_ajax = true
+				groupOrderRefund(this.fromData).then((res) => {
+					if (res.code === 1) {
+						tools.success(res.msg)
+						this.is_ajax = false
+						setTimeout(() => {
+							uni.$emit('groupRefund', this.fromData.order_id)
+							tools.leftClick()
+						}, 1000)
+					} else {
+						tools.error(res.msg)
+						this.is_ajax = false
+					}
+				})
+			},
+			popOk() {
+				this.$refs.popup.close()
+				this.fromData.refund_msg = this.refund_reason[this.refund_index].refund_msg
+			},
+			popSelect(id, index) {
+				this.refund_id = id
+				this.refund_index = index
+			},
+			commonRefundReason() {
+				commonRefundReason().then((res) => {
+					if (res.code === 1) {
+						this.refund_reason = res.data
+					}
+				})
+			},
+			openPop() {
+				this.$refs.popup.open()
+			},
+			popOn() {
+				this.$refs.popup.close()
+			},
+			blur() {
+				if (this.fromData.number >= (Number(this.goods_info.goods_number) - Number(this.goods_info
+						.finish_number))) {
+					tools.error('退款数量最大为' + (Number(this.goods_info.goods_number) - Number(this.goods_info.finish_number)))
+					this.fromData.number = (Number(this.goods_info.goods_number) - Number(this.goods_info.finish_number))
+				} else if (this.fromData.number <= 0) {
+					tools.error('退款数量最少为1')
+					this.fromData.number = 1
+				}
+			},
+			setNum(num) {
+				if (num === 1) {
+					// 减
+					if (this.fromData.number <= 1) {
+						tools.error('退款数量最少为1')
+						return
+					}
+					--this.fromData.number
+				} else {
+					// 加
+					if (this.fromData.number >= (Number(this.goods_info.goods_number) - Number(this.goods_info
+							.finish_number))) {
+						tools.error('退款数量已是最大值')
+						return
+					}
+					++this.fromData.number
+				}
+			},
+			scrolltolower() {
+				console.log('触底');
+			},
+			groupOrderInfo() {
+				groupOrderInfo({
+					order_id: this.fromData.order_id
+				}).then((res) => {
+					if (res.code === 1) {
+						this.goods_info = res.data
+					}
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.pop-b {
+		height: 60rpx;
+		line-height: 60rpx;
+	}
+
+	.pop-box {
+		max-height: 60vh;
+		border-radius: 20rpx 20rpx 0 0;
+		position: relative;
+	}
+
+	.pop-gb {
+		position: absolute;
+		right: 24rpx;
+		top: 24rpx;
+	}
+
+	.but {
+		width: 40%;
+		height: 80rpx;
+		line-height: 80rpx;
+	}
+
+	.goods-img {
+		width: 80rpx;
+		height: 80rpx;
+		border-radius: 20rpx;
+	}
+
+	.j {
+		width: 40rpx;
+		height: 40rpx;
+	}
+
+	.input {
+		max-width: 50rpx;
+		margin: 0 10rpx;
+		text-align: center;
+	}
+</style>

+ 553 - 0
pages-buy/group-shop.vue

@@ -0,0 +1,553 @@
+<template>
+	<view class="flex-common-css iPhone-bottom box-border-box group-shop-box">
+		<Nav :leftShow='false' :customNav='true' :bgckgroundBox='scrollTopNum>30?"#fff":"transparent"' class="nav-box">
+			<template>
+				<view slot="custom" class="align-items-center">
+					<view class="nav-left-box text-align-center" v-show="scrollTopNum<30" @click="leftClick">
+						<uni-icons color="#fff" type="left" size="15"></uni-icons>
+					</view>
+					<uni-icons @click="leftClick" class="mr-30" color="#000" type="left" size="15"
+						v-show="scrollTopNum>30"></uni-icons>
+					<view class="fs-34 fw-600 fc-3" v-show="scrollTopNum>30">
+						团购商家
+					</view>
+				</view>
+			</template>
+		</Nav>
+		<image :src="shopInfo.shop_logo" mode="scaleToFill" class="nav-img"
+			:class="scrollTopNum>30?'nav-img-false':'nav-img-true'"></image>
+		<scroll-view :scroll-y="true" class="scroll-view-box" @scroll='scroll' @scrolltolower="scrolltolower">
+			<view class="shop-box p-24 box-border-box">
+				<view class="bgc-f top-box box-border-box b-rad-20 mb-24">
+					<view class="display-flex p-b-20 b-b-eee mb-30">
+						<image :src="shopInfo.shop_logo" mode="aspectFill" class="shop_logo mr-24"></image>
+						<view class="flex-1 flex-direction">
+							<view class="display-flex flex-justify-space mb-30">
+								<view class="fs-38 fw-b fc-0 letter-spacing-6 ">
+									{{shopInfo.shop_name || ''}}
+								</view>
+								<image src="/pages-buy/static/dh.png" mode="" class="dh-img flex-shrink0"
+									@click="phoneBut(shopInfo.shop_phone)"></image>
+							</view>
+							<view class="align-items-center">
+								<view class="align-items-center flex-shrink0 fg-class">
+									<image class="dw-class mr-6" src="@/static/img/index/dw.png" mode=""></image>
+									<view class="fs-24 fc-0">
+										距离{{shopInfo.distance}}Km
+									</view>
+								</view>
+								<view class="fs-24">
+									营业时间:{{timeData}}
+								</view>
+							</view>
+						</view>
+					</view>
+					<view class="mb-30">
+						<!-- 						<view class="align-items-center mb-30">
+							<view class="fs-24">
+								营业时间:
+							</view>
+							<view class="fs-24 time-item" v-for="(item,index) in shopInfo.business_hours">
+								{{item[0]+'-'+item[1]}}
+							</view>
+						</view> -->
+						<view class="align-items-center flex-justify-space">
+							<view class="fs-24 fc-a mr-8">
+								{{shopInfo.city_name || ''}} {{shopInfo.address || ''}}
+							</view>
+							<image src="/pages-buy/static/fz.png" mode="" class="fz-icon"
+								@click="copy(shopInfo.city_name+shopInfo.address)"></image>
+						</view>
+					</view>
+					<scroll-view class="uni-margin-wrap mb-18" scroll-x="true" v-if="shopInfo.shop_album.length>0">
+						<image v-for="(item,index) in shopInfo.shop_album" :src="item" mode="aspectFill"
+							class="swiper-img mr-10" @click="lookImg(shopInfo.shop_album,index)"></image>
+					</scroll-view>
+				</view>
+
+				<view class="list-box bgc-f b-rad-16 box-border-box">
+					<image src="/pages-buy/static/bg.png" mode="" class="list-box-bg"></image>
+					<view class="align-items-center mb-40">
+						<view class="tg-box">
+							<view class=" fs-38 fw-b fc-0 z-2">
+								团购
+							</view>
+							<view class="title-hr"></view>
+						</view>
+						<view class="fc-F75820 fs-38 fw-b mr-20">
+							推荐
+						</view>
+						<view class="fs-24 fc-a">
+							限时团购尽情抢购!
+						</view>
+					</view>
+					<view v-if="shopList.length == 0" class="scroll-view-css">
+						<EnBlank :customSrc='true'>
+							<template v-slot:blankImg>
+								<image class="black-custom-img" src="@/static/img/common/no-order.png" mode=""></image>
+							</template>
+						</EnBlank>
+					</view>
+					<view class="item-box align-items-flex-start z-2" v-for="(item,index) in shopList" :key="index"
+						@click="goToUrl(item)">
+						<view class="shop-img-box mr-24">
+							<image :src="item.cover_img" mode="aspectFill" class="shop-img flex-shrink0"></image>
+							<view class="zk-box fs-20 fc-f text-align-center">
+								{{toFixedOne(item.price,item.line_price)}}折
+							</view>
+						</view>
+						<view class="flex-1">
+							<view class="fs-28 fw-b fc-0 text-overflow-ellipsis w-390 mb-22">
+								{{item.title}}
+							</view>
+							<view class="align-items-center flex-justify-space">
+								<view class="">
+									<view class="align-items-center mb-24">
+										<view class="align-items-center mr-12" v-show="item.usable_time === 1">
+											<view class="fc-9">
+												24小时可用
+											</view>
+											<view class="d-calss bgc-9 ml-10"></view>
+										</view>
+										<view class="align-items-center mr-12">
+											<view class="fc-9">
+												{{item.pre_book === 1?'免预约':'需预约'}}
+											</view>
+										</view>
+									</view>
+									<view class="align-items-flex-end">
+										<view class="fs-30 fw-600 fc-F93435 mr-8 flex-shrink0">
+											<span class="fs-24 fc-F93435 fw-b">¥</span>
+											{{item.price}}
+										</view>
+										<view class="fc-a fs-24 flex-shrink0 line-price">
+											¥{{item.line_price}}
+										</view>
+									</view>
+								</view>
+								<view class="qg-box flex-direction align-items-center" @click.stop="goTOPay(item)">
+									<view class="align-items-center mb-8">
+										<image src="/pages-buy/static/qg.png" mode="" class="sd-img mr-6"></image>
+										<view class="fs-28 fc-f fw-b">
+											抢购
+										</view>
+									</view>
+									<view class="fs-20 fc-f">
+										销量 {{item.sales}}+
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+				</view>
+			</view>
+			<view class="align-items-center flex-justify-center">
+				<view class="bottom-hr"></view>
+				<view class="fs-24 fc-a plr-12">
+					我也是有底线的
+				</view>
+				<view class="bottom-hr"></view>
+			</view>
+		</scroll-view>
+	</view>
+</template>
+
+<script>
+	import EnBlank from "@/components/en-utils/en-blank/en-blank";
+	import {
+		groupShopInfo,
+		groupList
+	} from '@/api/group.js'
+	import tools from '@/service/tools';
+	export default {
+		components: {
+			EnBlank
+		},
+		data() {
+			return {
+				scrollTopNum: 0, //当前滚动条高度
+				fromData: {
+					operate_id: '',
+					lat: '',
+					lon: '',
+					shop_id: ''
+				},
+				shopInfo: {
+					shop_album: []
+				},
+				timeData: '',
+				array: '',
+				shopList: []
+			};
+		},
+		onLoad(data) {
+			if (data) {
+				this.fromData.shop_id = data.shop_id
+				this.groupShopInfo()
+				this.groupList()
+			}
+		},
+		mounted() {},
+		methods: {
+			toFixedOne(price, line_price) {
+				 let num = (Number(price) / Number(line_price) * 10).toFixed(1)
+				// 转换为字符串,以便进行操作
+				var numStr = num.toString();
+				// 检查是否有小数部分
+				if (numStr.indexOf('.') !== -1) {
+					// 有小数部分,则移除多余的零
+					numStr = numStr.replace(/0+$/, '').replace(/\.$/, '');
+				}
+				// 返回处理后的数字或整数
+				return parseFloat(numStr);
+			},
+			copy(value) {
+				uni.setClipboardData({
+					data: value,
+					success() {
+						tools.success('复制成功')
+					},
+					fail() {
+						tools.error("复制失败")
+					}
+				})
+			},
+			lookImg(list, index) {
+				tools.lookBigImg(index, list)
+			},
+			phoneBut(phone) {
+				uni.makePhoneCall({
+					phoneNumber: phone, // 电话号码
+					success: function() {
+						console.log('拨打电话成功');
+					},
+					fail: function() {
+						console.log('拨打电话失败');
+					}
+				});
+			},
+			goTOPay(item) {
+				uni.navigateTo({
+					url: '/pages-buy/group-pay?shop_id=' + item.shop_id + '&goods_id=' + item.id
+				});
+			},
+			goToUrl(item) {
+				uni.navigateTo({
+					url: '/pages-buy/group-goods-info?shop_id=' + item.shop_id + '&goods_id=' + item.id +
+						'&shop_name=' + this.shopInfo.shop_name
+				});
+			},
+			leftClick() {
+				tools.leftClick()
+			},
+			scroll(e) {
+				this.scrollTopNum = e.detail.scrollTop
+			},
+			scrolltolower() {
+				console.log('触底');
+
+			},
+			groupList() {
+				groupList({
+					shop_id: this.fromData.shop_id
+				}).then((res) => {
+					if (res.code === 1) {
+						this.shopList = res.data
+					}
+				})
+			},
+			groupShopInfo(fromData) {
+				this.fromData.operate_id = uni.getStorageSync('operate_id');
+				this.fromData.lon = uni.getStorageSync('lon');
+				this.fromData.lat = uni.getStorageSync('lat');
+				groupShopInfo(this.fromData).then((res) => {
+					if (res.code === 1) {
+						this.shopInfo = res.data
+						res.data.business_hours.forEach((v, k) => {
+							// let time =
+							v.forEach((i, j) => {
+								let time = ''
+								if (j == 0 || j == 3) {
+									time = i + '-'
+								} else {
+									time = i
+								}
+								this.array = this.array + time
+							})
+							if (res.data.business_hours.length === k + 1) {
+								this.timeData = this.timeData + this.array
+							} else {
+								this.timeData = this.timeData + this.array + ','
+							}
+							this.array = ''
+						})
+					}
+				})
+			}
+		},
+	}
+</script>
+
+<style lang="scss" scoped>
+	.fg-class {
+		padding-right: 15rpx;
+		margin-right: 15rpx;
+		border-right: .5rpx solid #DEDEDE;
+	}
+
+	.time-item {
+		margin-right: 15rpx;
+		padding-right: 15rpx;
+		border-right: .5rpx solid #EEEEEE;
+	}
+
+	.time-item:last-child {
+		margin-right: 0;
+		padding: 0;
+		border-right: none;
+	}
+
+	.qg-box {
+		width: 130rpx;
+		height: 80rpx;
+		background: linear-gradient(-90deg, #FF7D2D, #F54F1D);
+		box-shadow: 0rpx 3rpx 8rpx 0rpx rgba(246, 83, 30, 0.32);
+		border-radius: 20rpx;
+		padding-top: 14rpx;
+	}
+
+	.tg-box {
+		position: relative;
+	}
+
+	.title-hr {
+		width: 72rpx;
+		height: 10rpx;
+		border-radius: 5rpx;
+		background: linear-gradient(to right, #F75820, #FEEEE8);
+		position: absolute;
+		bottom: 2rpx;
+		left: 0;
+		z-index: 1;
+	}
+
+	.z-2 {
+		position: relative;
+		z-index: 2;
+	}
+
+	.list-box {
+		padding: 36rpx 25rpx 0;
+		position: relative;
+	}
+
+	.list-box-bg {
+		width: 633rpx;
+		height: 189rpx;
+		position: absolute;
+		right: 0;
+		top: 0;
+	}
+
+	.dw-class {
+		width: 16rpx;
+		height: 17rpx;
+	}
+
+	.dh-img {
+		width: 48rpx;
+		height: 48rpx;
+	}
+
+	.top-box {
+		padding: 33rpx 20rpx 15rpx;
+	}
+
+	.group-shop-box {
+		position: relative;
+		background: transparent;
+	}
+
+	.fz-icon {
+		width: 20rpx;
+		height: 20rpx;
+	}
+
+	.shop_logo {
+		width: 140rpx;
+		height: 140rpx;
+		border-radius: 20rpx;
+	}
+
+	.item-box {
+		padding-bottom: 39rpx;
+		border-bottom: .5rpx solid #EDEEF2;
+		margin-bottom: 39rpx;
+	}
+
+	.item-box:last-child {
+		margin-bottom: 0;
+	}
+
+	.item-but {
+		background: #57CAFF;
+		border-radius: 40rpx;
+		padding: 15rpx 30rpx;
+		box-sizing: border-box;
+	}
+
+	.line-price {
+		text-decoration: line-through;
+	}
+
+	.discount-box {
+		padding: 0rpx 6rpx;
+		border: 1rpx solid #ff3939;
+		border-radius: 6rpx;
+		box-sizing: border-box;
+	}
+
+	.d-calss {
+		width: 5rpx;
+		height: 5rpx;
+		border-radius: 50%;
+	}
+
+	.w-390 {
+		width: 390rpx;
+	}
+
+	.shop-img-box {
+		width: 220rpx;
+		height: 150rpx;
+		border-radius: 10rpx;
+		position: relative;
+	}
+
+	.shop-img {
+		width: 220rpx;
+		height: 150rpx;
+		border-radius: 10rpx;
+	}
+
+	.zk-box {
+		width: 70rpx;
+		height: 28rpx;
+		line-height: 28rpx;
+		background: linear-gradient(-90deg, #FF7D2D, #F54F1D);
+		position: absolute;
+		left: -3rpx;
+		top: -4rpx;
+		border-radius: 20rpx 0 20rpx 0;
+	}
+
+	.hr {
+		width: 5rpx;
+		height: 32rpx;
+		border-radius: 10rpx;
+		background: #333;
+	}
+
+	.dw {
+		width: 20rpx;
+		height: 20rpx;
+	}
+
+	.phone {
+		width: 35rpx;
+		height: 35rpx;
+	}
+
+	.scroll-view-box {
+		width: 100%;
+		height: 100vh;
+		// position: fixed;
+		overflow: auto;
+	}
+
+	.nav-box {
+		transition: all 0.3s ease-in-out;
+	}
+
+	.nav-img {
+		width: 100%;
+		height: 422rpx;
+		position: fixed;
+		left: 0;
+		top: 0;
+		border-radius: 0 0 200rpx 200rpx;
+		transition: all 0.3s ease-in-out;
+	}
+
+	.nav-img-true {
+		opacity: 1;
+	}
+
+	.nav-img-false {
+		opacity: 0;
+	}
+
+	.uni-margin-wrap {
+		width: 100%;
+		border-radius: 20rpx;
+		white-space: nowrap;
+		// position: absolute;
+		// left: 0;
+		// top: 0;
+	}
+
+	.swiper {
+		height: 200rpx;
+		border-radius: 20rpx;
+	}
+
+	.swiper-img {
+		width: 33.4%;
+		height: 190rpx;
+		display: inline-block;
+	}
+
+	.swiper-img:first-child {
+		border-radius: 20rpx 0 0 20rpx;
+	}
+
+	.swiper-img:last-child {
+		border-radius: 0 20rpx 20rpx 0;
+	}
+
+	.swiper-item {
+		display: block;
+		height: 200rpx;
+		line-height: 200rpx;
+		text-align: center;
+		border-radius: 20rpx;
+	}
+
+	.nav-left-box {
+		width: 50rpx;
+		height: 50rpx;
+		line-height: 50rpx;
+		background: #9A9A9A;
+		border-radius: 18rpx;
+	}
+
+	.shop-box {
+		width: 100%;
+		// height: 100vh;
+		position: relative;
+		top: -10rpx;
+		border-radius: 15rpx 15rpx 0 0;
+		// background: #F6F6F6;
+	}
+
+	.sd-img {
+		width: 15rpx;
+		height: 28rpx;
+	}
+
+	.bottom-hr {
+		width: 61rpx;
+		height: 1rpx;
+		background: #D4D4D4;
+	}
+</style>

+ 486 - 151
pages-buy/group.vue

@@ -1,40 +1,95 @@
 <template>
 	<view class="group-box iPhone-bottom box-border-box flex-common-css">
-		<Nav title='团购专区'></Nav>
-		<scroll-view :scroll-y="true" class="scroll-view-css">
-			<image class="head-img" src="@/static/img/buy/group-bg.png" mode="scaleToFill"></image>
-			<view class="box-border-box content-b">
-				<view class="box-card box-border-box mb-20" v-for="(item,i) in list" :key="i" @click="todet(item)">
-					<image class="goods-img mb-16" :src="item.cover_img" mode="aspectFill"></image>
-					<view class="text-overflow-ellipsis fs-32 fw-600 mb-20 w-100100">
-						{{item.title}}
+		<Nav class="nav-b" title='团购专区' bgckgroundBox='transparent' leftColor='#fff' titleColor='#fff'></Nav>
+		<image class="group-bg" src="@/static/img/group/bg.png" mode=""></image>
+		<scroll-view :scroll-y="true" class="scroll-view-box" @scroll='scroll' @scrolltolower="scrolltolower"
+			:scroll-top='scroll_top' :scroll-with-animation="false">
+			<view class="">
+				<view class="box-border-box p-12-24 search-box">
+					<view class="head-search align-items-center">
+						<!-- <uni-icons class="s-icon" type="search" size="19"></uni-icons> -->
+						<image class="wh-32" src="@/static/img/group/ss.png" mode=""></image>
+						<input class="input" v-model="fromData.search" type="text" placeholder="请输入搜索关键字"
+							placeholder-class="fs-24">
+						<view class="head-search-buttom text-align-center fs-28 fw-400 fc-f" @click="searchFun()">搜索
+						</view>
 					</view>
-					<view class="mb-40 flex-justify-space align-items-center">
-						<view class="jd-f">
-							<view class="jd-1"></view>
-							<view class="jd-2" :style="{width:setWidth(item.number,item.sales)+'rpx'}"></view>
+				</view>
+				<view class="p-12-30 box-border-box class-b">
+					<view class="class-bg-box">
+						<image class="class-bg" src="@/static/img/group/fl-bg.png" mode=""></image>
+						<view class="align-items-center box-border-box class-box-head">
+							<image class="qbfl mr-18" src="@/static/img/group/qbfl.png" mode=""></image>
+							<view class="fs-24 fc-FF5022 fw-400">
+								特价拼团尽您选择!
+							</view>
 						</view>
-						<view class="">
-							<span class="fs-24 fc-9">已团</span>
-							<span class="fs-24 ">{{item.sales}}件</span>
-							<span class="fs-24 fc-9">/剩</span>
-							<span class="fs-24 ">{{item.number - item.sales}}</span>
+						<view class="class-list-box box-border-box">
+							<view class="class-list align-items-center flex-wrap-wrap">
+								<view class="mr-30 mb-30" v-for="(item,i) in navList" :key="i"
+									@click="selectType(item.id)">
+									<image class="nav-img mb-18" :src="item.img" mode="scaleToFill"></image>
+									<view class="fs-24 fc-0 text-align-center">
+										{{item.name}}
+									</view>
+								</view>
+							</view>
 						</view>
 					</view>
-
-					<view class="info-box display-flex">
-						<view class="flex-1">
-							<span class="fs-28 fc-FB3D03 fw-400">团购价¥</span>
-							<span class="fs-40 fc-FB3D03 fw-600">{{item.price}}</span>
+				</view>
+				<view class="p-12-24 box-border-box sift-box align-items-center flex-justify-center"
+					@touchmove.stop.prevent="stopScroll">
+					<view class="mr-20 sift-item align-items-center flex-justify-center"
+						@click="siftClick(1)">
+						<view class="align-items-center">
+							<view class="fs-28 fc-FCFBF8 mr-12">
+								{{siftDistance}}
+							</view>
+							<image class="bottom-icon" src="@/static/img/group/bottom.png" mode=""></image>
 						</view>
-						<view class="info-box-qiang">
-							<image class="qiang-img" src="@/static/img/buy/qiang.png" mode="scaleToFill"></image>
-							<view class="jiang-box fc-65420c fs-24 fw-600">直降</view>
-							<view class="jiang-box-1 fs-24 fc-65420c fw-600">¥{{item.line_price - item.price}}</view>
-							<image class="jiang-img" src="@/static/img/buy/x-jt.png" mode="scaleToFill"></image>
+					</view>
+					<view class="mr-12 sift-item align-items-center flex-justify-center "
+						@click="siftClick(2)">
+						<view class="align-items-center">
+							<view class="fs-28 fc-FCFBF8 mr-12">
+								{{siftSort}}
+							</view>
+							<image class="bottom-icon" src="@/static/img/group/bottom.png" mode=""></image>
+						</view>
+					</view>
+					<view class="pop-content" :style="[{'top': pop_top + 'px'}]"
+						:class="pop_type?'pop-box-true':'pop-box-false'" @click="gbPopType">
+						<view class="pop-select-box" @click.stop="noPopType">
+							<view class="select-box p-24 box-border-box">
+								<view class="distance-box" v-show="siftClassID === 1">
+									<view class="mb-16 fs-30 fc-3 fw-500">
+										我的附近
+									</view>
+									<view class="align-items-center flex-wrap-wrap">
+										<view class="distance-label text-align-center mb-12"
+											v-for="(item,index) in distance_label" :key="item.id"
+											:class="fromData.distance===item.id?'siftClass':'bgc-F5F5F6'"
+											@click="distanceClick(item)">
+											{{item.name}}
+										</view>
+									</view>
+								</view>
+								<view class="sort-box" v-show="siftClassID === 2">
+									<view class="sort-select-box text-align-left" v-for="(item,index) in sort_label"
+										:key="item.id" @click="sortSelectClick(item)"
+										:class="fromData.orderBy===item.id?'fc-41ABF5':''">
+										{{item.name}}
+									</view>
+								</view>
+							</view>
 						</view>
 					</view>
 				</view>
+				<view v-show="pop_type" :style="[{'top': pop_top + 'px'}]" class="pop-mask" @click="gbPopType"
+					@touchmove.stop.prevent="stopScroll"></view>
+				<view class="p-12-24 box-border-box">
+					<shopListVue ref="shopListRef"></shopListVue>
+				</view>
 			</view>
 		</scroll-view>
 	</view>
@@ -45,164 +100,444 @@
 		groupList
 	} from '@/api/groupOrder.js';
 	import tools from "@/service/tools";
-	import EnBlank from "@/components/en-utils/en-blank/en-blank";
+	import shopListVue from './group-mod/shop-list.vue';
+	import {
+		getGroup
+	} from "@/api/category.js"
 	export default {
 		components: {
-			EnBlank
+			shopListVue
 		},
 		data() {
 			return {
-				page: 1,
-				total: 0,
-				list: [],
-			}
-		},
-		onReachBottom() {
-			if (this.list.length < this.total) {
-				this.page += 1;
-				this.getList();
+				fromData: {
+					operate_id: '',
+					lat: '',
+					lon: '',
+					search: '',
+					category_id: 0,
+					distance: 0,
+					orderBy: 0,
+					page: 1
+				},
+				navList: [],
+				siftType: false, // 粘性状态
+				siftClassID: 0, // 粘性样式Id
+				scrollTopNum: 0, //当前滚动条高度
+				scroll_top: 0, //滚动条高度
+				pop_top: 0, // pop距头部距离
+				pop_type: false,
+				navListHeight: '', //头部模块高度
+				siftDistance: '附近', //距离筛选
+				siftSort: '默认排序', //排序筛选
+				distance_label: [{
+					name: '附近',
+					id: 0
+				}, {
+					name: '500m',
+					id: 0.5
+				}, {
+					name: '1km',
+					id: 1
+				}, {
+					name: '3km',
+					id: 3
+				}, {
+					name: '5km',
+					id: 5
+				}, {
+					name: '10km',
+					id: 10
+				}],
+				sort_label: [{
+					name: '默认排序',
+					id: 0
+				}, {
+					name: '距离优先',
+					id: 1
+				}, {
+					name: '销量优先',
+					id: 2
+				}]
 			}
 		},
 		onShow() {
-			this.page = 1;
-			this.list = [];
+			this.getGroup()
+			this.fromData.page = 1;
 			this.getList();
 		},
-		mounted() {},
+		onLoad() {},
+		mounted() {
+			setTimeout(()=> {
+				this.getHeight()
+			},500)
+		},
 		methods: {
-			getList() {
+			distanceClick(item) {
+				// 距离筛选
+				if (this.fromData.distance === item.id) {
+					this.gbPopType()
+				} else {
+					this.fromData.distance = item.id
+					this.siftDistance = item.name
+					this.fromData.page = 1;
+					this.getList()
+					this.gbPopType()
+				}
+			},
+			sortSelectClick(item) {
+				// 排序筛选
+				if (this.fromData.orderBy === item.id) {
+					this.gbPopType()
+				} else {
+					this.fromData.orderBy = item.id
+					this.siftSort = item.name
+					this.fromData.page = 1;
+					this.getList()
+					this.gbPopType()
+				}
+			},
+			selectType(num) {
+				if (this.fromData.category_id === num) {
+					return
+				}
+				this.fromData.category_id = num
+				this.fromData.page = 1;
+				this.getList()
+			},
+			noPopType() {},
+			stopScroll(event) {
+				// 阻止默认的滑动行为
+				event.preventDefault();
+			},
+			siftClick(num) {
+				this.scroll_top = this.scrollTopNum
+				if (this.scrollTopNum < this.navListHeight) {
+					this.$nextTick(function() {
+						this.scroll_top = this.navListHeight
+					});
+				}
+				if (this.pop_type && this.siftClassID === num) {
+					this.pop_type = false
+				} else {
+					setTimeout(() => {
+						this.siftClassID = num
+						this.pop_type = true
+					}, 200)
+				}
+			},
+			gbPopType() {
+				this.pop_type = !this.pop_type
+			},
+			scroll(e) {
+				this.scrollTopNum = e.detail.scrollTop
+				if (e.detail.scrollTop > (this.navListHeight - 1)) {
+					this.siftType = true
+				} else {
+					this.siftType = false
+				}
+			},
+			getHeight() {
+				this.$nextTick(() => {
+					let HThree = 0
+					const navH = uni.createSelectorQuery().in(this);
+					navH.select('.search-box').boundingClientRect(data => {
+						if (data) {
+							// data.height 就是元素的高度
+							HThree = data.height
+							console.log(HThree, '333333333');
+						}
+					}).exec();
+					const query = uni.createSelectorQuery().in(this);
+					query.select('.class-b').boundingClientRect(data => {
+						if (data) {
+							// data.height 就是元素的高度
+							console.log(Number(data.height),Number(HThree),'**********************');
+							this.navListHeight = Number(data.height) + Number(HThree)
+						}
+					}).exec()
+					let Hone = 0
+					uni.getSystemInfo({
+						success: (e) => {
+							let statusBarH = e.statusBarHeight + 10
+							let custom = 0;
+							custom = wx.getMenuButtonBoundingClientRect()
+							let customBarH = custom.height;
+							Hone = statusBarH + customBarH;
+						}
+					})
+					let HTwo = 0
+					const navT = uni.createSelectorQuery().in(this);
+					navT.select('.sift-box').boundingClientRect(data => {
+						if (data) {
+							// data.height 就是元素的高度
+							HTwo = data.height
+							console.log(HTwo, '222222222');
+						}
+					}).exec();
+					setTimeout(() => {
+						this.pop_top = Number(Hone) + Number(HTwo)
+						console.log(this.pop_top, '-----------');
+					}, 500)
+				})
+			},
+			scrolltolower(e) {
+				++this.fromData.page
+				this.getList()
+			},
+			getGroup() {
+				let operate_id = uni.getStorageSync('operate_id');
 				let school_id = uni.getStorageSync('school_id');
-				groupList({
-					school_id: school_id,
-					page: this.page
+				getGroup({
+					operate_id: operate_id,
+					school_id: school_id
 				}).then((res) => {
 					if (res.code === 1) {
-						this.list = [...this.list, ...res.data.items];
-						this.total = res.data.total;
+						this.navList = [...res.data]
 					}
 				})
 			},
-
-			setWidth(total, num) {
-				let w = 0
-				let tH = 434;
-				w = (tH / total * num).toFixed(0)
-				console.log(w);
-				return w
-			},
-			todet(item) {
-				uni.navigateTo({
-					url: '/pages-buy/group-det?id=' + item.id
-				})
+			searchFun() {
+				if (this.fromData.search) {
+					this.fromData.page = 1;
+					this.getList()
+				} else {
+					tools.error("请输入搜索内容")
+				}
 			},
+			getList() {
+				this.fromData.operate_id = uni.getStorageSync('operate_id');
+				this.fromData.lon = uni.getStorageSync('lon');
+				this.fromData.lat = uni.getStorageSync('lat');
+				console.log(this.fromData);
+				this.$refs.shopListRef.groupShop(this.fromData)
+			}
 		},
 	}
 </script>
 
 <style scoped lang="scss">
-	.content-b {
-		padding: 0 24rpx 24rpx;
+	.bottom-icon{
+		width: 16rpx;
+		height: 10rpx;
+	}
+	.class-box-head {
+		position: relative;
+		// z-index: 2;
+		padding: 30rpx 27rpx 22rpx;
 	}
 
-	.jd-f {
+	.class-list-box {
+		padding: 0 20rpx;
+	}
+
+	.class-list {
 		position: relative;
-		width: 434rpx;
-		height: 18rpx;
-
-		.jd-1 {
-			position: absolute;
-			top: 0;
-			left: 0;
-			width: 434rpx;
-			height: 18rpx;
-			background: #FEE0E0;
-			border-radius: 200rpx 200rpx 200rpx 200rpx;
-			z-index: 10;
-		}
-
-		.jd-2 {
-			position: absolute;
-			top: 0;
-			left: 0;
-			height: 18rpx;
-			background: linear-gradient(90deg, #FF545D 0%, #FF4B84 100%);
-			// background-color: #FF2652;
-			border-radius: 200rpx 200rpx 200rpx 200rpx;
-			z-index: 12;
-		}
+		padding: 36rpx 8rpx 8rpx 38rpx;
+		border-radius: 20rpx;
+		box-sizing: border-box;
+		background: linear-gradient(to top, white, rgba(255, 255, 255, 0.65));
+	}
+
+	.qbfl {
+		width: 140rpx;
+		height: 28rpx;
 	}
 
+	.class-b {
+		width: 100%;
+		min-height: 510rpx;
+	}
 
-	.group-box {
-		background-color: #EF2864;
+	.class-bg-box {
+		width: 100%;
+		position: relative;
+	}
+
+	.class-bg {
+		width: 100%;
+		height: 471rpx;
+		position: absolute;
+		left: 0;
+		top: 0;
+	}
+
+	.group-bg {
+		width: 100%;
+		height: 188rpx;
+		position: absolute;
+		left: 0;
+		top: 0;
+	}
+
+	.distance-label {
+		width: 32%;
+		height: 60rpx;
+		line-height: 60rpx;
+		border-radius: 8rpx;
+		margin-right: 1%;
+	}
+
+	.sort-select-box {
+		width: 100%;
+		height: 40rpx;
+		line-height: 40rpx;
+		padding: 15rpx 0;
+	}
+
+	.pop-box-true {
+		// display: block;
+		// transition: all .3s inherit;
+		/* 定义过渡效果 */
+		height: 500rpx;
+		// height: 200rpx;
+		// min-height: 200rpx;
+		transition: height 0.3s ease-in-out;
+		// transform: translateY(0);
+	}
+
+	.pop-box-false {
+		// display: none;
+		height: 0px;
+		transition: height 0.3s ease-in-out;
+		// transform: translateY(-250px);
+	}
+
+	.pop-content {
+		width: 100%;
+		// height: 500rpx;
+		background: transparent;
+		position: fixed;
+		left: 0;
+		// top: var(--pop_top)px;
+		z-index: 10;
+		overflow: auto;
+		// transition: all .3s inherit;
+		/* 定义过渡效果 */
+		/* 初始平移状态 */
+	}
+
+	.pop-select-box {
+		position: relative;
+		z-index: 15;
+		background: #fff;
+		border-radius: 0 0 20rpx 20rpx;
+	}
+
+	.pop-mask {
+		width: 100%;
 		height: 100vh;
+		background: rgba(0, 0, 0, .5);
+		position: fixed;
+		left: 0;
+		z-index: 10;
+		// top: 0;
+	}
 
-		.head-img {
-			width: 100%;
-			height: 422rpx;
-		}
-
-		.box-card {
-			width: 100%;
-			min-height: 100rpx;
-			background: #FFFFFF;
-			padding: 16rpx;
-			box-shadow: 0rpx 0rpx 12rpx 0rpx rgba(51, 51, 51, 0.1);
-			border-radius: 20rpx;
-
-			.goods-img {
-				width: 100%;
-				height: 452rpx;
-				border-radius: 20rpx;
-				// margin-top: 24rpx;
-			}
+	.siftClass {
+		color: #41ABF5;
+		border: 1rpx solid #41ABF5;
+		background: #deeffb;
+		box-sizing: border-box;
+	}
 
-			.info-box {
-				width: 100%;
-				height: 72rpx;
-				background: #FEE0E0;
-				border-radius: 20rpx;
-				line-height: 72rpx;
-				padding-left: 14rpx;
-				box-sizing: border-box;
-
-				.info-box-qiang {
-					width: 148rpx;
-					height: 72rpx;
-					background: #F63E36;
-					border-radius: 0rpx 20rpx 20rpx 0rpx;
-					position: relative;
-
-					.qiang-img {
-						width: 60rpx;
-						height: 60rpx;
-						margin: 6rpx 22rpx 0 auto;
-					}
+	.h-200 {
+		width: 100%;
+		height: 200px;
+		margin-bottom: 20px;
+		background: rebeccapurple;
+	}
 
-					.jiang-box {
-						position: absolute;
-						top: -30rpx;
-						left: -22rpx;
-						z-index: 20;
-					}
+	.scroll-view-box {
+		overflow: auto;
+		position: relative;
+	}
 
-					.jiang-box-1 {
-						position: absolute;
-						top: 0rpx;
-						left: -30rpx;
-						z-index: 20;
-					}
+	.sift-box {
+		position: sticky;
+		top: 0;
+		left: 0;
+		z-index: 200;
+		overflow-x: scroll;
+		background: #FF3D19;
+	}
 
-					.jiang-img {
-						position: absolute;
-						width: 120rpx;
-						height: 90rpx;
-						left: -60rpx;
-						bottom: 0;
-						z-index: 11;
-					}
-				}
-			}
-		}
+	.sift-content-box {
+		width: 100%;
+		height: 300rpx;
+		position: absolute;
+		top: 74rpx;
+		left: 0;
+	}
+
+	.sift-item {
+		// min-width: 150rpx;
+		// max-width: 280rpx;
+		width: 50%;
+		height: 60rpx;
+		line-height: 60rpx;
+		// border-radius: 8rpx;
+		transition: all .5s ease;
+	}
+
+	.group-box {
+		background: #FF3D19;
+	}
+
+	.nav-list {
+		overflow-x: scroll;
+	}
+
+	.nav-item {
+		width: 96rpx;
+		height: 126rpx;
+		margin-right: 48rpx;
+	}
+
+	.nav-img {
+		width: 120rpx;
+		height: 120rpx;
+		border-radius: 50%;
+	}
+
+	.head-search {
+		width: 100%;
+		height: 80rpx;
+		position: relative;
+	}
+
+	.s-icon {
+		position: absolute;
+		left: 24rpx;
+		top: 20rpx;
+	}
+
+	.input {
+		width: 100%;
+		height: 72rpx;
+		background: #FFFFFF;
+		border-radius: 200rpx;
+		box-sizing: border-box;
+		padding: 0 130rpx 0 68rpx;
+		font-size: 32rpx;
+	}
+
+	.head-search-buttom {
+		width: 120rpx;
+		height: 60rpx;
+		background: linear-gradient(-90deg, #FF7D2D, #F54F1D);
+		border-radius: 30rpx;
+		line-height: 60rpx;
+		position: absolute;
+		right: 12rpx;
+		top: 10rpx;
+	}
+
+	.wh-32 {
+		position: absolute;
+		left: 31rpx;
+		top: 27rpx;
+		width: 26rpx;
+		height: 26rpx;
 	}
 </style>

+ 1 - 1
pages-buy/save-dry.vue

@@ -78,7 +78,7 @@
 		</view>
 
 		<view class="bottom-box box-border-box p-24">
-			<view class="flex-justify-space">
+			<view class="flex-justify-space but">
 				<view class="align-items-flex-end box-1">
 					<span class="fs-28 fc-f fw-600">¥</span>
 					<span class="fs-44 fc-f fw-600">{{total_price||'0'}}</span>

BIN
pages-buy/static/bg-2.png


BIN
pages-buy/static/bg.png


BIN
pages-buy/static/dh.png


BIN
pages-buy/static/fz.png


BIN
pages-buy/static/gmxz.png


BIN
pages-buy/static/ljtg.png


BIN
pages-buy/static/qg.png


BIN
pages-buy/static/right.png


BIN
pages-buy/static/xl.png


BIN
pages-buy/static/zk.png


+ 31 - 32
pages-buy/ticket.vue

@@ -157,6 +157,37 @@
 	}
 </style>
 <style scoped lang="scss">
+	.head-search {
+		width: 100%;
+		position: relative;
+	
+		.s-icon {
+			position: absolute;
+			left: 24rpx;
+			top: 20rpx;
+		}
+	
+		input {
+			width: 100%;
+			height: 72rpx;
+			background: #FFFFFF;
+			border-radius: 200rpx;
+			box-sizing: border-box;
+			padding: 0 130rpx 0 68rpx;
+			font-size: 32rpx;
+		}
+	
+		.head-search-buttom {
+			width: 120rpx;
+			height: 60rpx;
+			background: linear-gradient(90deg, #2CE6F8 0%, #41ABF5 100%);
+			border-radius: 200rpx;
+			line-height: 60rpx;
+			position: absolute;
+			right: 6rpx;
+			top: 6rpx;
+		}
+	}
 	.pw-imgage {
 		width: 85rpx;
 		height: 45rpx;
@@ -211,38 +242,6 @@
 				z-index: -1;
 			}
 
-			.head-search {
-				width: 100%;
-				position: relative;
-
-				.s-icon {
-					position: absolute;
-					left: 24rpx;
-					top: 20rpx;
-				}
-
-				input {
-					width: 100%;
-					height: 72rpx;
-					background: #FFFFFF;
-					border-radius: 200rpx;
-					box-sizing: border-box;
-					padding: 0 130rpx 0 68rpx;
-					font-size: 32rpx;
-				}
-
-				.head-search-buttom {
-					width: 120rpx;
-					height: 60rpx;
-					background: linear-gradient(90deg, #2CE6F8 0%, #41ABF5 100%);
-					border-radius: 200rpx;
-					line-height: 60rpx;
-					position: absolute;
-					right: 6rpx;
-					top: 6rpx;
-				}
-			}
-
 			.nav-list {
 				overflow-x: scroll;
 				margin: 0 0 36rpx 0;

+ 119 - 67
pages-order/group-info.vue

@@ -12,9 +12,12 @@
 				</view>
 			</view>
 			<view class="mb-24">
-				<view class="fs-48 fc-3 fw-600">
+				<view class="fs-48 fc-3 fw-600 mb-16">
 					{{infoData.order_status_str}}
 				</view>
+				<view class="fs-30 fc-9">
+					请在{{infoData.end_time}}前到店消费
+				</view>
 			</view>
 			<view class="bgc-f b-rad-20 p-24 box-border-box">
 				<view class="p-b-20 mb-24 b-b-F9F9F9 fs-32 fc-3" v-show="infoData.order_status == 1">
@@ -38,6 +41,13 @@
 							再来一单
 						</view>
 					</view>
+					<view @click="goRefund" class="w-33 flex-direction align-items-center"
+						v-show="infoData.order_status == 2">
+						<image class="mb-4 icon" src="@/static/img/order/tk.png" mode=""></image>
+						<view class="fs-24 fc-3">
+							极速退款
+						</view>
+					</view>
 					<view class="w-33 flex-direction align-items-center">
 						<button class="item-box-button" open-type="contact" :bindcontact="handleContact"></button>
 						<image class="mb-4 icon" src="@/static/img/order/lxkf.png" mode=""></image>
@@ -50,13 +60,10 @@
 		</view>
 		<scroll-view :scroll-y="true" class="scroll-view-css p-24 box-border-box" @scrolltolower="scrolltolower">
 			<view class="bgc-f b-rad-20 p-24 box-border-box mb-20">
-				<!-- 				<view class="w-420 fc-3 fs-32 fw-600 text-overflow-ellipsis-one mb-24">
-					{{infoData.site_name}}
-				</view> -->
-				<view class="goods-box">
-					<view class="align-items-center flex-justify-space mb-20">
+				<view class="goods-box" @click="goGoodsInfo">
+					<view class="align-items-center mb-20">
 						<image class="goods-img mr-16 flex-shrink0" :src="infoData.goods_img" mode=""></image>
-						<view class="">
+						<view class="flex-1">
 							<view class="align-items-center flex-justify-space mb-2">
 								<view class="fs-28 fc-3 w-300 text-overflow-ellipsis-one mr-36">
 									{{infoData.goods_name}}
@@ -65,48 +72,27 @@
 									¥{{(Number(infoData.goods_price)*Number(infoData.goods_number)).toFixed(2)}}
 								</view>
 							</view>
-							<!-- 				<view class="mb-2 fs-24 fc-9">
-								{{item.goods_name}}
-							</view> -->
-							<view class="fs-24 fc-9">
-								x{{infoData.goods_number}}
+							<view class="align-items-center flex-justify-space">
+								<view class="fs-24 fc-9">
+									购买数量:{{infoData.goods_number}}
+								</view>
+								<view class="fs-24 fc-9">
+									使用数量:{{infoData.finish_number}}
+								</view>
+								<view class="fs-24 fc-9">
+									退款数量:{{infoData.refund_number}}
+								</view>
 							</view>
+
 						</view>
 					</view>
 				</view>
-				<!-- 				<view class="align-items-center flex-justify-space mb-24">
-					<view class="fs-28 fc-3">
-						打包费
-					</view>
-					<view class="fs-32 fc-3">
-						打包费
-					</view>
-				</view>
-				<view class="align-items-center flex-justify-space mb-24">
-					<view class="fs-28 fc-3">
-						配送费
-					</view>
-					<view class="fs-32 fc-3">
-						打包费
-					</view>
-				</view> -->
-				<!-- 				<view class="align-items-center flex-justify-space pb-36 b-b-F9F9F9 mb-22">
-					<view class="align-items-center">
-						<image class="mr-6 icon-right" src="@/static/img/order/yhq.png" mode=""></image>
-						<view class="fs-28 fc-3">
-							优惠券
-						</view>
-					</view>
-					<view class="fs-32 fc-FB3D03">
-						-¥{{infoData.coupon_money}}
-					</view>
-				</view> -->
 				<view class="align-items-center flex-justify-end">
 					<view class="fs-28 fc-9">
 						共{{infoData.goods_number}}件,
 					</view>
 					<view class="fs-28 fc-3">
-						定金
+						合计
 					</view>
 					<view class="fs-24 fw-600 fc-3">
 						¥
@@ -116,31 +102,34 @@
 					</view>
 				</view>
 			</view>
+			<view class="bgc-f b-rad-20 p-24 box-border-box mb-20 align-items-center flex-justify-space">
+				<view class="fs-32 fc-3 fw-600">
+					券码信息({{infoData.code_num}}张可用)
+				</view>
+				<view class="goBut text-align-center fs-26 b-r-ccc b-rad-200" @click="goCode" v-show="infoData.code_num != 0">
+					查看券码
+				</view>
+			</view>
 			<view class="bgc-f b-rad-20 p-24 box-border-box mb-20">
-				<view class="display-flex flex-justify-space mb-26">
-					<view class="fs-28 fc-9">
-						联系地址
+				<view class="align-items-center flex-justify-space mb-20">
+					<view class="text-overflow-ellipsis-one fs-32 fc-3 fw-600">
+						{{infoData.shop.shop_name}}
 					</view>
-					<view class="fs-28 fc-3 w-480 text-align-right">
-						{{infoData.address?infoData.address:'无'}}
+					<view class="align-items-center flex-shrink0" @click="contactShop(infoData.shop.shop_phone)">
+						<uni-icons type="phone-filled" size="15" class="mr-12"></uni-icons>
+						<view class="fs-24">
+							联系商家
+						</view>
 					</view>
 				</view>
-				<!-- 				<view class="display-flex flex-justify-space mb-26">
-					<view class="fs-28 fc-9">
-						配送时间
-					</view>
-					<view class="fs-28 fc-3 w-480 text-align-right">
-						预约配送
-					</view>
-				</view> -->
-				<!-- 				<view class="display-flex flex-justify-space pb-20 b-b-F9F9F9 mb-26" v-show="infoData.order_status == 3">
-					<view class="fs-28 fc-9">
-						骑手信息
-					</view>
-					<view class="fs-28 fc-3 w-480 text-align-right">
-						{{infoData.rider.rider_name}}{{infoData.rider.phone}}
-					</view>
-				</view> -->
+				<view class="fs-26 fc-9 mb-20">
+					营业时间:{{timeData}}
+				</view>
+				<view class="fs-26 fc-9">
+					店铺地址:{{infoData.shop.city_name}} {{infoData.shop.address}}
+				</view>
+			</view>
+			<view class="bgc-f b-rad-20 p-24 box-border-box mb-20">
 				<view class="display-flex flex-justify-space mb-26">
 					<view class="fs-28 fc-9">
 						订单编号
@@ -149,7 +138,8 @@
 						<view class="fs-28 fc-3 w-480 mr-8 text-align-right">
 							{{infoData.order_sn}}
 						</view>
-						<image class="icon-fz" src="@/static/img/order/fz.png" mode="" @click="copy(infoData.order_sn)"></image>
+						<image class="icon-fz" src="@/static/img/order/fz.png" mode="" @click="copy(infoData.order_sn)">
+						</image>
 					</view>
 				</view>
 				<view class="display-flex flex-justify-space mb-26">
@@ -183,11 +173,9 @@
 
 <script>
 	import {
-		groupOrderInfo
-	} from "@/api/groupOrder.js"
-	import {
+		groupOrderInfo,
 		groupPay
-	} from '@/api/groupOrder.js';
+	} from "@/api/groupOrder.js"
 	import tools from "@/service/tools";
 	export default {
 		components: {},
@@ -205,9 +193,16 @@
 					m: '',
 					s: '',
 				},
+				timeData: '',
 				isAJAX: false
 			};
 		},
+		onShow() {
+			uni.$on('groupRefund', (data) => {
+				console.log(data, '^^^^^^^^^^^^^^^^^^^^^^^^^');
+				this.groupOrderInfo(data)
+			})
+		},
 		onLoad(data) {
 			if (data) {
 				this.groupOrderInfo(data.orderId)
@@ -228,6 +223,57 @@
 			})
 		},
 		methods: {
+			goGoodsInfo() {
+				uni.navigateTo({
+					url: '/pages-buy/group-goods-info?shop_id=' + this.infoData.shop_id + '&goods_id=' + this.infoData.goods_id +
+						'&shop_name=' + this.infoData.shop.shop_name
+				});
+			},
+			goRefund() {
+				uni.navigateTo({
+					url: '/pages-buy/group-refund?order_id=' + this.infoData.id
+				})
+			},
+			goCode() {
+				uni.navigateTo({
+					url: '/pages-buy/group-code?order_id=' + this.infoData.id
+				})
+			},
+			contactShop(phone) {
+				uni.makePhoneCall({
+					phoneNumber: phone, // 电话号码
+					success: function() {
+						console.log('拨打电话成功');
+					},
+					fail: function() {
+						console.log('拨打电话失败');
+					}
+				});
+			},
+			setTimeData(timeData) {
+				let time = ''
+				let array = ''
+				console.log(timeData, '11111');
+				timeData.forEach((v, k) => {
+					v.forEach((i, j) => {
+						let timeTwo = ''
+						if (j == 0 || j == 3) {
+							timeTwo = i + '-'
+						} else {
+							timeTwo = i
+						}
+						array = array + timeTwo
+					})
+					if (timeData.length === k + 1) {
+						time = time + array + ''
+					} else {
+						time = time + array + ' / '
+					}
+					array = ''
+				})
+				console.log(time);
+				return time
+			},
 			copy(value) {
 				uni.setClipboardData({
 					data: value,
@@ -241,7 +287,7 @@
 			},
 			goToUrl() {
 				uni.navigateTo({
-					url: '/pages-buy/group'
+					url: '/pages-buy/group-shop?shop_id=' + this.infoData.shop_id
 				})
 			},
 			pay() {
@@ -288,6 +334,7 @@
 					order_id: id
 				}).then((res) => {
 					if (res.code == 1) {
+						this.timeData = this.setTimeData(res.data.shop.business_hours)
 						this.infoData = res.data
 						if (this.infoData.order_status == 1) {
 							let createDate = new Date(res.data.created_at); //格式化订单创建时候的时间
@@ -331,6 +378,11 @@
 </script>
 
 <style lang="scss" scoped>
+	.goBut {
+		padding: 10rpx 15rpx;
+		box-sizing: border-box;
+	}
+
 	.bg-img {
 		position: fixed;
 		left: 0;

+ 33 - 3
pages.json

@@ -109,16 +109,46 @@
 						"disableScroll": true
 					}
 				},
+				{
+					"path": "group-shop",
+					"style": {
+						"navigationBarTitleText": "团购商家"
+					}
+				},
+				{
+					"path": "group-goods-info",
+					"style": {
+						"navigationBarTitleText": "团购商品详情"
+					}
+				},
 				{
 					"path": "group-det",
 					"style": {
 						"navigationBarTitleText": "团购详情"
 					}
 				},
+				{
+					"path": "group-pay",
+					"style": {
+						"navigationBarTitleText": "团购支付订单"
+					}
+				},
+				{
+					"path": "group-refund",
+					"style": {
+						"navigationBarTitleText": "团购申请退款"
+					}
+				},
+				{
+					"path": "group-code",
+					"style": {
+						"navigationBarTitleText": "团购申请退款"
+					}
+				},
 				{
 					"path": "save-order",
 					"style": {
-						"navigationBarTitleText": "团购提交订单"
+						"navigationBarTitleText": "团购券码"
 					}
 				},
 				{
@@ -425,8 +455,8 @@
 		"current": 0,
 		"list": [{
 				"name": "列表调试",
-				"path": "pages-buy/group",
-				"query": ""
+				"path": "pages-buy/group-shop",
+				"query": "shop_id=23"
 			},
 			{
 				"name": "店铺详情",

+ 11 - 1
pages/order/index.vue

@@ -129,6 +129,11 @@
 							v-if="type == 5 && item.order_status == 2 || type == 5 && item.order_status == 4">
 							二维码
 						</view>
+						<view class="item-but but-class-two fs-28 mr-18" @click.stop="goCode(item)"
+							v-if="type == 3 && item.order_status == 2">
+							<!-- 代取 -->
+							查看券码
+						</view>
 						<view @click.stop="goToUrl('takeOut', item)" class="item-but but-class-one fs-28 mr-18"
 							v-if="type == 1 && item.order_status == 3 || type == 1 && item.order_status == 7 || type == 1 && item.order_status == 8 || type == 1 && item.order_status == 9 || type == 1 && item.order_status == 10">
 							<!-- 外卖 -->
@@ -314,6 +319,11 @@
 		},
 		mounted() {},
 		methods: {
+			goCode(item) {
+				uni.navigateTo({
+					url: '/pages-buy/group-code?order_id=' + item.id
+				})
+			},
 			openCode(item) {
 				this.onlyCode = item.only_code
 				let m_id = uni.getStorageSync('m_id');
@@ -351,7 +361,7 @@
 					})
 				} else if (type == 'group') {
 					uni.navigateTo({
-						url: '/pages-buy/group'
+						url: '/pages-buy/group-shop?shop_id=' + item.shop_id
 					})
 				} else if (type == 'ticket') {
 					uni.navigateTo({

+ 0 - 198
static/img/blank-box.svg

@@ -1,198 +0,0 @@
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="386" height="261.57" viewBox="0 0 386 261.57">
-  <defs>
-    <style>
-      .cls-1 {
-        fill: #fff;
-        stroke: #707070;
-        opacity: 0;
-      }
-
-      .cls-2 {
-        fill: url(#linear-gradient);
-      }
-
-      .cls-3 {
-        fill: url(#linear-gradient-2);
-      }
-
-      .cls-4 {
-        fill: url(#linear-gradient-4);
-      }
-
-      .cls-5 {
-        fill: #74b0f9;
-      }
-
-      .cls-6 {
-        fill: #77b2fa;
-      }
-
-      .cls-7 {
-        fill: url(#linear-gradient-6);
-      }
-
-      .cls-8 {
-        fill: url(#linear-gradient-7);
-      }
-
-      .cls-9 {
-        fill: url(#linear-gradient-8);
-      }
-
-      .cls-10 {
-        fill: url(#linear-gradient-9);
-      }
-
-      .cls-11 {
-        fill: #a9d1fe;
-      }
-
-      .cls-12 {
-        fill: url(#linear-gradient-10);
-      }
-
-      .cls-13, .cls-17 {
-        fill: none;
-      }
-
-      .cls-13 {
-        stroke: #c4deff;
-        stroke-linecap: round;
-        stroke-miterlimit: 10;
-        stroke-width: 2px;
-        stroke-dasharray: 6;
-      }
-
-      .cls-14 {
-        fill: #8bbbf8;
-      }
-
-      .cls-15 {
-        fill: #649fe7;
-      }
-
-      .cls-16 {
-        stroke: none;
-      }
-
-      .cls-18 {
-        filter: url(#路径_233);
-      }
-
-      .cls-19 {
-        filter: url(#路径_232);
-      }
-
-      .cls-20 {
-        filter: url(#路径_231);
-      }
-
-      .cls-21 {
-        filter: url(#路径_230);
-      }
-    </style>
-    <linearGradient id="linear-gradient" x1="0.5" x2="0.5" y2="0.872" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#add2ff"/>
-      <stop offset="1" stop-color="#a9cffd" stop-opacity="0"/>
-      <stop offset="1" stop-color="#bbd8fb" stop-opacity="0"/>
-    </linearGradient>
-    <linearGradient id="linear-gradient-2" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#c9e0fc"/>
-      <stop offset="1" stop-color="#f0f2f6" stop-opacity="0.745"/>
-    </linearGradient>
-    <linearGradient id="linear-gradient-4" x1="0.527" y1="0.081" x2="0.478" y2="1.073" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#cbe1fc"/>
-      <stop offset="1" stop-color="#f0f2f6"/>
-    </linearGradient>
-    <linearGradient id="linear-gradient-6" x1="1" y1="-0.149" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#7cb3f6"/>
-      <stop offset="1" stop-color="#5ba0f6"/>
-    </linearGradient>
-    <linearGradient id="linear-gradient-7" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#78b4fd"/>
-      <stop offset="1" stop-color="#519af4"/>
-    </linearGradient>
-    <linearGradient id="linear-gradient-8" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#9ec9fc"/>
-      <stop offset="1" stop-color="#77b2f9"/>
-    </linearGradient>
-    <filter id="路径_230" x="108.315" y="103.784" width="83.731" height="120.119" filterUnits="userSpaceOnUse">
-      <feOffset dy="3" input="SourceAlpha"/>
-      <feGaussianBlur stdDeviation="3" result="blur"/>
-      <feFlood flood-color="#bdd7f4"/>
-      <feComposite operator="in" in2="blur"/>
-      <feComposite in="SourceGraphic"/>
-    </filter>
-    <linearGradient id="linear-gradient-9" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#a5cdfe"/>
-      <stop offset="1" stop-color="#a5cdfe"/>
-    </linearGradient>
-    <filter id="路径_231" x="171.928" y="105.196" width="109.17" height="118.707" filterUnits="userSpaceOnUse">
-      <feOffset dy="3" input="SourceAlpha"/>
-      <feGaussianBlur stdDeviation="3" result="blur-2"/>
-      <feFlood flood-color="#bdd7f4"/>
-      <feComposite operator="in" in2="blur-2"/>
-      <feComposite in="SourceGraphic"/>
-    </filter>
-    <filter id="路径_232" x="173.046" y="105.196" width="118.721" height="83.025" filterUnits="userSpaceOnUse">
-      <feOffset dx="-1" dy="3" input="SourceAlpha"/>
-      <feGaussianBlur stdDeviation="3" result="blur-3"/>
-      <feFlood flood-color="#5fa3f3"/>
-      <feComposite operator="in" in2="blur-3"/>
-      <feComposite in="SourceGraphic"/>
-    </filter>
-    <linearGradient id="linear-gradient-10" x1="0.5" x2="0.5" y2="1" gradientUnits="objectBoundingBox">
-      <stop offset="0" stop-color="#aacfff"/>
-      <stop offset="1" stop-color="#96c5ff"/>
-    </linearGradient>
-    <filter id="路径_233" x="87.111" y="103.784" width="104.935" height="77.364" filterUnits="userSpaceOnUse">
-      <feOffset dy="3" input="SourceAlpha"/>
-      <feGaussianBlur stdDeviation="3" result="blur-4"/>
-      <feFlood flood-color="#5294e5"/>
-      <feComposite operator="in" in2="blur-4"/>
-      <feComposite in="SourceGraphic"/>
-    </filter>
-  </defs>
-  <g id="组_61318" data-name="组 61318" transform="translate(-182 -501.43)">
-    <g id="组_9256" data-name="组 9256" transform="translate(13 203)">
-      <g id="矩形_3883" data-name="矩形 3883" class="cls-1" transform="translate(169 320)">
-        <rect class="cls-16" width="386" height="240"/>
-        <rect class="cls-17" x="0.5" y="0.5" width="385" height="239"/>
-      </g>
-      <path id="减去_3" data-name="减去 3" class="cls-2" d="M7565.395-1364h-294a71.953,71.953,0,0,1,4.728-18.924,83.272,83.272,0,0,1,9.66-17.542,102.912,102.912,0,0,1,14.075-15.809A128.163,128.163,0,0,1,7317.83-1430c27.377-17.413,63.091-27,100.563-27s73.188,9.59,100.564,27a128.139,128.139,0,0,1,17.974,13.723,102.855,102.855,0,0,1,14.075,15.809,83.288,83.288,0,0,1,9.66,17.542,71.955,71.955,0,0,1,4.728,18.922Z" transform="translate(-7056.395 1920)"/>
-      <path id="联合_24" data-name="联合 24" class="cls-3" d="M7267.247-1416A13.246,13.246,0,0,1,7254-1429.246a13.246,13.246,0,0,1,13.247-13.245h2.014A16.116,16.116,0,0,1,7285.316-1457a16.116,16.116,0,0,1,16.057,14.509h1.38A13.246,13.246,0,0,1,7316-1429.246,13.246,13.246,0,0,1,7302.753-1416Z" transform="translate(-7020 1786)"/>
-      <path id="联合_25" data-name="联合 25" class="cls-3" d="M7266.4-1418.616a12.4,12.4,0,0,1-12.4-12.4,12.4,12.4,0,0,1,12.4-12.4h1.875A15.081,15.081,0,0,1,7283.3-1457a15.081,15.081,0,0,1,15.021,13.581h1.283a12.4,12.4,0,0,1,12.4,12.4,12.4,12.4,0,0,1-12.4,12.4Z" transform="translate(-6780.001 1855.309)"/>
-      <g id="组_9252" data-name="组 9252" transform="translate(2 6)">
-        <path id="路径_223" data-name="路径 223" class="cls-4" d="M211.8,1300.035a10.286,10.286,0,0,0,1.519-5.382,10.4,10.4,0,0,0-20.7-1.418H192.5a7.527,7.527,0,1,0,6.611,11.167,13.26,13.26,0,0,0,1.474.458,8.442,8.442,0,1,0,11.167-4.757Z" transform="translate(45.653 -807.197)"/>
-        <path id="路径_224" data-name="路径 224" class="cls-5" d="M203.157,1298.645a1.2,1.2,0,0,0-1.6.514l-1.429,2.781V1297.8a1.117,1.117,0,0,0-2.233,0v5.17l-1.977-1.977a.79.79,0,1,0-1.117,1.117l2.97,2.982a.6.6,0,0,0,.112.067V1323.5a1.117,1.117,0,1,0,2.233,0v-16.416l3.54-6.89a1.2,1.2,0,0,0-.5-1.552Z" transform="translate(46.771 -805.74)"/>
-      </g>
-      <g id="组_9253" data-name="组 9253" transform="translate(227.388 3)">
-        <path id="路径_223-2" data-name="路径 223" class="cls-4" d="M211.8,1300.035a10.286,10.286,0,0,0,1.519-5.382,10.4,10.4,0,0,0-20.7-1.418H192.5a7.527,7.527,0,1,0,6.611,11.167,13.26,13.26,0,0,0,1.474.458,8.442,8.442,0,1,0,11.167-4.757Z" transform="translate(45.653 -807.197)"/>
-        <path id="路径_224-2" data-name="路径 224" class="cls-6" d="M203.157,1298.645a1.2,1.2,0,0,0-1.6.514l-1.429,2.781V1297.8a1.117,1.117,0,0,0-2.233,0v5.17l-1.977-1.977a.79.79,0,1,0-1.117,1.117l2.97,2.982a.6.6,0,0,0,.112.067V1323.5a1.117,1.117,0,1,0,2.233,0v-16.416l3.54-6.89a1.2,1.2,0,0,0-.5-1.552Z" transform="translate(46.771 -805.74)"/>
-      </g>
-    </g>
-    <g id="组_9259" data-name="组 9259" transform="translate(15.875 -370.604)">
-      <path id="路径_228" data-name="路径 228" class="cls-7" d="M236.4,1259.961l71.032-18.021-7.419,46.99Z" transform="translate(49.158 -278.142)"/>
-      <path id="路径_229" data-name="路径 229" class="cls-8" d="M368.949,1261.373,282.36,1288.93l7.419-46.99Z" transform="translate(66.811 -278.142)"/>
-      <g class="cls-21" transform="matrix(1, 0, 0, 1, 166.13, 872.03)">
-        <path id="路径_230-2" data-name="路径 230" class="cls-9" d="M298.483,1357.078l2.118-73.149-63.613-28.969L234.87,1332Z" transform="translate(-117.56 -1145.18)"/>
-      </g>
-      <g class="cls-20" transform="matrix(1, 0, 0, 1, 166.13, 872.03)">
-        <path id="路径_231-2" data-name="路径 231" class="cls-10" d="M372,1330.541l-91.17,26.146,2.118-73.149,86.589-27.557Z" transform="translate(-99.9 -1144.78)"/>
-      </g>
-      <g class="cls-19" transform="matrix(1, 0, 0, 1, 166.13, 872.03)">
-        <path id="路径_232-2" data-name="路径 232" class="cls-11" d="M383.081,1287.427,291.55,1321l-9.19-37.467,86.589-27.557Z" transform="translate(-99.31 -1144.78)"/>
-      </g>
-      <g class="cls-18" transform="matrix(1, 0, 0, 1, 166.13, 872.03)">
-        <path id="路径_233-2" data-name="路径 233" class="cls-12" d="M280.519,1314.324l25.966-30.395-63.613-28.969-23.322,29.675Z" transform="translate(-123.44 -1145.18)"/>
-      </g>
-    </g>
-    <g id="组_9260" data-name="组 9260" transform="translate(34.754 -372)">
-      <path id="路径_7574" data-name="路径 7574" class="cls-13" d="M83.744,31.84s-23.622,20.76-12.3,27.3S95.074,38.1,59,51.23c-37.344,13.59-26.395,49.551-26.395,49.551" transform="translate(299.227 886.821)"/>
-      <g id="组_9257" data-name="组 9257" transform="matrix(0.848, -0.53, 0.53, 0.848, -421.584, 345.67)">
-        <path id="多边形_6" data-name="多边形 6" class="cls-14" d="M18.167,0,36.334,35.649H0Z" transform="translate(427.315 889.339) rotate(90)"/>
-        <path id="路径_7576" data-name="路径 7576" class="cls-15" d="M-7096.332,2115.121l34.155-11.9-29.676,19.017,2.659,4.965-12.738,5.395Z" transform="matrix(0.875, 0.485, -0.485, 0.875, 7623.655, 2491.219)"/>
-      </g>
-    </g>
-  </g>
-</svg>

BIN
static/img/blank/no-goods.png


BIN
static/img/buy/group-bg.png


BIN
static/img/buy/jlzj.png


BIN
static/img/buy/qiang.png


BIN
static/img/buy/tg-det-bg.png


BIN
static/img/buy/tgxq.png


BIN
static/img/buy/ticket-bg.png


BIN
static/img/buy/x-jt.png


BIN
static/img/common/edit.png


BIN
static/img/common/n-select.png


BIN
static/img/common/no-order.png


BIN
static/img/common/wx-zf.png


BIN
static/img/common/y-select.png


BIN
static/img/group/bg.png


BIN
static/img/group/bottom.png


BIN
static/img/group/fl-bg.png


BIN
static/img/group/jl.png


BIN
static/img/group/qbfl.png


BIN
static/img/group/ss.png


BIN
static/img/group/zkbg.png


BIN
static/img/index/bcdxc.png


BIN
static/img/index/dw.png


BIN
static/img/index/index-q.png


BIN
static/img/index/index-x.png


BIN
static/img/index/index-xsms.png


BIN
static/img/index/lqgd.png


BIN
static/img/index/pw.png


BIN
static/img/index/ss.png


BIN
static/img/index/tc-top.png


BIN
static/img/logo/logo.png


BIN
static/img/my/fx.png


BIN
static/img/my/gywm.png


BIN
static/img/my/hf.png


BIN
static/img/my/ht.png


BIN
static/img/my/lxkf.png


BIN
static/img/my/pen.png


BIN
static/img/my/qszp.png


BIN
static/img/my/sc.png


BIN
static/img/my/set-phone.png


BIN
static/img/my/swhz.png


BIN
static/img/my/sxnr.png


BIN
static/img/my/user-img.png


BIN
static/img/my/wdyhq.png


BIN
static/img/my/wtfk.png


BIN
static/img/my/wz-two.png


BIN
static/img/my/wz.png


BIN
static/img/my/yzm-icons.png


BIN
static/img/order/bg.png


BIN
static/img/order/bottom.png


BIN
static/img/order/fz.png


BIN
static/img/order/lxkf.png


BIN
static/img/order/lxsj.png


BIN
static/img/order/qxdd.png


BIN
static/img/order/qzf.png


BIN
static/img/order/tk.png


BIN
static/img/order/top.png


BIN
static/img/order/xgdd.png


BIN
static/img/order/yhq.png


BIN
static/img/order/zlyd.png


BIN
static/img/school/add.png


BIN
static/img/school/bg.png


BIN
static/img/school/fs.png


BIN
static/img/school/fx.png


BIN
static/img/school/icon.png


BIN
static/img/school/info.png


BIN
static/img/tabBar/business-highlight.png


BIN
static/img/tabBar/business.png


BIN
static/img/tabBar/home-highlight.png


BIN
static/img/tabBar/home.png


この差分においてかなりの量のファイルが変更されているため、一部のファイルを表示していません