From 8478015e961b93963e0a269d92c281d84da44f63 Mon Sep 17 00:00:00 2001
From: xuxueyang <xuxy@fengyuntec.com>
Date: 星期一, 09 九月 2024 23:47:09 +0800
Subject: [PATCH] update 会员信息、兑换商品等

---
 sub_pages/customer/self/member-center.vue                |  182 +++++++++
 sub_pages/customer/coupon/coupon-self.vue                |   38 +
 common/global.scss                                       |   18 +
 sub_pages/customer/self/history.vue                      |    2 
 pages/user/user-customer.scss                            |   32 
 sub_pages/customer/coupon/good-all.vue                   |    2 
 static/images/customer/coupon/coupon-bg-user.png         |    0 
 store/index.js                                           |   17 
 manifest.json                                            |    2 
 static/images/customer/coupon/member/member-level-bg.png |    0 
 sub_pages/customer/self/collect.vue                      |    2 
 sub_pages/customer/coupon/point-history.vue              |   77 ++++
 sub_pages/customer/shopping/confirm.vue                  |   98 +++++
 components/banner3d/banner3d.vue                         |  416 +++++++++++++++++++++++
 static/images/customer/coupon/member/icon-member-4.png   |    0 
 pages/order/order-detail.vue                             |   48 ++
 sub_pages/customer/coupon/good-self.vue                  |   84 ++++
 pages/user/supplier-user.vue                             |   22 
 18 files changed, 973 insertions(+), 67 deletions(-)

diff --git a/common/global.scss b/common/global.scss
index e7e7a07..8dd0225 100644
--- a/common/global.scss
+++ b/common/global.scss
@@ -238,6 +238,24 @@
 .component-stock-zero{
 	position: relative;
 }
+.component-status-zero{
+	position: absolute;
+	line-height: 100%;
+	// font-size: ;
+	left: -2rpx;
+	right: -2rpx;
+	top: -2rpx;
+	bottom: -2rpx;
+	font-size: 600;
+	content: '已下架';
+	color: #fff;
+	text-align: center;
+	padding-top: calc(50% - 20rpx);
+	background-color: #52525275;
+}
+.component-status-zero{
+	position: relative;
+}
 .component-popup_input{
 	margin: 0 auto;
 	margin-top: 160rpx;
diff --git a/components/banner3d/banner3d.vue b/components/banner3d/banner3d.vue
new file mode 100644
index 0000000..4e2b8df
--- /dev/null
+++ b/components/banner3d/banner3d.vue
@@ -0,0 +1,416 @@
+<template>
+	<div class="banner-container">
+		<swiper :style="{width: '100vw', height: '410rpx'}" :indicator-dots="swiperConfig.indicatorDots"
+			:indicator-color="swiperConfig.indicatorColor" :indicator-active-color="swiperConfig.indicatorActiveColor"
+			:autoplay="swiperConfig.autoplay" :interval="swiperConfig.interval" :duration="swiperConfig.duration"
+			:circular="swiperConfig.circular" :previous-margin="swiperConfig.previousMargin"
+			:next-margin="swiperConfig.nextMargin" @change="swiperChange" @animationfinish="animationfinish">
+			<swiper-item v-for="(item, i) in bannerList" :key="i">
+				<!-- 1.当前展示为第1项时,bannerList最后一项和第二项的justifyContent值分别为flex-end和flex-start,其余项值为center -->
+				<!-- 2.当前展示为最后一项时,bannerList倒数第2项和第1项的justifyContent值分别为flex-end和flex-start,其余项值为center -->
+				<!-- 3.当前展示为其他项(非第1和最后1项)时,bannerList当前项的前1项和后1项的justifyContent值分别为flex-end和flex-start,其余项值为center -->
+				<!-- 4.padding值也需要根据不同项设定不同值,但理同justifyContent -->
+				<div class="image-container" :style="{
+				  transform: curIndex===i?'scale(' + scaleX + ',' + scaleY + ')':'scale(1,1)',
+				  transitionDuration: '.3s',
+				  transitionTimingFunction: 'ease'
+				}" :class="[curIndex===0?((i===listLen-1)?'item-left':(i===1?'item-right':'item-center')):(curIndex===listLen-1?(i===0?'item-right':(i===listLen-2?'item-left':'item-center')):(i===curIndex-1?'item-left':(i===curIndex+1?'item-right':'item-center')))]">
+					<image :src="item.bg" class="slide-image" />
+					<image :src="item.picture" class="icon-image" :class="[`v${i+1}`]" mode="aspectFit"></image>
+					<view class="container" :class="[`v${i+1}`]">
+						<view class="title">{{bannerList[i].title}}</view>
+						<view class="line-component" v-if="bannerList[i].point">
+							<view class="line-bg">
+								<view class="tip"
+									:style="{'left':(bannerList[i].point.end&&(bannerList[i].point.current/bannerList[i].point.end)||0).toFixed(2)*100+'%'}">
+									{{bannerList[i].point.current || 0}}
+								</view>
+								<view class="tip-loc"
+									:style="{'left':(bannerList[i].point.end&&(bannerList[i].point.current/bannerList[i].point.end)||0).toFixed(2)*100+'%'}">
+								</view>
+							</view>
+
+							<view class="desc">
+								<span
+									v-if="bannerList[i].point.end">{{bannerList[i].point.current || 0}}/{{bannerList[i].point.end}},升级还需{{bannerList[i].point.end-bannerList[i].point.current}}成长值</span>
+								<span v-else>成长值:{{bannerList[i].point.current || 0}}</span>
+							</view>
+						</view>
+					</view>
+				</div>
+			</swiper-item>
+		</swiper>
+		<!-- 		<div class="desc-wrap" :class="[isDescAnimating?'hideAndShowDesc':'']">
+			<div class="title">{{bannerList[descIndex].title}}</div>
+			<div class="desc">{{bannerList[descIndex].description}}</div>
+		</div> -->
+	</div>
+</template>
+<script>
+	export default {
+		props: {
+			bannerList: {
+				type: Array,
+				default () {
+					return []
+				}
+			},
+			swiperConfig: {
+				type: Object,
+				default () {
+					return {
+						indicatorDots: true,
+						indicatorColor: 'rgba(255, 255, 255, .4)',
+						indicatorActiveColor: 'rgba(255, 255, 255, 1)',
+						autoplay: false,
+						interval: 3000,
+						duration: 300,
+						circular: true,
+						previousMargin: '58rpx',
+						nextMargin: '58rpx'
+					}
+				}
+			},
+			scaleX: {
+				type: String,
+				default: (634 / 550).toFixed(4)
+			},
+			scaleY: {
+				type: String,
+				default: (378 / 328).toFixed(4)
+			}
+		},
+		computed: {
+			listLen() {
+				return this.bannerList.length
+			}
+		},
+		data() {
+			return {
+				curIndex: 0,
+				descIndex: 0,
+				isDescAnimating: false
+			}
+		},
+		methods: {
+			swiperChange(e) {
+				const that = this
+				this.curIndex = e.mp.detail.current
+				this.isDescAnimating = true
+				let timer = setTimeout(function() {
+					that.descIndex = e.mp.detail.current
+					clearTimeout(timer)
+				}, 150)
+			},
+			animationfinish(e) {
+				this.isDescAnimating = false
+			},
+			// getBannerDetail(index) {
+			// 	uni.showLoading({
+			// 		title: '将前往详情页面',
+			// 		duration: 2000,
+			// 		mask: true
+			// 	})
+			// }
+		}
+	}
+</script>
+<style lang="scss" scoped>
+	.banner-container {
+		width: 100vw;
+		height: 454rpx;
+
+		.image-container {
+			box-sizing: border-box;
+			width: 100%;
+			height: 100%;
+			display: flex;
+			position: relative;
+
+			.slide-image {
+				width: 550rpx;
+				height: 328rpx;
+				z-index: 200;
+				position: relative;
+				z-index: 0;
+			}
+
+			.icon-image {
+				position: absolute;
+				right: 50rpx;
+				top: 26rpx;
+				z-index: 1;
+				background-size: 100% 100%;
+				width: 196rpx;
+				height: 254rpx;
+			}
+
+			.icon-image.v4 {
+				top: 10rpx;
+			}
+
+			.container {
+				position: absolute;
+				left: 90rpx;
+				right: 90rpx;
+				top: 90rpx;
+				bottom: 90rpx;
+				z-index: 1;
+
+				.title {
+					font-weight: 600;
+					font-size: 56rpx;
+					line-height: 80rpx;
+					text-align: left;
+					margin-top: 60rpx;
+					font-style: normal;
+				}
+
+				.line-component {
+					margin-top: 60rpx;
+
+					.desc {
+						font-size: 24rpx;
+						font-weight: 600;
+						font-size: 24rpx;
+						// color: #7D5809;
+						line-height: 34rpx;
+						text-align: left;
+						margin-top: 16rpx;
+					}
+
+					.line-bg {
+						width: 322rpx;
+						height: 12rpx;
+						// background: #A1B8CC;
+						border-radius: 6rpx;
+						position: relative;
+
+						.tip-loc {
+							width: 22rpx;
+							height: 12rpx;
+							// background: #D7E5F3;
+							border-radius: 6rpx;
+							position: absolute;
+							left: 0;
+							top: 0;
+							bottom: 0;
+							border-radius: 6rpx;
+						}
+
+						.tip {
+							min-width: 52rpx;
+							padding-left: 20rpx;
+							padding-right: 20rpx;
+							height: 28rpx;
+							font-size: 20rpx;
+
+							// background: #D7E5F3;
+							// color: #85A7E3;
+							line-height: 28rpx;
+							text-align: center;
+							font-style: normal;
+							position: absolute;
+							left: 0;
+							top: -40rpx;
+						}
+					}
+
+				}
+			}
+
+			.container.v1 {
+				.title {
+					color: #7CC662;
+				}
+
+				.line-component {
+					.desc {
+						color: #6DA05C;
+					}
+
+					.line-bg {
+						background: #AECD96;
+
+						.tip-loc {
+							background: #DEE9CF;
+						}
+
+						.tip {
+							background: #DEE9CF;
+							color: #6DA05C;
+						}
+					}
+				}
+			}
+
+			.container.v2 {
+				.title {
+					color: #7498E0;
+				}
+
+				.line-component {
+					.desc {
+						color: #809BB5;
+					}
+
+					.line-bg {
+						background: #A1B8CC;
+
+						.tip-loc {
+							background: #D7E5F3;
+						}
+
+						.tip {
+							background: #D7E5F3;
+							color: #809BB5;
+						}
+					}
+				}
+			}
+
+			.container.v3 {
+				.title {
+					color: #C47810;
+				}
+
+				.line-component {
+					.desc {
+						color: #7D5809;
+					}
+
+					.line-bg {
+						background: #D1B067;
+
+						.tip-loc {
+							background: #FFF0CE;
+						}
+
+						.tip {
+							background: #FFF0CE;
+							color: #7D5809;
+						}
+					}
+				}
+			}
+
+			.container.v4 {
+				.title {
+					color: #DD834E;
+				}
+
+				.line-component {
+					.desc {
+						color: #B66A2C;
+					}
+
+					.line-bg {
+						background: #D69975;
+
+						.tip-loc {
+							background: #FACAAE;
+						}
+
+						.tip {
+							background: #FACAAE;
+							color: #B66A2C;
+						}
+					}
+				}
+			}
+		}
+
+		.item-left {
+			justify-content: flex-end;
+			padding: 56rpx 26rpx 0 0;
+		}
+
+		.item-right {
+			justify-content: flex-start;
+			padding: 56rpx 0 0 26rpx;
+		}
+
+		.item-center {
+			justify-content: center;
+			padding: 56rpx 0 0 0;
+		}
+
+		.desc-wrap {
+			box-sizing: border-box;
+			width: 100%;
+			height: 98rpx;
+			padding: 24rpx 66rpx 0;
+
+			.title {
+				width: 100%;
+				height: 42rpx;
+				line-height: 42rpx;
+				color: #222222;
+				font-size: 30rpx;
+				font-family: 'PingFangTC-Regular';
+				font-weight: 600;
+				text-align: left;
+			}
+
+			.desc {
+				margin-top: 4rpx;
+				width: 100%;
+				height: 34rpx;
+				line-height: 34rpx;
+				color: #999999;
+				font-size: 24rpx;
+				font-family: 'PingFangTC-Regular';
+				text-align: left;
+			}
+		}
+
+		@keyframes descAnimation {
+			0% {
+				opacity: 1;
+			}
+
+			25% {
+				opacity: .5;
+			}
+
+			50% {
+				opacity: 0;
+			}
+
+			75% {
+				opacity: .5;
+			}
+
+			100% {
+				opacity: 1;
+			}
+		}
+
+		@-webkit-keyframes descAnimation {
+			0% {
+				opacity: 1;
+			}
+
+			25% {
+				opacity: .5;
+			}
+
+			50% {
+				opacity: 0;
+			}
+
+			75% {
+				opacity: .5;
+			}
+
+			100% {
+				opacity: 1;
+			}
+		}
+
+		.hideAndShowDesc {
+			animation: descAnimation .3s ease 1;
+			-webkit-animation: descAnimation .3s ease 1;
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/manifest.json b/manifest.json
index 782394c..2848179 100644
--- a/manifest.json
+++ b/manifest.json
@@ -49,7 +49,7 @@
     "quickapp" : {},
     /* 快应用特有相关 */
     "mp-weixin" : {
-        "appid" : "wx6d0ecc4e18710458",
+        "appid" : "wx1441324401626290",
         "setting" : {
             "urlCheck" : false,
             "es6" : true,
diff --git a/pages/order/order-detail.vue b/pages/order/order-detail.vue
index 4ff01fd..6018509 100644
--- a/pages/order/order-detail.vue
+++ b/pages/order/order-detail.vue
@@ -101,7 +101,12 @@
 				if (code === 0) {
 					this.dto = {
 						...this.dto,
-						...data
+						...data,
+						// pointGoodsList: [{
+						// 	name: '1',
+						// 	num: 1,
+						// 	description: 'descriptiondescriptiondescriptiondescriptiondescription'
+						// }]
 					}
 				}
 			},
@@ -223,7 +228,7 @@
 								id: this.id,
 							}
 						})
-						
+
 						this.$message.hideLoading()
 						if (code === 0) {
 							//微信接口
@@ -399,7 +404,7 @@
 					// this.showSales = false
 					// this.$forceUpdate()
 					// setTimeout(() => {
-						// uni.navigateBack()
+					// uni.navigateBack()
 					// }, 1200)
 				}
 			},
@@ -436,7 +441,8 @@
 			</view>
 		</view>
 		<view v-for="(item,index) of list" :key="index">
-			<view class="flower-info m-b-20 m-t-12 br-4" v-if="!showSales||showSales&&(submitForm.orderItemId == item.id)">
+			<view class="flower-info m-b-20 m-t-12 br-4"
+				v-if="!showSales||showSales&&(submitForm.orderItemId == item.id)">
 				<view class="supplier-name ">
 					<image class="icon-dp" src="/static/common/icon-dp.png"></image>
 					{{ item.supplierName || ''}}
@@ -494,6 +500,7 @@
 
 			</view>
 		</view>
+
 		<view class="info-container bg-white br-4" v-if="!showSales">
 			<view class="form-item">
 				<view class="label">订单编号:</view>
@@ -573,6 +580,39 @@
 			</view>
 
 		</view>
+		<view class="info-container bg-white br-4 m-t-12"
+			v-if="!showSales&& dto.pointGoodsList&& dto.pointGoodsList.length>0">
+			<view v-for="(item,j) of dto.pointGoodsList" :key="j" class="m-b-12">
+				<view class="flower-info  br-4">
+					<view class="flex flex-wrap-normal">
+						<image class="flower-img img100 br-4 m-r-6" :src="item.cover" @click="previewImg(item.cover)">
+						</image>
+						<view class="flex1">
+							<view class=" flex">
+								<view class="title">
+									{{ item.name || ''}}
+								</view>
+							</view>
+							<view class="each-list" style="display: contents;">
+								<view class="each-item">
+									<view class="label">数量</view>
+									<view class="value">{{ item.num || 0 }}</view>
+
+								</view>
+								<view class="each-item" style="min-width: unset;max-width: unset;">
+									<view class="label" style="min-width: 55rpx;">描述</view>
+									<view class="value" style="word-break: break-all;text-align: left;">{{ item.description || '-' }}
+									</view>
+								</view>
+							</view>
+						</view>
+					</view>
+
+				</view>
+			</view>
+
+
+		</view>
 
 		<view class="info-container bg-white br-4 m-t-12" v-if="!showSales">
 			<view class="icon-view">
diff --git a/pages/user/supplier-user.vue b/pages/user/supplier-user.vue
index 101383b..8e66cea 100644
--- a/pages/user/supplier-user.vue
+++ b/pages/user/supplier-user.vue
@@ -43,31 +43,31 @@
 						<!-- #ifdef PUB_CUSTOMER_DEV -->
 						<span class="member-level" @click="goto('/sub_pages/customer/self/member-center',true)"
 							v-if="currentInfo&&currentInfo.customerDTO&&currentInfo.customerDTO.userGrowthRecord">
-							<view v-if="currentInfo.customerDTO.userGrowthRecord.currentMemberLevel=='普通会员'">
-								<image class="member-icon v1"
+							<view v-if="currentInfo.customerDTO.userGrowthRecord.currentMemberLevel=='普通会员'" class="v1">
+								<image class="member-icon"
 									src="../../static/images/customer/coupon/member/icon-member-1.png"></image>
 								{{currentInfo.customerDTO.userGrowthRecord.currentMemberLevel}}
-								<uni-icons color="#79C57B" type="right" size="18"></uni-icons>
+								<uni-icons color="#7CC662" type="right" size="18"></uni-icons>
 
 							</view>
-							<view v-else-if="currentInfo.customerDTO.userGrowthRecord.currentMemberLevel=='银卡会员'">
+							<view v-else-if="currentInfo.customerDTO.userGrowthRecord.currentMemberLevel=='银卡会员'" class="v2">
 								<image class="member-icon v2"
 									src="../../static/images/customer/coupon/member/icon-member-2.png"></image>
 								{{currentInfo.customerDTO.userGrowthRecord.currentMemberLevel}}
-								<uni-icons color="#96B1E9" type="right" size="18"></uni-icons>
+								<uni-icons color="#7498E0" type="right" size="18"></uni-icons>
 
 							</view>
-							<view v-else-if="currentInfo.customerDTO.userGrowthRecord.currentMemberLevel=='金卡会员'">
+							<view v-else-if="currentInfo.customerDTO.userGrowthRecord.currentMemberLevel=='金卡会员'" class="v3">
 								<image class="member-icon v3"
 									src="../../static/images/customer/coupon/member/icon-member-3.png"></image>
 								{{currentInfo.customerDTO.userGrowthRecord.currentMemberLevel}}
-								<uni-icons color="#AD790F" type="right" size="18"></uni-icons>
+								<uni-icons color="#C47810" type="right" size="18"></uni-icons>
 							</view>
-							<view v-else>
+							<view v-else  class="v4">
 								<image class="member-icon v4"
-									src="../../static/images/customer/coupon/member/icon-member-3.png"></image>
+									src="../../static/images/customer/coupon/member/icon-member-4.png"></image>
 								{{currentInfo.customerDTO.userGrowthRecord.currentMemberLevel}}
-								<uni-icons color="#E4531C" type="right" size="18"></uni-icons>
+								<uni-icons color="#DD834E" type="right" size="18"></uni-icons>
 							</view>
 
 
@@ -109,7 +109,7 @@
 		</view>
 
 		<!-- #ifdef PUB_CUSTOMER_DEV -->
-		<view class="user-utils m-20 coupon-info-container" @click="goto( `/sub_pages/customer/coupon/good-all`,true)"
+		<view class="m-20 coupon-info-container" @click="goto( `/sub_pages/customer/coupon/good-all`,true)"
 			v-if="selftype==='customer'||!selftype">
 			<view>
 				<view class="title">积分商城</view>
diff --git a/pages/user/user-customer.scss b/pages/user/user-customer.scss
index a200cc4..d4fc338 100644
--- a/pages/user/user-customer.scss
+++ b/pages/user/user-customer.scss
@@ -1,7 +1,6 @@
 .member-level{
 	font-weight: 600;
 	font-size: 32rpx;
-	color: #A3EBCD;
 	line-height: 44rpx;
 	text-align: left;
 	font-style: normal;
@@ -11,33 +10,36 @@
 	
 	.member-icon{
 		display: inline-block;
-		vertical-align: bottom;
-		width: 48rpx;
-		height: 56rpx;
+		vertical-align: middle;
+		width: 57rpx;
+		height: 61rpx;
 		background-size: 100% 100%;
 	}
 }
-.member-level.v1{
-	color: #A3EBCD;
+.member-level .v1{
+	color: #7CC662;
 }
-.member-level.v2{
-	color: #96B1E9;
+.member-level .v2{
+	color: #7498E0;
 }
-.member-level.v3{
-	color: #AD790F;
+.member-level .v3{
+	color: #C47810;
 }
-.member-level.v4{
-	color: #E4531C;
+.member-level .v4{
+	color: #DD834E;
 }
 .coupon-info-container{
 	display: flex;
 	// width: 690rpx;
 	padding: 22rpx 36rpx;
 	// height: 134rpx;
-	background: linear-gradient( 180deg, #FBECC1 0%, #E6CE9E 100%);
+	// background: linear-gradient( 180deg, #FBECC1 0%, #E6CE9E 100%);
+	// background: unset !important;
 	border-radius: 8rpx;
-	border: 2rpx solid;
-	border-image: linear-gradient(180deg, rgba(238, 217, 173, 1), rgba(219, 182, 105, 1)) 2 2;
+	// border: 2rpx solid;
+	// border-image: linear-gradient(180deg, rgba(238, 217, 173, 1), rgba(219, 182, 105, 1)) 2 2;
+	background-image: url('../../static/images/customer/coupon/coupon-bg-user.png');
+	background-size: 100% 100%;
 	.title{
 		font-weight: 600;
 		font-size: 36rpx;
diff --git a/static/images/customer/coupon/coupon-bg-user.png b/static/images/customer/coupon/coupon-bg-user.png
new file mode 100644
index 0000000..7abf9f2
--- /dev/null
+++ b/static/images/customer/coupon/coupon-bg-user.png
Binary files differ
diff --git a/static/images/customer/coupon/member/icon-member-4.png b/static/images/customer/coupon/member/icon-member-4.png
new file mode 100644
index 0000000..261f533
--- /dev/null
+++ b/static/images/customer/coupon/member/icon-member-4.png
Binary files differ
diff --git a/static/images/customer/coupon/member/member-level-bg.png b/static/images/customer/coupon/member/member-level-bg.png
new file mode 100644
index 0000000..30c75d2
--- /dev/null
+++ b/static/images/customer/coupon/member/member-level-bg.png
Binary files differ
diff --git a/store/index.js b/store/index.js
index a97699e..74f075d 100644
--- a/store/index.js
+++ b/store/index.js
@@ -34,6 +34,10 @@
 			'shopnum': 0,
 			'coupon': 0
 		},
+		cache: {
+			coupon: {},
+			goods:[],
+		},
 		defaultaddress: {}
 	},
 	mutations: {
@@ -120,6 +124,19 @@
 			console.log('sign_clear', key)
 			state.sign[key] = 0
 		},
+		cache_coupon_select: async function({
+			commit,
+			state
+		}, dto) {
+			state.cache['coupon'] = dto || {}
+		},
+		cache_goods_select: async function({
+			commit,
+			state
+		}, goods) {
+			state.cache['goods'] = goods || []
+		},
+		
 		// lazy loading openid
 		logout: async function({
 			commit,
diff --git a/sub_pages/customer/coupon/coupon-self.vue b/sub_pages/customer/coupon/coupon-self.vue
index dacb1f9..fa6a535 100644
--- a/sub_pages/customer/coupon/coupon-self.vue
+++ b/sub_pages/customer/coupon/coupon-self.vue
@@ -1,6 +1,6 @@
 <template>
 	<view class="coupon-container">
-		<view class="p10">
+		<view class="p10" v-if="source!=='shopping'">
 			<top-tabs :tabs="tabs" :flg="flg" @change="changeTab" type="coupon">
 
 			</top-tabs>
@@ -8,7 +8,8 @@
 		<view class="">
 			<no-data v-if="!list||list.length==0" style="width: 100%;"></no-data>
 
-			<view v-for="(item,index) of list" :key="index" class="coupont-item" :class="[query.status]">
+			<view v-for="(item,index) of list" :key="index" class="coupont-item" :class="[query.status]"
+				@click="selectCoupon(item)">
 				<view class="flex container img100">
 					<view class="info-price">
 						<view class="price1">
@@ -31,8 +32,8 @@
 				</view>
 			</view>
 		</view>
-		<view style="min-height: 130rpx;"></view>
-		<view class="bottom-button" @click="getCoupon">领取优惠券</view>
+		<view style="min-height: 130rpx;" v-if="source!=='shopping'"></view>
+		<view class="bottom-button" v-if="source!=='shopping'" @click="getCoupon">领取优惠券</view>
 	</view>
 </template>
 
@@ -63,17 +64,38 @@
 				query: {
 					status: 'unused'
 				},
-				list: []
+				list: [],
+				source: ''
+
 			}
 		},
-		async onLoad() {
-			this.listApi = '/api/v2/coupon/app' + `/mine/${this.query.status}/list`
+		async onLoad(options) {
+			if (options.source) {
+				this.source = options.source || ''
+			}
+			if (this.source === 'shopping') {
+				//只展示可用的
+				this.page.size = 100
+				this.listApi = '/api/v2/coupon/app' + `/mine/unused/list`
+
+			} else {
+				this.listApi = '/api/v2/coupon/app' + `/mine/${this.query.status}/list`
+
+			}
 			await this.$store.dispatch('sign_clear', 'coupon')
 
 			this.getList()
 		},
-
+onReachBottom() {
+			this.getMore()
+		},
 		methods: {
+			async selectCoupon(item) {
+				if (this.source == 'shopping') {
+					await this.$store.dispatch('cache_coupon_select', item)
+					uni.navigateBack()
+				}
+			},
 			changeTab(flg) {
 				this.flg = '' + flg
 				this.query.status = this.tabs[flg].status
diff --git a/sub_pages/customer/coupon/good-all.vue b/sub_pages/customer/coupon/good-all.vue
index 68f60a7..31afb33 100644
--- a/sub_pages/customer/coupon/good-all.vue
+++ b/sub_pages/customer/coupon/good-all.vue
@@ -12,7 +12,7 @@
 			<view class="flex point-info">
 				<view class="point-record m-r-a">
 					<view class="text-center title">我的积分</view>
-					<view class="flex">
+					<view class="flex" @click="goto('/sub_pages/customer/coupon/point-history',true)">
 						<image src="../../../static/images/customer/coupon/icon-point.png" class="point-icon">
 						</image>
 						{{currentInfo.currentPoint || 0}}
diff --git a/sub_pages/customer/coupon/good-self.vue b/sub_pages/customer/coupon/good-self.vue
index 0813670..547ac56 100644
--- a/sub_pages/customer/coupon/good-self.vue
+++ b/sub_pages/customer/coupon/good-self.vue
@@ -1,6 +1,6 @@
 <template>
 	<view class="coupon-container">
-		<view class="p10">
+		<view class="p10" v-if="source!=='shopping'">
 			<top-tabs :tabs="tabs" :flg="flg" @change="changeTab" type="coupon">
 
 			</top-tabs>
@@ -20,23 +20,39 @@
 						<view class="time word-e">
 							{{item.description||''}}
 						</view>
-						<view class="button" @click="getPointGood(item)">
+						<view class="button" @click="getPointGood(item)" v-if="source!=='shopping'">
 							查看详情
+						</view>
+						<view class="button" @click="updateSelectGood(item)" v-if="source=='shopping'">
+							{{isIngood(item)?'移除':'添加'}}
 						</view>
 					</view>
 				</view>
-				<view class="tip">
+				<!-- 	<view class="tip">
 					<span class="t-red">*</span>此券每人限领1张。仅限用于花满芜鲜花交易平台鲜切花花款满额使用,不可与其他优惠同享、不可叠加使用
-				</view>
+				</view> -->
 			</view>
 		</view>
-		<!-- <view style="min-height: 130rpx;"></view> -->
+		<view style="min-height: 130rpx;" v-if="source=='shopping'"></view>
+		<view class="bottom-button" @click="backpage()" v-if="source=='shopping'">返回订单结算</view>
+
 		<!-- <view class="bottom-button" @click="toGoodAll">前往兑换</view> -->
 	</view>
 </template>
 
 <script>
+	import {
+		mapState
+	} from 'vuex'
 	export default {
+		computed: {
+			...mapState({
+				cache_goods: state => {
+					return state.cache.goods || []
+				},
+			}),
+		},
+
 		data() {
 			return {
 				flg: 0,
@@ -62,16 +78,68 @@
 				query: {
 					status: 'A'
 				},
-				list: []
+				list: [],
+				source: ''
+
 			}
 		},
-		async onLoad() {
-			this.listApi = '/api/customer/point/goods/exchange/list'
+		onReachBottom() {
+			this.getMore()
+		},
+		async onLoad(options) {
+			if (options.source) {
+				this.source = options.source || ''
+			}
+			if (this.source === 'shopping') {
+				//只展示可用的
+				this.page.size = 100
+				this.listApi = '/api/customer/point/goods/exchange/list'
+			} else {
+				this.listApi = '/api/customer/point/goods/exchange/list'
+			}
 
 			this.getList()
 		},
 
 		methods: {
+			isIngood(item) {
+				for (var tmp of this.cache_goods) {
+					if (tmp.id == item.id) {
+						return true
+					}
+				}
+
+				return false
+			},
+			async updateSelectGood(item) {
+				var has = false
+				for (var tmp of this.cache_goods) {
+					if (tmp.id == item.id) {
+						has = true
+						break
+					}
+				}
+				var arr = []
+
+				if (has) {
+					//移除
+					var arr = []
+					for (var tmp of this.cache_goods) {
+						if (tmp.id == item.id) {} else {
+							arr.push(tmp)
+						}
+					}
+				} else {
+					//添加
+					for (var tmp of this.cache_goods) {
+						arr.push(tmp)
+					}
+					arr.push(item)
+				}
+				await this.$store.dispatch('cache_coupon_select', arr)
+				this.$forceUpdate()
+
+			},
 			changeTab(flg) {
 				this.flg = '' + flg
 				this.query.status = this.tabs[flg].status
diff --git a/sub_pages/customer/coupon/point-history.vue b/sub_pages/customer/coupon/point-history.vue
index 8183fd0..92eaacf 100644
--- a/sub_pages/customer/coupon/point-history.vue
+++ b/sub_pages/customer/coupon/point-history.vue
@@ -1,6 +1,30 @@
 <template>
+	<!-- 列表页面 -->
 	<view>
-		
+		<view class="p15" style="min-height: calc(100vh - 260rpx);">
+			<no-data v-if="!list||list.length==0" style="width: 100%;"></no-data>
+			<view v-for="(item,index) in list" :key="index" class="m-b-24">
+				<view @click.stop="toDetail(item)" class="notice-item">
+					<view v-if="item.typeStr" class="type">{{item.typeStr||'-'}}</view>
+					<view class="time">{{item.recordDate || ''}}</view>
+					<view class="form-item">
+						<view class="form-item-label">变更类型</view>
+						<view class="form-item-value">{{item.changeTypeStr || ''}}</view>
+					</view>
+					<view class="form-item">
+						<view class="form-item-label">积分</view>
+						<view class="form-item-value">{{item.point || ''}}</view>
+					</view>
+					<view class="form-item">
+						<view class="form-item-label">备注</view>
+						<view class="form-item-value">{{item.remarks || ''}}</view>
+					</view>
+				</view>
+			</view>
+		</view>
+
+		<!-- 判断是否到底了,自动吧 -->
+		<footer-msg :more="page.total>0&&page.total>page.current*page.size"></footer-msg>
 	</view>
 </template>
 
@@ -8,15 +32,58 @@
 	export default {
 		data() {
 			return {
-				
+				query: {
+					// status: ''
+				}
 			}
 		},
+		onLoad() {
+
+
+			this.listApi = '/api/customer/point/list'
+
+			this.getList()
+
+		},
+		onReachBottom() {
+			this.getMore()
+		},
+		async onPullDownRefresh() {
+			this.page.current = 1
+			await this.getList()
+			uni.stopPullDownRefresh()
+		},
 		methods: {
-			
+
 		}
 	}
 </script>
 
-<style>
+<style lang="scss" scoped>
+	.notice-item {
+		padding: 20rpx;
+		font-size: 28rpx;
+		background-color: #fff;
 
-</style>
+		.type {
+			font-weight: 600;
+
+		}
+
+		.time {
+			font-size: 24rpx;
+			color: darkgray;
+		}
+
+		.form-item {
+			display: flex;
+
+			.form-item-label {}
+
+			.form-item-value {
+				flex: 1;
+				text-align: right;
+			}
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/sub_pages/customer/self/collect.vue b/sub_pages/customer/self/collect.vue
index 1e95be7..1c3c90d 100644
--- a/sub_pages/customer/self/collect.vue
+++ b/sub_pages/customer/self/collect.vue
@@ -234,7 +234,7 @@
 		<view class="trade-list-container">
 			<view class="trade-info-container flex" :class="[dto.status!=='UP'?'OFF':'']" v-for="(dto,index) of list"
 				:key="index">
-				<image class="img img100 br-4 m-r-10" :class="[!dto.stock?'component-stock-zero':'']"
+				<image class="img img100 br-4 m-r-10" :class="[!dto.stock?'component-stock-zero':'',dto.status!=='UP'?'component-status-zero':'']"
 					:src="dto.url||dto.cover" @click.stop="toDetail(dto)"></image>
 				<view class="flex1">
 					<view class="flex" @click.stop="toDetail(dto)">
diff --git a/sub_pages/customer/self/history.vue b/sub_pages/customer/self/history.vue
index 7026ddf..cd67edd 100644
--- a/sub_pages/customer/self/history.vue
+++ b/sub_pages/customer/self/history.vue
@@ -222,7 +222,7 @@
 		<view class="trade-list-container">
 			<view class="trade-info-container flex" :class="[dto.status!=='UP'?'OFF':'']" v-for="(dto,index) of list"
 				:key="index">
-				<image class="img img100 br-4 m-r-10" :class="[!dto.stock?'component-stock-zero':'']"
+				<image class="img img100 br-4 m-r-10" :class="[!dto.stock?'component-stock-zero':'',dto.status!=='UP'?'component-status-zero':'']"
 					:src="dto.url||dto.cover" @click.stop="toDetail(dto)"></image>
 				<view class="flex1">
 					<view class="flex" @click.stop="toDetail(dto)">
diff --git a/sub_pages/customer/self/member-center.vue b/sub_pages/customer/self/member-center.vue
index 8183fd0..20a7331 100644
--- a/sub_pages/customer/self/member-center.vue
+++ b/sub_pages/customer/self/member-center.vue
@@ -1,22 +1,184 @@
 <template>
-	<view>
-		
+	<view class="member-center">
+		<image src="../../../static/images/customer/coupon/member/member-level-bg.png" mode="aspectFit"
+			class="img100 member-level-image"></image>
+		<view class="banner">
+			<banner3d ref="banner3d" v-if="init" :banner-list="bannerList" :swiper-config="swiperConfig"></banner3d>
+		</view>
+		<view class="p20" style="padding-top: 0rpx;">
+			<view class="info bg-white p20">
+				<view class="flex">
+					<view>成长值规则</view>
+					<view class="m-l-a m-r-0 text-right desc-gray" @click="goto('/pages/help/content?id=会员协议',false)">点击查看会员协议
+					</view>
+				</view>
+
+			</view>
+			<view class="info bg-white p20 m-t-20"
+				v-if="currentInfo.customerDTO&&currentInfo.customerDTO.userGrowthRecord
+			&&currentInfo.customerDTO.userGrowthRecord.targetMemberInfos&&currentInfo.customerDTO.userGrowthRecord.targetMemberInfos.length>=1">
+				<view class="text-center desc-gray">
+					———————— 会员权益 ————————
+				</view>
+				<view>
+					<view class="m-t-12">积分达到
+						{{currentInfo.customerDTO.userGrowthRecord.targetMemberInfos[0].targetStartPoint || '-'}}</view>
+					<view class="m-t-12">优惠
+						{{currentInfo.customerDTO.userGrowthRecord.targetMemberInfos[0].targetDiscountAmount || '-'}}元/扎
+					</view>
+
+				</view>
+			</view>
+			<view class="info bg-white p20 m-t-20">
+				<view class="text-center desc-gray">
+					————— 成长值获取规则 —————
+				</view>
+				<view class="m-t-12">
+					每消费1元,即可获得1成长值。
+					成长值将在订单交易完成后,根据实际交易金额进行赠送。
+					消费越多,获得的成长值越多,享受更高等级的会员权益。
+					快来参与消费,累积成长值,解锁更多专属福利吧!
+				</view>
+			</view>
+		</view>
+	</view>
+
 	</view>
 </template>
 
 <script>
+	import banner3d from '@/components/banner3d/banner3d'
 	export default {
-		data() {
-			return {
-				
+		methods: {
+
+		},
+		onLoad() {
+			if (this.currentInfo.customerDTO && this.currentInfo.customerDTO.userGrowthRecord && this.currentInfo
+				.customerDTO.userGrowthRecord.currentMemberLevel) {
+				// userGrowthRecord: {currentMemberLevel: "普通会员", currentGrowthValue: 6919,…}
+				// currentGrowthValue: 6919
+				// currentMemberLevel: "普通会员"
+				// 	targetMemberInfos: [{targetMemberLevel: "金卡会员", targetStartPoint: 15001, targetGap: 8082, targetDiscountAmount: 0.4},…]
+				// 		0: {targetMemberLevel: "金卡会员", targetStartPoint: 15001, targetGap: 8082, targetDiscountAmount: 0.4}
+				// 		targetDiscountAmount: 0.4
+				// 		targetGap: 8082
+				// 		targetMemberLevel: "金卡会员"
+				// 		targetStartPoint: 15001
+				// 		1: {targetMemberLevel: "钻石会员", targetStartPoint: 10001, targetGap: 3082, targetDiscountAmount: 0.5}
+				// 		targetDiscountAmount: 0.5
+				// 		targetGap: 3082
+				// 		targetMemberLevel: "钻石会员"
+				// 		targetStartPoint: 10001
+				//计算下一个等级的差距
+				for (var tmp of this.bannerList) {
+					tmp.point = {
+						current: this.currentInfo.customerDTO.userGrowthRecord.currentGrowthValue || 0
+					}
+				}
+				if (this.currentInfo.customerDTO.userGrowthRecord.targetMemberInfos) {
+					var t = -1
+					for (var tmp of this.bannerList) {
+						t += 1
+						for (var k of this.currentInfo.customerDTO.userGrowthRecord.targetMemberInfos) {
+							if (tmp.title === k.targetMemberLevel) {
+								console.log('eq', k, tmp)
+								tmp.point = {
+									current: this.currentInfo.customerDTO.userGrowthRecord.currentGrowthValue || 0,
+									end: k.targetStartPoint || 0,
+								}
+							}
+						}
+					}
+				}
+
+				this.init = true
+				this.$nextTick(() => {
+					var name = this.currentInfo.customerDTO.userGrowthRecord.currentMemberLevel
+					var index = -1
+					for (var tmp of this.bannerList) {
+						index += 1
+						if (tmp.title === name) {
+							this.$refs.banner3d.swiperChange({
+								mp: {
+									detail: {
+										current: index
+									}
+								}
+							})
+							break
+						}
+					}
+				})
+
 			}
 		},
-		methods: {
-			
-		}
+		data() {
+			return {
+				init: false,
+				bannerList: [{
+					bg: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/d3/d31e9011d1c140068942c106c2f7e37bTFDUPzQRgaHx7a20dcefe1fb5eb12e18d294b8c1f86e.png',
+					picture: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/ef/ef96604518db467fbd344c08e48d1fac8jZdk1ED0Yq023d4f86c2ec36975c981ba522c2bfe3f.png',
+					title: '普通会员',
+					// description: '一万年太久,就现在,给你爱',
+					path: '',
+					point: undefined
+				}, {
+					bg: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/cf/cff11dd119174483a46858ace7ddc2a3lJlA3kEXom5H82b85fac5f2db00d50ece7e650207f78.png',
+					picture: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/07/075db9222f7a41e981c5b263d7210ed5Ztljs5yDHKILd37c3399011f84f401b755477bb8a323.png',
+					title: '银卡会员',
+					// description: '花中樱,鱼乃鲷花中樱,鱼乃鲷',
+					path: ''
+				}, {
+					bg: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/5b/5b9bcdeb29ab4ab7a7a7871e430e9180kwtx0q4ovEGpe93cd3cc7772e4b31a6cfea199663815.png',
+					picture: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/f1/f192b651606045ddba5c5f04a34a00c2R8MmH6mVsprH81cab47fbe889222f6088f4ca2cf20d5.png',
+					title: '金卡会员',
+					// description: '取材自湘西苗族传统的烟熏文化',
+					path: ''
+				}, {
+					bg: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/ce/ce13a8fe5d7d48aeb6e6dec8217d8cbeWia6N8vcYrbse93cd3cc7772e4b31a6cfea199663815.png',
+					picture: 'https://hmy-flower.oss-cn-shanghai.aliyuncs.com/c9/c94d8f444af94b899d1e1593cebb933eDyZyhyoyDxTRaf60a4d692f097e5d790cdb88fae9d0c.png',
+					title: '钻石会员',
+					// description: '在自己的小世界里,日日好日,夜夜好清宵',
+					path: ''
+				}],
+				swiperConfig: {
+					indicatorDots: true,
+					indicatorColor: 'rgba(255, 255, 255, .4)',
+					indicatorActiveColor: 'rgba(255, 255, 255, 1)',
+					autoplay: false,
+					interval: 3000,
+					duration: 300,
+					circular: true,
+					previousMargin: '58rpx',
+					nextMargin: '58rpx'
+				}
+			}
+		},
+		components: {
+			banner3d
+		},
+
 	}
 </script>
 
-<style>
+<style lang="scss" scoped>
+	.member-center {
+		position: relative;
 
-</style>
+		.banner {
+			position: relative;
+			z-index: 10;
+			padding-top: 160rpx;
+		}
+
+		.member-level-image {
+			width: 750rpx;
+			min-height: 530rpx;
+			position: absolute;
+			left: 0;
+			right: 0;
+			top: 0;
+			z-index: 1;
+		}
+	}
+</style>
\ No newline at end of file
diff --git a/sub_pages/customer/shopping/confirm.vue b/sub_pages/customer/shopping/confirm.vue
index f691c38..c88048e 100644
--- a/sub_pages/customer/shopping/confirm.vue
+++ b/sub_pages/customer/shopping/confirm.vue
@@ -11,11 +11,55 @@
 				address: state => {
 					return state.defaultaddress || {}
 				},
+				cache_coupon: state => {
+					return state.cache.coupon || {}
+				},
+				cache_goods: state => {
+					return state.cache.goods || []
+				},
 			}),
+			coupon_fee() {
+				//优惠券
+				if (this.dto.couponRecordId && this.cache_coupon) {
+					//计算优惠券
+					if (this.cache_coupon.couponDiscountType === 'zero') {
+						return this.cache_coupon.couponDiscountValue || 0
+					} else if (this.cache_coupon.minOrderAmount && this.cache_coupon.minOrderAmount > 0) {
+						var total = ((dto.totalAmount || 0) + (dto.packing || 0) + (current_transport.fee || 0) || 0)
+							.toFixed(2)
+						if (total >= this.cache_coupon.minOrderAmount) {
+							return this.cache_coupon.couponDiscountValue || 0
+						}
+					} else {
+						return this.cache_coupon.couponDiscountValue || 0
+					}
+				}
+
+				return 0
+			}
+
+		},
+		async beforeDestroy() {
+			await this.$store.dispatch('cache_coupon_select', {})
+			await this.$store.dispatch('cache_goods_select', [])
 
 		},
 		async onShow() {
-
+			//优惠券
+			if (this.cache_coupon && this.cache_coupon.id) {
+				this.dto.couponRecordId = this.cache_coupon.id
+				this.dto.couponRecordStr = this.cache_coupon.couponName
+			}
+			//兑换券
+			this.dto.couponRecordStr = ''
+			if (this.cache_goods && this.cache_goods.length > 0) {
+				this.dto.couponRecordStr = ''
+				var names = []
+				for (var tmp of this.cache_goods) {
+					names.push(tmp.name || tmp.title || '')
+				}
+				this.dto.couponRecordStr = names.join(',')
+			}
 		},
 		onLoad(options) {
 			// console.log('dto',options)
@@ -81,6 +125,9 @@
 					transportId: '',
 					addressId: '',
 					flowers: [],
+					couponRecordId: '',
+					couponRecordStr: '',
+					goodsRecordIdListStr: '',
 				},
 				current_transport: {},
 				cacheAddressId: '',
@@ -109,6 +156,18 @@
 			}
 		},
 		methods: {
+			toSelectCoupon() {
+				//跳转去列表页面进行选择
+				uni.navigateTo({
+					url: '/sub_pages/customer/coupon/coupon-self?source=shopping'
+				})
+			},
+			toSelectGood() {
+				//跳转去列表页面进行选择
+				uni.navigateTo({
+					url: '/sub_pages/customer/coupon/good-self?source=shopping'
+				})
+			},
 			select_need(e) {
 				this.show_select_need = false
 				this.dto.specialNeedsStr = e.value[0].label
@@ -175,6 +234,10 @@
 							})
 							tmp.$message.hideLoading()
 							if (code === 0) {
+								//清空优惠券
+								this.$store.dispatch('cache_coupon_select', {})
+								this.$store.dispatch('cache_goods_select', [])
+
 								//提交信息
 								console.log('pay,', data)
 								// /api/pub/init/callback?orderId=
@@ -335,7 +398,19 @@
 			</view>
 
 			<view class="p10 bg-white m-t-20 br-4">
+				<!-- #ifdef PUB_CUSTOMER_DEV -->
 				<view class="form-item  flex ">
+					<view class="label">优惠券</view>
+
+					<view class="m-l-a m-r-0 flex " :class="[!dto.couponRecordId?'desc-gray':'']"
+						@click="toSelectCoupon">
+						<view>{{dto.couponRecordStr||dto.couponRecordId || '请选择'}}</view>
+						<u-icon class="m-l-a" name="arrow-right"></u-icon>
+					</view>
+				</view>
+				<!-- #endif -->
+
+				<view class="form-item  flex m-t-12">
 					<view class="label">特殊需求</view>
 
 					<view class="m-l-a m-r-0 flex " :class="[!dto.specialNeeds?'desc-gray':'']" @click="()=>{
@@ -355,6 +430,18 @@
 						</view>
 					</view>
 				</view>
+				<!-- #ifdef PUB_CUSTOMER_DEV -->
+				<view class="form-item  flex ">
+					<view class="label">兑换券</view>
+
+					<view class="m-l-a m-r-0 flex "
+						:class="[!dto.goodsRecordIdList||dto.goodsRecordIdList.length==0?'desc-gray':'']"
+						@click="toSelectGood">
+						<view>{{dto.goodsRecordIdListStr|| '请选择'}}</view>
+						<u-icon class="m-l-a" name="arrow-right"></u-icon>
+					</view>
+				</view>
+				<!-- #endif -->
 			</view>
 
 		</view>
@@ -377,6 +464,12 @@
 					{{ (current_transport.fee || 0) }}
 				</view>
 			</view>
+			<view class="desc flex">
+				<view>优惠:</view>
+				<view class="m-l-a m-r-0 text-right">
+					-{{ coupon_fee || 0 }}
+				</view>
+			</view>
 		</view>
 
 
@@ -385,7 +478,8 @@
 		<view class="bottom-price flex">
 			<view class="m-t-12 m-l-0 m-r-a">
 				合计 <span class="t-red">¥
-					{{ ((dto.totalAmount || 0) + (dto.packing || 0) + (current_transport.fee || 0) || 0).toFixed(2) }} </span>元
+					{{ ((dto.totalAmount || 0) + (dto.packing || 0) + (current_transport.fee || 0) - coupon_fee || 0).toFixed(2) }}
+				</span>元
 			</view>
 			<view class="button-green-1 m-l-a m-r-0" style="min-width: 240rpx" @click="submitOrder">
 				提交订单

--
Gitblit v1.9.3