ソースを参照

Merge remote-tracking branch 'remotes/origin/developer' into developerA

# Conflicts:
#	pages.json
#	pages/seller/notice/service/service.vue
#	pages/user/operator/list.vue
#	services/config.env.js
zhengjinyi 3 ヶ月 前
コミット
292ec11e97
100 ファイル変更13158 行追加7073 行削除
  1. 2 2
      common/css/common.scss
  2. 52 4
      common/css/iconfont.scss
  3. 115 0
      components/cm-custom/custom.vue
  4. 179 0
      components/cm-module/activity/activities.vue
  5. 291 256
      components/cm-module/activity/activityBean.vue
  6. 16 13
      components/cm-module/cart-components/index.vue
  7. 2 1
      components/cm-module/cart-components/mixins/apisMixins.js
  8. 18 7
      components/cm-module/cm-ross/cm-ross-popup.vue
  9. 0 104
      components/cm-module/homeIndex/certificate.vue
  10. 0 387
      components/cm-module/homeIndex/customer.vue
  11. 0 129
      components/cm-module/homeIndex/quickOperation.vue
  12. 0 137
      components/cm-module/homeIndex/supplierList.vue
  13. 2 2
      components/cm-module/pageTemplate/template-product.vue
  14. 11 15
      components/cm-module/productDetails/evaluate.vue
  15. 13 7
      components/cm-module/scrollTop/scrollTop.vue
  16. 2 2
      components/cm-share-popup/cm-share-popup.vue
  17. 13 11
      components/cm-share-popup/draw-poster.js
  18. 1 1
      components/cm-share-popup/simple-share-popup/simple-share-popup.vue
  19. 13 6
      components/cm-share-popup/uni-popup/uni-popup.vue
  20. 139 97
      components/thorui/tui-drawer/tui-drawer.vue
  21. 1 1
      components/thorui/tui-top-dropdown/tui-top-dropdown.vue
  22. 0 166
      components/tui-components/loadmore/loadmore.vue
  23. 0 119
      components/tui-components/nomore/nomore.vue
  24. 0 152
      components/uni-calendar/uni-calendar-item.vue
  25. 0 67
      components/uni-search/bt-search.vue
  26. 1 1
      components/uni-search/cat-search.vue
  27. 0 323
      components/uni-search/or-search.vue
  28. 0 128
      components/uni-transition/createAnimation.js
  29. 0 277
      components/uni-transition/uni-transition.vue
  30. 2 0
      main.js
  31. 9 9
      mixins/appMixins.js
  32. 94 9
      pages.json
  33. 6 6
      pages/goods/cart.vue
  34. 3 3
      pages/goods/channel.vue
  35. 0 79
      pages/goods/components/cm-attributes.vue
  36. 0 133
      pages/goods/components/cm-parameter.vue
  37. 14 5
      pages/goods/components/cm-prams-popup.vue
  38. 19 5
      pages/goods/components/cm-service.vue
  39. 14 6
      pages/goods/components/cm-unit-popup.vue
  40. 6 10
      pages/goods/components/instrument-recommend.vue
  41. 9 9
      pages/goods/components/pageFloor.vue
  42. 0 4
      pages/goods/components/recommend.vue
  43. 0 0
      pages/goods/components/template-floor/templateA.vue
  44. 0 0
      pages/goods/components/template-floor/templateB.vue
  45. 0 0
      pages/goods/components/template-floor/templateC.vue
  46. 0 0
      pages/goods/components/template-floor/templateD.vue
  47. 0 0
      pages/goods/components/template-floor/templateE.vue
  48. 0 0
      pages/goods/components/template-floor/templateF.vue
  49. 0 0
      pages/goods/components/template-floor/templateG.vue
  50. 0 0
      pages/goods/components/template-floor/templateI.vue
  51. 0 0
      pages/goods/components/template-floor/templateJ.vue
  52. 0 0
      pages/goods/components/template-floor/templateK.vue
  53. 0 0
      pages/goods/components/template-page/templateA.vue
  54. 0 0
      pages/goods/components/template-page/templateB.vue
  55. 0 0
      pages/goods/components/template-page/templateC.vue
  56. 0 0
      pages/goods/components/template-page/templateD.vue
  57. 313 0
      pages/goods/components/template-page/templateE.vue
  58. 0 0
      pages/goods/components/template-page/templateF.vue
  59. 0 0
      pages/goods/components/template-page/templateG.vue
  60. 0 0
      pages/goods/components/template-page/templateH.vue
  61. 1 1
      pages/goods/good-floor-temp.vue
  62. 507 0
      pages/goods/good-floor-zone.vue
  63. 1 1
      pages/goods/good-floor.vue
  64. 6 6
      pages/goods/good-floorMore.vue
  65. 1001 983
      pages/goods/good-hot.vue
  66. 3 8
      pages/goods/goods-active.vue
  67. 3 3
      pages/goods/goods-classify.vue
  68. 2 2
      pages/goods/goods-doc-list.vue
  69. 12 1
      pages/goods/goods-instrument.vue
  70. 188 0
      pages/goods/goods-shop-list.vue
  71. 3 7
      pages/goods/goods-supporting.vue
  72. 3106 3019
      pages/goods/product.vue
  73. 204 0
      pages/h5/activity/activity-entry-list.vue
  74. 474 0
      pages/h5/activity/activity-entry.vue
  75. 9 9
      pages/h5/activity/activity-floorMore.vue
  76. 19 13
      pages/h5/activity/activity-list.vue
  77. 174 0
      pages/h5/activity/activity-sign.vue
  78. 11 15
      pages/h5/activity/components/active-floor.vue
  79. 224 0
      pages/h5/activity/components/activity-model.vue
  80. 298 0
      pages/h5/activity/components/template-floor/templateA.vue
  81. 314 0
      pages/h5/activity/components/template-floor/templateB.vue
  82. 347 0
      pages/h5/activity/components/template-floor/templateC.vue
  83. 341 0
      pages/h5/activity/components/template-floor/templateD.vue
  84. 311 312
      pages/h5/activity/components/template-floor/templateE.vue
  85. 278 0
      pages/h5/activity/components/template-floor/templateF.vue
  86. 274 0
      pages/h5/activity/components/template-floor/templateG.vue
  87. 342 0
      pages/h5/activity/components/template-floor/templateI.vue
  88. 357 0
      pages/h5/activity/components/template-floor/templateJ.vue
  89. 403 0
      pages/h5/activity/components/template-floor/templateK.vue
  90. 297 0
      pages/h5/activity/components/template-page/templateA.vue
  91. 314 0
      pages/h5/activity/components/template-page/templateB.vue
  92. 348 0
      pages/h5/activity/components/template-page/templateC.vue
  93. 342 0
      pages/h5/activity/components/template-page/templateD.vue
  94. 313 0
      pages/h5/activity/components/template-page/templateE.vue
  95. 330 0
      pages/h5/activity/components/template-page/templateF.vue
  96. 280 0
      pages/h5/activity/components/template-page/templateG.vue
  97. 361 0
      pages/h5/activity/components/template-page/templateH.vue
  98. 0 0
      pages/h5/activity/components/template-page/templateI.vue
  99. 0 0
      pages/h5/activity/components/template-page/templateJ.vue
  100. 0 0
      pages/h5/activity/components/template-page/templateK.vue

+ 2 - 2
common/css/common.scss

@@ -392,13 +392,13 @@ button::after{
 		top: 0;
 		border-radius: 8rpx 16rpx 0 8rpx;
 		&.none{
-			border-radius: 8rpx;
+			border-radius:16rpx 0;
 		}
 	}
 	.price{
 		height: 32rpx;
 		box-sizing: border-box;
-		border-radius:0 8rpx 8rpx 0;
+		border-radius:0 0 18rpx 0;
 		background-color: #F0CB72;
 		line-height: 32rpx !important;
 		color: #333333 !important;

+ 52 - 4
common/css/iconfont.scss

@@ -1,8 +1,8 @@
 @font-face {
   font-family: "iconfont"; /* Project id 1519039 */
-  src: url('//at.alicdn.com/t/c/font_1519039_1dbk8r8fldb.woff2?t=1701851301194') format('woff2'),
-       url('//at.alicdn.com/t/c/font_1519039_1dbk8r8fldb.woff?t=1701851301194') format('woff'),
-       url('//at.alicdn.com/t/c/font_1519039_1dbk8r8fldb.ttf?t=1701851301194') format('truetype');
+  src: url('//at.alicdn.com/t/c/font_1519039_ll642elzf.woff2?t=1727576181396') format('woff2'),
+       url('//at.alicdn.com/t/c/font_1519039_ll642elzf.woff?t=1727576181396') format('woff'),
+       url('//at.alicdn.com/t/c/font_1519039_ll642elzf.ttf?t=1727576181396') format('truetype');
 }
 
 .iconfont {
@@ -13,6 +13,54 @@
   -moz-osx-font-smoothing: grayscale;
 }
 
+.icon-reeor-fill:before {
+  content: "\e70f";
+}
+
+.icon-shouye1:before {
+  content: "\e6d7";
+}
+
+.icon-iconfontzhizuobiaozhun023110:before {
+  content: "\e670";
+}
+
+.icon-xiaoxi:before {
+  content: "\e600";
+}
+
+.icon-message:before {
+  content: "\e61d";
+}
+
+.icon-xiaoxi1:before {
+  content: "\e61e";
+}
+
+.icon-xiaoxijilu-1:before {
+  content: "\e75b";
+}
+
+.icon-AIzhushou:before {
+  content: "\e9f5";
+}
+
+.icon-aizhushou:before {
+  content: "\e65a";
+}
+
+.icon-fasong:before {
+  content: "\e61b";
+}
+
+.icon-weixin:before {
+  content: "\e665";
+}
+
+.icon-fenxiang:before {
+  content: "\e67f";
+}
+
 .icon-gongyingshang1:before {
   content: "\e760";
 }
@@ -699,4 +747,4 @@
 
 .icon-wodebeifenx:before {
   content: "\e611";
-}
+}

+ 115 - 0
components/cm-custom/custom.vue

@@ -0,0 +1,115 @@
+<template name="headerNavbar">
+    <!-- 自定义导航栏 -->
+    <view class='navbar-wrap'
+        :style="{height:CustomBar+'px',paddingTop:StatusBar+'px',background:navbarData.bgColor ? navbarData.bgColor : ''}">
+        <view class="navbar-text"
+            :style="{color:navbarData.textColor ? navbarData.textColor:'',lineHeight:(CustomBar - StatusBar)+'px;',fontSize:fontSizeSetting+'px;',paddingLeft:navbarData.textLeft ? '' : (capsule.height+10)+'px'}"
+            :class="platformClass">
+            {{navbarData.title ? navbarData.title : " "}}
+        </view>
+        <view class="navbar-icon" v-if="navbarData.showCapsule == 1 ? true : false"
+            :style="{top:capsule.top +'px;',left:((screenWidth-capsule.right)+9)+'px;',height:capsule.height+'px;',lineHeight:capsule.height+'px;'}">
+            <text v-if="navbarData.haveBack" @tap="BackPage" class="iconfont icon-fanhui"></text>
+            <text v-if="navbarData.haveHome" @tap="_goHome" class="iconfont icon-shouye1"></text>
+        </view>
+    </view>
+</template>
+
+<script>
+    var self;
+    export default {
+        name: 'headerNavbar',
+        props: {
+            navbarData: { // 由父页面传递的数据
+                type: Object
+            }
+        },
+        data() {
+            return {
+                CustomBar: this.CustomBar, // 顶部导航栏高度
+                StatusBar: this.StatusBar,
+                fontSizeSetting: this.fontSizeSetting,
+                screenWidth: this.screenWidth,
+                capsule: this.capsule,
+                platformClass: this.platformClass,
+            }
+        },
+        created() {
+            if (getCurrentPages().length === 1) { // 当只有一个页面时
+                this.navbarData.haveBack = false;
+            } else {
+                this.navbarData.haveBack = true;
+            }
+        },
+        onLoad() {
+
+        },
+        methods: {
+            BackPage: function() {
+                this.$emit('navigateBack')
+            },
+            _goSearchPath: function() {
+                this.$emit('goSearchPath')
+            },
+            _goHome: function() {
+                uni.switchTab({
+                    url: '/pages/tabBar/home/index'
+                })
+            }
+        },
+        onShow() {
+
+        }
+    }
+</script>
+
+<style lang="scss">
+    .navbar-wrap {
+        position: fixed;
+        width: 100%;
+        top: 0;
+        z-index: 100000;
+        box-sizing: border-box;
+    }
+
+    .navbar-text {
+        font-size: 30rpx;
+        color: #000000;
+        font-weight: 500;
+    }
+
+    .navbar-text.center {
+        text-align: center;
+    }
+
+    .navbar-text.left {
+        text-align: left;
+        padding-left: 45px;
+    }
+
+    .navbar-icon {
+        position: fixed;
+        display: flex;
+        box-sizing: border-box;
+    }
+
+    .navbar-icon .iconfont {
+        display: inline-block;
+        overflow: hidden;
+        font-size: 44rpx;
+        padding-right: 40rpx;
+        margin-top: 1px;
+        color: #FFFFFF;
+    }
+
+    .navbar-icon view {
+        height: 18px;
+        border-left: 0.5px solid rgba(0, 0, 0, 0.3);
+        margin-top: 6px;
+    }
+
+    .navbar-loading {
+        background: #fff;
+        text-align: center;
+    }
+</style>

+ 179 - 0
components/cm-module/activity/activities.vue

@@ -0,0 +1,179 @@
+<template>
+	<view>
+		<view class="tui-alert-class tui-alert-box" :class="[show?'tui-alert-show':'tui-alert-hide']"  @touchmove.stop.prevent="discard">
+            <view class="tui-goods__item">
+            	<swiper class="tui-goods__ross" 
+            			circular 
+            			@change="swiperChange"
+            			:indicator-dots="false" 
+            			:autoplay="false"
+            		>
+            		<swiper-item v-for="(item, index) in list" :key="item">
+            			<view class="tui-goods__ross" @click="handleClick(item)">
+            				<image class="ross-image" :src="item.crmImage" mode=""></image>
+            			</view>
+            		</swiper-item>
+            	</swiper>
+                <text class="iconfont icon-2guanbi" @click.stop="handleClickCancel"></text>
+            </view>
+		</view>
+	</view> 
+</template>
+
+<script>
+	export default {
+		name:'tuiAlert',
+		props: {
+            list:{
+              type:Array,
+              default:[]
+            },
+			//控制显示
+			show: {
+				type: Boolean,
+				default: false
+			},
+			//提示信息字体大小
+			size: {
+				type: Number,
+				default: 30
+			},
+			//提示信息字体颜色
+			color: {
+				type: String,
+				default: '#333'
+			},
+			//按钮字体颜色
+			btnColor: {
+				type: String,
+				default: '#EB0909'
+			},
+			btnText:{
+				type: String,
+				default: ''
+			},
+			//点击遮罩 是否可关闭
+			maskClosable: {
+				type: Boolean,
+				default: false
+			},
+            current:{
+                type: Number,
+                default: 0
+            }
+		},
+        created() {},
+		methods: {
+            swiperChange(e) {//轮播图切换
+            	this.current = e.detail.current
+            },
+			handleClick(item) {
+				this.$emit('click',item)
+			},
+			handleClickCancel() {
+				this.$emit('cancel',false)
+			},
+			discard(){
+				//丢弃
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.tui-alert-box {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex-direction: column;
+		position: fixed;
+		left: 0;
+		top: 100%;
+		opacity: 0;
+		background: rgba(0,0,0,.5);
+		z-index: 99999;
+        .tui-goods__item {
+        	width: 480rpx;
+        	height: 702rpx;
+        	box-sizing: border-box;
+            position: relative;
+            margin-top: 50rpx;
+        	.tui-goods__ross{
+                width: 480rpx;
+                height: 702rpx;
+        		text-align: center;
+        		color: #fff;
+        		float: left;
+                overflow: hidden;
+        		.ross-image{
+        			width: 100%;
+        			height: 100%;
+        			display: block;
+        		}
+        	}
+        }
+		
+	}
+	.tui-alert-show {
+		top: 0;
+		opacity: 1;
+		// animation:rundtop 0.5s;
+	}
+	.tui-alert-hide{
+		top: 100%;
+		opacity: 0;
+		// animation:rundbottom 0.5s;
+	}
+	.icon-2guanbi{
+		display: block;
+		width: 80rpx;
+		height: 80rpx;
+		line-height: 80rpx;
+		text-align: center;
+		color: #FFFFFF;
+		position: absolute;
+		bottom: -18%;
+		left: 50%;
+		font-size: 52rpx;
+        margin-left: -20px;
+	}
+	.tui-alert-mask-show {
+		visibility: visible;
+		opacity: 1;
+	}
+	.tui-alert-btn {
+		width: 100%;
+		height: 90rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		background-color: #fff;
+		box-sizing: border-box;
+		position: relative;
+		font-size: 32rpx;
+		line-height: 32rpx;
+	}
+	.tui-alert-btn-hover {
+		background-color: #f7f7f7;
+	}
+	.tui-alert-btn::before {
+		width: 100%;
+		content: "";
+		position: absolute;
+		border-top: 1rpx solid #E0E0E0;
+		-webkit-transform: scaleY(0.5);
+		transform: scaleY(0.5);
+		left: 0;
+		top: 0;
+	}
+	@keyframes rundtop{
+		0%{top: 100%;opacity: 0;}
+		100%{top:0;opacity: 1;}
+	}
+	@keyframes rundbottom{
+		0%{top: 0;opacity: 1;}
+		100%{top:100%;opacity: 0;}
+	}
+</style>

+ 291 - 256
components/cm-module/activity/activityBean.vue

@@ -1,256 +1,291 @@
- <template>
-	<view>
-		<view class="tui-alert-class tui-alert-box" :class="[show?'tui-alert-show':'tui-alert-hide']"  @touchmove.stop.prevent="discard">
-			<template v-if="beansType == 12">
-				<view class="tui-alert-image">
-					<image :src="bgImagePath" mode=""></image>
-				</view>
-			</template>
-			<template v-else>
-				<view class="tui-alert-content" :style="{'background-image': 'url('+bgImagePath+')'}">
-					<view class="tui-alert-content-text">恭喜您获得采美豆!</view>
-					<view class="tui-alert-content-bean">
-						<view class="tui-alert-main">
-							<image class="tui-alert-icon" src="https://static.caimei365.com/app/img/icon/bean-icon@2x.png" mode=""></image>
-							<view class="tui-alert-text">
-								<text class="icon-add">+</text>
-								<text class="icon-text">{{ beanNumber }}</text>
-							</view>
-						</view>
-					</view>
-					<view class="tui-alert-content-tips">
-						<view class="tips">采美豆可抵扣运费</view>
-					</view>
-				</view>
-			</template>
-			<text class="iconfont icon-2guanbi" :style="{bottom :beansType == 12 ? '25%' : '10%'}" @click.stop="handleClickCancel"></text>
-		</view>
-	</view> 
-</template>
-
-<script>
-	export default {
-		name:'tuiAlert',
-		props: {
-			//控制显示
-			show: {
-				type: Boolean,
-				default: false
-			},
-			//提示信息字体大小
-			size: {
-				type: Number,
-				default: 30
-			},
-			//提示信息字体颜色
-			color: {
-				type: String,
-				default: '#333'
-			},
-			//按钮字体颜色
-			btnColor: {
-				type: String,
-				default: '#EB0909'
-			},
-			btnText:{
-				type: String,
-				default: ''
-			},
-			beansType:{//根据类型设置背景图片:1注册机构,2升级资质机构,3个人机构修改资料,4资质机构修改资料,5下单成功,6线上支付成功,7确认收货成功
-				type: Number,
-				default: 1
-			},
-			beanNumber:{//采美豆显示数量
-				type:Number,
-				default:100
-			}
-		},
-		data() {
-			return{
-				bgImagePath:'https://static.caimei365.com/app/img/icon/bean-icon-2@2x.png',
-			}
-		},
-		created() {
-			this.handInitType(this.beansType)
-		},
-		methods: {
-			handInitType(type){
-				this.bgImagePath = `https://static.caimei365.com/app/img/icon/bean-icon-${type}@2x.png`
-			},
-			handleClick(e) {
-				console.log(e)
-				if (!this.show) return
-				this.$emit('click',false)
-			},
-			handleClickCancel() {
-				this.$emit('cancel',false)
-			},
-			discard(){
-				//丢弃
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.tui-alert-box {
-		width: 100%;
-		height: 100%;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		flex-direction: column;
-		position: fixed;
-		left: 0;
-		top: 100%;
-		opacity: 0;
-		background: rgba(51,51,51,0.7);
-		z-index: 99999;
-	}
-	.tui-alert-show {
-		top: 0;
-		opacity: 1;
-		// animation:rundtop 0.5s;
-	}
-	.tui-alert-hide{
-		top: 100%;
-		opacity: 0;
-		// animation:rundbottom 0.5s;
-	}
-	.tui-alert-image{
-		width: 626rpx;
-		height: 532rpx;
-		position: absolute;
-		top: 0;
-		left: 0;
-		bottom: 0;
-		right: 0;
-		margin: auto;
-		image{
-			width: 626rpx;
-			height: 532rpx;
-			display: block;
-		}
-	}
-	.tui-alert-content{
-		width: 580rpx;
-		height: 790rpx;
-		position: absolute;
-		top: 0;
-		left: 0;
-		bottom: 0;
-		right: 0;
-		margin: auto;
-		box-sizing: border-box;
-		padding-top: 485rpx;
-		background-size: cover;
-		.tui-alert-content-text{
-			height: 118rpx;
-			line-height: 118rpx;
-			text-align: center;
-			width: 100%;
-			font-size: $font-size-36;
-			color: #333333;
-		}
-		.tui-alert-content-bean{
-			width: 100%;
-			height: 74rpx;
-			line-height: 74rpx;
-			box-sizing: border-box;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			.tui-alert-main{
-				.tui-alert-icon{
-					width: 94rpx;
-					height: 74rpx;
-					display: block;
-					float: left;
-				}
-				.tui-alert-text{
-					color: $color-system;
-					line-height: 74rpx;
-					float: left;
-					.icon-add{
-						font-size:40rpx;
-						margin:0 15rpx;
-					}
-					.icon-text{
-						font-weight: bold;
-						font-size:48rpx;
-					}
-				}
-			}
-		}
-		.tui-alert-content-tips{
-			width: 100%;
-			height: 40rpx;
-			line-height: 40rpx;
-			margin-top: 41rpx;
-			box-sizing: border-box;
-			display: flex;
-			flex-direction: column;
-			align-items: center;
-			.tips{
-				width: 224rpx;
-				height: 40rpx;
-				background-color: rgba(226, 91, 28, 0.1);
-				border-radius: 36rpx;
-				line-height: 40rpx;
-				font-size: $font-size-24;
-				color: $color-system;
-				text-align: center;
-			}
-		}
-	}
-	.icon-2guanbi{
-		display: block;
-		width: 100rpx;
-		height: 100rpx;
-		line-height: 100rpx;
-		text-align: center;
-		color: #FFFFFF;
-		position: absolute;
-		bottom: 13%;
-		left: 50%;
-		font-size: 58rpx;
-		margin-left: -50rpx;
-	}
-	.tui-alert-mask-show {
-		visibility: visible;
-		opacity: 1;
-	}
-	.tui-alert-btn {
-		width: 100%;
-		height: 90rpx;
-		display: flex;
-		align-items: center;
-		justify-content: center;
-		background-color: #fff;
-		box-sizing: border-box;
-		position: relative;
-		font-size: 32rpx;
-		line-height: 32rpx;
-	}
-	.tui-alert-btn-hover {
-		background-color: #f7f7f7;
-	}
-	.tui-alert-btn::before {
-		width: 100%;
-		content: "";
-		position: absolute;
-		border-top: 1rpx solid #E0E0E0;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		left: 0;
-		top: 0;
-	}
-	@keyframes rundtop{
-		0%{top: 100%;opacity: 0;}
-		100%{top:0;opacity: 1;}
-	}
-	@keyframes rundbottom{
-		0%{top: 0;opacity: 1;}
-		100%{top:100%;opacity: 0;}
-	}
-</style>
+ <template>
+     <view>
+         <view class="tui-alert-class tui-alert-box" :class="[show?'tui-alert-show':'tui-alert-hide']"
+             @touchmove.stop.prevent="discard" @click.stop="handleClickCancel">
+             <template v-if="beansType == 12">
+                 <view class="tui-alert-image">
+                     <image :src="bgImagePath" mode=""></image>
+                 </view>
+             </template>
+             <template v-else>
+                 <view class="tui-alert-content" :style="{'background-image': 'url('+bgImagePath+')'}">
+                     <view class="tui-alert-content-text">恭喜您获得采美豆!</view>
+                     <view class="tui-alert-content-bean">
+                         <view class="tui-alert-main">
+                             <image class="tui-alert-icon"
+                                 src="https://static.caimei365.com/app/img/icon/bean-icon@2x.png" mode=""></image>
+                             <view class="tui-alert-text">
+                                 <text class="icon-add">+</text>
+                                 <text class="icon-text">{{ beanNumber }}</text>
+                             </view>
+                         </view>
+                     </view>
+                     <view class="tui-alert-content-tips">
+                         <view class="tips">采美豆可抵扣运费</view>
+                     </view>
+                 </view>
+             </template>
+         </view>
+     </view>
+ </template>
+
+ <script>
+     export default {
+         name: 'tuiAlert',
+         props: {
+             //控制显示
+             show: {
+                 type: Boolean,
+                 default: false
+             },
+             //提示信息字体大小
+             size: {
+                 type: Number,
+                 default: 30
+             },
+             //提示信息字体颜色
+             color: {
+                 type: String,
+                 default: '#333'
+             },
+             //按钮字体颜色
+             btnColor: {
+                 type: String,
+                 default: '#EB0909'
+             },
+             btnText: {
+                 type: String,
+                 default: ''
+             },
+             beansType: { //根据类型设置背景图片:1注册机构,2升级资质机构,3个人机构修改资料,4资质机构修改资料,5下单成功,6线上支付成功,7确认收货成功
+                 type: Number,
+                 default: 1
+             },
+             beanNumber: { //采美豆显示数量
+                 type: Number,
+                 default: 100
+             }
+         },
+         data() {
+             return {
+                 bgImagePath: 'https://static.caimei365.com/app/img/icon/bean-icon-2@2x.png',
+             }
+         },
+         created() {
+             this.handInitType(this.beansType)
+         },
+         methods: {
+             handInitType(type) {
+                 this.bgImagePath = `https://static.caimei365.com/app/img/icon/bean-icon-${type}@2x.png`
+             },
+             handleClick(e) {
+                 console.log(e)
+                 if (!this.show) return
+                 this.$emit('click', false)
+             },
+             handleClickCancel() {
+                 this.$emit('cancel', false)
+             },
+             discard() {
+                 //丢弃
+             }
+         }
+     }
+ </script>
+
+ <style lang="scss">
+     .tui-alert-box {
+         width: 100%;
+         height: 100%;
+         display: flex;
+         align-items: center;
+         justify-content: center;
+         flex-direction: column;
+         position: fixed;
+         left: 0;
+         top: 100%;
+         opacity: 0;
+         background: rgba(51, 51, 51, 0.7);
+         z-index: 99999;
+     }
+
+     .tui-alert-show {
+         top: 0;
+         opacity: 1;
+         // animation:rundtop 0.5s;
+     }
+
+     .tui-alert-hide {
+         top: 100%;
+         opacity: 0;
+         // animation:rundbottom 0.5s;
+     }
+
+     .tui-alert-image {
+         width: 626rpx;
+         height: 532rpx;
+         position: absolute;
+         top: 0;
+         left: 0;
+         bottom: 0;
+         right: 0;
+         margin: auto;
+
+         image {
+             width: 626rpx;
+             height: 532rpx;
+             display: block;
+         }
+     }
+
+     .tui-alert-content {
+         width: 580rpx;
+         height: 790rpx;
+         position: absolute;
+         top: 0;
+         left: 0;
+         bottom: 0;
+         right: 0;
+         margin: auto;
+         box-sizing: border-box;
+         padding-top: 485rpx;
+         background-size: cover;
+
+         .tui-alert-content-text {
+             height: 118rpx;
+             line-height: 118rpx;
+             text-align: center;
+             width: 100%;
+             font-size: $font-size-36;
+             color: #333333;
+         }
+
+         .tui-alert-content-bean {
+             width: 100%;
+             height: 74rpx;
+             line-height: 74rpx;
+             box-sizing: border-box;
+             display: flex;
+             flex-direction: column;
+             align-items: center;
+
+             .tui-alert-main {
+                 .tui-alert-icon {
+                     width: 94rpx;
+                     height: 74rpx;
+                     display: block;
+                     float: left;
+                 }
+
+                 .tui-alert-text {
+                     color: $color-system;
+                     line-height: 74rpx;
+                     float: left;
+
+                     .icon-add {
+                         font-size: 40rpx;
+                         margin: 0 15rpx;
+                     }
+
+                     .icon-text {
+                         font-weight: bold;
+                         font-size: 48rpx;
+                     }
+                 }
+             }
+         }
+
+         .tui-alert-content-tips {
+             width: 100%;
+             height: 40rpx;
+             line-height: 40rpx;
+             margin-top: 41rpx;
+             box-sizing: border-box;
+             display: flex;
+             flex-direction: column;
+             align-items: center;
+
+             .tips {
+                 width: 224rpx;
+                 height: 40rpx;
+                 background-color: rgba(226, 91, 28, 0.1);
+                 border-radius: 36rpx;
+                 line-height: 40rpx;
+                 font-size: $font-size-24;
+                 color: $color-system;
+                 text-align: center;
+             }
+         }
+     }
+
+     .icon-2guanbi {
+         display: block;
+         width: 100rpx;
+         height: 100rpx;
+         line-height: 100rpx;
+         text-align: center;
+         color: #FFFFFF;
+         position: absolute;
+         bottom: 13%;
+         left: 50%;
+         font-size: 58rpx;
+         margin-left: -50rpx;
+     }
+
+     .tui-alert-mask-show {
+         visibility: visible;
+         opacity: 1;
+     }
+
+     .tui-alert-btn {
+         width: 100%;
+         height: 90rpx;
+         display: flex;
+         align-items: center;
+         justify-content: center;
+         background-color: #fff;
+         box-sizing: border-box;
+         position: relative;
+         font-size: 32rpx;
+         line-height: 32rpx;
+     }
+
+     .tui-alert-btn-hover {
+         background-color: #f7f7f7;
+     }
+
+     .tui-alert-btn::before {
+         width: 100%;
+         content: "";
+         position: absolute;
+         border-top: 1rpx solid #E0E0E0;
+         -webkit-transform: scaleY(0.5);
+         transform: scaleY(0.5);
+         left: 0;
+         top: 0;
+     }
+
+     @keyframes rundtop {
+         0% {
+             top: 100%;
+             opacity: 0;
+         }
+
+         100% {
+             top: 0;
+             opacity: 1;
+         }
+     }
+
+     @keyframes rundbottom {
+         0% {
+             top: 0;
+             opacity: 1;
+         }
+
+         100% {
+             top: 100%;
+             opacity: 0;
+         }
+     }
+ </style>

+ 16 - 13
components/cm-module/cart-components/index.vue

@@ -362,10 +362,13 @@
 								class="coupon-list"
 							>
 								<view class="list-cell-le">
-									<view class="coupon-maxMoney"
-										><text class="small">¥</text>{{ coupon.couponAmount }}</view
-									>
-									<view class="coupon-minMoney">满{{ coupon.touchPrice }}可用</view>
+									<template v-if="coupon.couponTextFlag === 1">
+									    <view class="coupon-maxMoney"> <text class="small">¥</text> {{ coupon.couponAmount }} </view>
+									    <view class="coupon-minMoney"> 满{{ coupon.touchPrice }}可用 </view>
+									</template>
+									<template v-else>
+									    <view class="coupon-maxMoney six"> <text class="small">¥</text> {{ coupon.couponText }} </view>
+									</template>
 								</view>
 								<view class="list-cell-ri">
 									<view class="list-cell-top">
@@ -391,14 +394,14 @@
 													{{
 														coupon.productType && coupon.productType == 1
 															? '全商城商品通用'
-															: '仅可购买指定商品'
+															: coupon.couponName
 													}}
 												</text>
 												<text v-if="coupon.couponType == 1">
 													{{
 														coupon.categoryType == 1
-															? '仅限购买产品类商品'
-															: '仅限购买仪器类商品'
+															? coupon.couponName
+															: coupon.couponName
 													}}
 												</text>
 												<text v-if="coupon.couponType == 3"
@@ -507,8 +510,6 @@
 
 <script>
 import authorize from '@/common/config/authorize.js'
-import tuiLoadmore from '@/components/tui-components/loadmore/loadmore'
-import tuiNomore from '@/components/tui-components/nomore/nomore'
 import activiPopup from '@/components/cm-module/productDetails/cm-activipopu'
 import couponTabs from '@/components/cm-module/coupon/tui-tabs.vue'
 import cmUnitPopup from './cm-unit-popup.vue'
@@ -526,8 +527,6 @@ export default {
 		}
 	},
 	components: {
-		tuiLoadmore,
-		tuiNomore,
 		activiPopup,
 		couponTabs,
 		cmUnitPopup,
@@ -1464,7 +1463,8 @@ export default {
 				})
 			}
 			// 生成购买优惠券记录Id调用 apisMixins -> apiReceiveCoupon
-			this.apiWeChatCouponRecord({ userId: this.userId,couponId: coupon.couponId },coupon)
+			// this.apiWeChatCouponRecord({ userId: this.userId,couponId: coupon.couponId },coupon)
+            this.$api.navigateTo(`/pages/user/pay/card-coupon-under?amount=${coupon.moneyCouponPrice}`)
 		},
 		hideMobel() {
 			this.modal = false
@@ -2220,7 +2220,10 @@ page {
 						line-height: 78rpx;
 						font-size: 56rpx;
 						color: #ffffff;
-						text-align: center;
+						text-align: center;
+                        &.six{
+                            margin-top: 20rpx;
+                        }
 						.small {
 							font-size: $font-size-24;
 						}

+ 2 - 1
components/cm-module/cart-components/mixins/apisMixins.js

@@ -1,4 +1,5 @@
-import Vue from 'vue'
+import Vue from 'vue'
+import authorize from '@/common/config/authorize.js'
 const apisMixins = {
     methods: {
         apiUserClubCheckSku(params){

+ 18 - 7
components/cm-module/cm-ross/cm-ross-popup.vue

@@ -29,8 +29,8 @@
 						type="text"
 						v-model="consultParams.consultName"
 						@input="handleInputName"
-						placeholder="请输入名字"
-						placeholder-style="color:#FFFFFF;"
+						placeholder="请输入名字"
+                        placeholder-class="placeholder"
 						maxlength="10"
 						cursor-spacing="40"
 					/>
@@ -41,8 +41,8 @@
 						type="text"
 						v-model="consultParams.consultMobile"
 						@input="handleInputPhone"
-						placeholder="请输入手机号"
-						placeholder-style="color:#FFFFFF;"
+						placeholder="请输入手机号"
+                        placeholder-class="placeholder"
 						maxlength="11"
 						cursor-spacing="40"
 					/>
@@ -93,7 +93,15 @@ export default {
 			advertData:{},
 			isDisabled: true
 		}
-	},
+	},
+    watch: {
+        advertisInfo:{
+            deep: true,
+            handler(val) {
+            	this.initData(val)
+            }
+        }
+    },
 	created() {
 		this.initData(this.advertisInfo)
 	},
@@ -234,8 +242,11 @@ export default {
 				line-height: 80rpx;
 				font-size: 28rpx;
 				color: #ffffff;
-				border-bottom: 1px solid #ffffff;
-			}
+				border-bottom: 1px solid #ffffff;
+			}
+            .placeholder{
+                color: #FFFFFF;
+            }
 		}
 	}
 }

+ 0 - 104
components/cm-module/homeIndex/certificate.vue

@@ -1,104 +0,0 @@
-<template>
-	<!-- 资质证书 -->
-	<view class="container-copyright">
-		<view class="copyright-titi">
-			<view class="copyright-line"></view>
-			<view class="copyright-image">
-				<image class="image" :src="staticUrl + '/icon/icon-logo@1x.png'"></image>
-				<view class="text">资质证书</view>
-			</view>
-		</view>
-		<view class="copyright-cell">
-			<view class="copyright-cell-item" v-for="cell in certificates" :key="cell" @click="handleClick(cell.id)">
-				{{ cell.name }}
-				<text class="iconfont icon-xiayibu"></text>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default{
-		name:'certificate',
-		data() {
-			return{
-				staticUrl: this.$Static,
-				certificates:[
-					{name:'中华人民共和国增值电信业务经营许',id:1},
-					{name:'医疗器械网络交易服务第三方平台备案凭证',id:2},
-					{name:'互联网药品信息服务资格证编号(粤)-非经营性-2021-0339',id:3},
-				]
-			}
-		},
-		created(){
-			
-		},
-		computed: {
-	
-		},
-		methods:{
-			handleClick(id){// 跳转资质证书
-				this.$api.navigateTo(`/pages/service/certificate?id=${id}`)
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-.container-copyright {
-	width: 100%;
-	height: auto;
-	float: left;
-	box-sizing: border-box;
-	padding: 24rpx;
-	background-color: #f7f7f7;
-	.copyright-titi{
-		width: 100%;
-		height: 56rpx;
-		box-sizing: border-box;
-		padding: 0 140rpx;
-		position: relative;
-		.copyright-line{
-			width: 100%;
-			height: 1px;
-			background: #CECECE;
-			margin-top: 25rpx;
-		}
-		.copyright-image{
-			position: absolute;
-			width: 215rpx;
-			left: 50%;
-			top:-22rpx;
-			margin-left: -130rpx;
-			display: flex;
-			justify-content: center;
-			align-items: center;
-			background-color: #f7f7f7;
-			padding: 0 20rpx;
-			.image {
-				width: 70rpx;
-				height: 68rpx;
-				margin-right: 6rpx;
-			}
-			.text {
-				font-size: 20rpx;
-				color: #cccccc;
-			}
-		}
-		
-	}
-	.copyright-cell{
-		width: 100%;
-		.copyright-cell-item{
-			height: 55rpx;
-			line-height: 55rpx;
-			text-align: center;
-			font-size: 24rpx;
-			color: #999999;
-			.icon-xiayibu{
-				font-size: 22rpx;
-			}
-		}
-	}
-}
-</style>

+ 0 - 387
components/cm-module/homeIndex/customer.vue

@@ -1,387 +0,0 @@
-<template name="headerNavbar">
-	<!-- 自定义导航栏 -->
-	<view>
-		<view
-			class="navbar-wrap"
-			:class="isScroll ? opacityNav : ''"
-			:style="{
-				height: CustomBar + 88 + 'px',
-				paddingTop: StatusBar + 'px'
-			}"
-		>
-			<view
-				class="navbar-text"
-				:style="{
-					color: navbarData.textColor ? navbarData.textColor : '',
-					lineHeight: CustomBar - StatusBar + 'px;',
-					fontSize: fontSizeSetting + 'px;',
-					paddingLeft: navbarData.textLeft ? '' : 12 + 'px'
-				}"
-				:class="platformClass"
-			>
-				{{ navbarData.title ? navbarData.title : ' ' }}
-			</view>
-			<view class="search-input">
-				<view class="gosearch-btn" @click="this.$api.navigateTo(clickPath)">
-					<view class="search-icon"><text class="iconfont icon-iconfonticonfontsousuo1"></text></view>
-					<view class="search-text">{{ hotSearchText }}</view> <view class="search-btn">搜索</view>
-				</view>
-				<view class="gosearch-kf">
-					<!-- #ifdef MP-WEIXIN -->
-					<button class="contact-btn" open-type="contact" @bindcontact="handleContact">
-						<text class="iconfont icon-zixunrexian"></text>
-					</button>
-					<!-- #endif -->
-				</view>
-			</view>
-			<view class="swiper-banner-nav">
-				<scroll-view class="scroll-view_H" scroll-x="true">
-					<view class="tui-goods__item active">首页</view>
-					<view class="tui-goods__item" v-for="(navs, index) in navBarsList" @click="NavToDetailPage(navs,index)">
-						{{ navs.name }}
-					</view>
-				</scroll-view>
-				<view class="swiper-nav-icon" @click="showDropScreenShow">
-					<text class="iconfont" :class="dropScreenShow ? 'icon-xiangshangjiantou':'icon-xiangxiajiantou'"></text>
-				</view>
-			</view>
-		</view>
-		<!--顶部下拉筛选弹层 属性-->
-		<tui-top-dropdown
-			backgroundColor="#FFFFFF"
-			:show="dropScreenShow"
-			:height="310"
-			:paddingbtm="10"
-			:translatey="dropScreenH"
-			@close="btnCloseDrop"
-		>
-			<scroll-view class="tui-scroll-box" scroll-y :scroll-top="scrollTop">
-				<view class="tui-seizeaseat-24">
-					<view class="tui-drop-item tui-icon-middle">全部分类</view>
-					<view class="tui-drop-item tui-icon-middle active">首页</view>
-					<view
-						class="tui-drop-item tui-icon-middle"
-						v-for="(item, index) in navBarsList"
-						:key="index"
-						@tap.stop="NavToDetailPage(item,index)"
-						:data-index="index"
-					>
-						{{ item.name }}
-					</view>
-				</view>
-			</scroll-view>
-		</tui-top-dropdown>
-	</view>
-</template>
-
-<script>
-var self
-import btSearch from '@/components/uni-search/bt-search.vue'
-export default {
-    name: 'headerNavbar',
-    components: {
-        btSearch
-    },
-    props: {
-        navbarData: {
-            // 由父页面传递的数据
-            type: Object
-        },
-		navBarsList: {
-			type: Array
-		},
-        isScroll: {
-            type: Boolean,
-            default: () => false
-        }
-    },
-    data() {
-        return {
-            clickPath: '/pages/search/search',
-            hotSearchText: '搜索商品/项目仪器',
-            CustomBar: this.CustomBar, // 顶部导航栏高度
-            StatusBar: this.StatusBar,
-            fontSizeSetting: this.fontSizeSetting,
-            screenWidth: this.screenWidth,
-            capsule: this.capsule,
-            platformClass: this.platformClass,
-            opacityNav: 'opacityNav', // 渐变颜色
-			height: 64, //header高度
-			scrollTop: 0,
-			dropScreenH: this.CustomBar+78, //下拉筛选框距顶部距离
-			dropScreenShow:false,
-			animationData: {}  
-
-        }
-    },
-    created() {
-        if (getCurrentPages().length === 1) {
-            // 当只有一个页面时
-            this.navbarData.haveBack = false
-        } else {
-            this.navbarData.haveBack = true
-        }
-		let obj = {};
-		// #ifdef MP-WEIXIN
-		obj = wx.getMenuButtonBoundingClientRect();
-		// #endif
-		uni.getSystemInfo({
-			success: res => {
-				this.height = obj.top ? obj.top + obj.height + 8 : res.statusBarHeight + 44;
-				//略小,避免误差带来的影响
-				this.dropScreenH = (this.height * 750) / res.windowWidth + 148;
-			}
-		});
-		console.log('dropScreenH',this.dropScreenH)
-    },
-    onLoad() {},
-    onPageScroll(e) {
-    	console.log(e)
-    },
-    methods: {
-        BackPage: function() {
-            this.$emit('navigateBack')
-        },
-        _goSearchPath: function() {
-            this.$emit('goSearchPath')
-        },
-        _goHome: function() {
-            uni.switchTab({
-                url: '/pages/tabBar/home/index'
-            })
-        },
-		NavToDetailPage(item,index) {//跳转
-			if(index === 3){
-				let linkPath = 'https://static.caimei365.com/app/caimei-activity-h5/html/2023/activity_02.html'
-				this.$api.navigateTo(`/pages/h5/activity/activity?link=${linkPath}&linkId=382`)
-			}else{
-				/**
-				 * 页面跳转
-				 **/
-				this.$api.FlooryNavigateTo(item)
-			}
-		},
-		showDropScreenShow(){
-			this.dropScreenShow = !this.dropScreenShow
-			if(this.dropScreenShow){
-				// 禁止页面滚动  
-				uni.setScrollEnabled(false)
-			}else{
-				// 禁止页面滚动
-				uni.setScrollEnabled(true)
-			}
-		},
-		btnCloseDrop(){
-			this.dropScreenShow = false
-		},
-		handleContact(e) {
-		    console.log(e.detail.path)
-		    console.log(e.detail.query)
-		}
-    },
-    onShow() {}
-}
-</script>
-
-<style lang="scss" scoped>
-.navbar-wrap {
-	position: fixed;
-	width: 100%;
-	top: 0;
-	z-index: 9999;
-	box-sizing: border-box;
-	background:#ffffff url(https://static.caimei365.com/app/img/bg/home_cumres_bg@2x.png);
-	background-size: cover;
-	border-bottom: none;
-}
-.opacityNav {
-	
-}
-.navbar-text {
-	font-size: 30rpx;
-	color: #000000;
-	font-weight: 500;
-}
-.navbar-text.center {
-	text-align: center;
-}
-.navbar-text.left {
-	text-align: left;
-	padding-left: 45px;
-}
-.navbar-icon {
-	position: fixed;
-	display: flex;
-	box-sizing: border-box;
-}
-.navbar-icon .iconfont {
-	display: inline-block;
-	overflow: hidden;
-	font-size: 44rpx;
-	padding-right: 40rpx;
-	margin-top: 1px;
-}
-.navbar-icon .icon-iconfonticonfontsousuo1 {
-	color: #000000;
-}
-.navbar-icon view {
-	height: 18px;
-	border-left: 0.5px solid rgba(0, 0, 0, 0.3);
-	margin-top: 6px;
-}
-.navbar-loading {
-	background: #fff;
-	text-align: center;
-}
-.search-input {
-	width: 100%;
-	height: 90rpx;
-	padding: 20rpx 24rpx 0rpx 24rpx;
-	box-sizing: border-box;
-	.gosearch-btn {
-		width: 632rpx;
-		height: 100%;
-		padding: 5rpx;
-		border-radius: 40rpx;
-		background: #f0f0f0;
-		color: #8a8a8a;
-		background: #ffffff;
-		position: relative;
-		box-sizing: border-box;
-		padding-left: 80rpx;
-		border: 1px solid #ff5b00;
-		float: left;
-		.search-icon {
-			width: 80rpx;
-			height: 56rpx;
-			position: absolute;
-			left: 0;
-			top: 9rpx;
-			text-align: center;
-			line-height: 56rpx;
-			.icon-iconfonticonfontsousuo1 {
-				margin: 0 6rpx;
-				font-size: $font-size-40;
-				color: #8a8a8a;
-				z-index: 10;
-			}
-		}
-		.search-text {
-			font-size: $font-size-24;
-			line-height: 56rpx;
-			color: #8a8a8a;
-			float: left;
-		}
-		.search-btn {
-			width: 120rpx;
-			height: 58rpx;
-			border-radius: 30rpx;
-			background-color: #ff5b00;
-			line-height: 58rpx;
-			text-align: center;
-			font-size: $font-size-28;
-			color: #ffffff;
-			float: right;
-		}
-	}
-	.gosearch-kf {
-		width: 70rpx;
-		height: 70rpx;
-		border-radius: 50%;
-		float: left;
-		line-height: 70rpx;
-		text-align: center;
-		.contact-btn {
-			width: 70rpx;
-			height: 70rpx;
-			background-color: rgba(0, 0, 0, 0);
-			line-height: 70rpx;
-			text-align: center;
-			.iconfont {
-				font-size: $font-size-48;
-				color: #ff5b00;
-			}
-		}
-	}
-}
-.swiper-banner-nav {
-	width: 100%;
-	height: 80rpx;
-	box-sizing: border-box;
-	padding: 15rpx 76rpx 15rpx 24rpx;
-	overflow: hidden;
-	display: flex;
-	align-items: center;
-	position: relative;
-	.swiper-nav-icon {
-		width: 76rpx;
-		height: 80rpx;
-		line-height: 80rpx;
-		text-align: center;
-		position: absolute;
-		right: 0;
-		top: 0;
-		.iconfont {
-			font-size: $font-size-28;
-			color: #666666;
-		}
-	}
-	.scroll-view_H {
-		white-space: nowrap;
-		width: 100%;
-		.tui-goods__item {
-			display: inline-block;
-			margin: 0 20rpx;
-			height: 50rpx;
-			line-height: 50rpx;
-			font-size: $font-size-26;
-			color: #333333;
-			text-align: center;
-			&.active {
-				color: #ff5b00;
-				font-weight: bold;
-				position: relative;
-				&::before {
-					content: '';
-					width: 20rpx;
-					height: 4rpx;
-					border-radius: 2rpx;
-					background: #ff5b00;
-					position: absolute;
-					bottom: 0;
-					left: 50%;
-					margin-left: -10rpx;
-				}
-			}
-		}
-	}
-}
-.tui-scroll-box{
-	height: 280rpx;
-	overflow: hidden;
-}
-.tui-seizeaseat-24 {
-	width: 100%;
-	height: auto;
-	box-sizing: border-box;
-	padding: 24rpx;
-	.tui-drop-item {
-		padding: 0 20rpx;
-		height: 56rpx; 
-		float: left;
-		line-height: 56rpx;
-		background: #f5f5f5;
-		font-size: 24rpx;
-		margin: 12rpx 8rpx;
-		text-align: center;
-		border: 1px solid #f5f5f5;
-		color: #666666;
-		border-radius: 28rpx;
-		&.active {
-			background: #ffffff;
-			border-color: #ff5b00;
-			color: #ff5b00;
-		}
-	}
-}
-</style>

+ 0 - 129
components/cm-module/homeIndex/quickOperation.vue

@@ -1,129 +0,0 @@
-<template>
-    <!-- 快捷运营 -->
-    <view class="container-pages">
-		<scroll-view scroll-x>
-			<view class="tui-goods__list">
-				<view class="tui-goods__item" v-for="(item, index) in list"  @click="NavToDetailPage(item)">
-					<view class="list-title">
-						<view class="title-1">
-							<view class="title-1-item">
-								<view style="display: inline-block;">{{ item.name }}</view>
-								<text class="title-2-item">GO></text>
-							</view>
-						</view>
-						<view class="title-2">{{item.remark || ''}}</view>
-					</view>
-					<view class="list-icon">
-						<image class="image" :src="item.icon" mode=""></image>
-					</view>
-				</view>
-			</view>
-		</scroll-view>	
-    </view>
-</template>
-
-<script>
-import cmsMixins from '@/mixins/cmsMixins.js'
-import { mapState } from 'vuex'
-export default {
-    mixins: [cmsMixins],
-    props: {
-        list: {
-            type: Array,
-            default: () => []
-        }
-    },
-    data() {
-        return {
-			shortcutList:[],
-            current: 0 // 切换轮播
-        }
-    },
-	created() {
-		this.shortcutList = this.list
-	},
-    computed: {
-        ...mapState(['hasLogin']),
-    },
-    watch: {},
-    mounted() {},
-    methods: {
-        // 链接跳转
-        NavToDetailPage(pros) {
-            // 采美快捷运营点击量统计
-            this.cmsMoudleHits(4, pros.id)
-			this.$api.FlooryNavigateTo(pros)
-        },
-        swiperChange(e) {
-            //轮播图切换
-            this.current = e.detail.current
-        }
-    }
-}
-</script>
-
-<style lang="scss" scoped>
-	
-.container-pages {
-	width: 100%;
-	height: 152rpx;
-	padding: 24rpx 24rpx 0 24rpx;
-	float: left;
-	background-color: #f7f7f7;
-	box-sizing: border-box;
-	background-color: #f7f7f7;
-	overflow: hidden;
-	display: flex;
-	align-items: center;
-	.tui-goods__list {
-		display: flex;
-		align-items: center;
-		.tui-goods__item {
-			background-color: #fff;
-			height: 128rpx;
-			border-radius: 16rpx;
-			box-sizing: border-box;
-			margin-right: 16rpx;
-			padding:24rpx 12rpx 24rpx 18rpx;
-			display: flex;
-			align-items: center;
-			background: linear-gradient(180deg, #FFF1EB 0%, #FFFFFF 100%);
-			.list-title {
-			    .title-1 {
-			        .title-1-item {
-			            color: #333333;
-			            font-size: 28rpx;
-			            width: 196rpx;
-			            display: flex;
-			            align-items: center;
-			            .title-2-item {
-			                width: 62rpx;
-			                height: 32rpx;
-			                background: #ff5b00;
-			                border-radius: 16rpx;
-			                font-size: 22rpx;
-			                text-align: center;
-			                height: 32rpx;
-			                color: white;
-			                margin-left: 6rpx;
-			            }
-			        }
-			    }
-			    .title-2 {
-			        color: #999999;
-			        font-size: 22rpx;
-			    }
-			}
-			.list-icon {
-			    height: 100%;
-			    border-radius: 50%;
-			    overflow: hidden;
-				.image{
-					width: 80rpx;
-					height: 100%;
-				}
-			}
-		}	
-	}
-}
-</style>

+ 0 - 137
components/cm-module/homeIndex/supplierList.vue

@@ -1,137 +0,0 @@
-<template>
-	<view class="supplier-content clearfix">
-		<view class="tui-group-name" >
-			<view class="tui-group-title">
-				<text> 优质供应商 </text>
-			</view>
-			<view class="tui-sub__desc">采美正品联盟 质量保证</view>
-		</view>
-		<view class="supplier-banner">
-			<image :src="banner" mode="" @click="BannerNavigateTo(supplierObj.linkType,supplierObj.linkParam.id,supplierObj.wwwLink,supplierObj.linkParam.keyword)"></image>
-		</view>
-		<view class="swiper-goods-box">
-			<view class="goods-box-item" v-for="(item,index) in supplierObj.qualitySupplierList" :key="index" @click="NavToDetailPage(item)">
-				<image :src="item.image" mode="" class="box-item-image"></image>
-				<view class="box-item-mask">{{ item.supplierName }}</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default{
-		name:"supplierList",
-		props:{
-			supplierObj:{
-				type:Object
-			}
-		},
-		data() {
-			return{
-				banner:'',
-				supplierList:[]
-			}
-		},
-		created(){
-			this.initData(this.supplierObj)
-		},
-		computed: {
-	
-		},
-		methods:{
-			initData(data){
-				this.banner = data.crmImage
-				this.supplierList = data.qualitySupplierList
-			},
-			BannerNavigateTo(linkType,linkId,linkHref,keyword) {//跳转
-				this.$api.BannerNavigateTo(linkType,linkId,linkHref,keyword)
-			},
-			NavToDetailPage(item) {//跳转
-				this.$api.navigateTo(`/pages/supplier/user/my-shop?shopId=${item.linkParam.id}`)
-			}
-		}
-	}
-</script>
-
-<style lang="scss">
-	.supplier-content{
-		background-color: #F7F7F7;
-		width: 100%;
-		height: auto;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-	}
-	.tui-group-name {
-		width: 100%;
-		height: 92rpx;
-		padding: 20rpx 0;
-	}
-	.tui-group-title{
-		width: 100%;
-		float: left;
-		font-size: 34rpx;
-		font-weight: bold;
-		text-align: left;
-		line-height: 49rpx;
-		color: #333;
-	}
-	.tui-sub__desc {
-		width: 100%;
-		float: left;
-		color: rgba(153,153,153,0.9);
-		font-size: $font-size-26;
-	}
-	.supplier-banner{
-		width: 100%;
-		height: 240rpx;
-		float: left;
-		margin-top: 24rpx;
-		image{
-			width: 100%;
-			height: 240rpx;
-			display: block;
-		}
-	}
-	.swiper-goods-box{
-		width: 100%;
-		height: auto;
-		float: left;
-		margin-top: 24rpx;
-		.goods-box-item{
-			width: 160rpx;
-			height: 200rpx;
-			float: left;
-			margin-right: 20rpx;
-			margin-bottom: 20rpx;
-			background-color: #FFFFFF;
-			&:nth-child(4n){
-				margin-right: 0;
-			}
-			.box-item-image{
-				width: 160rpx;
-				height: 160rpx;
-				display: block;
-				float: left;
-			}
-			.box-item-mask{
-				width: 100%;
-				height: 40rpx;
-				line-height: 40rpx;
-				font-size: $font-size-20;
-				text-align: center;
-				color: #666666;
-				background-color: #f9f9f9;
-				float: left;
-				box-sizing: border-box;
-				padding:0 20rpx;
-				white-space: normal;
-				word-break: break-all;
-				overflow: hidden;
-				text-overflow: ellipsis;
-				display: -webkit-box;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 1;
-			}
-		}
-	}
-</style>

+ 2 - 2
components/cm-module/pageTemplate/template-product.vue

@@ -83,8 +83,8 @@ export default{
 		margin-right: 0;
 	}
 	.item-img {
-		width: 330rpx;
-		height: 330rpx;
+		width: 332rpx;
+		height: 332rpx;
 		border-radius: 16rpx 16rpx 0 0;
 		display: block;
 		margin-bottom: 8rpx;

+ 11 - 15
components/cm-module/productDetails/evaluate.vue

@@ -20,8 +20,8 @@
 					</view>
 				</view>
 				<!--加载loadding-->
-				<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-				<tui-nomore :visible="!pullUpOn" bgcolor="#FFFFFF" :text='nomoreText'></tui-nomore>
+				<tui-loadmore :visible="loadding" :index="3" type="black" />
+				<tui-nomore :visible="!pullUpOn" bgcolor="#FFFFFF" :text='nomoreText' />
 				<!--加载loadding-->
 			</scroll-view>	
 		</view>
@@ -30,8 +30,6 @@
 
 <script>
 	import authorize from '@/common/config/authorize.js'
-	import tuiLoadmore from "@/components/tui-components/loadmore/loadmore"
-	import tuiNomore from "@/components/tui-components/nomore/nomore"
 	import uniStars from '@/components/uni-stars/uni-stars.vue'
 	
 	export default{
@@ -44,8 +42,6 @@
 			}
 		},
 		components:{
-			tuiLoadmore,
-			tuiNomore,
 			uniStars
 		},
 		data() {
@@ -67,7 +63,7 @@
 		created() {
 			this.productID = this.queryProductid
 			this.infoEvaluate()
-			this.setScrollHeight();		
+			this.setScrollHeight()		
 		},
 		methods:{
 			infoEvaluate(){
@@ -77,8 +73,8 @@
 						this.isEmpty = false
 						this.hasNextPage = responseData.hasNextPage
 						this.evaluateList =responseData.results
-						this.pullFlag = false;
-						setTimeout(()=>{this.pullFlag = true;},500)
+						this.pullFlag = false
+						setTimeout(()=>{this.pullFlag = true},500)
 						if(this.hasNextPage){
 							this.pullUpOn = false
 							this.nomoreText = '上拉显示更多'
@@ -102,8 +98,8 @@
 					if(responseData.results&&responseData.results.length > 0){
 						this.hasNextPage = responseData.hasNextPage
 						this.evaluateList = this.evaluateList.concat(responseData.results) 
-						this.pullFlag = false;// 防上拉暴滑
-						setTimeout(()=>{this.pullFlag = true;},500)
+						this.pullFlag = false// 防上拉暴滑
+						setTimeout(()=>{this.pullFlag = true},500)
 						if(this.hasNextPage){
 							this.pullUpOn = false
 							this.nomoreText = '上拉显示更多'
@@ -121,13 +117,13 @@
 				if(this.hasNextPage){
 					this.loadding = true
 					this.pullUpOn = true
-					this.getOnReachBottomData(this.currentTab);
+					this.getOnReachBottomData(this.currentTab)
 				}	
 			},
 			setScrollHeight() {
-				const {windowHeight, pixelRatio} = wx.getSystemInfoSync();
-				this.windowHeight = windowHeight - 1;
-				this.scrollHeight = windowHeight - 1;
+				const {windowHeight, pixelRatio} = wx.getSystemInfoSync()
+				this.windowHeight = windowHeight - 1
+				this.scrollHeight = windowHeight - 1
 			}
 		},
 		

+ 13 - 7
components/cm-module/scrollTop/scrollTop.vue

@@ -1,14 +1,13 @@
 <template name="scrollTop">
-    <!-- 商品详情价格判断 -->
     <view>
         <view class="scrollTop" :style="{ bottom: bottom + 'rpx' }">
             <view class="icon msg" v-if="isShowKefu">
                 <!-- #ifdef MP-WEIXIN -->
-                <button class="contact-btn" open-type="contact" @bindcontact="handleContact">
+               <button class="contact-btn" open-type="contact" @bindcontact="handleContact">
                     <text class="iconfont icon-zixunrexian"></text>
                 </button>
                 <!-- #endif -->
-            </view>
+            </view> 
             <view class="icon top" @click="onPageScrollTop" :class="isScrollTop ? 'show' : 'none'">
                 <text class="iconfont icon-zhiding"></text>
             </view>
@@ -16,7 +15,8 @@
     </view>
 </template>
 
-<script>
+<script>
+import { mapState, mapMutations } from 'vuex'
 export default {
     name: 'scrollTop',
     props: {
@@ -46,7 +46,10 @@ export default {
             isShowIcon: true
         }
     },
-    created() {},
+    created() {},
+    computed: {
+        ...mapState(['hasLogin'])
+    },
     methods: {
         onPageScrollTop() {
             uni.pageScrollTo({
@@ -87,8 +90,11 @@ export default {
                 color: #ffffff;
             }
         }
-        &.msg {
-            background-image: linear-gradient(0deg, #f28e31 0%, #ff5b00 100%);
+        &.msg {
+            background-color: #ffe6dc;
+            .iconfont {
+                color: #ff5b00;
+            }
         }
         &.top {
             background-color: rgba(0, 0, 0, 0.4);

+ 2 - 2
components/cm-share-popup/cm-share-popup.vue

@@ -83,7 +83,7 @@ export default {
             }
         },
         // 打开弹窗
-        open() {
+        open() {
             this.$refs.sharePopup.open()
             this.$emit('open')
         },
@@ -193,7 +193,7 @@ export default {
                     image: this.posterData.image,
                     qrCode: this.posterData.qrCode, // 用户二维码
                     linkMan: this.posterData.linkMan, // 用户名
-                    contractMobile: this.posterData.contractMobile.replace(/(?=(\d{4})+$)/g,"-") // 用户手机号
+                    contractMobile: this.posterData.contractMobile.replace(/(?=(\d{4})+$)/g,'-') // 用户手机号
                 })
                 return await drawPoster.draw()
             } catch (e) {

+ 13 - 11
components/cm-share-popup/draw-poster.js

@@ -3,16 +3,18 @@ const defaultOptions = () => ({
     avatarUrl: '',
     userName: '采美',
     subTitle: '强烈为你推荐该商城',
-    coverUrl: '',
+    coverUrl: '',
     bgImageUrl: 'https://static.caimei365.com/app/img/icon/bgImage.png',
-    userBg: 'https://static.caimei365.com/app/img/icon/bg-card.png',
-    userTitleBg: 'https://static.caimei365.com/app/img/icon/logo-fanbai.png',
+    // userBg: 'https://static.caimei365.com/app/img/icon/bg-card.png',
+    userBg: 'https://static.caimei365.com/app/img/bg/home_cumres_bg@2x.png',
+    userTitleBg: 'https://static.caimei365.com/app/img/icon/logo-fanbai@2x.png',
+    // userTitleBg: 'https://static.caimei365.com/app/img/icon/logo-fanbai.png',
     ewmUrl: '',
     textArray: [],
     scale: 0.5,
     duty: {
         text: '客户经理',
-        bgColor: '#FFBB00',
+        bgColor: '#FFF1EB',
         color: '#fff'
     }
 })
@@ -98,10 +100,10 @@ export default class DrawPoster {
             await this.drawBorderReduisImage(userBg, 28 * scale, 920 * scale, 694 * scale, 290 * scale, 8)
             await this.drawUserCardInner() // 绘制名片内容
             await this.drawCircleImg(image, 120 * scale, 1090 * scale, 30) //头像
-            this.drawFontText(36 * scale, 200 * scale, 1070 * scale, '#fff', linkMan, 'bold', true)
-            this.drawFontText(30 * scale, 200 * scale, 1130 * scale, '#fff', contractMobile, '400')
+            this.drawFontText(36 * scale, 200 * scale, 1070 * scale, '#333333', linkMan, 'bold', true)
+            this.drawFontText(30 * scale, 200 * scale, 1130 * scale, '#333333', contractMobile, '400')
             await this.drawBorderReduisImage(qrCode, 556 * scale, 1010 * scale, 120 * scale, 120 * scale, 6)
-            this.drawFontText(18 * scale, 550 * scale, 1160 * scale, '#fff', ['长按或扫二维码', '——联系我——'], '400')
+            this.drawFontText(18 * scale, 550 * scale, 1160 * scale, '#333333', ['长按或扫二维码', '——联系我——'], '400')
             return Promise.resolve(true)
         } catch (e) {
             return Promise.reject(e)
@@ -158,12 +160,12 @@ export default class DrawPoster {
             this.ctx.setFillStyle(color)
             this.ctx.fillText(text, x, y)
             if (isDuty) {
-                await this.drawRoundRect(x + (text.length * fontsize) + 10,  y-fontsize, 66, fontsize + 4, 6, '#FFBB00')
+                await this.drawRoundRect(x + (text.length * fontsize) + 8 ,  y-fontsize, 66, fontsize + 4, 4, '#FFF1EB')
                 // this.ctx.fillStyle = `${this.options.duty.bgColor}`
                 // this.ctx.fillRect(x + (text.length * fontsize) + 10, y-fontsize, 66, fontsize + 4)
-                this.ctx.font = `${400} ${fontsize-4}px sans-serif`
-                this.ctx.setFillStyle('#fff')
-                this.ctx.fillText(this.options.duty.text, x + (text.length * fontsize) + 15, y - 2)
+                this.ctx.font = `${400} ${fontsize-6}px sans-serif`
+                this.ctx.setFillStyle('#666666')
+                this.ctx.fillText(this.options.duty.text, x + (text.length * fontsize) + 16, y - 2)
             }
         }
     }

+ 1 - 1
components/cm-share-popup/simple-share-popup/simple-share-popup.vue

@@ -40,7 +40,7 @@ export default {
         cmPopup
     },
     methods: {
-        open() {
+        open() {
             this.$refs.sharePopup.open()
             this.$emit('open')
         },

+ 13 - 6
components/cm-share-popup/uni-popup/uni-popup.vue

@@ -198,7 +198,7 @@ export default {
 		// })
 		// #endif
 	},
-	created() {
+	created() {
 		// this.mkclick =  this.isMaskClick || this.maskClick
 		if(this.isMaskClick === null && this.maskClick === null){
 			this.mkclick  = true
@@ -237,11 +237,11 @@ export default {
 			this.clearPropagation = true
 		},
 
-		open(direction) {
+		open(direction) {
 			let innerType = ['top', 'center', 'bottom', 'left', 'right', 'message', 'dialog', 'share']
 			if (!(direction && innerType.indexOf(direction) !== -1)) {
 				direction = this.type
-			}
+			}
 			if (!this.config[direction]) {
 				console.error('缺少类型:', direction)
 				return
@@ -390,8 +390,8 @@ export default {
 .uni-popup {
 	position: fixed;
 	/* #ifndef APP-NVUE */
-	z-index: 99;
-	/* #endif */
+	z-index: 99999;
+	/* #endif */
 	&.top,
 	&.left,
 	&.right {
@@ -401,7 +401,14 @@ export default {
 		/* #ifndef H5 */
 		top: 0;
 		/* #endif */
-	}
+	}
+    &.bottom{
+        /* #ifdef H5 || MP-WEIXIN */
+            bottom: 0;
+            left: 0;
+            width: 100%;
+        /* #endif */
+    }
 	.uni-popup__wrapper {
 		/* #ifndef APP-NVUE */
 		display: block;

+ 139 - 97
components/thorui/tui-drawer/tui-drawer.vue

@@ -1,98 +1,140 @@
-<template>
-	<view  @touchmove.stop.prevent>
-		<view v-if="mask" class="tui-drawer-mask" :class="{'tui-drawer-mask_show':visible}" @tap="handleMaskClick"></view>
-		<view class="tui-drawer-container" :class="[mode=='left'?'tui-drawer-container_left':'tui-drawer-container_right',visible?'tui-drawer-container_show':'']">
-			<slot></slot>
-		</view>
-	</view>
-
-</template>
-
-<script>
-	/**
-	 * 超过一屏时插槽使用scroll-view
-	 **/
-	export default {
-		name:"tuiDrawer",
-		props: {
-			visible: {
-				type: Boolean,
-				default: false
-			},
-			mask: {
-				type: Boolean,
-				default: true
-			},
-			maskClosable: {
-				type: Boolean,
-				default: true
-			},
-			mode: {
-				type: String,
-				default: 'true' // left right
-			}
-		},
-		methods: {
-			handleMaskClick() {
-				if (!this.maskClosable) {
-					return;
-				}
-				this.$emit('close', {});
-			}
-		}
-	}
-</script>
-
-<style scoped>
-	.tui-drawer-mask {
-		opacity: 0;
-		visibility: hidden;
-		position: fixed;
-		top: 0;
-		left: 0;
-		right: 0;
-		bottom: 0;
-		z-index: 8888;
-		background-color: rgba(0, 0, 0, 0.6);
-		transition: all 0.3s ease-in-out;
-	}
-	.tui-drawer-mask_show {
-		display: block;
-		visibility: visible;
-		opacity: 1;
-	}
-
-	.tui-drawer-container {
-		position: fixed;
-		left: 50%;
-		height: 100.2%;
-		top: 0;
-		transform: translate3d(-50%, -50%, 0);
-		transform-origin: center;
-		transition: all 0.3s ease-in-out;
-		z-index: 99999;
-		opacity: 0;
-		overflow-y: scroll;
-		background-color: #fff;
-		-webkit-overflow-scrolling: touch;
-		-ms-touch-action: pan-y cross-slide-y;
-		-ms-scroll-chaining: none;
-		-ms-scroll-limit: 0 50 0 50;
-	}
-	.tui-drawer-container_left {
-		left: 0;
-		top: 50%;
-		transform: translate3d(-100%, -50%, 0);
-	}
-
-	.tui-drawer-container_right {
-		right: 0;
-		top: 50%;
-		left: auto;
-		transform: translate3d(100%, -50%, 0);
-	}
-	.tui-drawer-container_show {
-		opacity: 1;
-		transform: translate3d(0, -50%, 0);
-	}
+<template>
+	<!-- @touchmove.stop.prevent -->
+	<view>
+		<view v-if="mask" class="tui-drawer-mask" :class="{ 'tui-drawer-mask_show': visible }" :style="{ zIndex: maskZIndex }" @tap="handleMaskClick"></view>
+		<view
+			class="tui-drawer-container"
+			:class="[`tui-drawer-container_${mode}`, visible ? `tui-drawer-${mode}__show` : '']"
+			:style="{ zIndex: zIndex, backgroundColor: backgroundColor }"
+		>
+			<slot></slot>
+		</view>
+	</view>
+</template>
+
+<script>
+/**
+ * 超过一屏时插槽使用scroll-view
+ **/
+export default {
+	name: 'tuiDrawer',
+	emits: ['close'],
+	props: {
+		visible: {
+			type: Boolean,
+			default: false
+		},
+		mask: {
+			type: Boolean,
+			default: true
+		},
+		maskClosable: {
+			type: Boolean,
+			default: true
+		},
+		// left right bottom top
+		mode: {
+			type: String,
+			default: 'right'
+		},
+		//drawer z-index
+		zIndex: {
+			type: [Number, String],
+			default: 990
+		},
+		//mask z-index
+		maskZIndex: {
+			type: [Number, String],
+			default: 980
+		},
+		backgroundColor: {
+			type: String,
+			default: '#fff'
+		}
+	},
+	methods: {
+		handleMaskClick() {
+			if (!this.maskClosable) {
+				return;
+			}
+			this.$emit('close', {});
+		}
+	}
+};
+</script>
+
+<style scoped>
+.tui-drawer-mask {
+	opacity: 0;
+	visibility: hidden;
+	position: fixed;
+	top: 0;
+	left: 0;
+	right: 0;
+	bottom: 0;
+	background-color: rgba(0, 0, 0, 0.6);
+	transition: all 0.3s ease-in-out;
+}
+.tui-drawer-mask_show {
+	display: block;
+	visibility: visible;
+	opacity: 1;
+}
+
+.tui-drawer-container {
+	position: fixed;
+	left: 50%;
+	height: 100.2%;
+	top: 0;
+	transform: translate3d(-50%, -50%, 0);
+	transform-origin: center;
+	transition: all 0.3s ease-in-out;
+	opacity: 0;
+	overflow-y: scroll;
+	-webkit-overflow-scrolling: touch;
+	-ms-touch-action: pan-y cross-slide-y;
+	-ms-scroll-chaining: none;
+	-ms-scroll-limit: 0 50 0 50;
+}
+.tui-drawer-container_left {
+	left: 0;
+	top: 50%;
+	transform: translate3d(-100%, -50%, 0);
+}
+
+.tui-drawer-container_right {
+	right: 0;
+	top: 50%;
+	left: auto;
+	transform: translate3d(100%, -50%, 0);
+}
+
+.tui-drawer-container_bottom,
+.tui-drawer-container_top {
+	width: 100%;
+	height: auto !important;
+	min-height: 20rpx;
+	left: 0;
+	right: 0;
+	transform-origin: center;
+	transition: all 0.3s ease-in-out;
+}
+.tui-drawer-container_bottom {
+	bottom: 0;
+	top: auto;
+	transform: translate3d(0, 100%, 0);
+}
+.tui-drawer-container_top {
+	transform: translate3d(0, -100%, 0);
+}
+.tui-drawer-left__show,
+.tui-drawer-right__show {
+	opacity: 1;
+	transform: translate3d(0, -50%, 0);
+}
+.tui-drawer-top__show,
+.tui-drawer-bottom__show {
+	opacity: 1;
+	transform: translate3d(0, 0, 0);
+}
 </style>

+ 1 - 1
components/thorui/tui-top-dropdown/tui-top-dropdown.vue

@@ -77,7 +77,7 @@ export default {
 	/* visibility: hidden; */
 	transition: all 0.3s ease-in-out;
 	z-index: 996;
-	top: 0;
+	top: -12rpx;
 }
 
 .tui-dropdown-show {

+ 0 - 166
components/tui-components/loadmore/loadmore.vue

@@ -1,166 +0,0 @@
-<template>
-	<view class="tui-loadmore" v-if="visible">
-		<view :class="['tui-loading-'+index, (index==3 && type)?'tui-loading-'+type:'']"></view>
-		<view class="tui-loadmore-tips">{{text}}</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiLoadmore",
-		props: {
-			//显示文本
-			text: {
-				type: String,
-				default: "正在加载..."
-			},
-			//是否可见
-			visible: {
-				type: Boolean,
-				default: false
-			},
-			//loading 样式 :1,2,3
-			index: {
-				type: Number,
-				default: 1
-			},
-			//颜色设置,只有index=3时生效:primary,red,orange,green
-			type: {
-				type: String,
-				default: ""
-			}
-		}
-	}
-</script>
-
-<style>
-	.tui-loadmore {
-		width: 48%;
-		margin: 1.5em auto;
-		line-height: 1.5em;
-		font-size: 24upx;
-		text-align: center;
-	}
-
-	.tui-loading-1 {
-		margin: 0 5px;
-		width: 20px;
-		height: 20px;
-		display: inline-block;
-		vertical-align: middle;
-		-webkit-animation: a 1s steps(12) infinite;
-		animation: a 1s steps(12) infinite;
-		background: transparent url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=) no-repeat;
-		background-size: 100%;
-	}
-
-	@-webkit-keyframes a {
-		0% {
-			-webkit-transform: rotate(0deg);
-			transform: rotate(0deg);
-		}
-
-		to {
-			-webkit-transform: rotate(1turn);
-			transform: rotate(1turn);
-		}
-	}
-
-	@keyframes a {
-		0% {
-			-webkit-transform: rotate(0deg);
-			transform: rotate(0deg);
-		}
-
-		to {
-			-webkit-transform: rotate(1turn);
-			transform: rotate(1turn);
-		}
-	}
-
-	.tui-loadmore-tips {
-		display: inline-block;
-		vertical-align: middle;
-	}
-
-	.tui-loading-2 {
-		width: 28upx;
-		height: 28upx;
-		border: 1px solid #8f8d8e;
-		border-radius: 50%;
-		margin: 0 6px;
-		display: inline-block;
-		vertical-align: middle;
-		clip-path: polygon(0% 0%,100% 0%,100% 30%,0% 30%);
-		animation: rotate 1s linear infinite;
-	}
-
-	@-webkit-keyframes rotate {
-		from {
-			transform: rotatez(0deg);
-		}
-
-		to {
-			transform: rotatez(360deg);
-		}
-	}
-
-	@keyframes rotate {
-		from {
-			transform: rotatez(0deg);
-		}
-
-		to {
-			transform: rotatez(360deg);
-		}
-	}
-
-	.tui-loading-3 {
-		display: inline-block;
-		margin: 0 6px;
-		vertical-align: middle;
-		width: 28upx;
-		height: 28upx;
-		background: 0 0;
-		border-radius: 50%;
-		border: 2px solid;
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #8f8d8e;
-		animation: tui-rotate 0.7s linear infinite;
-	}
-
-	.tui-loading-3.tui-loading-primary {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #5677fc;
-	}
-
-	.tui-loading-3.tui-loading-green {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #19be6b;
-	}
-
-	.tui-loading-3.tui-loading-orange {
-		border-color: #e5e5e5 #e5e5e5 #e5e5e5 #ff7900;
-	}
-
-	.tui-loading-3.tui-loading-red {
-		border-color: #ededed #ededed #ededed #ed3f14;
-	}
-
-	@-webkit-keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-
-	@keyframes tui-rotate {
-		0% {
-			transform: rotate(0);
-		}
-
-		100% {
-			transform: rotate(360deg);
-		}
-	}
-</style>

+ 0 - 119
components/tui-components/nomore/nomore.vue

@@ -1,119 +0,0 @@
-<template>
-	<view class="tui-nomore-class tui-loadmore-none" v-if="visible">
-		<view :class="[isDot?'tui-nomore-dot':'tui-nomore']">
-			<view :style="{background:bgcolor}" :class="[isDot?'tui-dot-text':'tui-nomore-text']">{{isDot?dotText:text}}</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		name: "tuiNomore",
-		props: {
-			//是否可见
-			visible: {
-				type: Boolean,
-				default: false
-			},
-			//当前页面背景颜色
-			bgcolor: {
-				type: String,
-				default: "#FFFFFF"
-			},
-			//是否以圆点代替 "没有更多了"
-			isDot: {
-				type: Boolean,
-				default: false
-			},
-			//isDot为false时生效
-			text: {
-				type: String,
-				default: "已至底部"
-			}
-		},
-		data() {
-			return {
-				dotText: "●"
-			};
-		}
-	}
-</script>
-
-<style>
-	.tui-loadmore-none {
-		width: 50%;
-		margin: 1em auto;
-		line-height: 1.5em;
-		font-size: 24rpx;
-		display: flex;
-		justify-content: center;
-	}
-
-	.tui-nomore {
-		width: 100%;
-		height: 100%;
-		position: relative;
-		display: flex;
-		justify-content: center;
-		margin-top: 10rpx;
-		padding-bottom: 6rpx;
-	}
-
-	.tui-nomore::before {
-		content: ' ';
-		position: absolute;
-		border-bottom: 1rpx solid #e5e5e5;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		width: 100%;
-		top: 18rpx;
-		left: 0;
-	}
-
-	.tui-nomore-text {
-		color: #999;
-		font-size: 24rpx;
-		text-align: center;
-		padding: 0 18rpx;
-		height: 36rpx;
-		line-height: 36rpx;
-		position: relative;
-		z-index: 1;
-	}
-
-	.tui-nomore-dot {
-		position: relative;
-		text-align: center;
-		-webkit-display: flex;
-		display: flex;
-		-webkit-justify-content: center;
-		justify-content: center;
-		margin-top: 10rpx;
-		padding-bottom: 6rpx;
-	}
-
-	.tui-nomore-dot::before {
-		content: '';
-		position: absolute;
-		border-bottom: 1rpx solid #e5e5e5;
-		-webkit-transform: scaleY(0.5);
-		transform: scaleY(0.5);
-		width: 360rpx;
-		top: 18rpx;
-	}
-
-	.tui-dot-text {
-		position: relative;
-		color: #e5e5e5;
-		font-size: 10px;
-		text-align: center;
-		width: 50rpx;
-		height: 36rpx;
-		line-height: 36rpx;
-		-webkit-transform: scale(0.8);
-		transform: scale(0.8);
-		-webkit-transform-origin: center center;
-		transform-origin: center center;
-		z-index: 1;
-	}
-</style>

+ 0 - 152
components/uni-calendar/uni-calendar-item.vue

@@ -1,152 +0,0 @@
-<template>
-	<view class="uni-calendar-item__weeks-box" :class="{
-		'uni-calendar-item--disable':weeks.disable,
-		'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-		'uni-calendar-item--checked':(calendar.fullDate === weeks.fullDate && !weeks.isDay) ,
-		'uni-calendar-item--multiple': weeks.multiple
-		}"
-	 @click="choiceDate(weeks)">
-		<view class="uni-calendar-item__weeks-box-item">
-			<text v-if="selected&&weeks.extraInfo" class="uni-calendar-item__weeks-box-circle"></text>
-			<text class="uni-calendar-item__weeks-box-text" :class="{
-				'uni-calendar-item--isDay-text': weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.date}}</text>
-			<text v-if="!lunar&&!weeks.extraInfo && weeks.isDay" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--multiple': weeks.multiple,
-				}">今天</text>
-			<text v-if="lunar&&!weeks.extraInfo" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.isDay?'今天': weeks.lunar.IDayCn}}</text>
-			<text v-if="weeks.extraInfo&&weeks.extraInfo.info" class="uni-calendar-item__weeks-lunar-text" :class="{
-				'uni-calendar-item--extra':weeks.extraInfo.info,
-				'uni-calendar-item--isDay-text':weeks.isDay,
-				'uni-calendar-item--isDay':calendar.fullDate === weeks.fullDate && weeks.isDay,
-				'uni-calendar-item--checked':calendar.fullDate === weeks.fullDate && !weeks.isDay,
-				'uni-calendar-item--multiple': weeks.multiple,
-				'uni-calendar-item--disable':weeks.disable,
-				}">{{weeks.extraInfo.info}}</text>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default {
-		props: {
-			weeks: {
-				type: Object,
-				default () {
-					return {}
-				}
-			},
-			calendar: {
-				type: Object,
-				default: () => {
-					return {}
-				}
-			},
-			selected: {
-				type: Array,
-				default: () => {
-					return []
-				}
-			},
-			lunar: {
-				type: Boolean,
-				default: false
-			}
-		},
-		methods: {
-			choiceDate(weeks) {
-				this.$emit('change', weeks)
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	.uni-calendar-item__weeks-box {
-		flex: 1;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-	}
-
-	.uni-calendar-item__weeks-box-text {
-		font-size: $uni-font-size-base;
-		color: $uni-text-color;
-	}
-
-	.uni-calendar-item__weeks-lunar-text {
-		font-size: $uni-font-size-sm;
-		color: $uni-text-color;
-	}
-
-	.uni-calendar-item__weeks-box-item {
-		position: relative;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex-direction: column;
-		justify-content: center;
-		align-items: center;
-		width: 100rpx;
-		height: 100rpx;
-	}
-
-	.uni-calendar-item__weeks-box-circle {
-		position: absolute;
-		top: 5px;
-		right: 5px;
-		width: 8px;
-		height: 8px;
-		border-radius: 8px;
-		background-color: $uni-color-error;
-
-	}
-
-	.uni-calendar-item--disable {
-		background-color: rgba(249, 249, 249, $uni-opacity-disabled);
-		color: $uni-text-color-disable;
-	}
-
-	.uni-calendar-item--isDay-text {
-		color: $uni-color-primary;
-	}
-
-	.uni-calendar-item--isDay {
-		background-color: $uni-color-primary;
-		opacity: 0.8;
-		color: #fff;
-	}
-
-	.uni-calendar-item--extra {
-		color: $uni-color-error;
-		opacity: 0.8;
-	}
-
-	.uni-calendar-item--checked {
-		background-color: $uni-color-primary;
-		color: #fff;
-		opacity: 0.8;
-	}
-
-	.uni-calendar-item--multiple {
-		background-color: $uni-color-primary;
-		color: #fff;
-		opacity: 0.8;
-	}
-</style>

+ 0 - 67
components/uni-search/bt-search.vue

@@ -1,67 +0,0 @@
-<template name="bt-search">
-	<view class="search-input">
-		<template>
-			<view class="gosearch-btn" @click="this.$api.navigateTo(clickPath)">
-				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				<text>{{toestText}}</text>
-			</view>
-		</template>
-	</view>
-</template>
-
-<script>
-	export default{
-		name:"bt-search",
-		props:{
-			clickPath:{	//选择块级显示还是圆形显示
-				type: String,
-				default: ''
-			},
-			toestText:{
-				type: String,
-				default: ''
-			}
-		},
-		data() {
-			return {
-				
-			};
-		},
-		methods:{
-			
-		}
-	}	
-</script>
-
-<style lang="scss">
-	.search-input{
-		width: 100%;
-		height: 70rpx;
-		padding: 12rpx 0;
-		background: #FFFFFF;
-		.gosearch-btn{
-			/* #ifndef APP-NVUE */
-			display: flex;
-			/* #endif */
-			flex: 1;
-			flex-direction: row;
-			justify-content: center;
-			align-items: center;
-			width: 662rpx;
-			height: 100%;
-			border-radius: 40rpx;
-			background: #F0F0F0;
-			margin: 0 auto;
-			padding:0 20rpx;
-			font-size: 28rpx;
-			line-height: 70rpx;
-			color: #8A8A8A;
-			.icon-iconfonticonfontsousuo1{
-				margin:0 6rpx;
-				font-size: 34rpx;
-				color: #8A8A8A;
-				z-index: 10;
-			}
-		}
-	}
-</style>

+ 1 - 1
components/uni-search/cat-search.vue

@@ -14,7 +14,7 @@
 				class="gosearch-btn"
 				:style="{
 					paddingLeft: navbarBtn.height + 'px;',
-					left: navbarBtn.height / 2 + 'px;',
+					left: navbarBtn.height / 4 + 'px;',
 					borderRadius: navbarBtn.height / 2 + 'px;',
 					width: 375 - navbarBtn.width - 20 + 'px;',
 					lineHeight: navbarBtn.height + 'px;'

+ 0 - 323
components/uni-search/or-search.vue

@@ -1,323 +0,0 @@
-<template name="or-search">
-	<view>
-		<view class="search">
-			<view class="search-input">
-				<text class="iconfont icon-iconfonticonfontsousuo1"></text>
-				<input maxlength="20" focus type="text" value="" confirm-type="search" @focus="onFocus" @input="onShowClose" @confirm="searchStart()" placeholder="请输入商品关键词" v-model.trim="searchText"/>
-				<text class="iconfont icon-shanchu1" v-if="isShowClose" @click="delInputText()"></text>
-			</view>
-			<view class="search-btn" @click="searchStart()">
-				搜索
-			</view>
-		</view>
-		<view class="search-container">
-			<view :class="'s-' + theme" v-if="isSearchHistory">
-				<view class="header">
-					搜索历史
-					<text class="iconfont icon-shanchu" @click="delhistory"></text>
-				</view>
-				<view class="list">
-					<view v-for="(item,index) in serachRecordList" :key="index" @click="keywordsClick(item.searchWord)">{{item.searchWord}}</view>
-				</view>
-			</view>
-		</view>
-		<!-- 删除弹窗 -->
-		<model-alert v-if="isShowDelModal"
-					 :alertText='alertText' 
-					 @btnConfirm ='confirmDetele'>
-		</model-alert>
-	</view>
-</template>
-
-<script>
-	import modelAlert from '@/components/cm-module/modelAlert/modelAlert.vue'
-	import authorize from '@/common/config/authorize.js'
-	export default{
-		name:"or-search",
-		components:{
-			modelAlert
-		},
-		props:{
-			isFocus:{	//是否自动获取焦点
-				type: Boolean,
-				default: false
-			},
-			theme:{	//选择块级显示还是圆形显示
-				type: String,
-				default: 'block'
-			}
-		},
-		data() {
-			return {
-				searchText:'',								//搜索关键词
-				alertText:'确定删除全部历史记录?',
-				isShowDelModal:false,						//控制显示删除弹窗
-				isShowClose:false,							//是否显示清空输入框图标
-				isSearchHistory:false,						//是都显示搜索历史
-				serachRecordList:[]
-			};
-		},
-		created() {
-		},
-		methods: {
-			initGetSerachRecord(){
-				authorize.getCode('weixin').then(wechatcode =>{
-					this.$api.get('/search/history',{organizeID:this.userOrganizeID,code:wechatcode},
-						response =>{
-							if(response.code == '1'){
-								this.serachRecordList = response.data
-								if(this.serachRecordList.length>0){
-									this.isSearchHistory = true
-								}else{
-									this.isSearchHistory = false
-								}
-							}else{
-								this.$util.msg(response.msg,2000)
-							}							
-						}
-					)
-				})
-			},
-			searchStart: function() {	//触发搜索
-				let _this = this;
-				if (_this.searchText == '') {
-					this.$util.msg('请输入商品关键词',2000);
-				}else{
-					_this.isSearchHistory = false
-					_this.$emit('getSearchText', _this.searchText)
-				}
-			},
-			onShowClose () { //输入框失去焦点时触发
-				this.inputEmpty(this.searchText)
-			},
-			onFocus () { //输入框获取焦点时触发
-				this.inputEmpty(this.searchText)
-				this.initGetSerachRecord()
-			},
-			delInputText () { //清除输入框内容
-				this.searchText = ''
-				this.isShowClose = false
-				this.$parent.isShowWrapper = false
-				this.inputEmpty(this.searchText)
-				this.initGetSerachRecord()
-			},
-			keywordsClick (item) {	//关键词搜索与历史搜索
-				this.searchText = item;
-				this.searchStart();
-			},
-			delhistory () {		//清空历史记录
-				this.isShowDelModal = true;				
-			},
-			confirmDetele() {
-				this.isShowDelModal = false;
-				authorize.getCode('weixin').then(wechatcode =>{
-					this.$api.get('/search/deleteOrderRecord',{organizeID:this.userOrganizeID,code:wechatcode},
-						response =>{
-							if(response.code == '1'){
-								this.serachRecordList=[];
-								this.isSearchHistory = false
-							}else{
-								this.$util.msg(response.msg,2000)
-							}							
-						}
-					)
-				})
-			},
-			inputEmpty(val){
-				this.$parent.isShowWrapper = false
-				if(val != ''){
-					this.isShowClose = true
-				}else{
-					this.isShowClose = false
-				}
-			}
-		}
-	}
-</script>
-
-<style lang="scss" scoped>
-	@import "@/uni.scss";
-	.search{
-		width: 702rpx;
-		height: 80rpx;
-		padding: 12rpx 24rpx;
-		border-bottom: 1px solid #F0F0F0;
-		position: fixed;
-		top: 0;
-		left: 0;
-		background: #FFFFFF;
-		z-index: 1001;
-		.search-input{
-			width: 448rpx;
-			height: 80rpx;
-			padding: 0 68rpx;
-			line-height: 80rpx;
-			border-radius: 40rpx;
-			position: relative;
-			background: #F0F0F0;
-			float: left;
-			.icon-iconfonticonfontsousuo1{
-				font-size: 36rpx;
-				color: #8A8A8A;
-				position: absolute;
-				left: 24rpx;
-				z-index: 10;
-			}
-			.icon-shanchu1{
-				font-size: 36rpx;
-				color: #8A8A8A;
-				position: absolute;
-				right: 24rpx;
-				top: 0;
-				padding: 0 10rpx;
-				z-index: 10;
-			}
-			input{
-				width: 448rpx;
-				height: 80rpx;
-				background-color: #F0F0F0;
-				font-size: 26rpx;
-			}
-		}
-		.search-btn{
-			width: 118rpx;
-			height: 80rpx;
-			line-height: 80rpx;
-			color: $color-system;
-			font-size: 30rpx;
-			text-align: center;
-			float: left;
-		}
-		.voice-icon{
-			width: 36rpx;
-			height: 36rpx;
-			padding: 16rpx 20rpx 16rpx 0;
-			position: absolute;
-			left: 16rpx;
-			top: 4rpx;
-			z-index: 10;
-		}
-		
-	}
-	.search-container{
-		padding-top: 106rpx;
-	}
-	.s-block{
-		background: #FFFFFF;
-		.header{
-			font-size: 32rpx;
-			padding:40rpx 24rpx 22rpx 24rpx;
-			line-height: 42rpx;
-			font-size: 30rpx;
-			font-weight: bold;
-			position: relative;
-			.icon-shanchu{
-				font-size: 36rpx;
-				color: #333333;
-				float: right;
-				padding: 0 10rpx;
-				z-index: 10;
-				font-weight: normal;
-			}
-		}
-		.list{
-			display: flex;
-			flex-wrap: wrap;
-			padding-bottom: 40rpx;
-			view{
-				color: #8A8A8A;
-				font-size: 24rpx;
-				box-sizing: border-box;
-				text-align: center;
-				height: 48rpx;
-				line-height: 48rpx;
-				border-radius: 24rpx;
-				margin:12rpx;
-				padding:.0 30rpx;
-				overflow: hidden;
-				white-space: nowrap;
-				text-overflow: ellipsis;
-				background-color: #F3F3F3;
-			}
-		}
-	}
-	.s-circle{
-		margin-top: 30rpx;
-		.header{
-			font-size: 32rpx;
-			padding: 30rpx;
-			border-bottom: 2rpx solid #F9F9F9;
-			position: relative;
-			image{
-				width: 36rpx;
-				height: 36rpx;
-				padding: 10rpx;
-				position: absolute;
-				right: 40rpx;
-				top: 24rpx;
-			}
-		}
-		.list{
-			display: flex;
-			flex-wrap: wrap;
-			padding: 0 30rpx 20rpx;
-			view{
-				padding: 8rpx 30rpx;
-				margin: 20rpx 30rpx 0 0;
-				font-size: 28rpx;
-				color: #8A8A8A;
-				background-color: #F7F7F7;
-				box-sizing: border-box;
-				text-align: center;
-				border-radius: 20rpx;
-			}
-		}
-	}
-	.wanted-block{
-		margin-top: 30rpx;
-		.header{
-			font-size: 32rpx;
-			padding: 30rpx;
-		}
-		.list{
-			display: flex;
-			flex-wrap: wrap;
-			view{
-				width: 50%;
-				color: #8A8A8A;
-				font-size: 28rpx;
-				box-sizing: border-box;
-				text-align: center;
-				padding: 20rpx 0;
-				border-top: 2rpx solid #FFF;
-				border-left: 2rpx solid #FFF;
-				background-color: #F7F7F7;
-				overflow: hidden;
-				white-space: nowrap;
-				text-overflow: ellipsis;
-			}
-		}
-	}
-	.wanted-circle{
-		margin-top: 30rpx;
-		.header{
-			font-size: 32rpx;
-			padding: 30rpx;
-		}
-		.list{
-			display: flex;
-			flex-wrap: wrap;
-			padding: 0 30rpx 20rpx;
-			view{
-				padding: 8rpx 30rpx;
-				margin: 20rpx 30rpx 0 0;
-				font-size: 28rpx;
-				color: #8A8A8A;
-				background-color: #F7F7F7;
-				box-sizing: border-box;
-				text-align: center;
-				border-radius: 20rpx;
-			}
-		}
-	}
-</style>

+ 0 - 128
components/uni-transition/createAnimation.js

@@ -1,128 +0,0 @@
-// const defaultOption = {
-// 	duration: 300,
-// 	timingFunction: 'linear',
-// 	delay: 0,
-// 	transformOrigin: '50% 50% 0'
-// }
-// #ifdef APP-NVUE
-const nvueAnimation = uni.requireNativePlugin('animation')
-// #endif
-class MPAnimation {
-	constructor(options, _this) {
-		this.options = options
-		this.animation = uni.createAnimation(options)
-		this.currentStepAnimates = {}
-		this.next = 0
-		this.$ = _this
-
-	}
-
-	_nvuePushAnimates(type, args) {
-		let aniObj = this.currentStepAnimates[this.next]
-		let styles = {}
-		if (!aniObj) {
-			styles = {
-				styles: {},
-				config: {}
-			}
-		} else {
-			styles = aniObj
-		}
-		if (animateTypes1.includes(type)) {
-			if (!styles.styles.transform) {
-				styles.styles.transform = ''
-			}
-			let unit = ''
-			if(type === 'rotate'){
-				unit = 'deg'
-			}
-			styles.styles.transform += `${type}(${args+unit}) `
-		} else {
-			styles.styles[type] = `${args}`
-		}
-		this.currentStepAnimates[this.next] = styles
-	}
-	_animateRun(styles = {}, config = {}) {
-		let ref = this.$.$refs['ani'].ref
-		if (!ref) return
-		return new Promise((resolve, reject) => {
-			nvueAnimation.transition(ref, {
-				styles,
-				...config
-			}, res => {
-				resolve()
-			})
-		})
-	}
-
-	_nvueNextAnimate(animates, step = 0, fn) {
-		let obj = animates[step]
-		if (obj) {
-			let {
-				styles,
-				config
-			} = obj
-			this._animateRun(styles, config).then(() => {
-				step += 1
-				this._nvueNextAnimate(animates, step, fn)
-			})
-		} else {
-			this.currentStepAnimates = {}
-			typeof fn === 'function' && fn()
-			this.isEnd = true
-		}
-	}
-
-	step(config = {}) {
-		// #ifndef APP-NVUE
-		this.animation.step(config)
-		// #endif
-		// #ifdef APP-NVUE
-		this.currentStepAnimates[this.next].config = Object.assign({}, this.options, config)
-		this.currentStepAnimates[this.next].styles.transformOrigin = this.currentStepAnimates[this.next].config.transformOrigin
-		this.next++
-		// #endif
-		return this
-	}
-
-	run(fn) {
-		// #ifndef APP-NVUE
-		this.$.animationData = this.animation.export()
-		this.$.timer = setTimeout(() => {
-			typeof fn === 'function' && fn()
-		}, this.$.durationTime)
-		// #endif
-		// #ifdef APP-NVUE
-		this.isEnd = false
-		let ref = this.$.$refs['ani'] && this.$.$refs['ani'].ref
-		if(!ref) return
-		this._nvueNextAnimate(this.currentStepAnimates, 0, fn)
-		this.next = 0
-		// #endif
-	}
-}
-
-
-const animateTypes1 = ['matrix', 'matrix3d', 'rotate', 'rotate3d', 'rotateX', 'rotateY', 'rotateZ', 'scale', 'scale3d',
-	'scaleX', 'scaleY', 'scaleZ', 'skew', 'skewX', 'skewY', 'translate', 'translate3d', 'translateX', 'translateY',
-	'translateZ'
-]
-const animateTypes2 = ['opacity', 'backgroundColor']
-const animateTypes3 = ['width', 'height', 'left', 'right', 'top', 'bottom']
-animateTypes1.concat(animateTypes2, animateTypes3).forEach(type => {
-	MPAnimation.prototype[type] = function(...args) {
-		// #ifndef APP-NVUE
-		this.animation[type](...args)
-		// #endif
-		// #ifdef APP-NVUE
-		this._nvuePushAnimates(type, args)
-		// #endif
-		return this
-	}
-})
-
-export function createAnimation(option, _this) {
-	if(!_this) return
-	clearTimeout(_this.timer)
-	return new MPAnimation(option, _this)
-}

+ 0 - 277
components/uni-transition/uni-transition.vue

@@ -1,277 +0,0 @@
-<template>
-	<view v-if="isShow" ref="ani" :animation="animationData" :class="customClass" :style="transformStyles" @click="onClick"><slot></slot></view>
-</template>
-
-<script>
-import { createAnimation } from './createAnimation'
-
-/**
- * Transition 过渡动画
- * @description 简单过渡动画组件
- * @tutorial https://ext.dcloud.net.cn/plugin?id=985
- * @property {Boolean} show = [false|true] 控制组件显示或隐藏
- * @property {Array|String} modeClass = [fade|slide-top|slide-right|slide-bottom|slide-left|zoom-in|zoom-out] 过渡动画类型
- *  @value fade 渐隐渐出过渡
- *  @value slide-top 由上至下过渡
- *  @value slide-right 由右至左过渡
- *  @value slide-bottom 由下至上过渡
- *  @value slide-left 由左至右过渡
- *  @value zoom-in 由小到大过渡
- *  @value zoom-out 由大到小过渡
- * @property {Number} duration 过渡动画持续时间
- * @property {Object} styles 组件样式,同 css 样式,注意带’-‘连接符的属性需要使用小驼峰写法如:`backgroundColor:red`
- */
-export default {
-	name: 'uniTransition',
-	emits:['click','change'],
-	props: {
-		show: {
-			type: Boolean,
-			default: false
-		},
-		modeClass: {
-			type: [Array, String],
-			default() {
-				return 'fade'
-			}
-		},
-		duration: {
-			type: Number,
-			default: 300
-		},
-		styles: {
-			type: Object,
-			default() {
-				return {}
-			}
-		},
-		customClass:{
-			type: String,
-			default: ''
-		}
-	},
-	data() {
-		return {
-			isShow: false,
-			transform: '',
-			opacity: 1,
-			animationData: {},
-			durationTime: 300,
-			config: {}
-		}
-	},
-	watch: {
-		show: {
-			handler(newVal) {
-				if (newVal) {
-					this.open()
-				} else {
-					// 避免上来就执行 close,导致动画错乱
-					if (this.isShow) {
-						this.close()
-					}
-				}
-			},
-			immediate: true
-		}
-	},
-	computed: {
-		// 生成样式数据
-		stylesObject() {
-			let styles = {
-				...this.styles,
-				'transition-duration': this.duration / 1000 + 's'
-			}
-			let transform = ''
-			for (let i in styles) {
-				let line = this.toLine(i)
-				transform += line + ':' + styles[i] + ';'
-			}
-			return transform
-		},
-		// 初始化动画条件
-		transformStyles() {
-			return 'transform:' + this.transform + ';' + 'opacity:' + this.opacity + ';' + this.stylesObject
-		}
-	},
-	created() {
-		// 动画默认配置
-		this.config = {
-			duration: this.duration,
-			timingFunction: 'ease',
-			transformOrigin: '50% 50%',
-			delay: 0
-		}
-		this.durationTime = this.duration
-	},
-	methods: {
-		/**
-		 *  ref 触发 初始化动画
-		 */
-		init(obj = {}) {
-			if (obj.duration) {
-				this.durationTime = obj.duration
-			}
-			this.animation = createAnimation(Object.assign(this.config, obj),this)
-		},
-		/**
-		 * 点击组件触发回调
-		 */
-		onClick() {
-			this.$emit('click', {
-				detail: this.isShow
-			})
-		},
-		/**
-		 * ref 触发 动画分组
-		 * @param {Object} obj
-		 */
-		step(obj, config = {}) {
-			if (!this.animation) return
-			for (let i in obj) {
-				try {
-					if(typeof obj[i] === 'object'){
-						this.animation[i](...obj[i])
-					}else{
-						this.animation[i](obj[i])
-					}
-				} catch (e) {
-					console.error(`方法 ${i} 不存在`)
-				}
-			}
-			this.animation.step(config)
-			return this
-		},
-		/**
-		 *  ref 触发 执行动画
-		 */
-		run(fn) {
-			if (!this.animation) return
-			this.animation.run(fn)
-		},
-		// 开始过度动画
-		open() {
-			clearTimeout(this.timer)
-			this.transform = ''
-			this.isShow = true
-			let { opacity, transform } = this.styleInit(false)
-			if (typeof opacity !== 'undefined') {
-				this.opacity = opacity
-			}
-			this.transform = transform
-			// 确保动态样式已经生效后,执行动画,如果不加 nextTick ,会导致 wx 动画执行异常
-			this.$nextTick(() => {
-				// TODO 定时器保证动画完全执行,目前有些问题,后面会取消定时器
-				this.timer = setTimeout(() => {
-					this.animation = createAnimation(this.config, this)
-					this.tranfromInit(false).step()
-					this.animation.run()
-					this.$emit('change', {
-						detail: this.isShow
-					})
-				}, 20)
-			})
-		},
-		// 关闭过度动画
-		close(type) {
-			if (!this.animation) return
-			this.tranfromInit(true)
-				.step()
-				.run(() => {
-					this.isShow = false
-					this.animationData = null
-					this.animation = null
-					let { opacity, transform } = this.styleInit(false)
-					this.opacity = opacity || 1
-					this.transform = transform
-					this.$emit('change', {
-						detail: this.isShow
-					})
-				})
-		},
-		// 处理动画开始前的默认样式
-		styleInit(type) {
-			let styles = {
-				transform: ''
-			}
-			let buildStyle = (type, mode) => {
-				if (mode === 'fade') {
-					styles.opacity = this.animationType(type)[mode]
-				} else {
-					styles.transform += this.animationType(type)[mode] + ' '
-				}
-			}
-			if (typeof this.modeClass === 'string') {
-				buildStyle(type, this.modeClass)
-			} else {
-				this.modeClass.forEach(mode => {
-					buildStyle(type, mode)
-				})
-			}
-			return styles
-		},
-		// 处理内置组合动画
-		tranfromInit(type) {
-			let buildTranfrom = (type, mode) => {
-				let aniNum = null
-				if (mode === 'fade') {
-					aniNum = type ? 0 : 1
-				} else {
-					aniNum = type ? '-100%' : '0'
-					if (mode === 'zoom-in') {
-						aniNum = type ? 0.8 : 1
-					}
-					if (mode === 'zoom-out') {
-						aniNum = type ? 1.2 : 1
-					}
-					if (mode === 'slide-right') {
-						aniNum = type ? '100%' : '0'
-					}
-					if (mode === 'slide-bottom') {
-						aniNum = type ? '100%' : '0'
-					}
-				}
-				this.animation[this.animationMode()[mode]](aniNum)
-			}
-			if (typeof this.modeClass === 'string') {
-				buildTranfrom(type, this.modeClass)
-			} else {
-				this.modeClass.forEach(mode => {
-					buildTranfrom(type, mode)
-				})
-			}
-
-			return this.animation
-		},
-		animationType(type) {
-			return {
-				fade: type ? 1 : 0,
-				'slide-top': `translateY(${type ? '0' : '-100%'})`,
-				'slide-right': `translateX(${type ? '0' : '100%'})`,
-				'slide-bottom': `translateY(${type ? '0' : '100%'})`,
-				'slide-left': `translateX(${type ? '0' : '-100%'})`,
-				'zoom-in': `scaleX(${type ? 1 : 0.8}) scaleY(${type ? 1 : 0.8})`,
-				'zoom-out': `scaleX(${type ? 1 : 1.2}) scaleY(${type ? 1 : 1.2})`
-			}
-		},
-		// 内置动画类型与实际动画对应字典
-		animationMode() {
-			return {
-				fade: 'opacity',
-				'slide-top': 'translateY',
-				'slide-right': 'translateX',
-				'slide-bottom': 'translateY',
-				'slide-left': 'translateX',
-				'zoom-in': 'scale',
-				'zoom-out': 'scale'
-			}
-		},
-		// 驼峰转中横线
-		toLine(name) {
-			return name.replace(/([A-Z])/g, '-$1').toLowerCase()
-		}
-	}
-}
-</script>
-
-<style></style>

+ 2 - 0
main.js

@@ -13,6 +13,7 @@ import Uma from './plugins/uma'
 
 // 公共组件 全局组件
 import { msg, modal, prePage, boundingClientRect } from './utils/util'
+import custom from './components/cm-custom/custom.vue'
 import cuCustom from './components/cm-custom/cu-custom.vue'
 import auCustom from './components/cm-custom/au-custom.vue'
 import cmCustom from './components/cm-custom/cm-custom.vue'
@@ -20,6 +21,7 @@ import scrollTop from '@/components/cm-module/scrollTop/scrollTop.vue'
 import CityPicker from '@/components/mpvue-citypicker/mpvueCityPicker.vue' //全局注册地址组件
 
 
+Vue.component('custom', custom)
 Vue.component('cu-custom', cuCustom)
 Vue.component('au-custom', auCustom)
 Vue.component('cm-custom', cmCustom)

+ 9 - 9
mixins/appMixins.js

@@ -28,15 +28,15 @@ const appMixins = {
                     this.$store.commit('updateStatus',error.data)
                     this.updateRossShow()
                     uni.setStorageSync('unionId',error.data.unionId)
-                    if(!this.hasLogin && this.couponEntry === 1){
-                        if(uni.getStorageSync('isActivitySwitch')){
-                            const  lockTime = uni.getStorageSync('lockTime')
-                            const  eTime = this.diffTime(lockTime)
-                            this.$store.dispatch('setActivityFn',eTime)
-                        }else{
-                            this.$store.dispatch('setActivityFn',true)
-                        }
-                    }
+                    // if(!this.hasLogin && this.couponEntry === 1){
+                    //     if(uni.getStorageSync('isActivitySwitch')){
+                    //         const  lockTime = uni.getStorageSync('lockTime')
+                    //         const  eTime = this.diffTime(lockTime)
+                    //         this.$store.dispatch('setActivityFn',eTime)
+                    //     }else{
+                    //         this.$store.dispatch('setActivityFn',true)
+                    //     }
+                    // }
                 })
         },		
         appUpdataRefresh(){

+ 94 - 9
pages.json

@@ -80,6 +80,12 @@
 					"style": {
 						"navigationBarTitleText": "资质证书"
 					}
+				},
+				{
+					"path": "certificate-page",
+					"style": {
+						"navigationBarTitleText": "资质证书"
+					}
 				}
 			]
 		},
@@ -95,6 +101,13 @@
 						"navigationStyle": "custom"
 					}
 				},
+				{
+					"path": "good-floor-zone",
+					"style": {
+						"navigationBarTitleText": "",
+						"enablePullDownRefresh": true
+					}
+				},
 				{
 					"path": "goods-instrument",
 					"style": {
@@ -196,6 +209,13 @@
                 		"navigationBarTitleText": "全部频道",
                 		"enablePullDownRefresh": false
                 	}
+                },
+                {
+                	"path": "goods-shop-list",
+                	"style": {
+                		"navigationBarTitleText": "优质供应商",
+                		"enablePullDownRefresh": false
+                	}
                 }
 			]
 		},
@@ -330,7 +350,7 @@
 				{
 					"path": "address/address",
 					"style": {
-						"navigationBarTitleText": "地址列表"
+						"navigationBarTitleText": "收货地址"
 					}
 				},
 				{
@@ -485,6 +505,12 @@
 						"navigationBarTitleText": "兑换优惠券"
 					}
 				},
+				{
+					"path": "coupon/coupon-details",
+					"style": {
+						"navigationBarTitleText": "领取优惠券"
+					}
+				},
 				{
 					"path": "coupon/coupon-product",
 					"style": {
@@ -588,6 +614,20 @@
 					"style": {
 						"navigationBarTitleText": "线下转账"
 					}
+				},
+				{
+					"path": "pay/card-coupon-under",
+					"style": {
+						"navigationBarTitleText": "购买优惠券"
+					}
+				},
+				{
+					"path": "chats/index",
+					"style": {
+						"navigationBarTitleText": "采美Ai助手",
+                        "enablePullDownRefresh": true,
+                        "navigationStyle": "custom"
+					}
 				}
 				
 			]
@@ -698,7 +738,7 @@
 				{
 					"path": "cart/coupon",
 					"style": {
-						"navigationBarTitleText": "优惠券列表",
+						"navigationBarTitleText": "优惠券",
 						"enablePullDownRefresh": true
 					}
 				},
@@ -744,8 +784,13 @@
 				{
 					"path": "club/list",
 					"style": {
-						"navigationBarTitleText": "机构列表",
-						"navigationStyle": "custom"
+						"navigationBarTitleText": "我的机构"
+					}
+				},
+				{
+					"path": "club/club-team-list",
+					"style": {
+						"navigationBarTitleText": "组员机构"
 					}
 				},
 				{
@@ -828,10 +873,16 @@
 					}
 				},
 				{
+<<<<<<< HEAD
 					"path": "club/club-remind",
 					"style": {
 						"navigationBarTitleText": "咨询记录填写提醒",
 						"navigationStyle": "custom"
+=======
+					"path": "club/team-list",
+					"style": {
+						"navigationBarTitleText": "我的组员"
+>>>>>>> remotes/origin/developer
 					}
 				},
 				{
@@ -884,7 +935,20 @@
 					"style": {
 						"navigationBarTitleText": "订单列表"
 					}
-				}, {
+				}, 
+				{
+					"path": "order/order-team-list",
+					"style": {
+						"navigationBarTitleText": "组员订单"
+					}
+				}, 
+				{
+					"path": "order/order-team-details",
+					"style": {
+						"navigationBarTitleText": "组员订单详情"
+					}
+				}, 
+                {
 					"path": "order/search-order",
 					"style": {
 						"navigationBarTitleText": "订单搜索"
@@ -911,7 +975,7 @@
 				{
 					"path": "remarks/add",
 					"style": {
-						"navigationBarTitleText": "添加记录"
+						"navigationBarTitleText": "添加咨询记录"
 					}
 				},
 				{
@@ -941,7 +1005,7 @@
 				{
 					"path": "remarks/add-record",
 					"style": {
-						"navigationBarTitleText": "添加记录"
+						"navigationBarTitleText": "添加咨询记录"
 					}
 				},
 				{
@@ -1119,6 +1183,27 @@
 						"enablePullDownRefresh": true
 					}
 				},
+				{
+					"path": "activity/activity-entry",
+					"style": {
+						"navigationBarTitleText": "紫亚兰门票绑定",
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "activity/activity-sign",
+					"style": {
+						"navigationBarTitleText": "展台打卡",
+						"navigationStyle": "custom"
+					}
+				},
+				{
+					"path": "activity/activity-entry-list",
+					"style": {
+						"navigationBarTitleText": "所有展台",
+						"navigationStyle": "custom"
+					}
+				},
 				{
 					"path": "other/repair",
 					"style": {
@@ -1185,7 +1270,7 @@
 				{
 					"path": "form/form",
 					"style": {
-						"navigationBarTitleText": "发布二手估价商品"
+						"navigationBarTitleText": "发布二手"
 					}
 				},
 				{
@@ -1209,7 +1294,7 @@
 				{
 					"path": "product/product-list",
 					"style": {
-						"navigationBarTitleText": "二手商品",
+						"navigationBarTitleText": "二手市场",
 						"enablePullDownRefresh": true
 					}
 				},

+ 6 - 6
pages/goods/cart.vue

@@ -1,12 +1,12 @@
 <template>
 	<view class="container cart clearfix" :style="{paddingTop:CustomBar+'px'}">
-		<custom :systeminfo='systeminfo'  :navbar-data='nvabarData' :headerBtnPosi ="headerBtnPosi" :page='1'></custom>
+		<custom :systeminfo='systeminfo'  :navbar-data='nvabarData' :headerBtnPosi ="headerBtnPosi" :page='1' />
 		<cart ref="cart" :pathType='pathType'></cart>
 	</view>
 </template>
 <script>
-	import { mapState,mapMutations } from 'vuex';
-	import custom from "./components/cm-navbar.vue" //顶部自定义胶囊'
+	import { mapState,mapMutations } from 'vuex'
+	import custom from './components/cm-navbar.vue' //顶部自定义胶囊'
 	import cart from '@/components/cm-module/cart-components/index.vue'
 	export default{
 		components:{
@@ -29,7 +29,7 @@
 			}
 		},
 		onLoad(){
-			this.isShowComponents = true;
+			this.isShowComponents = true
 		},
 		computed: {
 			...mapState(['hasLogin','userInfo','isWxAuthorize'])
@@ -37,11 +37,11 @@
 		methods:{
 			setHeaderBtnPosi(){
 				// 获得胶囊按钮位置信息
-				let headerBtnPosi = uni.getMenuButtonBoundingClientRect();
+				let headerBtnPosi = uni.getMenuButtonBoundingClientRect()
 				return headerBtnPosi
 			},
 			setSysteminfo(){
-				let systeminfo;
+				let systeminfo
 				uni.getSystemInfo({ // 获取设备信息
 					success: (res) => {
 						systeminfo = res

+ 3 - 3
pages/goods/channel.vue

@@ -22,7 +22,7 @@
 
 <script>
 	import cmsMixins from '@/mixins/cmsMixins.js'
-	import { mapState,mapMutations} from 'vuex';
+	import { mapState,mapMutations} from 'vuex'
 	export default{
 		mixins: [cmsMixins],
 		data(){
@@ -92,8 +92,8 @@
 				height: 40rpx;
 				line-height: 40rpx;
 				text-align: center;
-				font-size: $font-size-26;
-				color: #666666;
+				font-size: $font-size-24;
+				color: #333333;
 			}
 		}
 	}

+ 0 - 79
pages/goods/components/cm-attributes.vue

@@ -1,79 +0,0 @@
-<template name="cm-attributes">
-	<!-- 商品详情价格判断 -->
-	<view class="cm-attributes">
-		<view class="wrap-label"  v-if="goodsData.isNoneDisabled">
-			<view class="isLower">此商品已{{goodsData.disabledText}},请浏览以下推荐商品~</view>
-		</view>
-		<view class="wrap-info">
-			<view class="info-viewT" :class="goodsData.isNoneDisabled ? 'none' : ''">
-				<view class="info-viewL tui-skeleton-fillet">起订量:<text>{{product.minBuyNumber}}</text></view>
-				<view class="info-viewR tui-skeleton-fillet">品牌:<text>{{product.brandName == null? '其他' : product.brandName}}</text></view>
-			</view>
-			<view class="info-viewT" :class="goodsData.isNoneDisabled ? 'none' : ''">
-				<view class="info-viewL tui-skeleton-fillet">包装规格:<text>{{product.unit}}</text></view>
-				<view class="info-viewR tui-skeleton-fillet">商品编码:<text>{{product.productCode}}</text></view>		
-			</view>
-			<view class="info-viewT" :class="goodsData.isNoneDisabled ? 'none' : ''" v-if="product.productCode!=''&&product.productCode!=null">
-				<view class="info-viewL tui-skeleton-fillet">库存:<text>{{product.stock}}</text></view>
-				<view class="info-viewR tui-skeleton-fillet"></view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-	export default{
-		name:'cm-attributes',
-		props:{
-			product:{
-				type:Object,
-				default: {}
-			},
-			goodsData:{
-				type:Object,
-				default: {}
-			},
-		},
-		data() {
-			return{
-				
-			}
-		},
-		created() {
-			
-		},
-		methods:{
-		},
-		
-	}
-</script>
-
-<style lang="scss">	
-	.bmCode{
-	float: left;
-	width: 702rpx;
-	padding: 20rpx 24rpx 0 24rpx;
-	border-bottom: 1px solid #F8F8F8	
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 0 - 133
pages/goods/components/cm-parameter.vue

@@ -1,133 +0,0 @@
-<template name="cm-parameter">
-	<!-- 相关参数 -->
-	<tui-bottom-popup :radius="true" :show="popupShow" @close="hidePopup()">
-		<view class="tui-popup-box clearfix">
-			<view class="title">商品参数</view>
-			<view class="content">
-				<view class="content-tr">
-					<view class="content-td">品牌</view>
-					<view class="content-th">恩盛</view>
-				</view>
-				<view class="content-tr">
-					<view class="content-td">起订量</view>
-					<view class="content-th">1</view>
-				</view>
-				<view class="content-tr">
-					<view class="content-td">库存</view> 
-					<view class="content-th">9999</view>
-				</view>
-				<view class="content-tr">
-					<view class="content-td">包装规格</view>
-					<view class="content-th">台</view>
-				</view>
-				<view class="content-tr" v-for="(item, index) in product.parametersList" :key="index">
-					<view class="content-td">{{item.paramsName}}</view>
-					<view class="content-th">{{item.paramsContent}}</view>
-				</view>
-			</view>
-			<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom :isIphoneX ? '68rpx' : '0rpx' }">
-				<view class="tui-flex-1">
-					<view class="tui-button" @click="hidePopup()">收起</view>
-				</view>
-			</view>
-		</view>	
-	</tui-bottom-popup>		
-</template>
-
-<script>
-	export default{
-		name:'cm-parameter',
-		props:{
-			product:{
-				type:Object,
-			},
-			popupShow:{
-				type:Boolean,
-				default:false
-			}
-		},
-		data() {
-			return{
-				data:[]
-			}
-		},
-		created() {
-			
-		},
-		methods:{
-			hidePopup(){
-				this.$parent.popupShow = false
-			},
-		},
-		
-	}
-</script>
-
-<style lang="scss">
-	.cm-parameter{
-		width: 702rpx;
-		height: auto;
-		background: #FFF;
-		margin: 0 auto;
-		padding: 24rpx 0;
-		.cm-parameter-main{
-			display: flex;
-			flex: 1;
-			flex-direction: column;
-			background-color: #FFFFFF;
-			border: 1px solid #EFEFEF;
-			border-radius: 4rpx;
-			.item-tabody{
-				width: 100%;
-				height: auto;
-				border-bottom: 1px solid #EFEFEF;
-				font-size: $font-size-24;
-				display: flex;
-				flex-wrap: wrap;
-				.item-td{
-					width: 238rpx;
-					float: left;
-					border-right: 1px solid #EFEFEF;
-					color: #999999;
-					padding:20rpx;
-					display: flex;
-					flex: 3;
-					flex-direction: column;
-				}
-				.item-tr{
-					width: 462rpx;
-					float: left;
-					color: $text-color;
-					padding:20rpx;
-					display: flex;
-					flex: 7;
-					flex-direction: column;
-				}
-				&:last-child{
-					border-bottom: none;
-				}
-			}
-		}
-	}
-</style>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+ 14 - 5
pages/goods/components/cm-prams-popup.vue

@@ -27,7 +27,7 @@
 					</view>
 					<view
 						class="content-tr"
-						v-if="product.parametersList.length > 0"
+						v-if="product.parametersList && product.parametersList.length > 0"
 						v-for="(item, index) in product.parametersList"
 						:key="index"
 					>
@@ -63,12 +63,21 @@
 				data:[],
 				skuStext:''
 			}
-		},
+		},
+        watch: {
+            product:{
+                deep: true,
+                handler(val) {
+                	let newArray = val.skus
+                	this.skuStext = newArray.map(item =>{ return item.unit }).join(',')
+                }
+            }
+        },
 		created() {
-			let newArray = this.product.skus
-			this.skuStext = newArray.map(item =>{ return item.unit }).join(',')
+			// let newArray = this.product.skus
+			// this.skuStext = newArray.map(item =>{ return item.unit }).join(',')
 		},
-		methods:{
+		methods:{
 			hidePopup(){
 				this.$parent.popupShow0 = false
 			},

+ 19 - 5
pages/goods/components/cm-service.vue

@@ -3,11 +3,15 @@
 	<view class="cm-service">
 		<view class="cm-service-text" v-show="product.orderInfo">
 			<view class="cm-service-title">订购方案</view>
-			<view class="cm-service-p" v-html="product.orderInfo"></view>
+			<view class="cm-service-p">
+                <mp-html :content="orderInfoHtml" :tag-style="tagStyle" />
+            </view>
 		</view>
 		<view class="cm-service-text" v-show="product.serviceInfo">
 			<view class="cm-service-title">服务详情</view>
-			<view class="cm-service-p" v-html="product.serviceInfo"></view>
+			<view class="cm-service-p">
+                <mp-html :content="serviceInfoHtml" :tag-style="tagStyle" />
+            </view>
 		</view>
 	</view>
 </template>
@@ -22,13 +26,23 @@
 		},
 		data() {
 			return{
-				
+				orderInfoHtml:'',
+                serviceInfoHtml:''
 			}
 		},
 		created() {
-			
+			this.adaptOrderInfoHtml(this.product)
+			this.adaptServiceInfoHtml(this.product)
 		},
-		methods:{
+		methods:{
+            adaptOrderInfoHtml(product){
+                let defaulHtml = '<div style="text-align: center;color:#333333;">暂无内容</div>'
+                this.orderInfoHtml = product.orderInfo ? this.$api.adaptRichTextImg(product.orderInfo) : defaulHtml
+            },
+            adaptServiceInfoHtml(product){
+                let defaulHtml = '<div style="text-align: center;color:#333333;">暂无内容</div>'
+                this.serviceInfoHtml = product.serviceInfo ? this.$api.adaptRichTextImg(product.serviceInfo) : defaulHtml
+            }
 		},
 		
 	}

+ 14 - 6
pages/goods/components/cm-unit-popup.vue

@@ -148,21 +148,29 @@ export default {
 		}
 	},
 	created() {
-		this.initData()
+		this.initData(this.skuProduct)
 	},
 	computed: {
 		...mapState(['hasLogin'])
-	},
+	},
+    watch: {
+        skuProduct:{
+            deep: true,
+            handler(val) {
+            	this.initData(val)
+            }
+        }
+    },
 	methods: {
-		async initData(data) {
+		async initData(product) {
 			const userInfo = await this.$api.getStorage()
 			if (userInfo.userIdentity == 1 || userInfo.userIdentity == 3) {
 				this.isShowButton = false
 			} else {
 				this.isShowButton = true
-			}
-			this.skuList = this.skuProduct.skus
-			this.productCount = this.skuList[0].minBuyNumber
+			}
+			this.skuList = product.skus ? product.skus : [],
+			this.productCount = this.skuList[0].minBuyNumber
 			this.handleMinNumber = this.skuList[0].minBuyNumber
 			this.handleStock = this.skuList[0].stock
 			if (this.skuList[0].ladderPriceList) {

+ 6 - 10
pages/goods/components/instrument-recommend.vue

@@ -13,8 +13,6 @@
 
 <script>
 	import authorize from '@/common/config/authorize.js'
-	import tuiLoadmore from "@/components/tui-components/loadmore/loadmore"
-	import tuiNomore from "@/components/tui-components/nomore/nomore"
 	
 	export default{
 		name:'recommend',
@@ -25,8 +23,6 @@
 			}
 		},
 		components:{
-			tuiLoadmore,
-			tuiNomore,
 		},
 		data() {
 			return{
@@ -50,19 +46,19 @@
 						2:`/pages/goods/instrument-details?id=${value.linkParam.id}`,
 					 	5:`/pages/goods/product?id=${value.linkParam.id}`,
 					 	// 7:`/pages/supplier/user/my-shop?shopId=${value.linkParam.id}`,
-					 	8:`/pages/h5/activity/activity-list`,
-					 	9:`/pages/second/form/introduce`,
-					 	10:`/pages/second/product/product-list`,
-					 	11:`/pages/second/form/form`,
+					 	8:'/pages/h5/activity/activity-list',
+					 	9:'/pages/second/form/introduce',
+					 	10:'/pages/second/product/product-list',
+					 	11:'/pages/second/form/form',
 					 	12:`/pages/search/search?keyWord=${value.title}`,
 					 	13:`/pages/h5/article/path?link=${value.link}`,
 					 	14:`/pages/h5/article/path?link=${value.link}`,
 					 	15:`/pages/h5/article/path?link=${value.link}`,
-					 	17:`/pages/login/register-select`,
+					 	17:'/pages/login/register-select',
 					 	18:`/pages/h5/article/path?link=${value.link}`,
 					 	19:`/pages/search/search-supplier?keyWord=${value.title}`
 					 }
-					 const url = typeMap[value.linkType];
+					 const url = typeMap[value.linkType]
 					 this.$api.navigateTo(url)
 				 }
 			}

+ 9 - 9
components/cm-module/homeIndex/pageFloor.vue → pages/goods/components/pageFloor.vue

@@ -44,14 +44,14 @@
 </template>
 
 <script>
-import templateA from '@/components/cm-module/pageTemplate/templateA.vue'
-import templateB from '@/components/cm-module/pageTemplate/templateB.vue'
-import templateC from '@/components/cm-module/pageTemplate/templateC.vue'
-import templateD from '@/components/cm-module/pageTemplate/templateD.vue'
-import templateE from '@/components/cm-module/pageTemplate/templateE.vue'
-import templateF from '@/components/cm-module/pageTemplate/templateF.vue'
-import templateG from '@/components/cm-module/pageTemplate/templateG.vue'
-import templateH from '@/components/cm-module/pageTemplate/templateH.vue'
+import templateA from './template-page/templateA.vue'
+import templateB from './template-page/templateB.vue'
+import templateC from './template-page/templateC.vue'
+import templateD from './template-page/templateD.vue'
+import templateE from './template-page/templateE.vue'
+import templateF from './template-page/templateF.vue'
+import templateG from './template-page/templateG.vue'
+import templateH from './template-page/templateH.vue'
 export default {
 	name: 'pageFloor',
 	components: {
@@ -131,7 +131,7 @@ export default {
 	}
 	.tui-group-r {
 		float: right;
-		font-size: $font-size-26;
+		font-size: $font-size-24;
 		text-align: right;
 		line-height: 49rpx;
 		color: #999999;

+ 0 - 4
pages/goods/components/recommend.vue

@@ -14,8 +14,6 @@
 <script>
 	import { mapState,mapMutations} from 'vuex'
 	import authorize from '@/common/config/authorize.js'
-	import tuiLoadmore from '@/components/tui-components/loadmore/loadmore'
-	import tuiNomore from '@/components/tui-components/nomore/nomore'
 	
 	export default{
 		name:'recommend',
@@ -30,8 +28,6 @@
 			}
 		},
 		components:{
-			tuiLoadmore,
-			tuiNomore,
 		},
 		data() {
 			return{

+ 0 - 0
components/cm-module/pageFloorTemplate/templateA.vue → pages/goods/components/template-floor/templateA.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateB.vue → pages/goods/components/template-floor/templateB.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateC.vue → pages/goods/components/template-floor/templateC.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateD.vue → pages/goods/components/template-floor/templateD.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateE.vue → pages/goods/components/template-floor/templateE.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateF.vue → pages/goods/components/template-floor/templateF.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateG.vue → pages/goods/components/template-floor/templateG.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateI.vue → pages/goods/components/template-floor/templateI.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateJ.vue → pages/goods/components/template-floor/templateJ.vue


+ 0 - 0
components/cm-module/pageFloorTemplate/templateK.vue → pages/goods/components/template-floor/templateK.vue


+ 0 - 0
components/cm-module/pageTemplate/templateA.vue → pages/goods/components/template-page/templateA.vue


+ 0 - 0
components/cm-module/pageTemplate/templateB.vue → pages/goods/components/template-page/templateB.vue


+ 0 - 0
components/cm-module/pageTemplate/templateC.vue → pages/goods/components/template-page/templateC.vue


+ 0 - 0
components/cm-module/pageTemplate/templateD.vue → pages/goods/components/template-page/templateD.vue


+ 313 - 0
pages/goods/components/template-page/templateE.vue

@@ -0,0 +1,313 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			v-if="idx < 4"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+
+export default {
+	name: 'templateE',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		line-height: 36rpx;
+        background: #ffffff;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&.ad_02 {
+			margin-right: 20rpx;
+		}
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 0 - 0
components/cm-module/pageTemplate/templateF.vue → pages/goods/components/template-page/templateF.vue


+ 0 - 0
components/cm-module/pageTemplate/templateG.vue → pages/goods/components/template-page/templateG.vue


+ 0 - 0
components/cm-module/pageTemplate/templateH.vue → pages/goods/components/template-page/templateH.vue


+ 1 - 1
pages/goods/good-floor-temp.vue

@@ -39,7 +39,7 @@
 import { mapState, mapMutations } from 'vuex'
 import customFloor from '@/components/cm-custom/custom-floor' //自定义导航
 import templateNav from '@/components/cm-module/pageTemplate/templateNav.vue'
-import pageFloor from '@/components/cm-module/homeIndex/pageFloor.vue'
+import pageFloor from './components/pageFloor.vue'
 import authorize from '@/common/config/authorize.js'
 import wxLogin from '@/common/config/wxLogin.js'
 

+ 507 - 0
pages/goods/good-floor-zone.vue

@@ -0,0 +1,507 @@
+<template>
+	<view class="container floor clearfix">
+        <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading="true" :loadingType="5" />
+		<template v-else>
+            <view class="container-home">
+                <view class="tui-floor-item" v-if="imageList.length>0">
+                    <swiper class="tui-floor-swiper" circular @change="swiperChange" :indicator-dots="false" :autoplay="true"
+                        :interval="5000" :duration="500">
+                        <swiper-item v-for="(item, index) in imageList" :key="item">
+                            <view class="tui-floor-swiper" @click="BannerNavigateTo(
+                                    item.linkType,
+                                    item.linkParam.id ? item.linkParam.id : '',
+                                    item.linkParam.crmLink,
+                                    item.linkParam.keyword ? item.linkParam.keyword : '')">
+                                <image class="floor-image" :src="item.crmImage" mode=""></image>
+                            </view>
+                        </swiper-item>
+                    </swiper>
+                    <view class="swiper__dots-box">
+                        <view v-for="(item, idx) in imageList" :key="idx"
+                            :class="[idx === current ? 'swiper__dots-long' : 'none']" :data-index="current"
+                            class="swiper__dots-item"></view>
+                    </view>
+                </view>
+                <view class="tui-floor-tabs">
+                    <view class="top-tabs-item" :class="tabsIndex === 0 ? 'active': '' " @click="handleClickTabS(0)">全部</view>
+                    <view class="top-tabs-item" :class="tabsIndex === 1 ? 'active': '' " @click="handleClickTabS(1)">产品</view>
+                    <view class="top-tabs-item" :class="tabsIndex === 2 ? 'active': '' " @click="handleClickTabS(2)">仪器</view>
+                    <view class="top-tabs-item" :class="tabsIndex === 3 ? 'active': '' " @click="handleClickTabS(3)">耗材配件</view>
+                </view>
+                <view class="floor-item-main" >
+                    <template v-if="productList.length > 0">
+                        <view class="floor-item clearfix"  v-for="(pros, idx) in productList" :key="idx"
+                            @click.stop="navToDetailPage(pros)">
+                            <image class="item-img tui-skeleton-fillet" :src="pros.mainImage" mode="aspectFill"></image>
+                            <template-Type :product="pros" />
+                            <view class="floor-item-content">
+                                <view class="title tui-skeleton-rect">
+                                    <text class="mclap" :class="pros.beautyActFlag == '1' ? 'indent' : ''">{{ pros.name }}
+                                    </text>
+                                </view>
+                                <view class="floor-item-price">
+                                    <template>
+                                        <template-Tags :product="pros" />
+                                    </template>
+                                    <view v-if="hasLogin">
+                                        <template v-if="pros.productCategory == 1">
+                                            <template-Price :product="pros" />
+                                        </template>
+                                        <template v-else>
+                                            <view class="price tui-skeleton-rect" v-if="pros.detailTalkFlag == '2'">
+                                                <text class="p sm">¥</text> <text class="p big">价格详聊</text>
+                                            </view>
+                                            <view class="price tui-skeleton-rect" v-else>
+                                                <text class="p sm">¥</text>
+                                                <text class="p big">{{ pros.price | NumFormat }}</text>
+                                            </view>
+                                        </template>
+                                    </view>
+                                    <view v-else class="no-price">
+                                        <template v-if="pros.productCategory == 1">
+                                            <view class="p-stars">
+                                                <text class="p-no">¥</text>
+                                                <uni-grader :grade="Number(pros.priceGrade)" :margin="14" />
+                                            </view>
+                                        </template>
+                                        <template v-else>
+                                            <view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+                                        </template>
+                                    </view>
+                                </view>
+                            </view>
+                        </view>
+                    </template>
+                    <template v-else>
+                        <view class="floor-main-none">
+                            <image
+                                class="none-image"
+                                src="https://static.caimei365.com/app/img/bg/icon_echart_none@2x.png"
+                                mode=""
+                            ></image>
+                            <view class="none-text">暂无数据~</view>
+                        </view>
+                    </template>
+                </view>
+            </view>
+		</template>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+import wxLogin from '@/common/config/wxLogin.js'
+
+export default {
+    name:'GoodFloorZone',
+    components: {
+        uniGrader,
+        templateTags,
+        templatePrice,
+        templateType
+    },
+	data() {
+		return {
+			userId: 0,
+			userIdentity: 0,
+			skeletonShow: true,
+			isScrollTop: false,
+            current:0,
+            listQuery: {
+                userId:0, //  用户Id
+                zoneId:'', // 专区Id
+                typeSort:'', // 分类类型 1产品,2仪器,3耗材配件
+                pageNum:1,
+                pageSize:12,
+                source:1
+            },
+            imageList: [], //专区轮播
+            productList:[],//专区商品
+            nomoreText: '上拉显示更多',
+            hasNextPage: false,
+            loadding: false,
+            pullUpOn: true,
+            pullFlag: true,
+            tabsIndex: 0
+		}
+	},
+    filters: {
+        NumFormat(value) {
+            //处理金额
+            return Number(value).toFixed(2)
+        }
+    },
+	computed: {
+		...mapState(['hasLogin', 'userInfo','isWxAuthorize'])
+	},
+	onLoad(option) {
+		if (option.type == 'share') {
+			wxLogin.wxLoginAuthorize()
+		}
+		this.initGetUser(option)
+	},
+	methods: {
+        async initGetUser(option){
+            const user = await this.$api.getStorage()
+            this.listQuery.zoneId = option.zoneId
+            this.listQuery.typeSort = option.typeSort
+            this.tabsIndex = option.typeSort*1
+            this.listQuery.userId = user.userId ? user.userId : 0
+            this.userIdentity = user.userIdentity
+            this.getZoneSecond(this.listQuery)
+        },
+        // 切换分类查询
+        handleClickTabS(index){
+            this.tabsIndex = index
+            this.listQuery.typeSort = index
+            this.listQuery.pageNum = 1
+            this.getZoneSecond()
+        },
+        async getZoneSecond() {
+            //专区详情
+            try {
+                const res = await this.CommonService.getZoneSecond(this.listQuery)
+                const data = res.data
+                this.imageList = data.imageList
+                uni.setNavigationBarTitle({ title: `${data.zone.floorTitle}` })
+                this.productList = data.products.results
+                this.hasNextPage = data.products.hasNextPage
+                this.skeletonShow = false
+                if (this.hasNextPage) {
+                    this.pullUpOn = false
+                    this.nomoreText = '上拉显示更多'
+                } else {
+                    if (this.productList.length < 6) {
+                        this.pullUpOn = true
+                    } else {
+                        this.pullUpOn = false
+                        this.loadding = false
+                        this.nomoreText = '已至底部'
+                    }
+                }
+            } catch (error) {
+                console.log('error', error.msg)
+            }
+        },
+        async OnReachBottomData() {
+            // 上滑加载
+            try {
+                this.listQuery.pageNum += 1
+                const res = await this.CommonService.GetHomeNewFloorList(this.listQuery)
+                const data = res.data
+                this.productList = this.productList.concat(data.products.results)
+                this.hasNextPage = data.products.hasNextPage
+                if (this.hasNextPage) {
+                    this.pullUpOn = false
+                    this.nomoreText = '上拉显示更多'
+                } else {
+                    this.pullUpOn = false
+                    this.loadding = false
+                    this.nomoreText = '已至底部'
+                }
+            } catch (error) {
+                console.log('error', error.msg)
+            }
+        },
+        navToDetailPage(pros) {
+            //跳转商品详情
+            this.$api.navigateTo(`/pages/goods/product?id=${pros.productId}`)
+        },
+        BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+            //跳转
+            this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+        },
+        swiperChange(e) {//轮播图切换
+        	this.current = e.detail.current
+        }
+	},
+	onPageScroll(e) {
+		//实时获取到滚动的值
+		if (e.scrollTop > 400) {
+			this.isScrollTop = true
+		} else {
+			this.isScrollTop = false
+		}
+	},
+	onPullDownRefresh() {
+        setTimeout(() => {
+            this.listQuery.pageNum = 1
+            this.getZoneSecond()
+            uni.stopPullDownRefresh()
+        }, 200)
+	},
+    onReachBottom() {
+        if (this.hasNextPage) {
+            this.loadding = true
+            this.pullUpOn = true
+            this.OnReachBottomData()
+        }
+    },
+	onShareAppMessage(res) {
+		//分享转发
+		if (res.from === 'button') {
+			// 来自页面内转发按钮
+		}
+		return {
+			title: '采美-一站式生/医美采购服务平台',
+			path: `pages/goods/good-floor-zone?type=share&linkId=${this.pageId}`
+		}
+	},
+	onShow() {}
+}
+</script>
+
+<style lang="scss">
+page {
+	background-color: #f7f7f7;
+}
+.container-home {
+	width: 100%;
+	height: auto;
+    box-sizing: border-box;
+    padding: 24rpx 24rpx 0 24rpx;
+}
+.tui-floor-item{
+    width: 100%;
+    height: 240rpx;
+    border-radius: 16rpx;
+    box-sizing: border-box;
+    padding: 0;
+    position: relative;
+    margin-bottom: 24rpx;
+    .swiper__dots-box{
+        position: absolute;
+        bottom: 30rpx;
+        left: 0;
+        right: 0;
+        /* #ifndef APP-NVUE */
+        display: flex;
+        /* #endif */
+        flex: 1;
+        flex-direction: row;
+        justify-content: center;
+        align-items: center;
+        .swiper__dots-item{
+            width: 8rpx;
+            height: 8rpx;
+            border-radius: 100%;
+            margin-left: 6px;
+            background-color:rgba(255,255,255,.7);
+        }
+        .swiper__dots-long{
+            width: 35rpx;
+            height: 8rpx;
+            border-radius: 4rpx;
+            background-color: #ffff;
+            transition: all 0.4s;
+        }
+    }
+    .tui-floor-swiper{
+        width: 100%;
+        height: 240rpx;
+        text-align: center;
+        line-height: 240rpx;
+        float: left;
+        border-radius: 16rpx;
+        overflow: hidden;
+        .floor-image{
+            width: 100%;
+            height: 100%;
+            display: block;
+        }
+    }
+}
+.tui-floor-tabs{
+    width: 100%;
+    height: 88rpx;
+    background-color: #FFFFFF;
+    border-radius: 16rpx;
+    display: flex;
+    justify-content: flex-start;
+    margin-bottom: 24rpx;
+    .top-tabs-item{
+        padding: 0 24rpx;
+        line-height: 88rpx;
+        text-align: center;
+        font-size: 30rpx;
+        color: #333333;
+        cursor: pointer;
+        &.active{
+            color: #FF5B00;
+            font-weight: bold;
+            text-decoration: underline;
+        }
+    }
+}
+.floor-item-main{
+    width: 100%;
+    min-height: 600rpx;
+    display: flex;
+    justify-content: space-between;
+    flex-wrap: wrap;
+    align-items: center;
+    .floor-item {
+        width: 339rpx;
+        height: 524rpx;
+        font-size: $font-size-24;
+        color: $text-color;
+        background: #ffffff;
+        line-height: 36rpx;
+        border-radius: 16rpx;
+        box-sizing: border-box;
+        position: relative;
+        margin-right: 20rpx;
+        margin-bottom: 20rpx;
+        &:nth-child(2n){
+            margin-right: 0;
+        }
+        .item-img {
+            width: 339rpx;
+            height: 339rpx;
+            border-radius: 16rpx 16rpx 0 0;
+            display: block;
+            margin-bottom: 8rpx;
+        }
+    
+        .floor-item_tag {
+            width: 100%;
+            height: 32rpx;
+            float: left;
+            margin: 20rpx 0;
+            padding: 0 20rpx;
+            box-sizing: border-box;
+    
+            text {
+                display: inline-block;
+                padding: 0 8rpx;
+                border: 1px solid #e3ebf7;
+                border-radius: 8rpx;
+                color: #9aa5b5;
+                font-size: $font-size-22;
+                line-height: 32rpx;
+                text-align: center;
+                float: left;
+            }
+        }
+    
+        .floor-item-content {
+            width: 100%;
+            padding: 0 20rpx;
+            box-sizing: border-box;
+        }
+    
+        .floor-item-act {
+            display: block;
+            width: 100%;
+            height: 32rpx;
+            text-align: center;
+            box-sizing: border-box;
+        }
+    
+        .title-none {
+            font-size: $font-size-26;
+            color: #ff2a2a;
+            line-height: 54rpx;
+        }
+    
+        .title {
+            width: 100%;
+            height: 70rpx;
+            display: flex;
+            line-height: 35rpx;
+            flex-direction: column;
+            margin: 8rpx 0;
+            padding: 0;
+            position: relative;
+    
+            .mclap {
+                width: 100%;
+                line-height: 35rpx;
+                text-overflow: ellipsis;
+                display: -webkit-box;
+                word-break: break-all;
+                -webkit-box-orient: vertical;
+                -webkit-line-clamp: 2;
+                overflow: hidden;
+                font-size: 26rpx;
+    
+                &.indent {
+                    text-indent: 95rpx;
+                }
+            }
+    
+            .mclap-tag {
+                display: block;
+                width: 84rpx;
+                height: 32rpx;
+                background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+                border-radius: 4rpx 48rpx 4px 4px;
+                line-height: 32rpx;
+                font-size: $font-size-22;
+                color: #ffffff;
+                text-align: center;
+                position: absolute;
+                left: 0;
+                top: 0;
+            }
+        }
+    
+        .no-price {
+            height: 54rpx;
+            line-height: 54rpx;
+            display: flex;
+            box-sizing: border-box;
+    
+            .p-no {
+                font-size: $font-size-28;
+                color: $text-color;
+                display: block;
+                float: left;
+            }
+    
+            .p-stars {
+                float: left;
+            }
+        }
+    
+        .price {
+            color: #ff2a2a;
+            line-height: 54rpx;
+    
+            &.none {
+                text-decoration: line-through;
+                color: #999999;
+            }
+    
+            .sm {
+                font-size: $font-size-24;
+            }
+    
+            .big {
+                font-size: $font-size-28;
+            }
+        }
+    }
+    .floor-main-none{
+        width: 100%;
+        height: 100%;
+        display: flex;
+        align-items: center;
+        justify-content: center;
+        flex-direction: column;
+        .none-image {
+            width: 220rpx;
+            height: 220rpx;
+        }
+        .none-text {
+            font-size: $font-size-28;
+            color: #999999;
+            line-height: 44rpx;
+        }
+    }
+}
+</style>

+ 1 - 1
pages/goods/good-floor.vue

@@ -27,7 +27,7 @@
 import { mapState, mapMutations } from 'vuex'
 import customFloor from '@/components/cm-custom/custom-floor' //自定义导航
 import templateNav from '@/components/cm-module/pageTemplate/templateNav.vue'
-import pageFloor from '@/components/cm-module/homeIndex/pageFloor.vue'
+import pageFloor from './components/pageFloor.vue'
 import authorize from '@/common/config/authorize.js'
 import wxLogin from '@/common/config/wxLogin.js'
 

+ 6 - 6
pages/goods/good-floorMore.vue

@@ -39,12 +39,12 @@
 
 <script>
 import { mapState, mapMutations } from 'vuex'
-import templateA from '@/components/cm-module/pageFloorTemplate/templateA.vue'
-import templateB from '@/components/cm-module/pageFloorTemplate/templateB.vue'
-import templateC from '@/components/cm-module/pageFloorTemplate/templateC.vue'
-import templateD from '@/components/cm-module/pageFloorTemplate/templateD.vue'
-import templateE from '@/components/cm-module/pageFloorTemplate/templateE.vue'
-import templateF from '@/components/cm-module/pageFloorTemplate/templateF.vue'
+import templateA from './components/template-floor/templateA.vue'
+import templateB from './components/template-floor/templateB.vue'
+import templateC from './components/template-floor/templateC.vue'
+import templateD from './components/template-floor/templateD.vue'
+import templateE from './components/template-floor/templateE.vue'
+import templateF from './components/template-floor/templateF.vue'
 export default {
 	components: {
 		templateA,

+ 1001 - 983
pages/goods/good-hot.vue

@@ -1,983 +1,1001 @@
-<template>
-	<view class="container floor clearfix">
-		<tui-skeleton
-			v-if="skeletonShow"
-			backgroundColor="#fafafa"
-			borderRadius="10rpx"
-			:isLoading="true"
-			:loadingType="5"
-		></tui-skeleton>
-		<view v-else>
-			<view class="container-topcontent">
-				<view class="topcontent-image" :style="{ paddingTop: StatusBar + 'px' }">
-					<view
-						class="topcontent-title"
-						:class="fixedClass"
-						:style="{ paddingTop: fixedClass == 'fixed' ? StatusBar + 'px' : '0'}"
-					>
-						采美新品橱窗
-						<view class="topcontent-title-icon" @click="haveBack" :style="{ top: fixedClass == 'fixed' ? (StatusBar+7) + 'px' : '14rpx'}">
-							<text class="iconfont icon-fanhui"></text>
-						</view>
-					</view>
-				</view>
-				<view class="topcontent-swiper" :style="{ top: StatusBar + 44 + 'px' }">
-					<view class="swiper-goods">
-						<view class="swiper-banner-box">
-							<swiper
-								class="tui-banner-swiper tui-banner tui-skeleton-fillet"
-								:autoplay="true"
-								:interval="5000"
-								:duration="500"
-								@change="swiperChange"
-								:circular="true"
-							>
-								<swiper-item
-									v-for="(item, index) in topGoodList"
-									:key="index"
-									@click.stop="navToDetailPage(item.productId)"
-								>
-									<view class="swiper-goods-image">
-										<image :src="item.mainImage" mode="scaleToFill" />
-									</view>
-									<view class="swiper-goods-info">
-										<view class="swiper-goods-name"> {{ item.name }} </view>
-										<view class="swiper-goods-btn"> <view class="btn"> 立即购买 </view> </view>
-									</view>
-								</swiper-item>
-							</swiper>
-							<view class="swiper__dots-box" v-if="topGoodList.length > 1">
-								<view
-									v-for="(item, idx) in topGoodList"
-									:key="idx"
-									:class="[idx === current ? 'swiper__dots-long' : 'none']"
-									:data-index="current"
-									class="swiper__dots-item"
-								>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-			</view>
-			<view class="container-screen">
-				<view class="container-screen-box" @click="showDropShow">
-					<view class="screen-box-em">品牌</view>
-					<view class="screen-box-mi" v-if="!dropShow">
-						<view class="screen-list" :class="isAllcheckedBrand ? 'active' : ''">全部</view>
-						<view class="screen-list" v-for="(brand, index) in brandList" :key="index" v-if="index < 2">
-							{{ brand.name }}
-						</view>
-					</view>
-					<view class="screen-box-sp">
-						<text
-							class="iconfont"
-							:class="dropShow ? 'icon-xiangshangjiantou' : 'icon-xiangxiajiantou'"
-						></text>
-					</view>
-				</view>
-				<view class="container-screen-popup" v-if="dropShow">
-					<!-- <uni-transition mode-class="slide-top" :show=""> -->
-					<view class="container-screen-popupbox">
-						<!--header 顶部下拉选择框-->
-						<scroll-view class="tui-scroll-box" scroll-y scroll-with-animation :scroll-top="scrollTop">
-							<view class="screen-list" :class="isAllcheckedBrand ? 'active' : ''" @click="choiceBrandAll"
-								>全部</view
-							>
-							<view
-								class="screen-list"
-								v-for="(brand, index) in brandList"
-								:key="index"
-								@click="choiceBrand(brand, index)"
-								:class="brand.isChecked ? 'active' : ''"
-							>
-								{{ brand.name }}
-							</view>
-						</scroll-view>
-						<view class="container-screen-btnbox">
-							<view class="btns" @tap="btnCloseDrop">确定</view>
-						</view>
-					</view>
-					<!-- </uni-transition> -->
-				</view>
-			</view>
-			<!-- 楼层 -->
-			<view class="container-section tui-skeleton">
-				<view class="floor-item-banner ad_01" v-if="appletsBanner">
-					<image class="item-img-gg" :src="appletsBanner"></image>
-				</view>
-				<view class="section_page_main clearfix">
-					<view
-						class="floor-item clearfix"
-						v-for="(pros, idx) in productList"
-						:key="idx"
-						@click.stop="navToDetailPage(pros.productId)"
-					>
-						<image class="item-img tui-skeleton-fillet" :src="pros.image" mode="aspectFill"></image>
-						<view class="floor-item-type" v-if="pros.productType == 2">医疗器械</view>
-						<view class="floor-item-content">
-							<view class="title tui-skeleton-rect">
-								<text class="mclap-tag" v-if="pros.beautyActFlag == '1'">美博会</text>
-								<text class="mclap" :class="pros.beautyActFlag == '1' ? 'indent' : ''"
-									>{{ pros.name }}
-								</text>
-							</view>
-							<view class="floor-item-price">
-								<view class="floor-item-act">
-									<view class="coupon-tags" v-if="pros.couponsLogo">优惠券</view>
-									<template v-if="pros.actStatus === 1">
-										<view class="floor-tags" v-if="PromotionsFormat(pros.promotions)">
-											{{ pros.promotions.name }}
-											<text v-if="pros.priceFlag != 1">:¥{{ pros.price | NumFormat }}</text>
-										</view>
-										<view class="floor-tags" v-else>{{ pros.promotions.name }}</view>
-									</template>
-									<template v-if="pros.svipProductFlag == 1">
-										<view class="svip-tags">
-											<view class="tags" :class="{ none: vipFlag != 1 }">SVIP</view>
-											<view class="price" v-if="isShowVipFlag(pros)">{{
-												pros.svipPriceTag
-											}}</view>
-										</view>
-									</template>
-								</view>
-								<view v-if="hasLogin" class="list-price">
-									<template v-if="userIdentity == 1">
-										<text
-											class="price-larger"
-											:class="
-												PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
-													? 'none'
-													: ''
-											"
-										>
-											¥{{
-												(PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
-													? pros.originalPrice
-													: pros.price) | NumFormat
-											}}
-										</text>
-									</template>
-									<template v-if="userIdentity == 4 && vipFlag != 1">
-										<view class="price-larger" v-if="pros.priceFlag == 1">
-											<text class="txt">¥未公开价格</text>
-										</view>
-										<view class="price-larger" v-if="pros.priceFlag == 2">
-											<text class="txt">¥价格仅会员可见</text>
-										</view>
-										<view class="price-larger" v-else-if="pros.priceFlag == 3">
-											<text class="txt">¥仅医美机构可见</text>
-										</view>
-										<text
-											v-else
-											class="price-larger"
-											:class="
-												PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
-													? 'none'
-													: ''
-											"
-										>
-											¥{{
-												(PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
-													? pros.originalPrice
-													: pros.price) | NumFormat
-											}}
-										</text>
-									</template>
-									<template v-if="userIdentity == 3">
-										<template v-if="pros.shopId === shopId">
-											<view class="price-larger" v-if="pros.priceFlag == 1">
-												<text class="txt">¥未公开价格</text>
-											</view>
-											<text
-												v-else
-												class="price-larger"
-												:class="
-													PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
-														? 'none'
-														: ''
-												"
-											>
-												¥{{
-													(PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
-														? pros.originalPrice
-														: pros.price) | NumFormat
-												}}
-											</text>
-										</template>
-										<template v-else>
-											<view class="list-login-now">
-												<text class="p-no">¥</text>
-												<uni-grader :grade="Number(pros.priceGrade)"></uni-grader>
-											</view>
-										</template>
-									</template>
-									<template v-if="userIdentity == 2 || (userIdentity == 4 && vipFlag == 1)">
-										<view class="price-larger" v-if="pros.priceFlag == 1">
-											<text class="txt">¥未公开价格</text>
-										</view>
-										<view class="price-larger" v-if="pros.priceFlag == 3 && firstClubType != 1">
-											<text class="txt">¥仅医美机构可见</text>
-										</view>
-										<text
-											v-else
-											class="price-larger"
-											:class="
-												PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
-													? 'none'
-													: ''
-											"
-										>
-											¥{{
-												(PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
-													? pros.originalPrice
-													: pros.price) | NumFormat
-											}}
-										</text>
-									</template>
-								</view>
-								<view v-else class="list-login-now">
-									<text class="p-no">¥</text>
-									<uni-grader :grade="Number(pros.priceGrade)"></uni-grader>
-								</view>
-							</view>
-						</view>
-					</view>
-				</view>
-				<!--加载loadding-->
-				<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-				<tui-nomore :visible="!pullUpOn" :backgroundColor="'#F7F7F7'" :text="nomoreText"></tui-nomore>
-				<!--加载loadding-->
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { mapState, mapMutations } from 'vuex'
-import uniGrader from '@/components/uni-grade/uni-grade.vue'
-import cmsMixins from '@/mixins/cmsMixins.js'
-export default{
-	mixins: [cmsMixins],
-	components: {
-		uniGrader
-	},
-	data() {
-		return {
-			fixedClass: 'float',
-			StatusBar: this.StatusBar,
-			skeletonShow: true,
-			dropShow: false,
-			vipFlag: 0,
-			userIdentity: 0,
-			productList: [],
-			brandList: [],
-			checkedBrandList: [],
-			isAllcheckedBrand: true,
-			topGoodList: [],
-			current: 0,
-			appletsBanner: '',
-			listQuery: {
-				userId: 0,
-				brandID: '',
-				pageSize: 10,
-				pageNum: 1,
-				source: 2
-			},
-			NavigationBarTitle: '',
-			nomoreText: '上拉显示更多',
-			hasNextPage: false,
-			loadding: false,
-			pullUpOn: true,
-			pullFlag: true
-		}
-	},
-	onLoad(option) {
-		this.initGetStotage()
-	},
-	filters: {
-		NumFormat: function(text) {
-			//处理金额
-			return Number(text).toFixed(2)
-		}
-	},
-	computed: {
-		...mapState(['hasLogin', 'userInfo', 'identity'])
-	},
-	methods: {
-		async initGetStotage() {
-			// 初始化
-			const userInfo = await this.$api.getStorage()
-			this.listQuery.userId = userInfo.userId ? userInfo.userId : 0
-			this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
-			this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
-			this.GetHomeRecommend()
-			this.GetHomeNewBrandNames()
-			this.GetHomeNewFloorList()
-		},
-		GetHomeNewBrandNames() {
-			//新品商品品牌列表
-			this.CommonService.GetHomeNewBrandNames()
-				.then(response => {
-					this.brandList = response.data
-				})
-				.catch(error => {
-					console.log('获取新品橱窗推荐模块信息异常')
-				})
-		},
-		GetHomeRecommend() {
-			//新品橱窗顶部推荐
-			this.CommonService.GetHomeRecommend()
-				.then(response => {
-					this.topGoodList = response.data
-				})
-				.catch(error => {
-					console.log('获取新品橱窗推荐模块信息异常')
-				})
-		},
-		GetHomeNewFloorList() {
-			//楼层查看更多
-			this.CommonService.GetHomeNewFloorList(this.listQuery)
-				.then(response => {
-					let data = response.data
-					this.productList = data.results
-					this.hasNextPage = data.hasNextPage
-					this.skeletonShow = false
-					if (this.hasNextPage) {
-						this.pullUpOn = false
-						this.nomoreText = '上拉显示更多'
-					} else {
-						if (this.productList.length < 6) {
-							this.pullUpOn = true
-						} else {
-							this.pullUpOn = false
-							this.loadding = false
-							this.nomoreText = '已至底部'
-						}
-					}
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		OnReachBottomData() {
-			// 上滑加载
-			this.listQuery.pageNum += 1
-			this.CommonService.GetHomeNewFloorList(this.listQuery)
-				.then(response => {
-					let data = response.data
-					this.hasNextPage = data.hasNextPage
-					this.productList = this.productList.concat(data.results)
-					this.skeletonShow = false
-					if (this.hasNextPage) {
-						this.pullUpOn = false
-						this.nomoreText = '上拉显示更多'
-					} else {
-						this.pullUpOn = false
-						this.loadding = false
-						this.nomoreText = '已至底部'
-					}
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		PromotionsFormat(promo) {
-			//促销活动类型数据处理
-			if (promo != null) {
-				if (promo.type == 1 && promo.mode == 1) {
-					return true
-				} else {
-					return false
-				}
-			}
-			return false
-		},
-		navToDetailPage(productId) {
-			//跳转商品详情页
-			this.cmsSysStatistics(5)
-			this.$api.navigateTo(`/pages/goods/product?id=${productId}&typeId=5`)
-		},
-		isShowVipFlag(pros) {
-			// 超级会员价格显示控制
-			if (this.hasLogin && pros.priceFlag != 1) {
-				if (this.userIdentity == 4 && this.vipFlag == 1) {
-					return true
-				} else if (this.userIdentity == 2) {
-					return true
-				}
-			}
-		},
-		swiperChange(e) {
-			//轮播图切换
-			const index = e.detail.current
-			this.current = index
-		},
-		choiceBrand(brand, index) {
-			// 选择品牌
-			brand.isChecked = !brand.isChecked
-			if (brand.isChecked) {
-				if (!this.contains(this.checkedBrandList, brand.id)) {
-					this.checkedBrandList.push(brand.id)
-				}
-			} else {
-				this.checkedBrandList.splice(this.checkedBrandList.indexOf(brand.id), 1)
-			}
-			this.isAllcheckedBrand = false
-			this.checkedBrandLength = this.checkedBrandList.length
-			this.listQuery.brandID = this.checkedBrandList.join(',')
-			console.log('this.listQuery.brandID', this.listQuery.brandID)
-		},
-		choiceBrandAll() {
-			// 点击选择全部品牌
-			this.isAllcheckedBrand = true
-			this.listQuery.brandID = ''
-			this.brandList.forEach(el => {
-				el.isChecked = false
-			})
-		},
-		contains(arr, val) {
-			// 校验
-			return arr.some(item => item === val)
-		},
-		showDropShow() {
-			this.dropShow = !this.dropShow
-		},
-		btnCloseDrop() {
-			this.dropShow = false
-			this.productList = []
-			this.listQuery.pageNum = 1
-			this.GetHomeNewFloorList()
-		},
-		haveBack() {
-			uni.navigateBack({
-				delta: 1
-			})
-		}
-	},
-	onPageScroll(e) {
-		//实时获取到滚动的值
-		if (e.scrollTop > 50) {
-			this.fixedClass = 'fixed'
-		} else {
-			this.fixedClass = 'float'
-		}
-	},
-	onPullDownRefresh() {
-		setTimeout(() => {
-			this.productList = []
-			this.listQuery.pageNum = 1
-			this.GetHomeNewFloorList()
-			uni.stopPullDownRefresh()
-		}, 200)
-	},
-	onReachBottom() {
-		if (this.hasNextPage) {
-			this.loadding = true
-			this.pullUpOn = true
-			this.OnReachBottomData()
-		}
-	},
-	onShow() {
-		
-	}
-}
-</script>
-
-<style lang="scss">
-page {
-	background-color: #f7f7f7;
-}
-.container-home {
-	width: 100%;
-	height: auto;
-}
-.container-topcontent {
-	width: 100%;
-	height: 620rpx;
-	background: #ffffff;
-	box-sizing: border-box;
-	position: relative;
-	.topcontent-image {
-		width: 100%;
-		height: 480rpx;
-		background: url(https://static.caimei365.com/app/img/hot/hot-bg@2x.png);
-		background-size: cover;
-		box-sizing: border-box;
-		.topcontent-title {
-			width: 100%;
-			height: 80rpx;
-			line-height: 80rpx;
-			font-size: 38rpx;
-			color: #ffffff;
-			font-weight: bold;
-			text-align: center;
-			position: relative;
-			&.fixed {
-				position: fixed;
-				top: 0;
-				height: 80rpx;
-				background: linear-gradient(90deg, #FF5B00 0%, #f28f31 100%);
-				z-index: 9999;
-				
-			}
-		}
-		.topcontent-title-icon {
-			width: 50rpx;
-			height: 50rpx;
-			line-height: 50rpx;
-			position: absolute;
-			left: 24rpx;
-			top: 14rpx;
-			border-radius: 50%;
-			text-align: center;
-			background: rgba(255, 255, 255, 0.6);
-			border: 0.5px solid rgba(0, 0, 0, 0.1);
-			box-sizing: border-box;
-			z-index: 9999;
-			.iconfont {
-				height: 100%;
-				width: 100%;
-				font-size: 32rpx;
-				display: inline-block;
-				overflow: hidden;
-			}
-		}
-	}
-	.topcontent-swiper {
-		width: 100%;
-		height: auto;
-		position: absolute;
-		left: 0;
-	}
-	.swiper-goods {
-		width: 100%;
-		height: auto;
-		position: relative;
-		background-size: cover;
-	}
-	.swiper-banner-box {
-		width: 100%;
-		height: 360rpx;
-		position: relative;
-		background-size: cover;
-	}
-	.tui-banner-swiper {
-		width: 680rpx;
-		margin: 0 auto;
-		height: 340rpx;
-		background: url(https://static.caimei365.com/app/img/hot/hot-bg@3x.png);
-		background-size: cover;
-		border-radius: 24rpx;
-		overflow: hidden;
-		transform: translateY(0);
-		box-shadow: 0px 3px 6px rgba(225, 86, 22, 0.08);
-		margin-top: 16rpx;
-		padding: 12rpx;
-		.swiper-goods-image {
-			width: 336rpx;
-			height: 336rpx;
-			float: left;
-			image {
-				width: 336rpx;
-				height: 336rpx;
-				display: block;
-				border-radius: 8rpx;
-			}
-		}
-		.swiper-goods-info {
-			width: 326rpx;
-			height: 336rpx;
-			box-sizing: border-box;
-			padding: 32rpx 24rpx;
-			float: right;
-			position: relative;
-			.swiper-goods-name {
-				width: 100%;
-				height: auto;
-				line-height: 44rpx;
-				text-overflow: ellipsis;
-				display: -webkit-box;
-				word-break: break-all;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 4;
-				overflow: hidden;
-				font-size: 28rpx;
-				color: #333333;
-				text-align: center;
-			}
-			.swiper-goods-btn {
-				width: 100%;
-				height: 64rpx;
-				position: absolute;
-				bottom: 60rpx;
-				left: 0;
-				.btn {
-					width: 200rpx;
-					height: 64rpx;
-					margin: 0 auto;
-					text-align: center;
-					line-height: 64rpx;
-					background-color: #f94b4b;
-					font-size: 26rpx;
-					color: #ffffff;
-					border-radius: 32rpx;
-				}
-			}
-		}
-	}
-	.swiper__dots-box {
-		position: absolute;
-		bottom: -45rpx;
-		left: 0;
-		right: 0;
-		/* #ifndef APP-NVUE */
-		display: flex;
-		/* #endif */
-		flex: 1;
-		flex-direction: row;
-		justify-content: center;
-		align-items: center;
-		.swiper__dots-item {
-			width: 14rpx;
-			height: 8rpx;
-			border-radius: 4rpx;
-			margin-left: 6px;
-			background-color: rgba(225, 86, 22, 0.39);
-		}
-		.swiper__dots-long {
-			width: 40rpx;
-			height: 8rpx;
-			border-radius: 4rpx;
-			background-color: #FF5B00;
-			transition: all 0.4s;
-		}
-	}
-	.swiper-banner-msg {
-		width: 100%;
-		height: 54rpx;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-		margin-top: 24rpx;
-		.content {
-			width: 100%;
-			height: 54rpx;
-			box-sizing: border-box;
-			padding: 0 34rpx;
-			background-color: #fff0e9;
-			border-radius: 16rpx;
-			.item {
-				width: 33.33%;
-				height: 54rpx;
-				line-height: 54rpx;
-				font-size: $font-size-24;
-				color: $color-system;
-				float: left;
-				&.le {
-					text-align: left;
-				}
-				&.ce {
-					text-align: center;
-				}
-				&.ri {
-					text-align: right;
-				}
-				.iconfont {
-					color: $color-system;
-					font-size: $font-size-32;
-					.sm {
-						font-size: $font-size-26;
-					}
-				}
-			}
-		}
-	}
-}
-.container-screen {
-	width: 100%;
-	height: 138rpx;
-	padding: 24rpx;
-	box-sizing: border-box;
-	background-color: #f7f7f7;
-	position: relative;
-	.container-screen-box {
-		width: 100%;
-		height: 100%;
-		background-color: #ffffff;
-		border-radius: 16rpx;
-		.screen-box-em {
-			float: left;
-			width: 134rpx;
-			line-height: 90rpx;
-			text-align: center;
-			color: #333333;
-			font-size: 30rpx;
-			font-weight: bold;
-		}
-		.screen-box-mi {
-			float: left;
-			width: 468rpx;
-			height: 100%;
-			box-sizing: border-box;
-			padding: 21rpx 0;
-			.screen-list {
-				width: 140rpx;
-				height: 48rpx;
-				padding: 0 12rpx;
-				float: left;
-				text-align: center;
-				box-sizing: border-box;
-				line-height: 48rpx;
-				font-size: 30rpx;
-				color: #666666;
-				border-radius: 24rpx;
-				margin-right: 20rpx;
-				text-overflow: ellipsis;
-				overflow: hidden;
-				display: -webkit-box;
-				-webkit-line-clamp: 1;
-				line-clamp: 1;
-				-webkit-box-orient: vertical;
-				word-break: break-all;
-				&:last-child {
-					margin-right: 0;
-				}
-				&.active {
-					background-color: #ffe6dc;
-					color: #FF5B00;
-				}
-			}
-		}
-		.screen-box-sp {
-			float: right;
-			width: 100rpx;
-			line-height: 90rpx;
-			text-align: center;
-			.iconfont {
-				color: #999999;
-				font-size: 40rpx;
-			}
-		}
-	}
-	.container-screen-popup {
-		width: 100%;
-		height: 480rpx;
-		box-sizing: border-box;
-		padding: 24rpx;
-		position: absolute;
-		left: 0;
-		top: 86rpx;
-		z-index: 999;
-		.container-screen-popupbox {
-			width: 100%;
-			height: 100%;
-			box-sizing: border-box;
-			padding: 0 24rpx;
-			background-color: #ffffff;
-			border-radius: 0 0 16rpx 16rpx;
-			box-shadow: 0 10rpx 14rpx 0 rgba(86, 119, 252, 0.2);
-		}
-		.tui-scroll-box {
-			width: 100%;
-			height: 300rpx;
-			overflow: hidden;
-			.screen-list {
-				width: 140rpx;
-				height: 48rpx;
-				padding: 0 12rpx;
-				float: left;
-				text-align: center;
-				box-sizing: border-box;
-				line-height: 48rpx;
-				font-size: 30rpx;
-				color: #666666;
-				border-radius: 24rpx;
-				margin-right: 30rpx;
-				margin-bottom: 30rpx;
-				text-overflow: ellipsis;
-				overflow: hidden;
-				display: -webkit-box;
-				-webkit-line-clamp: 1;
-				line-clamp: 1;
-				-webkit-box-orient: vertical;
-				word-break: break-all;
-				&:nth-child(4n) {
-					margin-right: 0;
-				}
-				&.active {
-					background-color: #ffe6dc;
-					color: #FF5B00;
-				}
-			}
-		}
-		.container-screen-btnbox {
-			width: 100%;
-			height: 84rpx;
-			margin-top: 15rpx;
-			.btns {
-				width: 314rpx;
-				height: 84rpx;
-				line-height: 84rpx;
-				border-radius: 42rpx;
-				text-align: center;
-				font-size: 30rpx;
-				color: #ffffff;
-				background: $btn-confirm;
-				margin: 0 auto;
-			}
-		}
-	}
-}
-.container-section {
-	width: 100%;
-	height: auto;
-	background-color: #f7f7f7;
-	box-sizing: border-box;
-	padding: 0 24rpx 24rpx 24rpx;
-}
-.floor-item-banner {
-	width: 100%;
-	height: 240rpx;
-	margin-bottom: 20rpx;
-	.item-img-gg {
-		width: 100%;
-		height: 240rpx;
-		display: block;
-		border-radius: 16rpx;
-	}
-}
-.section_page_main {
-	width: 100%;
-	height: auto;
-	box-sizing: border-box;
-	.floor-item {
-		width: 339rpx;
-		height: 516rpx;
-		margin-right: 20rpx;
-		font-size: $font-size-24;
-		color: $text-color;
-		background: #ffffff;
-		line-height: 36rpx;
-		border-radius: 16rpx;
-		margin-bottom: 20rpx;
-		float: left;
-		box-sizing: border-box;
-		position: relative;
-		&:nth-child(2n) {
-			margin-right: 0;
-		}
-		.item-img {
-			width: 339rpx;
-			height: 339rpx;
-			border-radius: 16rpx 16rpx 0 0;
-			display: block;
-			margin-bottom: 8rpx;
-		}
-		.floor-item-type {
-			width: 64rpx;
-			height: 64rpx;
-			text-align: justify;
-			box-sizing: border-box;
-			padding: 10rpx;
-			border-radius: 0 0 8rpx 8rpx;
-			background-color: #33ccbf;
-			font-size: $font-size-22;
-			color: #ffffff;
-			line-height: 25rpx;
-			position: absolute;
-			top: 0;
-			right: 16rpx;
-		}
-		.floor-item-content {
-			width: 100%;
-			padding: 0 20rpx;
-			box-sizing: border-box;
-		}
-		.floor-item-act {
-			display: block;
-			width: 100%;
-			height: 32rpx;
-			text-align: center;
-			box-sizing: border-box;
-		}
-		.title-none {
-			font-size: $font-size-26;
-			color: #ff2a2a;
-			line-height: 54rpx;
-		}
-		.title {
-			width: 100%;
-			height: 70rpx;
-			display: flex;
-			line-height: 35rpx;
-			flex-direction: column;
-			margin: 8rpx 0;
-			padding: 0;
-			position: relative;
-			.mclap {
-				width: 100%;
-				line-height: 35rpx;
-				text-overflow: ellipsis;
-				display: -webkit-box;
-				word-break: break-all;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 2;
-				overflow: hidden;
-				font-size: 26rpx;
-				&.indent {
-					text-indent: 95rpx;
-				}
-			}
-			.mclap-tag {
-				display: block;
-				width: 84rpx;
-				height: 32rpx;
-				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
-				border-radius: 4rpx 48rpx 4px 4px;
-				line-height: 32rpx;
-				font-size: $font-size-22;
-				color: #ffffff;
-				text-align: center;
-				position: absolute;
-				left: 0;
-				top: 0;
-			}
-		}
-		.floor-item-price {
-			.list-login-now {
-				line-height: 44rpx;
-				.p-no {
-					height: 44rpx;
-					line-height: 44rpx;
-					display: inline-block;
-					float: left;
-				}
-			}
-			.list-price {
-				color: #ff2a2a;
-				height: 44rpx;
-				float: left;
-				.price-larger {
-					width: 100%;
-					height: 44rpx;
-					font-size: 32rpx;
-					&.none {
-						text-decoration: line-through;
-						color: #999999;
-					}
-					&.small {
-						font-size: $font-size-24;
-					}
-					.txt {
-						font-size: $font-size-24;
-						display: inline-block;
-						line-height: 44rpx;
-						text-align: left;
-						float: left;
-					}
-				}
-			}
-		}
-	}
-}
-</style>
+<template>
+    <view class="container floor clearfix">
+        <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading="true"
+            :loadingType="5" />
+        <view v-else>
+            <view class="container-topcontent">
+                <view class="topcontent-image" :style="{ paddingTop: StatusBar + 'px' }">
+                    <view class="topcontent-title" :class="fixedClass"
+                        :style="{ paddingTop: fixedClass == 'fixed' ? StatusBar + 'px' : '0'}">
+                        采美新品橱窗
+                        <view class="topcontent-title-icon" @click="haveBack"
+                            :style="{ top: fixedClass == 'fixed' ? (StatusBar+7) + 'px' : '14rpx'}">
+                            <text class="iconfont icon-fanhui"></text>
+                        </view>
+                    </view>
+                </view>
+                <view class="topcontent-swiper" :style="{ top: StatusBar + 44 + 'px' }">
+                    <view class="swiper-goods">
+                        <view class="swiper-banner-box">
+                            <swiper class="tui-banner-swiper tui-banner tui-skeleton-fillet" :autoplay="true"
+                                :interval="5000" :duration="500" @change="swiperChange" :circular="true">
+                                <swiper-item v-for="(item, index) in topGoodList" :key="index"
+                                    @click.stop="navToDetailPage(item.productId)">
+                                    <view class="swiper-goods-image">
+                                        <image :src="item.mainImage" mode="scaleToFill" />
+                                    </view>
+                                    <view class="swiper-goods-info">
+                                        <view class="swiper-goods-name"> {{ item.name }} </view>
+                                        <view class="swiper-goods-btn">
+                                            <view class="btn"> 立即购买 </view>
+                                        </view>
+                                    </view>
+                                </swiper-item>
+                            </swiper>
+                            <view class="swiper__dots-box" v-if="topGoodList.length > 1">
+                                <view v-for="(item, idx) in topGoodList" :key="idx"
+                                    :class="[idx === current ? 'swiper__dots-long' : 'none']" :data-index="current"
+                                    class="swiper__dots-item">
+                                </view>
+                            </view>
+                        </view>
+                    </view>
+                </view>
+            </view>
+            <view class="container-screen">
+                <view class="container-screen-box" @click="showDropShow">
+                    <view class="screen-box-em">品牌</view>
+                    <view class="screen-box-mi" v-if="!dropShow">
+                        <view class="screen-list" :class="isAllcheckedBrand ? 'active' : ''">全部</view>
+                        <view class="screen-list" v-for="(brand, index) in brandList" :key="index" v-if="index < 2">
+                            {{ brand.name }}
+                        </view>
+                    </view>
+                    <view class="screen-box-sp">
+                        <text class="iconfont"
+                            :class="dropShow ? 'icon-xiangshangjiantou' : 'icon-xiangxiajiantou'"></text>
+                    </view>
+                </view>
+                <view class="container-screen-popup" v-if="dropShow">
+                    <!-- <uni-transition mode-class="slide-top" :show=""> -->
+                    <view class="container-screen-popupbox">
+                        <!--header 顶部下拉选择框-->
+                        <scroll-view class="tui-scroll-box" scroll-y scroll-with-animation :scroll-top="scrollTop">
+                            <view class="screen-list" :class="isAllcheckedBrand ? 'active' : ''"
+                                @click="choiceBrandAll">全部</view>
+                            <view class="screen-list" v-for="(brand, index) in brandList" :key="index"
+                                @click="choiceBrand(brand, index)" :class="brand.isChecked ? 'active' : ''">
+                                {{ brand.name }}
+                            </view>
+                        </scroll-view>
+                        <view class="container-screen-btnbox">
+                            <view class="btns" @tap="btnCloseDrop">确定</view>
+                        </view>
+                    </view>
+                    <!-- </uni-transition> -->
+                </view>
+            </view>
+            <!-- 楼层 -->
+            <view class="container-section tui-skeleton">
+                <view class="floor-item-banner ad_01" v-if="appletsBanner">
+                    <image class="item-img-gg" :src="appletsBanner"></image>
+                </view>
+                <view class="section_page_main clearfix">
+                    <view class="floor-item clearfix" v-for="(pros, idx) in productList" :key="idx"
+                        @click.stop="navToDetailPage(pros.productId)">
+                        <image class="item-img tui-skeleton-fillet" :src="pros.image" mode="aspectFill"></image>
+                        <view class="floor-item-type" v-if="pros.productType == 2">医疗器械</view>
+                        <view class="floor-item-content">
+                            <view class="title tui-skeleton-rect">
+                                <text class="mclap-tag" v-if="pros.beautyActFlag == '1'">美博会</text>
+                                <text class="mclap" :class="pros.beautyActFlag == '1' ? 'indent' : ''">{{ pros.name }}
+                                </text>
+                            </view>
+                            <view class="floor-item-price">
+                                <view class="floor-item-act">
+                                    <view class="coupon-tags" v-if="pros.couponsLogo">优惠券</view>
+                                    <template v-if="pros.actStatus === 1">
+                                        <view class="floor-tags" v-if="PromotionsFormat(pros.promotions)">
+                                            {{ pros.promotions.name }}
+                                            <text v-if="pros.priceFlag != 1">:¥{{ pros.price | NumFormat }}</text>
+                                        </view>
+                                        <view class="floor-tags" v-else>{{ pros.promotions.name }}</view>
+                                    </template>
+                                    <template v-if="pros.svipProductFlag == 1">
+                                        <view class="svip-tags">
+                                            <view class="tags" :class="{ none: vipFlag != 1 }">SVIP</view>
+                                            <view class="price" v-if="isShowVipFlag(pros)">{{
+												pros.svipPriceTag
+											}}</view>
+                                        </view>
+                                    </template>
+                                </view>
+                                <view v-if="hasLogin" class="list-price">
+                                    <template v-if="userIdentity == 1">
+                                        <text class="price-larger" :class="
+												PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
+													? 'none'
+													: ''
+											">
+                                            ¥{{
+												(PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
+													? pros.originalPrice
+													: pros.price) | NumFormat
+											}}
+                                        </text>
+                                    </template>
+                                    <template v-if="userIdentity == 3">
+                                        <template v-if="pros.shopId === shopId">
+                                            <view class="price-larger" v-if="pros.priceFlag == 1">
+                                                <text class="txt">¥未公开价格</text>
+                                            </view>
+                                            <text v-else class="price-larger" :class="
+                                    				PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
+                                    					? 'none'
+                                    					: ''
+                                    			">
+                                                ¥{{
+                                    				(PromotionsFormat(pros.promotions) || pros.svipProductFlag == 1
+                                    					? pros.originalPrice
+                                    					: pros.price) | NumFormat
+                                    			}}
+                                            </text>
+                                        </template>
+                                        <template v-else>
+                                            <view class="list-login-now">
+                                                <text class="p-no">¥</text>
+                                                <uni-grader :grade="Number(pros.priceGrade)"></uni-grader>
+                                            </view>
+                                        </template>
+                                    </template>
+                                    <template v-if="userIdentity === 2 || (userIdentity === 4 && vipFlag === 1)">
+                                        <view class="price-larger" v-if="pros.priceFlag === 1">
+                                            <text class="txt">¥未公开价格</text>
+                                        </view>
+                                        <view class="price-larger" v-else-if="pros.priceFlag === 3 && clubType !== 1">
+                                            <text class="txt">¥仅医美机构可见</text>
+                                        </view>
+                                        <text v-else class="price-larger" :class="
+                                    			PromotionsFormat(pros.promotions) || pros.svipProductFlag === 1
+                                    				? 'none'
+                                    				: ''
+                                    		">
+                                            ¥{{
+                                    			(PromotionsFormat(pros.promotions) || pros.svipProductFlag === 1
+                                    				? pros.originalPrice
+                                    				: pros.price) | NumFormat
+                                    		}}
+                                        </text>
+                                    </template>
+                                    <template v-if="userIdentity == 4">
+                                        <view class="price-larger" v-if="pros.priceFlag === 1">
+                                            <text class="txt">¥未公开价格</text>
+                                        </view>
+                                        <view class="price-larger" v-else-if="pros.priceFlag === 2">
+                                            <text class="txt">¥价格仅会员可见</text>
+                                        </view>
+                                        <view class="price-larger" v-else-if="pros.priceFlag === 3">
+                                            <text class="txt">¥仅医美机构可见</text>
+                                        </view>
+                                        <text v-else class="price-larger" :class="
+                                    			PromotionsFormat(pros.promotions) || pros.svipProductFlag === 1
+                                    				? 'none'
+                                    				: ''
+                                    		">
+                                            ¥{{
+                                    			(PromotionsFormat(pros.promotions) || pros.svipProductFlag === 1
+                                    				? pros.originalPrice
+                                    				: pros.price) | NumFormat
+                                    		}}
+                                        </text>
+                                    </template>
+                                </view>
+                                <view v-else class="list-login-now">
+                                    <text class="p-no">¥</text>
+                                    <uni-grader :grade="Number(pros.priceGrade)"></uni-grader>
+                                </view>
+                            </view>
+                        </view>
+                    </view>
+                </view>
+                <!--加载loadding-->
+                <tui-loadmore :visible="loadding" :index="3" type="black" />
+                <tui-nomore :visible="!pullUpOn" :backgroundColor="'#F7F7F7'" :text="nomoreText" />
+                <!--加载loadding-->
+            </view>
+        </view>
+    </view>
+</template>
+
+<script>
+    import { mapState, mapMutations } from 'vuex'
+    import uniGrader from '@/components/uni-grade/uni-grade.vue'
+    import cmsMixins from '@/mixins/cmsMixins.js'
+    export default {
+        mixins: [cmsMixins],
+        components: {
+            uniGrader
+        },
+        data() {
+            return {
+                fixedClass: 'float',
+                StatusBar: this.StatusBar,
+                skeletonShow: true,
+                dropShow: false,
+                vipFlag: 0,
+                userIdentity: 0,
+                productList: [],
+                brandList: [],
+                checkedBrandList: [],
+                isAllcheckedBrand: true,
+                topGoodList: [],
+                current: 0,
+                appletsBanner: '',
+                listQuery: {
+                    userId: 0,
+                    brandID: '',
+                    pageSize: 10,
+                    pageNum: 1,
+                    source: 2
+                },
+                NavigationBarTitle: '',
+                nomoreText: '上拉显示更多',
+                hasNextPage: false,
+                loadding: false,
+                pullUpOn: true,
+                pullFlag: true
+            }
+        },
+        onLoad(option) {
+            this.initGetStotage()
+        },
+        filters: {
+            NumFormat: function(text) {
+                //处理金额
+                return Number(text).toFixed(2)
+            }
+        },
+        computed: {
+            ...mapState(['hasLogin', 'userInfo', 'identity', 'clubType'])
+        },
+        methods: {
+            async initGetStotage() {
+                // 初始化
+                const userInfo = await this.$api.getStorage()
+                this.listQuery.userId = userInfo.userId ? userInfo.userId : 0
+                this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
+                this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
+                this.getRecommend()
+                this.getNewBrandNames()
+                this.getNewFloorList()
+            },
+            async getNewBrandNames() {
+                //新品商品品牌列表
+                try {
+                    const res = await this.CommonService.GetHomeNewBrandNames()
+                    this.brandList = res.data
+                } catch (e) {
+                    console.log('获取新品橱窗推荐模块信息异常')
+                }
+            },
+            async getRecommend() {
+                //新品橱窗顶部推荐
+                try {
+                    const res = await this.CommonService.GetHomeRecommend()
+                    this.topGoodList = res.data
+                } catch (e) {
+                    console.log('获取新品橱窗推荐模块信息异常')
+                }
+            },
+            async getNewFloorList() {
+                //楼层查看更多
+                try {
+                    const res = await this.CommonService.GetHomeNewFloorList(this.listQuery)
+                    const data = res.data
+                    this.productList = data.results
+                    this.hasNextPage = data.hasNextPage
+                    this.skeletonShow = false
+                    if (this.hasNextPage) {
+                        this.pullUpOn = false
+                        this.nomoreText = '上拉显示更多'
+                    } else {
+                        if (this.productList.length < 6) {
+                            this.pullUpOn = true
+                        } else {
+                            this.pullUpOn = false
+                            this.loadding = false
+                            this.nomoreText = '已至底部'
+                        }
+                    }
+                } catch (error) {
+                    console.log('error', error.msg)
+                }
+            },
+            async OnReachBottomData() {
+                // 上滑加载
+                try {
+                    this.listQuery.pageNum += 1
+                    const res = await this.CommonService.GetHomeNewFloorList(this.listQuery)
+                    const data = res.data
+                    this.hasNextPage = data.hasNextPage
+                    this.productList = this.productList.concat(data.results)
+                    if (this.hasNextPage) {
+                        this.pullUpOn = false
+                        this.nomoreText = '上拉显示更多'
+                    } else {
+                        this.pullUpOn = false
+                        this.loadding = false
+                        this.nomoreText = '已至底部'
+                    }
+                } catch (error) {
+                    console.log('error', error.msg)
+                }
+            },
+            PromotionsFormat(promo) {
+                //促销活动类型数据处理
+                if (promo != null) {
+                    if (promo.type == 1 && promo.mode == 1) {
+                        return true
+                    } else {
+                        return false
+                    }
+                }
+                return false
+            },
+            navToDetailPage(productId) {
+                //跳转商品详情页
+                this.cmsSysStatistics(5)
+                this.$api.navigateTo(`/pages/goods/product?id=${productId}&typeId=5`)
+            },
+            isShowVipFlag(pros) {
+                // 超级会员价格显示控制
+                if (this.hasLogin && pros.priceFlag != 1) {
+                    if (this.userIdentity == 4 && this.vipFlag == 1) {
+                        return true
+                    } else if (this.userIdentity == 2) {
+                        return true
+                    }
+                }
+            },
+            swiperChange(e) {
+                //轮播图切换
+                const index = e.detail.current
+                this.current = index
+            },
+            choiceBrand(brand, index) {
+                // 选择品牌
+                brand.isChecked = !brand.isChecked
+                if (brand.isChecked) {
+                    if (!this.contains(this.checkedBrandList, brand.id)) {
+                        this.checkedBrandList.push(brand.id)
+                    }
+                } else {
+                    this.checkedBrandList.splice(this.checkedBrandList.indexOf(brand.id), 1)
+                }
+                this.isAllcheckedBrand = false
+                this.checkedBrandLength = this.checkedBrandList.length
+                this.listQuery.brandID = this.checkedBrandList.join(',')
+                console.log('this.listQuery.brandID', this.listQuery.brandID)
+            },
+            choiceBrandAll() {
+                // 点击选择全部品牌
+                this.isAllcheckedBrand = true
+                this.listQuery.brandID = ''
+                this.brandList.forEach(el => {
+                    el.isChecked = false
+                })
+            },
+            contains(arr, val) {
+                // 校验
+                return arr.some(item => item === val)
+            },
+            showDropShow() {
+                this.dropShow = !this.dropShow
+            },
+            btnCloseDrop() {
+                this.pullUpOn = true
+                this.loadding = false
+                this.dropShow = false
+                this.productList = []
+                this.listQuery.pageNum = 1
+                this.getNewFloorList()
+            },
+            haveBack() {
+                uni.navigateBack({
+                    delta: 1
+                })
+            }
+        },
+        onPageScroll(e) {
+            //实时获取到滚动的值
+            if (e.scrollTop > 50) {
+                this.fixedClass = 'fixed'
+            } else {
+                this.fixedClass = 'float'
+            }
+        },
+        onPullDownRefresh() {
+            setTimeout(() => {
+                this.productList = []
+                this.listQuery.pageNum = 1
+                this.getNewFloorList()
+                uni.stopPullDownRefresh()
+            }, 200)
+        },
+        onReachBottom() {
+            if (this.hasNextPage) {
+                this.loadding = true
+                this.pullUpOn = true
+                this.OnReachBottomData()
+            }
+        },
+        onShow() {
+
+        }
+    }
+</script>
+
+<style lang="scss">
+    page {
+        background-color: #f7f7f7;
+    }
+
+    .container-home {
+        width: 100%;
+        height: auto;
+    }
+
+    .container-topcontent {
+        width: 100%;
+        height: 620rpx;
+        background: #ffffff;
+        box-sizing: border-box;
+        position: relative;
+
+        .topcontent-image {
+            width: 100%;
+            height: 480rpx;
+            background: url(https://static.caimei365.com/app/img/hot/hot-bg@2x.png);
+            background-size: cover;
+            box-sizing: border-box;
+
+            .topcontent-title {
+                width: 100%;
+                height: 80rpx;
+                line-height: 80rpx;
+                font-size: 38rpx;
+                color: #666666;
+                font-weight: bold;
+                text-align: center;
+                position: relative;
+
+                &.fixed {
+                    position: fixed;
+                    top: 0;
+                    height: 80rpx;
+                    background: linear-gradient(90deg, #d3fd77 0%, #a4e8e4 100%);
+                    z-index: 9999;
+
+                }
+            }
+
+            .topcontent-title-icon {
+                width: 50rpx;
+                height: 50rpx;
+                line-height: 50rpx;
+                position: absolute;
+                left: 24rpx;
+                top: 14rpx;
+                border-radius: 50%;
+                text-align: center;
+                background: rgba(255, 255, 255, 0.6);
+                border: 0.5px solid rgba(0, 0, 0, 0.1);
+                box-sizing: border-box;
+                z-index: 9999;
+
+                .iconfont {
+                    height: 100%;
+                    width: 100%;
+                    font-size: 32rpx;
+                    display: inline-block;
+                    overflow: hidden;
+                }
+            }
+        }
+
+        .topcontent-swiper {
+            width: 100%;
+            height: auto;
+            position: absolute;
+            left: 0;
+        }
+
+        .swiper-goods {
+            width: 100%;
+            height: auto;
+            position: relative;
+            background-size: cover;
+        }
+
+        .swiper-banner-box {
+            width: 100%;
+            height: 360rpx;
+            position: relative;
+            background-size: cover;
+        }
+
+        .tui-banner-swiper {
+            width: 680rpx;
+            margin: 0 auto;
+            height: 340rpx;
+            background: url(https://static.caimei365.com/app/img/hot/hot-bg@3x.png);
+            background-size: cover;
+            border-radius: 24rpx;
+            overflow: hidden;
+            transform: translateY(0);
+            box-shadow: 0px 3px 6px rgba(225, 86, 22, 0.08);
+            margin-top: 16rpx;
+            padding: 12rpx;
+
+            .swiper-goods-image {
+                width: 336rpx;
+                height: 336rpx;
+                float: left;
+
+                image {
+                    width: 336rpx;
+                    height: 336rpx;
+                    display: block;
+                    border-radius: 8rpx;
+                }
+            }
+
+            .swiper-goods-info {
+                width: 326rpx;
+                height: 336rpx;
+                box-sizing: border-box;
+                padding: 32rpx 24rpx;
+                float: right;
+                position: relative;
+
+                .swiper-goods-name {
+                    width: 100%;
+                    height: auto;
+                    line-height: 44rpx;
+                    text-overflow: ellipsis;
+                    display: -webkit-box;
+                    word-break: break-all;
+                    -webkit-box-orient: vertical;
+                    -webkit-line-clamp: 4;
+                    overflow: hidden;
+                    font-size: 28rpx;
+                    color: #333333;
+                    text-align: center;
+                }
+
+                .swiper-goods-btn {
+                    width: 100%;
+                    height: 64rpx;
+                    position: absolute;
+                    bottom: 60rpx;
+                    left: 0;
+
+                    .btn {
+                        width: 200rpx;
+                        height: 64rpx;
+                        margin: 0 auto;
+                        text-align: center;
+                        line-height: 64rpx;
+                        background-color: #f94b4b;
+                        font-size: 26rpx;
+                        color: #ffffff;
+                        border-radius: 32rpx;
+                    }
+                }
+            }
+        }
+
+        .swiper__dots-box {
+            position: absolute;
+            bottom: -45rpx;
+            left: 0;
+            right: 0;
+            /* #ifndef APP-NVUE */
+            display: flex;
+            /* #endif */
+            flex: 1;
+            flex-direction: row;
+            justify-content: center;
+            align-items: center;
+
+            .swiper__dots-item {
+                width: 14rpx;
+                height: 8rpx;
+                border-radius: 4rpx;
+                margin-left: 6px;
+                background-color: rgba(225, 86, 22, 0.39);
+            }
+
+            .swiper__dots-long {
+                width: 40rpx;
+                height: 8rpx;
+                border-radius: 4rpx;
+                background-color: #FF5B00;
+                transition: all 0.4s;
+            }
+        }
+
+        .swiper-banner-msg {
+            width: 100%;
+            height: 54rpx;
+            box-sizing: border-box;
+            padding: 0 24rpx;
+            margin-top: 24rpx;
+
+            .content {
+                width: 100%;
+                height: 54rpx;
+                box-sizing: border-box;
+                padding: 0 34rpx;
+                background-color: #fff0e9;
+                border-radius: 16rpx;
+
+                .item {
+                    width: 33.33%;
+                    height: 54rpx;
+                    line-height: 54rpx;
+                    font-size: $font-size-24;
+                    color: $color-system;
+                    float: left;
+
+                    &.le {
+                        text-align: left;
+                    }
+
+                    &.ce {
+                        text-align: center;
+                    }
+
+                    &.ri {
+                        text-align: right;
+                    }
+
+                    .iconfont {
+                        color: $color-system;
+                        font-size: $font-size-32;
+
+                        .sm {
+                            font-size: $font-size-26;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
+    .container-screen {
+        width: 100%;
+        height: 138rpx;
+        padding: 24rpx;
+        box-sizing: border-box;
+        background-color: #f7f7f7;
+        position: relative;
+
+        .container-screen-box {
+            width: 100%;
+            height: 100%;
+            background-color: #ffffff;
+            border-radius: 16rpx;
+
+            .screen-box-em {
+                float: left;
+                width: 134rpx;
+                line-height: 90rpx;
+                text-align: center;
+                color: #333333;
+                font-size: 30rpx;
+                font-weight: bold;
+            }
+
+            .screen-box-mi {
+                float: left;
+                width: 468rpx;
+                height: 100%;
+                box-sizing: border-box;
+                padding: 21rpx 0;
+
+                .screen-list {
+                    width: 140rpx;
+                    height: 48rpx;
+                    padding: 0 12rpx;
+                    float: left;
+                    text-align: center;
+                    box-sizing: border-box;
+                    line-height: 48rpx;
+                    font-size: 30rpx;
+                    color: #666666;
+                    border-radius: 24rpx;
+                    margin-right: 20rpx;
+                    text-overflow: ellipsis;
+                    overflow: hidden;
+                    display: -webkit-box;
+                    -webkit-line-clamp: 1;
+                    line-clamp: 1;
+                    -webkit-box-orient: vertical;
+                    word-break: break-all;
+
+                    &:last-child {
+                        margin-right: 0;
+                    }
+
+                    &.active {
+                        background-color: #ffe6dc;
+                        color: #FF5B00;
+                    }
+                }
+            }
+
+            .screen-box-sp {
+                float: right;
+                width: 100rpx;
+                line-height: 90rpx;
+                text-align: center;
+
+                .iconfont {
+                    color: #999999;
+                    font-size: 40rpx;
+                }
+            }
+        }
+
+        .container-screen-popup {
+            width: 100%;
+            height: 480rpx;
+            box-sizing: border-box;
+            padding: 24rpx;
+            position: absolute;
+            left: 0;
+            top: 86rpx;
+            z-index: 999;
+
+            .container-screen-popupbox {
+                width: 100%;
+                height: 100%;
+                box-sizing: border-box;
+                padding: 0 24rpx;
+                background-color: #ffffff;
+                border-radius: 0 0 16rpx 16rpx;
+                box-shadow: 0 10rpx 14rpx 0 rgba(86, 119, 252, 0.2);
+            }
+
+            .tui-scroll-box {
+                width: 100%;
+                height: 300rpx;
+                overflow: hidden;
+
+                .screen-list {
+                    width: 140rpx;
+                    height: 48rpx;
+                    padding: 0 12rpx;
+                    float: left;
+                    text-align: center;
+                    box-sizing: border-box;
+                    line-height: 48rpx;
+                    font-size: 30rpx;
+                    color: #666666;
+                    border-radius: 24rpx;
+                    margin-right: 30rpx;
+                    margin-bottom: 30rpx;
+                    text-overflow: ellipsis;
+                    overflow: hidden;
+                    display: -webkit-box;
+                    -webkit-line-clamp: 1;
+                    line-clamp: 1;
+                    -webkit-box-orient: vertical;
+                    word-break: break-all;
+
+                    &:nth-child(4n) {
+                        margin-right: 0;
+                    }
+
+                    &.active {
+                        background-color: #ffe6dc;
+                        color: #FF5B00;
+                    }
+                }
+            }
+
+            .container-screen-btnbox {
+                width: 100%;
+                height: 84rpx;
+                margin-top: 15rpx;
+
+                .btns {
+                    width: 314rpx;
+                    height: 84rpx;
+                    line-height: 84rpx;
+                    border-radius: 42rpx;
+                    text-align: center;
+                    font-size: 30rpx;
+                    color: #ffffff;
+                    background: $btn-confirm;
+                    margin: 0 auto;
+                }
+            }
+        }
+    }
+
+    .container-section {
+        width: 100%;
+        height: auto;
+        background-color: #f7f7f7;
+        box-sizing: border-box;
+        padding: 0 24rpx 24rpx 24rpx;
+    }
+
+    .floor-item-banner {
+        width: 100%;
+        height: 240rpx;
+        margin-bottom: 20rpx;
+
+        .item-img-gg {
+            width: 100%;
+            height: 240rpx;
+            display: block;
+            border-radius: 16rpx;
+        }
+    }
+
+    .section_page_main {
+        width: 100%;
+        height: auto;
+        box-sizing: border-box;
+
+        .floor-item {
+            width: 339rpx;
+            height: 516rpx;
+            margin-right: 20rpx;
+            font-size: $font-size-24;
+            color: $text-color;
+            background: #ffffff;
+            line-height: 36rpx;
+            border-radius: 16rpx;
+            margin-bottom: 20rpx;
+            float: left;
+            box-sizing: border-box;
+            position: relative;
+
+            &:nth-child(2n) {
+                margin-right: 0;
+            }
+
+            .item-img {
+                width: 339rpx;
+                height: 339rpx;
+                border-radius: 16rpx 16rpx 0 0;
+                display: block;
+                margin-bottom: 8rpx;
+            }
+
+            .floor-item-type {
+                width: 64rpx;
+                height: 64rpx;
+                text-align: justify;
+                box-sizing: border-box;
+                padding: 10rpx;
+                border-radius: 0 0 8rpx 8rpx;
+                background-color: #33ccbf;
+                font-size: $font-size-22;
+                color: #ffffff;
+                line-height: 25rpx;
+                position: absolute;
+                top: 0;
+                right: 16rpx;
+            }
+
+            .floor-item-content {
+                width: 100%;
+                padding: 0 20rpx;
+                box-sizing: border-box;
+            }
+
+            .floor-item-act {
+                display: block;
+                width: 100%;
+                height: 32rpx;
+                text-align: center;
+                box-sizing: border-box;
+            }
+
+            .title-none {
+                font-size: $font-size-26;
+                color: #ff2a2a;
+                line-height: 54rpx;
+            }
+
+            .title {
+                width: 100%;
+                height: 70rpx;
+                display: flex;
+                line-height: 35rpx;
+                flex-direction: column;
+                margin: 8rpx 0;
+                padding: 0;
+                position: relative;
+
+                .mclap {
+                    width: 100%;
+                    line-height: 35rpx;
+                    text-overflow: ellipsis;
+                    display: -webkit-box;
+                    word-break: break-all;
+                    -webkit-box-orient: vertical;
+                    -webkit-line-clamp: 2;
+                    overflow: hidden;
+                    font-size: 26rpx;
+
+                    &.indent {
+                        text-indent: 95rpx;
+                    }
+                }
+
+                .mclap-tag {
+                    display: block;
+                    width: 84rpx;
+                    height: 32rpx;
+                    background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+                    border-radius: 4rpx 48rpx 4px 4px;
+                    line-height: 32rpx;
+                    font-size: $font-size-22;
+                    color: #ffffff;
+                    text-align: center;
+                    position: absolute;
+                    left: 0;
+                    top: 0;
+                }
+            }
+
+            .floor-item-price {
+                .list-login-now {
+                    line-height: 44rpx;
+
+                    .p-no {
+                        height: 44rpx;
+                        line-height: 44rpx;
+                        display: inline-block;
+                        float: left;
+                    }
+                }
+
+                .list-price {
+                    color: #ff2a2a;
+                    height: 44rpx;
+                    float: left;
+
+                    .price-larger {
+                        width: 100%;
+                        height: 44rpx;
+                        font-size: 32rpx;
+
+                        &.none {
+                            text-decoration: line-through;
+                            color: #999999;
+                        }
+
+                        &.small {
+                            font-size: $font-size-24;
+                        }
+
+                        .txt {
+                            font-size: $font-size-24;
+                            display: inline-block;
+                            line-height: 44rpx;
+                            text-align: left;
+                            float: left;
+                        }
+                    }
+                }
+            }
+        }
+    }
+</style>

+ 3 - 8
pages/goods/goods-active.vue

@@ -58,23 +58,18 @@
 				</view>
 			</view>
 			<!--加载loadding-->
-			<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-			<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText"></tui-nomore>
+			<tui-loadmore :visible="loadding" :index="3" type="black" />
+			<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText" />
 			<!--加载loadding-->
 		</view>
 	</view>
 </template>
 
 <script>
-import tuiLoadmore from '@/components/tui-components/loadmore/loadmore'
-import tuiNomore from '@/components/tui-components/nomore/nomore'
 import { mapState, mapMutations } from 'vuex'
 
 export default {
-	components: {
-		tuiLoadmore,
-		tuiNomore
-	},
+	components: {},
 	data() {
 		return {
 			isRepuest: false,

+ 3 - 3
pages/goods/goods-classify.vue

@@ -283,8 +283,8 @@
 						</view>
 					</view>
 					<!--加载loadding-->
-					<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-					<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText"></tui-nomore>
+					<tui-loadmore :visible="loadding" :index="3" type="black" />
+					<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText" />
 					<!--加载loadding-->
 				</view>
 			</template>
@@ -352,7 +352,7 @@
 			</view>
 		</tui-drawer>
 		<!-- 透明模态层 -->
-		<modal-layer v-if="isModallayer"></modal-layer>
+		<modal-layer v-if="isModallayer" />
 	</view>
 </template>
 

+ 2 - 2
pages/goods/goods-doc-list.vue

@@ -47,8 +47,8 @@
         </view>
         <!-- loading more -->
         <view v-if="showList.length > 6">
-            <tui-loadmore :text="loadingText" :index="1" :visible="isLoading"></tui-loadmore>
-            <tui-nomore :text="loadingText" :visible="!isLoading"></tui-nomore>
+            <tui-loadmore :text="loadingText" :index="1" :visible="isLoading" />
+            <tui-nomore :text="loadingText" :visible="!isLoading" />
         </view>
         <!-- back top -->
         <!-- <tui-scroll-top :scrollTop="scrollTop"></tui-scroll-top> -->

+ 12 - 1
pages/goods/goods-instrument.vue

@@ -124,7 +124,18 @@
 			}else{
 				this.isScrollTop = false
 			}	
-		},
+		},
+        onShareAppMessage(res) {
+        	//分享转发
+        	if (res.from === 'button') {
+        		// 来自页面内转发按钮
+        	}
+        	return {
+        		title: `${this.linkTitle}`,
+        		path: `/pages/goods/goods-instrument?linkId=${this.linkId}&title=${this.linkTitle}`,
+        		imageUrl: 'https://static.caimei365.com/app/img/bg/min-banner.jpg'
+        	}
+        },
 		onShow() {
 
 		}

+ 188 - 0
pages/goods/goods-shop-list.vue

@@ -0,0 +1,188 @@
+<template>
+    <view class="container clearfix">
+        <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading="true"
+            :loadingType="5" />
+        <template v-else>
+            <view class="shop-content clearfix">
+                <view class="tui-supplier-item" v-for="(sup, supIndex) in list" :key="supIndex"
+                    @click.stop="NavToDetailPage(sup,index)">
+                    <view class="tui-shop-top">
+                        <view class="tui-top-logo">
+                            <image :src="sup.image" mode=""></image>
+                        </view>
+                        <view class="tui-top-name">
+                            <text>{{ sup.supplierName }}</text>
+                        </view>
+                    </view>
+                    <view class="tui-shop-mid">
+                        <view class="tui-mid-item" v-for="(pros, prIndex) in sup.products" :key="prIndex"
+                            @click.stop="navToDetailPage(pros)">
+                            <image :src="pros.mainImage" mode=""></image>
+                        </view>
+                    </view>
+                    <view class="tui-shop-bot">
+                        <view class="tui-bot-btn">
+                            进店<text class="iconfont icon-xiayibu"></text>
+                        </view>
+                    </view>
+                </view>
+            </view>
+        </template>
+    </view>
+</template>
+
+<script>
+    import { mapState, mapMutations } from 'vuex'
+    export default {
+        data() {
+            return {
+                skeletonShow: true,
+                list: []
+            }
+        },
+        onLoad(option) {
+
+        },
+        methods: {
+            async getHomeDataInfo() {
+                //初始化首页数据
+                try {
+                    const userInfo = await this.$api.getStorage()
+                    const res = await this.CommonService.GetHomeDataInfo({ userId: userInfo.userId ? userInfo
+                            .userId : 0, source: 2 })
+                    const data = res.data.supplierImage
+                    this.list = data || [] // 供应商列表
+                    setTimeout(() => {
+                        this.skeletonShow = false
+                    }, 1000)
+                } catch (e) {
+                    //TODO handle the exception
+                    this.$util.msg(error.msg, 2000)
+                }
+            },
+             //跳转商品详情
+            navToDetailPage(pros) {
+                this.$api.navigateTo(`/pages/goods/product?id=${pros.productId}`)
+            },
+            // 链接跳转
+            NavToDetailPage(pros) {
+                this.$api.navigateTo(`/pages/supplier/user/my-shop?shopId=${pros.linkParam.id}`)
+            },
+        },
+        onShow() {
+            this.getHomeDataInfo()
+        }
+    }
+</script>
+
+<style lang="scss">
+    page {
+        background-color: #F7F7F7;
+    }
+
+    .shop-content {
+        width: 100%;
+        height: auto;
+        box-sizing: border-box;
+        padding: 24rpx 24rpx;
+        display: flex;
+        justify-content: flex-start;
+        flex-wrap: wrap;
+
+        .tui-supplier-item {
+            display: flex;
+            width: 339rpx;
+            height: 448rpx;
+            flex-direction: column;
+            align-items: center;
+            border-radius: 16rpx;
+            margin: 0 20rpx 20rpx 0;
+            box-sizing: border-box;
+            padding: 24rpx 0;
+            background-color: #FFFFFF;
+
+            &:nth-child(2n) {
+                margin-right: 0;
+            }
+
+            .tui-shop-top {
+                width: 100%;
+                display: flex;
+                flex-direction: column;
+                align-items: center;
+
+                .tui-top-logo {
+                    display: flex;
+                    align-items: center;
+                    justify-content: center;
+                    width: 219rpx;
+                    height: 96rpx;
+                    background-color: #ffffff;
+                    border-radius: 8rpx;
+
+                    image {
+                        width: 219rpx;
+                        height: 96rpx;
+                    }
+                }
+
+                .tui-top-name {
+                    justify-content: center;
+                    font-size: 30rpx;
+                    line-height: 80rpx;
+                    color: #1bc0de;
+                }
+            }
+
+            .tui-shop-mid {
+                width: 100%;
+                height: 95rpx;
+                display: flex; 
+                justify-content: flex-start;
+                align-items: center;
+                box-sizing: border-box;
+                margin: 20rpx 0;
+                padding: 0 10rpx;
+
+                .tui-mid-item {
+                    width: 95rpx;
+                    height: 95rpx;
+                    border-radius: 8rpx;
+                    overflow: hidden;
+                    margin: 0 5rpx;
+                    box-sizing: border-box;
+                    border: 1px solid #e1e1e1;
+
+                    image {
+                        width: 95rpx;
+                        height: 95rpx;
+                    }
+                }
+            }
+
+            .tui-shop-bot {
+                width: 100%;
+                height: 54rpx;
+                display: flex;
+                justify-content: center;
+                align-items: center;
+                margin-top: 20rpx;
+
+                .tui-bot-btn {
+                    justify-content: center;
+                    align-items: center;
+                    font-size: 28rpx;
+                    line-height: 52rpx;
+                    color: #333333;
+                    padding: 0 30rpx;
+                    border: 1px solid #999999;
+                    border-radius: 30rpx;
+
+                    .iconfont {
+                        font-size: 24rpx;
+                    }
+                }
+            }
+        }
+    }
+</style>

+ 3 - 7
pages/goods/goods-supporting.vue

@@ -265,8 +265,8 @@
 					</view>
 				</view>
 				<!--加载loadding-->
-				<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-				<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText"></tui-nomore>
+				<tui-loadmore :visible="loadding" :index="3" type="black" />
+				<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text="nomoreText" />
 				<!--加载loadding-->
 			</view>
 		</view>
@@ -277,7 +277,7 @@
 			:skuProduct="handlePros"
 			@btnConfirm="handleBtnConfirm"
 			@skuClick="handleSkuClick"
-		></cm-unit-suppor-popup>
+		/>
 		<!-- 取消收藏操作 -->
 		<view class="fiexd-popup-box clearfix">
 			<view class="tui-right-flex tui-popup-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
@@ -299,16 +299,12 @@
 	</view>
 </template>
 <script>
-import tuiLoadmore from '@/components/tui-components/loadmore/loadmore'
-import tuiNomore from '@/components/tui-components/nomore/nomore'
 import uniGrader from '@/components/uni-grade/uni-grade.vue'
 import cmUnitSupporPopup from './components/cm-unit-suppor-popup.vue'
 
 import { mapState, mapMutations } from 'vuex'
 export default {
 	components: {
-		tuiLoadmore,
-		tuiNomore,
 		uniGrader,
 		cmUnitSupporPopup
 	},

+ 3106 - 3019
pages/goods/product.vue

@@ -1,3042 +1,3129 @@
 <template>
-	<view
-		class="product "
-		:style="{
+    <view class="product " :style="{
 			paddingBottom: userIdentity == 1 && userIdentity == 3 ? '0rpx' : '188rpx',
 			paddingTop: CustomBar + 'px'
-		}"
-	>
-		<custom-p
-			v-if="isHeaderPoduct"
-			:systeminfo="systeminfo"
-			:navbar-data="nvabarData"
-			:headerBtnPosi="headerBtnPosi"
-			:headerColor="headerColor"
-			:type="isShareType"
-			:page="backPage"
-		/>
-		<view
-			class="product-topnav"
-			id="topBar"
-			v-show="isNavbarFiexd"
-			:class="navbarFiexd"
-			:style="{ top: CustomBar - 2 + 'px' }"
-		>
-			<view class="search-input">
-				<view class="gosearch-btn" :class="navbarFiexd" @click="this.$api.navigateTo(clickPath)">
-					<view class="search-icon"><text class="iconfont icon-iconfonticonfontsousuo1"></text></view>
-					<view class="search-text">搜索商品/项目仪器</view>
-				</view>
-			</view>
-			<view class="navbar">
-				<view
-					class="nav-item tui-skeleton-fillet"
-					:class="{ current: tabCurrentIndex === 0 }"
-					@click="tabClick(0)"
-				>
-					<text>详情</text> <text class="line"></text>
-				</view>
-				<view
-					class="nav-item tui-skeleton-fillet"
-					:class="{ current: tabCurrentIndex === 1 }"
-					@click="tabClick(1)"
-				>
-					<text>服务项目</text> <text class="line"></text>
-				</view>
-				<view
-					class="nav-item tui-skeleton-fillet"
-					:class="{ current: tabCurrentIndex === 2 }"
-					@click="tabClick(2)"
-					v-if="product.qualificationImg"
-				>
-					<text>商品资质</text> <text class="line"></text>
-				</view>
-				<view
-					class="nav-item tui-skeleton-fillet"
-					:class="{ current: tabCurrentIndex === 3 }"
-					@click="tabClick(3)"
-				>
-					<text>推荐</text> <text class="line"></text>
-				</view>
-				<view
-					class="nav-item tui-skeleton-fillet"
-					:class="{ current: tabCurrentIndex === 4 }"
-					@click="tabClick(4)"
-					v-if="product.archiveId !== 0 && userInfo.userIdentity !== 3"
-				>
-					<text>相关资料</text> <text class="line"></text>
-				</view>
-			</view>
-		</view>
-		<tui-skeleton
-			v-if="skeletonShow"
-			backgroundColor="#fafafa"
-			borderRadius="10rpx"
-			:isLoading="true"
-			:loadingType="5"
-		/>
-		<template v-else>
-			<view class="cart-content empty" v-if="isInvalid">
-				<view class="empty-container">
-					<image class="empty-container-image" :src="productNoneImage" mode="aspectFit"></image>
-					<text class="error-text">商品已失效,去商城逛逛别的吧~</text>
-					<view class="login-btn" @click="goIndex">去商城</view>
-				</view>
-			</view>
-			<view class="container-product tui-skeleton" v-else>
-				<view class="container-product-main">
-					<view class="product-top">
-						<view class="banner-section">
-							<view class="cm-product-type" v-if="product.productType == 2">医疗器械</view>
-							<view class="cm-product-cover" v-if="product.appletsActType === 1"></view>
-							<uni-swiper-dot :info="productImage" :current="current" field="content" :mode="mode">
-								<swiper
-									class="banner tui-banner tui-skeleton-rect"
-									@change="swiperChange"
-									:duration="800"
-									:autoplay="false"
-									:circular="true"
-								>
-									<swiper-item v-for="(item, index) in productImage" :key="index" class="banner-item">
-										<image :src="item" @click="previewImg(index)" class="product-img" />
-									</swiper-item>
-								</swiper>
-								<view class="swiper__dots-box">
-									<tui-tag
-										padding="12rpx 24rpx"
-										type="translucent"
-										shape="circleLeft"
-										size="32rpx"
-										:scaleMultiple="0.82"
-										originRight
-									>
-										{{ current + 1 }}/{{ productImage && productImage.length }}
-									</tui-tag>
-								</view>
-							</uni-swiper-dot>
-						</view>
-						<view class="product-wrap clearfix">
-							<view class="wrap-top" :class="goodsData.isNoneDisabled ? 'none' : ''">
-								<view class="wrap-top-price">
-									<cm-price
-										v-if="isRequest"
-										:product="product"
-										:userIdentity="userIdentity"
-										:shopID="shopID"
-										:promotions="product.promotions"
-										:ladderPriceList="ladderPriceList"
-									/>
-								</view>
-								<view class="p-title tui-skeleton-fillet">
-									<view class="mclap-tag" v-if="product.beautyActFlag == '1'">美博会</view>
-									<view class="p-title-name" :class="product.beautyActFlag == '1' ? 'indent' : ''">
-										{{ product.name == undefined ? '' : product.name }}
-									</view>
-									<button
-										open-type="share"
-										class="p-title-share tui-share-position"
-										@tap="onShare"
-										v-if="userInfo.userIdentity !== 1"
-									>
-										<view class=""><text class="iconfont icon-fenxiang1"></text></view>
-										<view class="">分享</view>
-									</button>
-									<button class="p-title-share tui-share-position" @click="handleShare" v-else>
-										<view class=""><text class="iconfont icon-fenxiang1"></text></view>
-										<view class="">分享</view>
-									</button>
-								</view>
-								<view class="wrap-label" v-if="product.tagsList && product.tagsList.length > 0">
-									<view
-										class="label-a tui-skeleton-fillet"
-										v-for="(label, index) in product.tagsList"
-										:key="index"
-									>
-										{{ label }}
-									</view>
-								</view>
-								<view class="product-seve" v-if="hasLogin">
-									<text class="label">采美承诺:</text>
-									<text class="iconfont icon-dui tui-skeleton-rect">
-										<text class="text">无忧退货</text>
-									</text>
-									<text class="iconfont icon-dui tui-skeleton-rect">
-										<text class="text">快速退款</text>
-									</text>
-									<text class="iconfont icon-dui tui-skeleton-rect">
-										<text class="text">正品保证</text>
-									</text>
-								</view>
-								<view
-									class="productRemarks"
-									v-if="product.productRemarks != '' && product.productRemarks != null"
-								>
-									备注:{{ product.productRemarks }}
-								</view>
-							</view>
-						</view>
-					</view>
-					<view class="product-item-none" v-if="goodsData.isNoneDisabled">
-						<image class="none-image" :src="productNoneImage" mode=""></image>
-						<view class="none-text">此商品已{{ goodsData.disabledText }},请浏览以下推荐商品~</view>
-						<view class="none-text">咨询类似商品,请联系客服!</view>
-					</view>
-					<!-- 选择规格 -->
-					<view class="product-parameter" v-if="isShowButton || userIdentity === 1" @click="showPopup(3)">
-						<text class="title">选择:</text> <text class="name">共{{ skusCount }}种规格可选</text>
-						<text class="iconfont icon-xiayibu"></text>
-					</view>
-					<!-- 参数 -->
-					<view class="product-parameter" @click="showPopup(0)" v-if="!goodsData.isNoneDisabled">
-						<text class="title">参数:</text> <text class="name">品牌 分类...</text>
-						<text class="iconfont icon-xiayibu"></text>
-					</view>
-					<!-- 特殊商品退货须知 -->
-					<view class="return-instructions" v-if="returnGoodsStutas">
-						<cm-return-instructions :content="helpContent"></cm-return-instructions>
-					</view>
-					<!-- 配套商品 -->
-					<view
-						class="product-supporting"
-						v-if="!goodsData.isNoneDisabled && isShowSupportingList && supportingList.length > 0"
-						@click.stop="handleSupporting"
-					>
-						<view class="product-supporting-title">配套商品({{ supportingNum }})</view>
-						<view class="product-supporting-list">
-							<view
-								class="list"
-								v-for="(supporting, index) in supportingList"
-								:key="index"
-								v-if="index < 4"
-							>
-								<image class="list-image" :src="supporting.image" mode=""></image>
-							</view>
-							<text class="iconfont icon-xiayibu"></text>
-						</view>
-					</view>
-					<!-- 优惠券 -->
-					<view
-						class="product-parameter coupon"
-						v-if="isShowButton && productCoupon.length > 0"
-						@click="showPopup(2)"
-					>
-						<text class="title">优惠券:</text>
-						<view class="coupon">
-							<text class="tags" v-for="(coupon, index) in productCoupon.slice(0, 3)" :key="index">
-								满{{ coupon.touchPrice }}减{{ coupon.couponAmount }}
-							</text>
-						</view>
-						<text class="iconfont icon-xiayibu"></text>
-					</view>
-					<!-- 仪器培训方案 -->
-					<view
-						class="product-parameter"
-						@click="showPopup(1)"
-						v-if="product.commodityType == 2 && product.trainingMethod"
-					>
-						<text class="title">培训方案:</text>
-						<text class="name">{{ product.trainingMethod == 1 ? '线上培训' : '线下培训' }}</text>
-						<text class="iconfont icon-xiayibu"></text>
-					</view>
-					<!-- 供应商 -->
-					<view class="product-supplier" @click="goSupplier">
-						<view class="logo">
-							<img
-								:src="
+		}">
+        <custom-p v-if="isHeaderPoduct" :systeminfo="systeminfo" :navbar-data="nvabarData"
+            :headerBtnPosi="headerBtnPosi" :headerColor="headerColor" :type="isShareType" :page="backPage" />
+        <view class="product-topnav" id="topBar" v-show="isNavbarFiexd" :class="navbarFiexd"
+            :style="{ top: CustomBar - 2 + 'px' }">
+            <view class="search-input">
+                <view class="gosearch-btn" :class="navbarFiexd" @click="this.$api.navigateTo(clickPath)">
+                    <view class="search-icon"><text class="iconfont icon-iconfonticonfontsousuo1"></text></view>
+                    <view class="search-text">搜索商品/项目仪器</view>
+                </view>
+            </view>
+            <view class="navbar">
+                <view class="nav-item tui-skeleton-fillet" :class="{ current: tabCurrentIndex === 0 }"
+                    @click="tabClick(0)">
+                    <text>详情</text> <text class="line"></text>
+                </view>
+                <view class="nav-item tui-skeleton-fillet" :class="{ current: tabCurrentIndex === 1 }"
+                    @click="tabClick(1)">
+                    <text>服务项目</text> <text class="line"></text>
+                </view>
+                <view class="nav-item tui-skeleton-fillet" :class="{ current: tabCurrentIndex === 2 }"
+                    @click="tabClick(2)" v-if="product.qualificationImg">
+                    <text>商品资质</text> <text class="line"></text>
+                </view>
+                <view class="nav-item tui-skeleton-fillet" :class="{ current: tabCurrentIndex === 3 }"
+                    @click="tabClick(3)">
+                    <text>推荐</text> <text class="line"></text>
+                </view>
+                <view class="nav-item tui-skeleton-fillet" :class="{ current: tabCurrentIndex === 4 }"
+                    @click="tabClick(4)" v-if="product.archiveId !== 0 && userInfo.userIdentity !== 3">
+                    <text>相关资料</text> <text class="line"></text>
+                </view>
+            </view>
+        </view>
+        <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading="true"
+            :loadingType="5" />
+        <template v-else>
+            <view class="cart-content empty" v-if="isInvalid">
+                <view class="empty-container">
+                    <image class="empty-container-image" :src="productNoneImage" mode="aspectFit"></image>
+                    <text class="error-text">商品已失效,去商城逛逛别的吧~</text>
+                    <view class="login-btn" @click="goIndex">去商城</view>
+                </view>
+            </view>
+            <view class="container-product tui-skeleton" v-else>
+                <view class="container-product-main">
+                    <view class="product-top">
+                        <view class="banner-section">
+                            <view class="cm-product-type" v-if="product.productType == 2">医疗器械</view>
+                            <view class="cm-product-cover" v-if="product.appletsActType === 1"></view>
+                            <uni-swiper-dot :info="productImage" :current="current" field="content" :mode="mode">
+                                <swiper class="banner tui-banner tui-skeleton-rect" @change="swiperChange"
+                                    :duration="800" :autoplay="false" :circular="true">
+                                    <swiper-item v-for="(item, index) in productImage" :key="index" class="banner-item">
+                                        <image :src="item" @click="previewImg(index)" class="product-img" />
+                                    </swiper-item>
+                                </swiper>
+                                <view class="swiper__dots-box">
+                                    <tui-tag padding="12rpx 24rpx" type="translucent" shape="circleLeft" size="32rpx"
+                                        :scaleMultiple="0.82" originRight>
+                                        {{ current + 1 }}/{{ productImage && productImage.length }}
+                                    </tui-tag>
+                                </view>
+                            </uni-swiper-dot>
+                        </view>
+                        <view class="product-wrap clearfix">
+                            <view class="wrap-top" :class="goodsData.isNoneDisabled ? 'none' : ''">
+                                <view class="wrap-top-price">
+                                    <cm-price v-if="isRequest" :product="product" :userIdentity="userIdentity"
+                                        :shopID="shopID" :promotions="product.promotions"
+                                        :ladderPriceList="ladderPriceList" />
+                                </view>
+                                <view class="p-title tui-skeleton-fillet">
+                                    <view class="mclap-tag" v-if="product.beautyActFlag == '1'">美博会</view>
+                                    <view class="p-title-name" :class="product.beautyActFlag == '1' ? 'indent' : ''">
+                                        {{ product.name == undefined ? '' : product.name }}
+                                    </view>
+                                   <button open-type="share" class="p-title-share tui-share-position"
+                                        v-if="userInfo.userIdentity !== 1">
+                                        <text class="iconfont icon-weixin"></text>
+                                    </button>
+                                    <button class="p-title-share tui-share-position" @click="handleShare" v-else>
+                                        <text class="iconfont icon-weixin"></text>
+                                    </button>
+                                </view>
+                                <view class="wrap-label" v-if="product.tagsList && product.tagsList.length > 0">
+                                    <view class="label-a tui-skeleton-fillet" v-for="(label, index) in product.tagsList"
+                                        :key="index">
+                                        {{ label }}
+                                    </view>
+                                </view>
+                                <view class="product-seve" v-if="hasLogin">
+                                    <text class="label">采美承诺:</text>
+                                    <text class="iconfont icon-dui tui-skeleton-rect">
+                                        <text class="text">无忧退货</text>
+                                    </text>
+                                    <text class="iconfont icon-dui tui-skeleton-rect">
+                                        <text class="text">快速退款</text>
+                                    </text>
+                                    <text class="iconfont icon-dui tui-skeleton-rect">
+                                        <text class="text">正品保证</text>
+                                    </text>
+                                </view>
+                                <view class="productRemarks"
+                                    v-if="product.productRemarks != '' && product.productRemarks != null">
+                                    备注:{{ product.productRemarks }}
+                                </view>
+                            </view>
+                        </view>
+                    </view>
+                    <view class="product-item-none" v-if="goodsData.isNoneDisabled">
+                        <image class="none-image" :src="productNoneImage" mode=""></image>
+                        <view class="none-text">此商品已{{ goodsData.disabledText }},请浏览以下推荐商品~</view>
+                        <view class="none-text">咨询类似商品,请联系客服!</view>
+                    </view>
+                    <!-- 优惠券 -->
+                    <view class="product-parameter coupon" v-if="isShowButton && productCoupon.length > 0"
+                        @click="showPopup(2)">
+                        <text class="title">优惠券:</text>
+                        <view class="coupon">
+                            <text class="tags" v-for="(coupon, index) in productCoupon.slice(0, 1)" :key="index">
+                                <template v-if="coupon.couponTextFlag === 1">
+                                    满{{ coupon.touchPrice }}减{{ coupon.couponAmount }}
+                                </template>
+                                <template v-else>
+                                    {{ coupon.couponText }}
+                                </template>
+                            </text>
+                        </view>
+                        <text class="iconfont icon-xiayibu"></text>
+                    </view>
+                    <!-- 选择规格 -->
+                    <view class="product-parameter" v-if="isShowButton || userIdentity === 1" @click="showPopup(3)">
+                        <text class="title">选择:</text> <text class="name">共{{ skusCount }}种规格可选</text>
+                        <text class="iconfont icon-xiayibu"></text>
+                    </view>
+                    <!-- 参数 -->
+                    <view class="product-parameter" @click="showPopup(0)" v-if="!goodsData.isNoneDisabled">
+                        <text class="title">参数:</text> <text class="name">品牌 分类...</text>
+                        <text class="iconfont icon-xiayibu"></text>
+                    </view>
+                    <!-- 特殊商品退货须知 -->
+                    <view class="return-instructions" v-if="returnGoodsStutas">
+                        <cm-return-instructions :content="helpContent"></cm-return-instructions>
+                    </view>
+                    <!-- 配套商品 -->
+                    <view class="product-supporting"
+                        v-if="!goodsData.isNoneDisabled && isShowSupportingList && supportingList.length > 0"
+                        @click.stop="handleSupporting">
+                        <view class="product-supporting-title">配套商品({{ supportingNum }})</view>
+                        <view class="product-supporting-list">
+                            <view class="list" v-for="(supporting, index) in supportingList" :key="index"
+                                v-if="index < 4">
+                                <image class="list-image" :src="supporting.image" mode=""></image>
+                            </view>
+                            <text class="iconfont icon-xiayibu"></text>
+                        </view>
+                    </view>
+
+                    <!-- 仪器培训方案 -->
+                    <view class="product-parameter" @click="showPopup(1)"
+                        v-if="product.commodityType == 2 && product.trainingMethod">
+                        <text class="title">培训方案:</text>
+                        <text class="name">{{ product.trainingMethod == 1 ? '线上培训' : '线下培训' }}</text>
+                        <text class="iconfont icon-xiayibu"></text>
+                    </view>
+                    <!-- 供应商 -->
+                    <view class="product-supplier" @click="goSupplier">
+                        <view class="logo">
+                            <img :src="
 									shop.logo
 										? shop.logo
 										: 'https://static.caimei365.com/app/img/icon/icon-shoplogo.png'
-								"
-								alt=""
-							/>
-						</view>
-						<view class="main">
-							<view class="name">{{ shop.name }}</view>
-							<view class="massgs">
-								<view class="label">满意度:</view>
-								<view class="p-stars">
-									<uni-stars
-										:stars="6"
-										:iconClass="iconClass"
-										:iconColor="iconColor"
-										:fontSize="36"
-										:widthInfo="176"
-									></uni-stars>
-								</view>
-								<view class="acount">
-									<text>{{ shop.normalNum }}</text> 件商品
-								</view>
-							</view>
-						</view>
-						<view class="right" v-if="!isShowCaimeiShop"><text class="iconfont icon-xiayibu"></text></view>
-					</view>
-				</view>
-				<!-- 商品详情 -->
-				<view v-show="tabCurrentIndex !== 4">
-					<view class="product-details product-details0">
-						<view class="title"><view class="title-tab">商品详情</view></view>
-						<view class="content tui-banner product-rich-text tui-skeleton-rect">
-							<template v-if="!goodsData.isNoneDisabled && product.productDetail.detailInfo">
-								<mp-html :content="html" :tag-style="tagStyle" />
-							</template>
-							<view class="product-rich-text-none" v-else>暂无商品信息</view>
-						</view>
-					</view>
-					<!-- 服务项目 -->
-					<view class="product-details service product-details1">
-						<view class="title"><view class="title-tab">服务项目</view></view>
-						<view
-							class="content service"
-							v-if="product.productDetail.orderInfo || product.productDetail.serviceInfo"
-						>
-							<cm-service :product="product.productDetail" v-if="isRequest" />
-						</view>
-						<view class="content-none" v-else><text>暂无服务项目</text></view>
-					</view>
-					<!-- 商品资质 -->
-					<view class="product-details qualifications product-details2" v-if="product.qualificationImg">
-						<view class="title"><view class="title-tab">商品资质</view></view>
-						<view class="product-details-image">
-							<view class="product-details-table clearfix" v-if="product.qualificationNo">
-								<view class="ladder-tr">
-									<view class="ladder-item-td th">证书编号</view>
-									<view class="ladder-item-td th">产品名称</view>
-									<view class="ladder-item-td th">详情</view>
-								</view>
-								<view class="ladder-tr">
-									<view class="ladder-item-td">
-										<view class="te-text">{{ product.qualificationNo }}</view>
-									</view>
-									<view class="ladder-item-td">
-										<view class="te-text">{{ product.productName }}</view>
-									</view>
-									<view class="ladder-item-td">
-										<view class="te-text last">{{ product.qualificationLink }}</view>
-										<view class="te-copy">
-											<text class="clipboard" @click.stop="clipboard(product.qualificationLink)">
-												复制
-											</text>
-										</view>
-									</view>
-								</view>
-							</view>
-							<image
-								class="qualificationImg-image"
-								:src="product.qualificationImg"
-								mode="aspectFill"
-								@click="previewImg1(product.qualificationImg)"
-							></image>
-						</view>
-					</view>
-					<!-- 相关推荐 -->
-					<view class="product-details recommend product-details3">
-						<view class="title"><view class="title-tab">相关推荐</view></view>
-						<view class="content hot">
-							<cm-recommend
-								:query-productid="product.productId"
-								:query-type="product.recommendType"
-								v-if="isRequest"
-							/>
-						</view>
-					</view>
-				</view>
-				<!-- 相关资料 -->
-				<view class="product-details recommend product-details4" v-if="tabCurrentIndex === 4">
-					<cm-product-doc
-						@previewImage="changePreViewImageStatus"
-						:archiveId="product.archiveId"
-						:userId="userId"
-					/>
-				</view>
-				<!-- 优惠券 -->
-				<tui-bottom-popup :radius="true" :show="popupShow2" @close="hidePopup(2)">
-					<view class="tui-popup-box clearfix">
-						<view class="title">优惠券</view>
-						<view class="tui-popup-close" @click="hidePopup(2)">
-							<text class="iconfont icon-iconfontguanbi"></text>
-						</view>
-						<view class="tui-popup-tabs">
-							<coupon-tabs
-								:tabs="navbar"
-								:currentTab="currentTab > 2 ? 0 : currentTab"
-								@change="couponChange"
-								:itemWidth="100 / navbar.length + '%'"
-								selectedColor="#FF5B00"
-								sliderBgColor="#FF5B00"
-							/>
-						</view>
-						<div class="tui-popup-main coupon">
-							<scroll-view class="tui-popup-scroll" scroll-y="true">
-								<view class="coupon-empty" v-if="isCouponEmpty">
-									<image
-										class="empty-container-image"
-										:src="StaticUrl + '/icon/icon-coupon-empty@2x.png'"
-									></image>
-									<text class="error-text">暂无可领的优惠券~</text>
-								</view>
-								<template v-else>
-									<view
-										v-for="(coupon, index) in productCouponList"
-										:key="index"
-										:id="coupon.couponId"
-										class="coupon-list"
-									>
-										<view class="list-cell-le">
-											<view class="coupon-maxMoney">
-												<text class="small">¥</text> {{ coupon.couponAmount }}
-											</view>
-											<view class="coupon-minMoney">满{{ coupon.touchPrice }}可用</view>
-										</view>
-										<view class="list-cell-ri">
-											<view class="list-cell-top">
-												<view class="list-cell-type">
-													<view class="list-cell-tags">
-														<template v-if="coupon.moneyCouponFlag == 1">
-															<text class="tags" v-if="coupon.moneyCouponType == 1">
-																意向{{ coupon.couponType | TypeFormat }}
-															</text>
-															<text class="tags" v-else>
-																定向{{ coupon.couponType | TypeFormat }}
-															</text>
-														</template>
-														<template v-else>
-															<text class="tags">
-																{{ coupon.couponType | TypeFormat }}
-															</text>
-														</template>
-													</view>
-													<view class="list-cell-texts">
-														<text v-if="coupon.couponType == 0">
-															{{
+								" alt="" />
+                        </view>
+                        <view class="main">
+                            <view class="name">{{ shop.name }}</view>
+                            <view class="massgs">
+                                <view class="label">满意度:</view>
+                                <view class="p-stars">
+                                    <uni-stars :stars="6" :iconClass="iconClass" :iconColor="iconColor" :fontSize="36"
+                                        :widthInfo="176"></uni-stars>
+                                </view>
+                                <view class="acount">
+                                    <text>{{ shop.normalNum }}</text> 件商品
+                                </view>
+                            </view>
+                        </view>
+                        <view class="right" v-if="!isShowCaimeiShop"><text class="iconfont icon-xiayibu"></text></view>
+                    </view>
+                </view>
+                <!-- 商品详情 -->
+                <view v-show="tabCurrentIndex !== 4">
+                    <view class="product-details product-details0">
+                        <view class="title">
+                            <view class="title-tab">商品详情</view>
+                        </view>
+                        <view class="content tui-banner product-rich-text tui-skeleton-rect">
+                            <template v-if="!goodsData.isNoneDisabled && product.productDetail.detailInfo">
+                                <mp-html :content="html" :tag-style="tagStyle" />
+                            </template>
+                            <view class="product-rich-text-none" v-else>暂无商品信息</view>
+                        </view>
+                    </view>
+                    <!-- 服务项目 -->
+                    <view class="product-details service product-details1">
+                        <view class="title">
+                            <view class="title-tab">服务项目</view>
+                        </view>
+                        <view class="content service"
+                            v-if="product.productDetail.orderInfo || product.productDetail.serviceInfo">
+                            <cm-service :product="product.productDetail" v-if="isRequest" />
+                        </view>
+                        <view class="content-none" v-else><text>暂无服务项目</text></view>
+                    </view>
+                    <!-- 商品资质 -->
+                    <view class="product-details qualifications product-details2" v-if="product.qualificationImg">
+                        <view class="title">
+                            <view class="title-tab">商品资质</view>
+                        </view>
+                        <view class="product-details-image">
+                            <view class="product-details-table clearfix" v-if="product.qualificationNo">
+                                <view class="ladder-tr">
+                                    <view class="ladder-item-td th">证书编号</view>
+                                    <view class="ladder-item-td th">产品名称</view>
+                                    <view class="ladder-item-td th">详情</view>
+                                </view>
+                                <view class="ladder-tr">
+                                    <view class="ladder-item-td">
+                                        <view class="te-text">{{ product.qualificationNo }}</view>
+                                    </view>
+                                    <view class="ladder-item-td">
+                                        <view class="te-text">{{ product.productName }}</view>
+                                    </view>
+                                    <view class="ladder-item-td">
+                                        <view class="te-text last">{{ product.qualificationLink }}</view>
+                                        <view class="te-copy">
+                                            <text class="clipboard" @click.stop="clipboard(product.qualificationLink)">
+                                                复制
+                                            </text>
+                                        </view>
+                                    </view>
+                                </view>
+                            </view>
+                            <image class="qualificationImg-image" :src="product.qualificationImg" mode="aspectFill"
+                                @click="previewImg1(product.qualificationImg)"></image>
+                        </view>
+                    </view>
+                    <!-- 相关推荐 -->
+                    <view class="product-details recommend product-details3">
+                        <view class="title">
+                            <view class="title-tab">相关推荐</view>
+                        </view>
+                        <view class="content hot">
+                            <cm-recommend :query-productid="product.productId" :query-type="product.recommendType"
+                                v-if="isRequest" />
+                        </view>
+                    </view>
+                </view>
+                <!-- 相关资料 -->
+                <view class="product-details recommend product-details4" v-if="tabCurrentIndex === 4">
+                    <cm-product-doc @previewImage="changePreViewImageStatus" :archiveId="product.archiveId"
+                        :userId="userId" />
+                </view>
+                <!-- 优惠券 -->
+                <tui-bottom-popup :radius="true" :show="popupShow2" @close="hidePopup(2)">
+                    <view class="tui-popup-box clearfix">
+                        <view class="title">优惠券</view>
+                        <view class="tui-popup-close" @click="hidePopup(2)">
+                            <text class="iconfont icon-iconfontguanbi"></text>
+                        </view>
+                        <view class="tui-popup-tabs">
+                            <coupon-tabs :tabs="navbar" :currentTab="currentTab > 2 ? 0 : currentTab"
+                                @change="couponChange" :itemWidth="100 / navbar.length + '%'" selectedColor="#FF5B00"
+                                sliderBgColor="#FF5B00" />
+                        </view>
+                        <div class="tui-popup-main coupon">
+                            <scroll-view class="tui-popup-scroll" scroll-y="true">
+                                <view class="coupon-empty" v-if="isCouponEmpty">
+                                    <image class="empty-container-image"
+                                        :src="StaticUrl + '/icon/icon-coupon-empty@2x.png'"></image>
+                                    <text class="error-text">暂无可领的优惠券~</text>
+                                </view>
+                                <template v-else>
+                                    <view v-for="(coupon, index) in productCouponList" :key="index"
+                                        :id="coupon.couponId" class="coupon-list">
+                                        <view class="list-cell-le">
+                                            <template v-if="coupon.couponTextFlag === 1">
+                                                <view class="coupon-maxMoney"> <text class="small">¥</text>
+                                                    {{ coupon.couponAmount }}
+                                                </view>
+                                                <view class="coupon-minMoney"> 满{{ coupon.touchPrice }}可用 </view>
+                                            </template>
+                                            <template v-else>
+                                                <view class="coupon-maxMoney six"> <text class="small">¥</text>
+                                                    {{ coupon.couponText }}
+                                                </view>
+                                            </template>
+                                        </view>
+                                        <view class="list-cell-ri">
+                                            <view class="list-cell-top">
+                                                <view class="list-cell-type">
+                                                    <view class="list-cell-tags">
+                                                        <template v-if="coupon.moneyCouponFlag == 1">
+                                                            <text class="tags" v-if="coupon.moneyCouponType == 1">
+                                                                意向{{ coupon.couponType | TypeFormat }}
+                                                            </text>
+                                                            <text class="tags" v-else>
+                                                                定向{{ coupon.couponType | TypeFormat }}
+                                                            </text>
+                                                        </template>
+                                                        <template v-else>
+                                                            <text class="tags">
+                                                                {{ coupon.couponType | TypeFormat }}
+                                                            </text>
+                                                        </template>
+                                                    </view>
+                                                    <view class="list-cell-texts">
+                                                        <text v-if="coupon.couponType == 0">
+                                                            {{
 																coupon.productType && coupon.productType == 1
 																	? '全商城商品通用'
-																	: '仅可购买指定商品'
+																	: coupon.couponName
 															}}
-														</text>
-														<text v-if="coupon.couponType == 1">
-															{{
+                                                        </text>
+                                                        <text v-if="coupon.couponType == 1">
+                                                            {{
 																coupon.categoryType == 1
-																	? '仅限购买产品类商品'
-																	: '仅限购买仪器类商品'
+																	? coupon.couponName
+																	: coupon.couponName
 															}}
-														</text>
-														<text v-if="coupon.couponType == 3">
-															仅限购买店铺【{{ coupon.shopName }}】的商品
-														</text>
-														<text v-if="coupon.couponType == 4 || coupon.couponType == 2">
-															全商城商品通用
-														</text>
-													</view>
-												</view>
-												<view class="list-cell-btn">
-													<view class="icon-used">
-														<template v-if="coupon.couponBtnType == 0">
-															<template v-if="coupon.couponPayWay == 2">
-																<view class="icon-used-text">
-																	{{ coupon.moneyCouponPrice }}采美豆
-																</view>
-																<view
-																	class="icon-used-btn receive"
-																	@click="toDeductCoupon(coupon)"
-																>
-																	抵扣
-																</view>
-															</template>
-															<template v-else-if="coupon.couponPayWay == 1">
-																<view class="icon-used-text">购买</view>
-																<view
-																	class="icon-used-btn receive"
-																	@click="toPayCoupon(coupon)"
-																>
-																	¥{{ coupon.moneyCouponPrice }}
-																</view>
-															</template>
-															<template v-else>
-																<view
-																	class="icon-used-btn receive"
-																	@click="receiveCoupon(coupon)"
-																>
-																	领取
-																</view>
-															</template>
-														</template>
-														<view
-															class="icon-used-btn make"
-															v-if="coupon.couponBtnType == 1"
-														>
-															已领取
-														</view>
-													</view>
-												</view>
-											</view>
-											<view class="list-cell-time">
-												{{ coupon.startDate }} - {{ coupon.endDate }}
-											</view>
-										</view>
-									</view>
-								</template>
-							</scroll-view>
-						</div>
-					</view>
-				</tui-bottom-popup>
-				<!-- 培训方案 -->
-				<tui-bottom-popup :radius="true" :show="popupShow1" @close="hidePopup(1)">
-					<view class="tui-popup-box clearfix">
-						<view class="title">培训方案</view>
-						<div class="tui-popup-main">
-							<scroll-view class="tui-popup-scroll train" scroll-y="true">
-								<view class="content-tr">
-									<view class="content-td">培训方式:</view>
-									<view class="content-th">
-										{{ product.trainingMethod == 1 ? '线上培训' : '线下培训' }}
-									</view>
-								</view>
-								<view class="content-tr">
-									<view class="content-td">培训费用:</view>
-									<view class="content-th">
-										{{ product.trainingType == 1 ? '¥' + product.trainingFee : '售价已包含' }}
-									</view>
-								</view>
-							</scroll-view>
-						</div>
-						<view
-							class="tui-right-flex tui-popup-btn"
-							:style="{ paddingBottom: isIphoneX ? '68rpx' : '.34rpx' }"
-						>
-							<view class="tui-flex-1"><view class="tui-button" @click="hidePopup(1)">收起</view></view>
-						</view>
-					</view>
-				</tui-bottom-popup>
-				<!-- 底部按钮 -->
-				<view class="menu" v-if="isShowButton">
-					<view class="bottom-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
-						<view class="bottom-le">
-							<view class="item-bt" @click="this.$api.switchTabTo('/pages/tabBar/home/index')">
-								<image src="../../static/icon-home-active@3x.png"></image> <text>首页</text>
-							</view>
-							<view class="item-bt" @click="handleCollection">
-								<image
-									:src="
+                                                        </text>
+                                                        <text v-if="coupon.couponType == 3">
+                                                            仅限购买店铺【{{ coupon.shopName }}】的商品
+                                                        </text>
+                                                        <text v-if="coupon.couponType == 4 || coupon.couponType == 2">
+                                                            全商城商品通用
+                                                        </text>
+                                                    </view>
+                                                </view>
+                                                <view class="list-cell-btn">
+                                                    <view class="icon-used">
+                                                        <template v-if="coupon.couponBtnType == 0">
+                                                            <template v-if="coupon.couponPayWay == 2">
+                                                                <view class="icon-used-text">
+                                                                    {{ coupon.moneyCouponPrice }}采美豆
+                                                                </view>
+                                                                <view class="icon-used-btn receive"
+                                                                    @click="toDeductCoupon(coupon)">
+                                                                    抵扣
+                                                                </view>
+                                                            </template>
+                                                            <template v-else-if="coupon.couponPayWay == 1">
+                                                                <view class="icon-used-text">购买</view>
+                                                                <view class="icon-used-btn receive"
+                                                                    @click="toPayCoupon(coupon)">
+                                                                    ¥{{ coupon.moneyCouponPrice }}
+                                                                </view>
+                                                            </template>
+                                                            <template v-else>
+                                                                <view class="icon-used-btn receive"
+                                                                    @click="receiveCoupon(coupon)">
+                                                                    领取
+                                                                </view>
+                                                            </template>
+                                                        </template>
+                                                        <view class="icon-used-btn make"
+                                                            v-if="coupon.couponBtnType == 1">
+                                                            已领取
+                                                        </view>
+                                                    </view>
+                                                </view>
+                                            </view>
+                                            <view class="list-cell-time">
+                                                {{ coupon.startDate }} - {{ coupon.endDate }}
+                                            </view>
+                                        </view>
+                                    </view>
+                                </template>
+                            </scroll-view>
+                        </div>
+                    </view>
+                </tui-bottom-popup>
+                <!-- 培训方案 -->
+                <tui-bottom-popup :radius="true" :show="popupShow1" @close="hidePopup(1)">
+                    <view class="tui-popup-box clearfix">
+                        <view class="title">培训方案</view>
+                        <div class="tui-popup-main">
+                            <scroll-view class="tui-popup-scroll train" scroll-y="true">
+                                <view class="content-tr">
+                                    <view class="content-td">培训方式:</view>
+                                    <view class="content-th">
+                                        {{ product.trainingMethod == 1 ? '线上培训' : '线下培训' }}
+                                    </view>
+                                </view>
+                                <view class="content-tr">
+                                    <view class="content-td">培训费用:</view>
+                                    <view class="content-th">
+                                        {{ product.trainingType == 1 ? '¥' + product.trainingFee : '售价已包含' }}
+                                    </view>
+                                </view>
+                            </scroll-view>
+                        </div>
+                        <view class="tui-right-flex tui-popup-btn"
+                            :style="{ paddingBottom: isIphoneX ? '68rpx' : '.34rpx' }">
+                            <view class="tui-flex-1">
+                                <view class="tui-button" @click="hidePopup(1)">收起</view>
+                            </view>
+                        </view>
+                    </view>
+                </tui-bottom-popup>
+                <!-- 底部按钮 -->
+                <view class="menu" v-if="isShowButton">
+                    <view class="bottom-btn" :style="{ paddingBottom: isIphoneX ? '68rpx' : '0rpx' }">
+                        <view class="bottom-le">
+                            <view class="item-bt" @click="this.$api.switchTabTo('/pages/tabBar/home/index')">
+                                <image src="../../static/icon-home-active@3x.png"></image> <text>首页</text>
+                            </view>
+                            <view class="item-bt" @click="handleCollection">
+                                <image :src="
 										collectionType
 											? StaticUrl + 'icon/icon-collection@2x.png'
 											: StaticUrl + 'icon/icon-collection-none@2x.png'
-									"
-								></image>
-								<text>{{ collectionType ? '已收藏' : '收藏' }}</text>
-							</view>
-							<view class="item-bt" @click="buyProductCart()">
-								<image src="https://static.caimei365.com/app/img/icon/icon-cart-active@3x.png"></image>
-								<text>购物车</text>
-								<text
-									v-if="hasLogin && bottomCartNumber > 0"
-									class="uni-badge uni-badge-error uni-small uni-badge--small icon-num"
-									:class="[bottomCartNumber < 10 ? 'goleft' : '']"
-								>
-									{{ bottomCartNumber >= 100 ? '99+' : bottomCartNumber }}
-								</text>
-								<view class="animation-num" :class="isAnimation ? 'animation' : 'restion'">+1</view>
-							</view>
-						</view>
-						<view class="bottom-ri">
-							<button
-								:disabled="goodsData.disabled"
-								class="btn btn-cart"
-								:class="[goodsData.disabled ? 'disabled' : '']"
-								@tap.stop="btnGetConfirm('add')"
-							>
-								加入购物车
-							</button>
-							<button
-								:disabled="goodsData.disabled"
-								class="btn btn-bay"
-								:class="[goodsData.disabled ? 'disabled' : '']"
-								@tap.stop="btnGetConfirm('buy')"
-							>
-								立即购买
-							</button>
-						</view>
-					</view>
-				</view>
-				<!-- 侧边 -->
-				<scroll-top :isScrollTop="isScrollTop" :bottom="200" v-show="tabCurrentIndex !== 3"></scroll-top>
-			</view>
-		</template>
-		<!-- 商品参数 -->
-		<cm-prams-popup v-if="popupShow0" :popupShow="popupShow0" :product="product" />
-		<!-- 选择规格弹窗 -->
-		<cm-unit-popup
-			v-if="popupShow3"
-			:popupShow="popupShow3"
-			:skuProduct="skuProduct"
-			:productCoupon="productCoupon"
-			:type="unitPopupType"
-			:btnType="btnType"
-			:goodsData="goodsData"
-			@buyConfirm="handleBuyConfirm"
-			@skuClick="handleSkuClick"
-		/>
-		<!-- 弹窗提示 -->
-		<tui-modal
-			:show="modal"
-			@click="handleClick"
-			@cancel="hideMobel"
-			:content="contentModalText"
-			:button="modalButton"
-			color="#333"
-			:size="32"
-			shape="circle"
-			:maskClosable="false"
-		/>
-		<!-- 商品详情可见度弹窗提醒 -->
-		<cm-product-modal
-			v-if="showModal"
-			:showModal="showModal"
-			:commodityDetailsFlag="product.commodityDetailsFlag"
-			:isShareType="isShareType"
-			:userIdentity="userIdentity"
-			:firstClubType="firstClubType"
-		/>
-		<!-- 供应商收集用户信息弹窗 -->
-		<cmRossPopup v-if="showRossHtml" :popupShow="showRossHtml" :advertisInfo="advertisement" />
-
-		<!-- 分享弹窗 -->
-		<cm-share-popup ref="sharePopup" :data="posterData" type="product" />
-
-		<!-- 协销名片 -->
-		<cm-seller-modal :suid="suid" />
-	</view>
+									"></image>
+                                <text>{{ collectionType ? '已收藏' : '收藏' }}</text>
+                            </view>
+                            <view class="item-bt" @click="buyProductCart()">
+                                <image src="https://static.caimei365.com/app/img/icon/icon-cart-active@3x.png"></image>
+                                <text>购物车</text>
+                                <text v-if="hasLogin && bottomCartNumber > 0"
+                                    class="uni-badge uni-badge-error uni-small uni-badge--small icon-num"
+                                    :class="[bottomCartNumber < 10 ? 'goleft' : '']">
+                                    {{ bottomCartNumber >= 100 ? '99+' : bottomCartNumber }}
+                                </text>
+                                <view class="animation-num" :class="isAnimation ? 'animation' : 'restion'">+1</view>
+                            </view>
+                        </view>
+                        <view class="bottom-ri">
+                            <button :disabled="goodsData.disabled" class="btn btn-cart"
+                                :class="[goodsData.disabled ? 'disabled' : '']" @tap.stop="btnGetConfirm('add')">
+                                加入购物车
+                            </button>
+                            <button :disabled="goodsData.disabled" class="btn btn-bay"
+                                :class="[goodsData.disabled ? 'disabled' : '']" @tap.stop="btnGetConfirm('buy')">
+                                立即购买
+                            </button>
+                        </view>
+                    </view>
+                </view>
+            </view>
+        </template>
+        <!-- 商品参数 -->
+        <cm-prams-popup :popupShow="popupShow0" :product="product" />
+        <!-- 选择规格弹窗 -->
+        <cm-unit-popup :popupShow="popupShow3" :skuProduct="skuProduct" :productCoupon="productCoupon"
+            :type="unitPopupType" :btnType="btnType" :goodsData="goodsData" @buyConfirm="handleBuyConfirm"
+            @skuClick="handleSkuClick" />
+        <!-- 弹窗提示 -->
+        <tui-modal :show="modal" @click="handleClick" @cancel="hideMobel" :content="contentModalText"
+            :button="modalButton" color="#333" :size="32" shape="circle" :maskClosable="false" />
+        <!-- 商品详情可见度弹窗提醒 -->
+        <cm-product-modal v-if="showModal" :showModal="showModal" :commodityDetailsFlag="product.commodityDetailsFlag"
+            :isShareType="isShareType" :userIdentity="userIdentity" :firstClubType="firstClubType" />
+        <!-- 供应商收集用户信息弹窗 -->
+        <cmRossPopup :popupShow="showRossHtml" :advertisInfo="advertisement" />
+        <!-- 分享弹窗 -->
+        <cm-share-popup ref="sharePopup" :data="posterData" type="product" />
+        <!-- 协销名片 -->
+        <cm-seller-modal :suid="suid" />
+        <!-- 侧边 -->
+        <scroll-top :isScrollTop="isScrollTop" :bottom="240" :isShowKefu="true" v-show="tabCurrentIndex !== 3" />
+    </view>
 </template>
 
 <script>
-import { mapState, mapMutations } from 'vuex'
-import customP from './components/cm-header.vue' //自定义导航
-import cmPrice from './components/cm-price.vue' //价格显示
-import cmAttributes from './components/cm-attributes.vue' //规格信息
-import cmRecommend from './components/recommend' //相关推荐
-import cmParameter from './components/cm-parameter' //相关参数
-import cmService from './components/cm-service' //服务项目
-import cmProductDoc from './components/cm-product-doc.vue'
-import cmProductModal from './components/cm-product-modal.vue'
-import cmPramsPopup from './components/cm-prams-popup.vue'
-import cmUnitPopup from './components/cm-unit-popup.vue'
-import couponTabs from '@/components/cm-module/coupon/tui-tabs.vue'
-import cmRossPopup from '@/components/cm-module/cm-ross/cm-ross-popup'
-import cmReturnInstructions from './components/cm-return-instructions.vue'
-import authorize from '@/common/config/authorize.js'
-import wxLogin from '@/common/config/wxLogin.js'
-import { debounce } from '@/common/config/common.js'
-import payMixins from '@/mixins/payMixins.js'
-import proMixins from './mixins/proMixins.js'
-import cmSrsMixins from '@/utils/cmSrsMixins.js'
-import thorui from '@/components/clipboard/clipboard.thorui.js'
-import cmSharePopup from '@/components/cm-share-popup/cm-share-popup.vue'
-import cmSellerModal from '@/components/cm-share-popup/cm-seller-modal.vue'
-import { queryParse } from './mixins/share.helper.js'
-var isPreviewImg
-export default {
-	mixins: [payMixins, proMixins, cmSrsMixins],
-	components: {
-		customP,
-		cmRecommend,
-		cmPrice,
-		cmAttributes,
-		cmParameter,
-		cmService,
-		couponTabs,
-		cmProductDoc,
-		cmPramsPopup,
-		cmUnitPopup,
-		cmProductModal,
-		cmRossPopup,
-		cmReturnInstructions,
-		cmSharePopup,
-		cmSellerModal
-	},
-	data() {
-		return {
-			StaticUrl: this.$Static, //静态图片路径
-			clickPath: '/pages/search/search',
-			html: '',
-			productNoneImage: 'https://static.caimei365.com/app/img/icon/icon-pnone.png',
-			mode: 'round',
-			iconClass: 'icon-aixin',
-			iconColor: '#ff9100',
-			specClass: '', // 规格弹窗css类,控制开关动画
-			isBtnType: '',
-			isRequest: false,
-			isScrollTop: false,
-			current: 0,
-			isShareType: '',
-			isHeaderPoduct: false,
-			isNavbarFiexd: false,
-			navbarFiexd: 'none',
-			ladderPriceFlag: '',
-			ladderPriceList: '',
-			isInvalid: false,
-			isEvaluate: false,
-			isAnimation: false,
-			skeletonShow: true,
-			isStock: false,
-			disabled: false,
-			isNoneDisabled: false,
-			tabCurrentIndex: 0,
-			userId: 0,
-			shopId: 0,
-			shopID: 0,
-			typeId: 0,
-			vipFlag: 0,
-			firstClubType: 0,
-			productId: 0,
-			skusCount: 0, // 规格种类
-			userIdentity: 0, // 用户类型
-			goodsData: {}, // 自定义数据
-			shop: {}, //供应商信息
-			product: {}, //采美
-			productImage: [],
-			retailPrice: 0,
-			stock: 0,
-			number: 0,
-			minBuyNumber: 0,
-			productsList: [],
-			goodListData: [],
-			productCoupon: [], // 优惠券
-			productCouponList: [], // 优惠券弹窗列表
-			headerBtnPosi: this.setHeaderBtnPosi(), // 获取设备顶部胶囊高度
-			systeminfo: this.setSysteminfo(), // 获取设备信息
-			windowHeight: '',
-			headerColor: false,
-			backPage: 1,
-			nvabarData: {
-				// 顶部自定义导航
-				showCapsule: 1, // 是否显示左上角图标   1表示显示    0表示不显示
-				title: '' // 导航栏 中间的标题
-			},
-			linkPath: '',
-			CustomBar: this.CustomBar, // 顶部导航栏高度
-			popupShow0: false, // 参数弹窗
-			popupShow1: false, // 培训方案
-			popupShow2: false, // 优惠券
-			popupShow3: false, // 购买弹窗
-			tabSelectFlag: false,
-			sectionPropsArr: [],
-			scrollTopArray: [],
-			winHeight: '',
-			isShowButton: true,
-			isCouponEmpty: false,
-			currentTab: 0,
-			couponParam: {
-				// 获取弹窗优惠券领取参数
-				userId: 0,
-				productId: 0,
-				status: 1,
-				source: 2
-			},
-			bottomCartNumber: 0,
-			navbar: [{ name: '未领取', num: 0 }, { name: '已领取', num: 0 }],
-			isPreviewImage: false,
-			opentype: '',
-			collectionType: false,
-			isShowSupportingList: false,
-			supportingList: [],
-			supportingNum: 0, // 组合商品总数
-			contentModalText: '', //操作文字提示语句
-			modal: false,
-			modalButton: [
-				{
-					text: '取消',
-					type: 'gray',
-					plain: true //是否空心
-				},
-				{
-					text: '去升级',
-					customStyle: {
-						color: '#fff',
-						bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)'
-					},
-					plain: false
-				}
-			],
-			showModal: false,
-			isShowCaimeiShop: false,
-			unitPopupType: 0, // 选择类型 1 点击加入购物车  立即购买  2:点击规格选择
-			returnGoodsStutas: false,
-			helpContent: '',
-			posterData: {}, // 商品详情
-			suid: 0, // 协销id
-			scene: {}, //获取二维码参数
-			options: {}
-		}
-	},
-	computed: {
-		...mapState(['hasLogin', 'clubType', 'identity', 'isIphoneX', 'userInfo'])
-	},
-	filters: {
-		TypeFormat(value) {
-			switch (value) {
-				case 0:
-					return '活动券'
-					break
-				case 1:
-					return '品类券'
-					break
-				case 2:
-					return '用户专享券'
-					break
-				case 3:
-					return '店铺券'
-					break
-				case 4:
-					return '新用户券'
-					break
-			}
-		}
-	},
-	watch: {
-		isNavbarFiexd(val) {
-			if (!this.isRequest || !val) return
-			let timer = null
-			clearTimeout(timer)
-			timer = setTimeout(() => {
-				if (this.sectionPropsArr.length > 0) return
-				this.getSectionProps()
-			}, 200)
-		}
-	},
-	onLoad(option) {
-		if (option.scene) {
-			// 识别小程序二维码
-			this.scene = queryParse(decodeURIComponent(option.scene)) // 转码
-		}
-		this.productId = this.couponParam.productId = this.addParams.productId = this.handleProsId =
-			option.id || this.scene.id //获取商品ID
-		if (option.typeId) {
-			this.typeId = option.typeId
-		}
-		this.opentype = option.open
-		this.isShareType = option.type
-		this.linkPath = option.path
-		this.isHeaderPoduct = true
-		if (option.page == 2) {
-			this.backPage = option.page
-		}
-		this.options = option.scene ? this.scene : option
-		this.getWinHeight()
-	},
-	onReady() {
-		if (this.opentype == 'caimei') {
-			// 跳转到资料详情
-			uni.showLoading({
-				title: '加载中'
-			})
-			setTimeout(() => {
-				this.isNavbarFiexd = true
-				this.tabClick(4)
-				uni.hideLoading()
-			}, 2000)
-		}
-		console.log('是iPhoneX', this.isIphoneX)
-	},
-	methods: {
-		async initGetStotage() {
-			// 初始化
-			const userInfo = await this.$api.getStorage()
-			this.userId = this.couponParam.userId = this.addParams.userId = userInfo.userId ? userInfo.userId : 0
-			this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
-			this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
-			this.shopID = userInfo.shopId ? userInfo.shopId : 0
-			this.firstClubType = this.clubType
-			if (this.userIdentity == 0 || this.userIdentity == 2 || this.userIdentity == 4) {
-				this.isShowButton = true
-			} else {
-				this.isShowButton = false
-			}
-			if (isPreviewImg) {
-				isPreviewImg = false
-				return
-			} else {
-				this.initData()
-			}
-		},
-		initData() {
-			// 初始化商品详情查询
-			this.ProductService.QueryProductDetils({
-				userId: this.userId,
-				productId: this.productId,
-				identity: this.identity,
-				typeId: this.typeId
-			})
-				.then(response => {
-					let productLabel = ''
-					this.productImage = []
-					this.shop = response.data.shop
-					this.shopId = response.data.shopId
-					const dataStr = JSON.stringify(response.data)
-					this.product = JSON.parse(dataStr)
-					this.skuProduct = JSON.parse(dataStr)
-					this.skusCount = this.product.skus.length
-					this.addParams.skuId = this.product.skuId
-					if (this.product.tinyTypeName) {
-						productLabel = this.product.tinyTypeName
-					} else if (!this.product.tinyTypeName && this.product.smallTypeName) {
-						productLabel = this.product.smallTypeName
-					} else {
-						productLabel = this.product.bigTypeName
-					}
-					//设置统计数据标签
-					if (this.product.relatedLabels) {
-						uni.setStorageSync('productLabel', this.product.relatedLabels)
-					} else {
-						uni.setStorageSync(
-							'productLabel',
-							`${productLabel}-${this.product.brandName ? this.product.brandName : ''}`
-						)
-					}
-					//校验是否为ross
-					this.checkedIsRossSet()
-					//判断是否可以跳转供应商主页
-					if (this.product.shopType === 2) {
-						this.isShowCaimeiShop = true
-					}
-					// 判断是否显示已收藏
-					if (this.product.userLike && this.product.userLike == 1) {
-						this.collectionType = true
-					} else {
-						this.collectionType = false
-					}
-					//已删除/已冻结
-					if (this.product.validFlag === 0 || this.product.validFlag == 10) {
-						this.isInvalid = true
-					} else if (this.product.validFlag === 9) {
-						if (this.userIdentity == 1) {
-							this.isInvalid = false
-						} else {
-							this.isInvalid = true
-						}
-					}
-					this.ladderPriceFlag = this.product.ladderPriceFlag
-					this.html = this.adaptRichTextImg(this.product)
-					this.stock = this.product.stock
-					this.number = this.product.minBuyNumber
-					this.minBuyNumber = this.product.minBuyNumber
-
-					//处理商品图片列表
-					this.product.imageList.forEach(item => {
-						this.productImage.push(item.image)
-					})
-					//处理阶梯价格
-					if (this.product.ladderPriceList != null) {
-						this.ladderPriceList = this.product.ladderPriceList
-					}
-					//拆分金额并转千分位格式显示
-					if (this.product.price != null) {
-						this.retailPrice = this.product.price.toFixed(2)
-					}
-					//处理下架商品和售罄商品
-					if (this.product.validFlag == 3 || this.product.saleOutFlag === 1) {
-						this.isNoneDisabled = true
-						this.disabled = true
-					} else {
-						this.disabled = false
-						this.isNoneDisabled = false
-						this.goodsData.disabledText = ''
-					}
-					if (this.product.priceFlag == 1) {
-						this.disabled = true
-					} else if (this.product.priceFlag == 2) {
-						if (this.userIdentity == 4 && this.vipFlag != 1) {
-							this.disabled = true
-						} else {
-							this.disabled = false
-						}
-					} else if (this.product.priceFlag == 3) {
-						if (this.userIdentity == 4) {
-							this.disabled = true
-						} else if (this.userIdentity == 2 && this.firstClubType != 1) {
-							this.disabled = true
-						} else {
-							this.disabled = false
-						}
-					} else {
-						this.disabled = false
-					}
-					this.goodsData.disabled = this.disabled
-					this.goodsData.isNoneDisabled = this.isNoneDisabled
-					if (this.product.validFlag == 3) {
-						this.goodsData.disabledText = '下架'
-					}
-					if (this.product.validFlag == 10) {
-						this.goodsData.disabledText = '停售'
-					}
-					if (this.product.saleOutFlag === 1) {
-						this.goodsData.disabledText = '售罄'
-					}
-					console.log(this.disabled)
-					// setTimeout(() => {
-					//     this.getSectionProps()
-					// }, 2000)
-					this.handleShowProductType(this.product.commodityDetailsFlag)
-					if ((this.hasLogin && this.userIdentity == 2) || this.userIdentity == 4) {
-						this.ProductCartNumber()
-					}
-					this.queryProductDetilsCoupons()
-					this.getCommodityCombinationList()
-					// 特殊商品退货须知
-					this.returnGoodsStutas = response.data.returnGoodsStutas && response.data.returnGoodsStutas === 2 // 1:可以 2:不可以
-					this.helpContent = response.data.helpContent
-
-					setTimeout(() => {
-						this.skeletonShow = false
-						this.isRequest = true
-					}, 1000)
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		handleShowProductType(flag = '') {
-			// 根据商品详情可见度显示弹窗 flag 1.所有人可见 2.所有机构可见 3.仅会员机构可见 4.仅医美机构可见
-			const flagMap = {
-				'2': true,
-				'3': true,
-				'4': true
-			}
-			if (!this.hasLogin) {
-				this.showModal = flagMap[flag]
-				return
-			}
-			if (this.vipFlag === 1) {
-				this.showModal = false
-				return
-			}
-			if (flag === 3 && this.userIdentity === 4) {
-				this.showModal = true
-				return
-			}
-			if (flag === 4 && this.userIdentity === 4) {
-				this.showModal = true
-				return
-			}
-			if (flag === 4 && this.userIdentity === 2 && this.firstClubType !== 1) {
-				this.showModal = true
-				return
-			}
-		},
-		hideMobel1() {
-			this.modal1 = false
-			this.$api.navigateBack(1)
-		},
-
-		adaptRichTextImg(product) {
-			// 商品详情
-			let defaulHtml = '<div style="text-align: center;color:#333333;">暂无内容</div>'
-			let html = ''
-			if (product.productDetailChose == 1) {
-				// 同资质机构显示商品详情
-				html = product.productDetail ? this.$api.adaptRichTextImg(product.productDetail.detailInfo) : defaulHtml
-			} else {
-				if (this.hasLogin && this.userIdentity != 4) {
-					html = product.productDetail
-						? this.$api.adaptRichTextImg(product.productDetail.detailInfo)
-						: defaulHtml
-				} else {
-					if (product.productDetail.commonDetailInfo) {
-						html = product.productDetail
-							? this.$api.adaptRichTextImg(product.productDetail.commonDetailInfo)
-							: defaulHtml
-					} else {
-						html = defaulHtml
-					}
-				}
-			}
-			return html
-		},
-		getCommodityCombinationList() {
-			// 初始化商品详情配套商品
-			this.ProductService.getCommodityCombinationList({
-				userId: this.userId,
-				productId: this.productId,
-				source: 2,
-				pageNum: 1,
-				pageSize: 4
-			})
-				.then(response => {
-					const data = response.data
-					this.supportingList = data.results
-					this.supportingNum = data.totalRecord
-					if (this.supportingList.length > 0) {
-						if (!this.hasLogin || this.userIdentity == 2 || this.userIdentity == 4) {
-							this.isShowSupportingList = true
-						}
-					}
-				})
-				.catch(error => {
-					console.log('获取组合商品列表失败')
-				})
-		},
-		queryProductDetilsCoupons() {
-			// 初始化商品详情优惠券信息
-			this.ProductService.QueryProductDetilsCoupons(this.couponParam)
-				.then(response => {
-					this.productCoupon = response.data.list
-				})
-				.catch(error => {
-					console.log('获取优惠券列表失败')
-				})
-		},
-		queryPopupCoupons() {
-			// 获取弹窗优惠券列表
-			this.ProductService.QueryProductDetilsCoupons(this.couponParam)
-				.then(response => {
-					let data = response.data
-					this.navbar[0].num = data.notCouponNum
-					this.navbar[1].num = data.couponNum
-					if (data.couponList && data.couponList.length > 0) {
-						this.productCouponList = data.couponList
-						this.isCouponEmpty = false
-					} else {
-						this.isCouponEmpty = true
-					}
-				})
-				.catch(error => {
-					console.log('获取优惠券列表失败')
-				})
-		},
-		ProductCartNumber() {
-			// 获取用户购物车储量
-			this.ProductService.ProductCartNumber({ userId: this.userId })
-				.then(response => {
-					this.bottomCartNumber = response.data
-				})
-				.catch(error => {
-					console.log('获取购物车数量失败')
-				})
-		},
-		receiveCoupon(coupon) {
-			// 点击优惠券领取按钮,友盟埋点收集领取优惠券
-			if (process.env.NODE_ENV != 'development') {
-				this.$uma.trackEvent('Um_Event_productCouponReceive', {
-					Um_Key_PageName: '商品详情',
-					Um_Key_EvenName: '领取优惠券',
-					Um_Key_CouponId: `${coupon.couponId}`
-				})
-			}
-			this.ProductService.ReceiveCoupon({
-				userId: this.couponParam.userId,
-				couponId: coupon.couponId,
-				source: 1
-			})
-				.then(response => {
-					this.$util.msg('领取成功', 1500, true, 'success')
-					setTimeout(() => {
-						this.currentTab = 1
-						this.couponParam.status = 2
-						this.queryPopupCoupons()
-					}, 1500)
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		toDeductCoupon(coupon) {
-			// 点击采美豆抵扣优惠券
-			if (process.env.NODE_ENV != 'development') {
-				this.$uma.trackEvent('Um_Event_userCouponCollectionBuy', {
-					Um_Key_PageName: '领券中心',
-					Um_Key_EvenName: '抵扣优惠券',
-					Um_Key_CouponId: `${coupon.couponId}`
-				})
-			}
-			if (this.hasLogin) {
-				if (this.userIdentity === 1 || this.userIdentity === 3) {
-					this.$util.msg('您的身份暂不支持领取优惠券', 2000)
-					return
-				}
-				this.WeChatPayCouponBeans(coupon)
-			} else {
-				this.$api.navigateTo('/pages/login/login')
-			}
-		},
-		WeChatPayCouponBeans(coupon) {
-			// 采美豆抵扣优惠券
-			this.PayService.WeChatPayCouponBeans({
-				source: 1, //领取渠道 1 小程序  2 网站
-				userId: this.couponParam.userId,
-				couponId: coupon.couponId
-			})
-				.then(response => {
-					this.$util.msg('抵扣成功', 1500)
-					setTimeout(() => {
-						this.currentTab = 1
-						this.couponParam.status = 2
-						this.queryPopupCoupons()
-					}, 1500)
-				})
-				.catch(error => {
-					this.$util.msg(error.msg, 2000)
-				})
-		},
-		toPayCoupon(coupon) {
-			// 点击购买优惠券,友盟埋点收集购买优惠券
-			if (process.env.NODE_ENV != 'development') {
-				this.$uma.trackEvent('Um_Event_productCouponBuy', {
-					Um_Key_PageName: '商品详情',
-					Um_Key_EvenName: '购买优惠券',
-					Um_Key_CouponId: `${coupon.couponId}`
-				})
-			}
-			this.createCouponRecord(coupon)
-		},
-		createCouponRecord(coupon) {
-			// 生成购买优惠券记录Id
-			this.PayService.WeChatCouponRecord({
-				userId: this.userId,
-				couponId: coupon.couponId
-			})
-				.then(response => {
-					this.MiniWxPayFor(coupon, response.data.couponRecordId)
-				})
-				.catch(error => {
-					if (error.code == -1) {
-						//个人机构不能购买
-						this.contentModalText = '该优惠券仅限医美机构购买,请升级为医美机构后再次购买。'
-						this.modal = true
-					} else if (error.code == -2) {
-						//会员机构不是医美机构不能购买
-						this.$util.msg('该优惠券仅限医美机构购买', 2000)
-					}
-				})
-		},
-		async MiniWxPayFor(coupon, couponRecordId) {
-			const wechatcode = await authorize.getCode('weixin')
-			const params = {
-				userId: this.userId,
-				couponId: coupon.couponId,
-				couponRecordId: couponRecordId,
-				payType: 'XCX',
-				code: wechatcode,
-				source: 1 //支付来源 1 小程序 2 WWW
-			}
-			this.weChatMiniCouponWxPay(
-				params,
-				'Um_Event_productCouponPay',
-				'商品详情',
-				'线上支付优惠券',
-				coupon.couponId,
-				this.userId
-			)
-		},
-		hideMobel() {
-			this.modal = false
-		},
-		handleClick(e) {
-			//个人机构跳转升级页面
-			if (e.index == 1) {
-				this.$api.navigateTo('/pages/login/apply')
-			}
-			this.modal = false
-		},
-		swiperChange(e) {
-			//顶部商品图片切换
-			const index = e.detail.current
-			this.current = index
-		},
-		previewImg1(url) {
-			let mentuzArray = []
-			mentuzArray.push(url)
-			uni.previewImage({
-				urls: mentuzArray,
-				current: 0
-			})
-		},
-		previewImg(index) {
-			//顶部商品图片预览
-			isPreviewImg = true
-			let previewUrls = this.productImage
-			uni.previewImage({
-				current: index, //图片索引
-				urls: previewUrls, //必须是http图片,本地图片无效
-				longPressActions: ''
-			})
-		},
-		//商品详情&&供应商信息tab切换
-		tabClick(index) {
-			// 重新标记
-			this.getSectionProps()
-			this.tabCurrentIndex = index
-			this.tabSelectFlag = true
-			let timer = null
-			clearTimeout(timer)
-			// 点击tab 300ms才执行跳转,避免出错(来回跳动)
-			timer = setTimeout(() => {
-				this.tabClickAction(index)
-			}, 500)
-		},
-		// 跳转执行
-		tabClickAction(index) {
-			const that = this
-			if (index === 4) {
-				return uni.pageScrollTo({
-					duration: 300, //过渡时间必须为0,uniapp bug,否则运行到手机会报错
-					scrollTop: this.sectionPropsArr[0].scrollTop
-				})
-			}
-			uni.pageScrollTo({
-				duration: 300, //过渡时间必须为0,uniapp bug,否则运行到手机会报错
-				scrollTop: this.sectionPropsArr[index].scrollTop,
-				success() {
-					setTimeout(() => {
-						that.tabSelectFlag = false
-					}, 300)
-				}
-			})
-		},
-		handleContact(e) {
-			//跳转小程序客服
-			console.log(e.detail.path)
-			console.log(e.detail.query)
-		},
-		buyProductCart() {
-			//底部购物车按钮点击
-			if (this.hasLogin) {
-				// 友盟埋点商品详情购物车入口点击事件
-				if (process.env.NODE_ENV != 'development') {
-					this.$uma.trackEvent('Um_Event_ProductShoppingCart', {
-						Um_Key_PageName: '去购物车',
-						Um_Key_SourcePage: '商品详情购物车入口'
-					})
-				}
-				this.$api.navigateTo('/pages/goods/cart')
-			} else {
-				this.$api.navigateTo('/pages/login/login?type=1')
-			}
-		},
-		btnGetConfirm(type) {
-			//加入购物车&&立即购买点击
-			if (this.hasLogin) {
-				this.btnType = type
-				this.popupShow3 = true
-				this.unitPopupType = 1
-			} else {
-				this.$api.navigateTo('/pages/login/login?type=1')
-			}
-		},
-		getAddProductCart() {
-			//增加购物车成功和toast弹窗提示成功
-			this.ProductService.shoppingAddCart({
-				productId: this.productId,
-				userId: this.userId,
-				productCount: this.number,
-				source: 2
-			})
-				.then(response => {
-					this.specClass = 'hide'
-					this.$util.msg('加入购物车成功', 1500, true, 'success')
-					this.isAnimation = true
-					setTimeout(() => {
-						this.specClass = 'none'
-					}, 200)
-					setTimeout(() => {
-						this.isAnimation = false
-					}, 2000)
-					this.bottomCartNumber = response.data
-				})
-				.catch(error => {
-					console.log('error', error.msg)
-				})
-		},
-		setHeaderBtnPosi() {
-			// 获得胶囊按钮位置信息
-			let headerBtnPosi = uni.getMenuButtonBoundingClientRect()
-			return headerBtnPosi
-		},
-		setSysteminfo() {
-			let systeminfo
-			uni.getSystemInfo({
-				// 获取设备信息
-				success: res => {
-					systeminfo = res
-				}
-			})
-			return systeminfo
-		},
-		goIndex() {
-			//商城首页
-			uni.switchTab({
-				url: '/pages/tabBar/home/index'
-			})
-		},
-		goSupplier() {
-			//跳供应商资料页
-			if (!this.isShowCaimeiShop) {
-				this.$api.navigateTo('/pages/supplier/user/my-shop?shopId=' + this.shopId)
-			}
-		},
-		discard() {
-			//丢弃
-		},
-		onShare(res) {
-			//分享转发
-			if (res.from === 'button') {
-				// 来自页面内转发按钮
-			}
-			return {
-				title: `${this.product.name}`,
-				path: `pages/goods/product?type=share&id=${this.productId}`,
-				imageUrl: `${this.productImage[0]}`
-			}
-		},
-		// 分享海报
-		handleShare() {
-			this.posterData = {
-				productName: this.product.name,
-				productImage: this.productImage[0],
-				suid: this.suid,
-				path: 'pages/goods/product',
-				id: this.productId
-			}
-			this.$refs.sharePopup.open()
-		},
-		handleCollection() {
-			// 收藏
-			if (this.hasLogin) {
-				this.ProductService.getProductUserLike({
-					userId: this.userId,
-					productId: this.product.productId
-				})
-					.then(response => {
-						this.collectionType = !this.collectionType
-						this.$util.msg(response.data, 1500, true, 'success')
-					})
-					.catch(error => {
-						this.$util.msg(error.msg, 2000)
-					})
-			} else {
-				this.$api.navigateTo('/pages/login/login')
-			}
-		},
-		showPopup(index) {
-			switch (index) {
-				case 0:
-					this.popupShow0 = true
-					break
-				case 1:
-					this.popupShow1 = true
-					break
-				case 2:
-					if (this.hasLogin) {
-						this.queryPopupCoupons()
-						this.popupShow2 = true
-					} else {
-						this.$api.navigateTo('/pages/login/login')
-					}
-					break
-				case 3:
-					this.popupShow3 = true
-					this.unitPopupType = 2
-					break
-			}
-		},
-		hidePopup(index) {
-			switch (index) {
-				case 0:
-					this.popupShow0 = false
-					break
-				case 1:
-					this.popupShow1 = false
-					break
-				case 2:
-					this.popupShow2 = false
-					break
-				case 3:
-					this.popupShow3 = false
-					break
-			}
-		},
-		couponChange(e) {
-			this.currentTab = e.index
-			switch (this.currentTab) {
-				case 0:
-					this.couponParam.status = 1
-					this.queryPopupCoupons()
-					break
-				case 1:
-					this.couponParam.status = 2
-					this.queryPopupCoupons()
-					break
-			}
-		},
-		handleSupporting() {
-			// 跳转组合商品页面
-			this.$api.navigateTo(`/pages/goods/goods-supporting?productId=${this.productId}`)
-		},
-		// 获取每个tab对应区域的区间
-		async getSectionProps() {
-			const sectionPropsArr = [],
-				scrollTopArray = [],
-				className = 'product-details'
-
-			// 获取相关节点元素信息
-			const productMain = await this.$util.boundingClientRect(this, '.container-product-main', false)
-			const productDetail = await this.$util.boundingClientRect(this, '.product-details', true)
-			const topBar = await this.$util.boundingClientRect(this, '#topBar', false)
-			/*
+    import { mapState, mapMutations } from 'vuex'
+    import customP from './components/cm-header.vue' //自定义导航
+    import cmPrice from './components/cm-price.vue' //价格显示
+    import cmRecommend from './components/recommend' //相关推荐
+    import cmService from './components/cm-service' //服务项目
+    import cmProductDoc from './components/cm-product-doc.vue'
+    import cmProductModal from './components/cm-product-modal.vue'
+    import cmPramsPopup from './components/cm-prams-popup.vue'
+    import cmUnitPopup from './components/cm-unit-popup.vue'
+    import couponTabs from '@/components/cm-module/coupon/tui-tabs.vue'
+    import cmRossPopup from '@/components/cm-module/cm-ross/cm-ross-popup'
+    import cmReturnInstructions from './components/cm-return-instructions.vue'
+    import authorize from '@/common/config/authorize.js'
+    import wxLogin from '@/common/config/wxLogin.js'
+    import { debounce } from '@/common/config/common.js'
+    import payMixins from '@/mixins/payMixins.js'
+    import proMixins from './mixins/proMixins.js'
+    import cmSrsMixins from '@/utils/cmSrsMixins.js'
+    import thorui from '@/components/clipboard/clipboard.thorui.js'
+    import cmSharePopup from '@/components/cm-share-popup/cm-share-popup.vue'
+    import cmSellerModal from '@/components/cm-share-popup/cm-seller-modal.vue'
+    import { queryParse } from './mixins/share.helper.js'
+    var isPreviewImg
+    export default {
+        mixins: [payMixins, proMixins, cmSrsMixins],
+        components: {
+            customP,
+            cmRecommend,
+            cmPrice,
+            cmService,
+            couponTabs,
+            cmProductDoc,
+            cmPramsPopup,
+            cmUnitPopup,
+            cmProductModal,
+            cmRossPopup,
+            cmReturnInstructions,
+            cmSharePopup,
+            cmSellerModal
+        },
+        data() {
+            return {
+                StaticUrl: this.$Static, //静态图片路径
+                clickPath: '/pages/search/search',
+                html: '',
+                productNoneImage: 'https://static.caimei365.com/app/img/icon/icon-pnone.png',
+                mode: 'round',
+                iconClass: 'icon-aixin',
+                iconColor: '#ff9100',
+                specClass: '', // 规格弹窗css类,控制开关动画
+                isBtnType: '',
+                isRequest: false,
+                isScrollTop: false,
+                current: 0,
+                isShareType: '',
+                isHeaderPoduct: false,
+                isNavbarFiexd: false,
+                navbarFiexd: 'none',
+                ladderPriceFlag: '',
+                ladderPriceList: '',
+                isInvalid: false,
+                isEvaluate: false,
+                isAnimation: false,
+                skeletonShow: true,
+                isStock: false,
+                disabled: false,
+                isNoneDisabled: false,
+                tabCurrentIndex: 0,
+                userId: 0,
+                shopId: 0,
+                shopID: 0,
+                typeId: 0,
+                vipFlag: 0,
+                firstClubType: 0,
+                productId: 0,
+                skusCount: 0, // 规格种类
+                userIdentity: 0, // 用户类型
+                goodsData: {}, // 自定义数据
+                shop: {}, //供应商信息
+                product: {}, //采美
+                productImage: [],
+                retailPrice: 0,
+                stock: 0,
+                number: 0,
+                minBuyNumber: 0,
+                productsList: [],
+                goodListData: [],
+                productCoupon: [], // 优惠券
+                productCouponList: [], // 优惠券弹窗列表
+                headerBtnPosi: this.setHeaderBtnPosi(), // 获取设备顶部胶囊高度
+                systeminfo: this.setSysteminfo(), // 获取设备信息
+                windowHeight: '',
+                headerColor: false,
+                backPage: 1,
+                nvabarData: {
+                    // 顶部自定义导航
+                    showCapsule: 1, // 是否显示左上角图标   1表示显示    0表示不显示
+                    title: '' // 导航栏 中间的标题
+                },
+                linkPath: '',
+                CustomBar: this.CustomBar, // 顶部导航栏高度
+                popupShow0: false, // 参数弹窗
+                popupShow1: false, // 培训方案
+                popupShow2: false, // 优惠券
+                popupShow3: false, // 购买弹窗
+                tabSelectFlag: false,
+                sectionPropsArr: [],
+                scrollTopArray: [],
+                winHeight: '',
+                isShowButton: true,
+                isCouponEmpty: false,
+                currentTab: 0,
+                couponParam: {
+                    // 获取弹窗优惠券领取参数
+                    userId: 0,
+                    productId: 0,
+                    status: 1,
+                    source: 2
+                },
+                bottomCartNumber: 0,
+                navbar: [{ name: '未领取', num: 0 }, { name: '已领取', num: 0 }],
+                isPreviewImage: false,
+                opentype: '',
+                collectionType: false,
+                isShowSupportingList: false,
+                supportingList: [],
+                supportingNum: 0, // 组合商品总数
+                contentModalText: '', //操作文字提示语句
+                modal: false,
+                modalButton: [{
+                        text: '取消',
+                        type: 'gray',
+                        plain: true //是否空心
+                    },
+                    {
+                        text: '去升级',
+                        customStyle: {
+                            color: '#fff',
+                            bgColor: 'linear-gradient(90deg, #F28F31 0%, #FF5B00 100%)'
+                        },
+                        plain: false
+                    }
+                ],
+                showModal: false,
+                isShowCaimeiShop: false,
+                unitPopupType: 0, // 选择类型 1 点击加入购物车  立即购买  2:点击规格选择
+                returnGoodsStutas: false,
+                helpContent: '',
+                posterData: {}, // 商品详情
+                suid: 0, // 协销id
+                scene: {}, //获取二维码参数
+                options: {}
+            }
+        },
+        computed: {
+            ...mapState(['hasLogin', 'clubType', 'identity', 'isIphoneX', 'userInfo'])
+        },
+        filters: {
+            TypeFormat(value) {
+                switch (value) {
+                    case 0:
+                        return '活动券'
+                        break
+                    case 1:
+                        return '品类券'
+                        break
+                    case 2:
+                        return '用户专享券'
+                        break
+                    case 3:
+                        return '店铺券'
+                        break
+                    case 4:
+                        return '新用户券'
+                        break
+                }
+            }
+        },
+        watch: {
+            isNavbarFiexd(val) {
+                if (!this.isRequest || !val) return
+                let timer = null
+                clearTimeout(timer)
+                timer = setTimeout(() => {
+                    if (this.sectionPropsArr.length > 0) return
+                    this.getSectionProps()
+                }, 200)
+            }
+        },
+        onLoad(option) {
+            if (option.scene) {
+                // 识别小程序二维码
+                this.scene = queryParse(decodeURIComponent(option.scene)) // 转码
+            }
+            this.productId = this.couponParam.productId = this.addParams.productId = this.handleProsId =
+                option.id || this.scene.id //获取商品ID
+            if (option.typeId) {
+                this.typeId = option.typeId
+            }
+            this.opentype = option.open
+            this.isShareType = option.type
+            this.linkPath = option.path
+            this.isHeaderPoduct = true
+            if (option.page == 2) {
+                this.backPage = option.page
+            }
+            this.options = option.scene ? this.scene : option
+            this.getWinHeight()
+        },
+        onReady() {
+            if (this.opentype == 'caimei') {
+                // 跳转到资料详情
+                uni.showLoading({
+                    title: '加载中'
+                })
+                setTimeout(() => {
+                    this.isNavbarFiexd = true
+                    this.tabClick(4)
+                    uni.hideLoading()
+                }, 2000)
+            }
+            console.log('是iPhoneX', this.isIphoneX)
+        },
+        methods: {
+            async initGetStotage() {
+                // 初始化
+                const userInfo = await this.$api.getStorage()
+                this.userId = this.couponParam.userId = this.addParams.userId = userInfo.userId ? userInfo.userId :
+                    0
+                this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
+                this.vipFlag = userInfo.vipFlag ? userInfo.vipFlag : 0
+                this.shopID = userInfo.shopId ? userInfo.shopId : 0
+                this.firstClubType = this.clubType
+                if (this.userIdentity == 0 || this.userIdentity == 2 || this.userIdentity == 4) {
+                    this.isShowButton = true
+                } else {
+                    this.isShowButton = false
+                }
+                if (isPreviewImg) {
+                    isPreviewImg = false
+                    return
+                } else {
+                    this.initData()
+                }
+            },
+            initData() {
+                // 初始化商品详情查询
+                this.ProductService.QueryProductDetils({
+                        userId: this.userId,
+                        productId: this.productId,
+                        identity: this.identity,
+                        typeId: this.typeId
+                    })
+                    .then(response => {
+                        let productLabel = ''
+                        this.productImage = []
+                        this.shop = response.data.shop
+                        this.shopId = response.data.shopId
+                        const dataStr = JSON.stringify(response.data)
+                        this.product = JSON.parse(dataStr)
+                        this.skuProduct = JSON.parse(dataStr)
+                        this.skusCount = this.product.skus.length
+                        this.addParams.skuId = this.product.skuId
+                        if (this.product.tinyTypeName) {
+                            productLabel = this.product.tinyTypeName
+                        } else if (!this.product.tinyTypeName && this.product.smallTypeName) {
+                            productLabel = this.product.smallTypeName
+                        } else {
+                            productLabel = this.product.bigTypeName
+                        }
+                        //设置统计数据标签
+                        if (this.product.relatedLabels) {
+                            uni.setStorageSync('productLabel', this.product.relatedLabels)
+                        } else {
+                            uni.setStorageSync(
+                                'productLabel',
+                                `${productLabel}-${this.product.brandName ? this.product.brandName : ''}`
+                            )
+                        }
+                        //校验是否为ross
+                        this.checkedIsRossSet()
+                        //判断是否可以跳转供应商主页
+                        if (this.product.shopType === 2) {
+                            this.isShowCaimeiShop = true
+                        }
+                        // 判断是否显示已收藏
+                        if (this.product.userLike && this.product.userLike == 1) {
+                            this.collectionType = true
+                        } else {
+                            this.collectionType = false
+                        }
+                        //已删除/已冻结
+                        if (this.product.validFlag === 0 || this.product.validFlag == 10) {
+                            this.isInvalid = true
+                        } else if (this.product.validFlag === 9) {
+                            if (this.userIdentity == 1) {
+                                this.isInvalid = false
+                            } else {
+                                this.isInvalid = true
+                            }
+                        }
+                        this.ladderPriceFlag = this.product.ladderPriceFlag
+                        this.html = this.adaptRichTextImg(this.product)
+                        this.stock = this.product.stock
+                        this.number = this.product.minBuyNumber
+                        this.minBuyNumber = this.product.minBuyNumber
+
+                        //处理商品图片列表
+                        this.product.imageList.forEach(item => {
+                            this.productImage.push(item.image)
+                        })
+                        //处理阶梯价格
+                        if (this.product.ladderPriceList != null) {
+                            this.ladderPriceList = this.product.ladderPriceList
+                        }
+                        //拆分金额并转千分位格式显示
+                        if (this.product.price != null) {
+                            this.retailPrice = this.product.price.toFixed(2)
+                        }
+                        //处理下架商品和售罄商品
+                        if (this.product.validFlag == 3 || this.product.saleOutFlag === 1) {
+                            this.isNoneDisabled = true
+                            this.disabled = true
+                        } else {
+                            this.disabled = false
+                            this.isNoneDisabled = false
+                            this.goodsData.disabledText = ''
+                        }
+                        if (this.product.priceFlag == 1) {
+                            this.disabled = true
+                        } else if (this.product.priceFlag == 2) {
+                            if (this.userIdentity == 4 && this.vipFlag != 1) {
+                                this.disabled = true
+                            } else {
+                                this.disabled = false
+                            }
+                        } else if (this.product.priceFlag == 3) {
+                            if (this.userIdentity == 4) {
+                                this.disabled = true
+                            } else if (this.userIdentity == 2 && this.firstClubType != 1) {
+                                this.disabled = true
+                            } else {
+                                this.disabled = false
+                            }
+                        } else {
+                            this.disabled = false
+                        }
+                        this.goodsData.disabled = this.disabled
+                        this.goodsData.isNoneDisabled = this.isNoneDisabled
+                        if (this.product.validFlag == 3) {
+                            this.goodsData.disabledText = '下架'
+                        }
+                        if (this.product.validFlag == 10) {
+                            this.goodsData.disabledText = '停售'
+                        }
+                        if (this.product.saleOutFlag === 1) {
+                            this.goodsData.disabledText = '售罄'
+                        }
+                        console.log(this.disabled)
+                        // setTimeout(() => {
+                        //     this.getSectionProps()
+                        // }, 2000)
+                        this.handleShowProductType(this.product.commodityDetailsFlag)
+                        if ((this.hasLogin && this.userIdentity == 2) || this.userIdentity == 4) {
+                            this.ProductCartNumber()
+                        }
+                        this.queryProductDetilsCoupons()
+                        this.getCommodityCombinationList()
+                        // 特殊商品退货须知
+                        this.returnGoodsStutas = response.data.returnGoodsStutas && response.data
+                            .returnGoodsStutas === 2 // 1:可以 2:不可以
+                        this.helpContent = response.data.helpContent
+
+                        setTimeout(() => {
+                            this.skeletonShow = false
+                            this.isRequest = true
+                        }, 1000)
+                    })
+                    .catch(error => {
+                        this.$util.msg(error.msg, 2000)
+                    })
+            },
+            handleShowProductType(flag = '') {
+                // 根据商品详情可见度显示弹窗 flag 1.所有人可见 2.所有机构可见 3.仅会员机构可见 4.仅医美机构可见
+                const flagMap = {
+                    '2': true,
+                    '3': true,
+                    '4': true
+                }
+                if (!this.hasLogin) {
+                    this.showModal = flagMap[flag]
+                    return
+                }
+                if (this.vipFlag === 1) {
+                    this.showModal = false
+                    return
+                }
+                if (flag === 3 && this.userIdentity === 4) {
+                    this.showModal = true
+                    return
+                }
+                if (flag === 4 && this.userIdentity === 4) {
+                    this.showModal = true
+                    return
+                }
+                if (flag === 4 && this.userIdentity === 2 && this.firstClubType !== 1) {
+                    this.showModal = true
+                    return
+                }
+            },
+            hideMobel1() {
+                this.modal1 = false
+                this.$api.navigateBack(1)
+            },
+
+            adaptRichTextImg(product) {
+                // 商品详情
+                let defaulHtml = '<div style="text-align: center;color:#333333;">暂无内容</div>'
+                let html = ''
+                if (product.productDetailChose == 1) {
+                    // 同资质机构显示商品详情
+                    html = product.productDetail ? this.$api.adaptRichTextImg(product.productDetail.detailInfo) :
+                        defaulHtml
+                } else {
+                    if (this.hasLogin && this.userIdentity != 4) {
+                        html = product.productDetail ?
+                            this.$api.adaptRichTextImg(product.productDetail.detailInfo) :
+                            defaulHtml
+                    } else {
+                        if (product.productDetail.commonDetailInfo) {
+                            html = product.productDetail ?
+                                this.$api.adaptRichTextImg(product.productDetail.commonDetailInfo) :
+                                defaulHtml
+                        } else {
+                            html = defaulHtml
+                        }
+                    }
+                }
+                return html
+            },
+            getCommodityCombinationList() {
+                // 初始化商品详情配套商品
+                this.ProductService.getCommodityCombinationList({
+                        userId: this.userId,
+                        productId: this.productId,
+                        source: 2,
+                        pageNum: 1,
+                        pageSize: 4
+                    })
+                    .then(response => {
+                        const data = response.data
+                        this.supportingList = data.results
+                        this.supportingNum = data.totalRecord
+                        if (this.supportingList.length > 0) {
+                            if (!this.hasLogin || this.userIdentity == 2 || this.userIdentity == 4) {
+                                this.isShowSupportingList = true
+                            }
+                        }
+                    })
+                    .catch(error => {
+                        console.log('获取组合商品列表失败')
+                    })
+            },
+            queryProductDetilsCoupons() {
+                // 初始化商品详情优惠券信息
+                this.ProductService.QueryProductDetilsCoupons(this.couponParam)
+                    .then(response => {
+                        this.productCoupon = response.data.list
+                    })
+                    .catch(error => {
+                        console.log('获取优惠券列表失败')
+                    })
+            },
+            queryPopupCoupons() {
+                // 获取弹窗优惠券列表
+                this.ProductService.QueryProductDetilsCoupons(this.couponParam)
+                    .then(response => {
+                        let data = response.data
+                        this.navbar[0].num = data.notCouponNum
+                        this.navbar[1].num = data.couponNum
+                        if (data.couponList && data.couponList.length > 0) {
+                            this.productCouponList = data.couponList
+                            this.isCouponEmpty = false
+                        } else {
+                            this.isCouponEmpty = true
+                        }
+                    })
+                    .catch(error => {
+                        console.log('获取优惠券列表失败')
+                    })
+            },
+            ProductCartNumber() {
+                // 获取用户购物车储量
+                this.ProductService.ProductCartNumber({ userId: this.userId })
+                    .then(response => {
+                        this.bottomCartNumber = response.data
+                    })
+                    .catch(error => {
+                        console.log('获取购物车数量失败')
+                    })
+            },
+            receiveCoupon(coupon) {
+                // 点击优惠券领取按钮,友盟埋点收集领取优惠券
+                if (process.env.NODE_ENV != 'development') {
+                    this.$uma.trackEvent('Um_Event_productCouponReceive', {
+                        Um_Key_PageName: '商品详情',
+                        Um_Key_EvenName: '领取优惠券',
+                        Um_Key_CouponId: `${coupon.couponId}`
+                    })
+                }
+                this.ProductService.ReceiveCoupon({
+                        userId: this.couponParam.userId,
+                        couponId: coupon.couponId,
+                        source: 1
+                    })
+                    .then(response => {
+                        this.$util.msg('领取成功', 1500, true, 'success')
+                        setTimeout(() => {
+                            this.currentTab = 1
+                            this.couponParam.status = 2
+                            this.queryPopupCoupons()
+                        }, 1500)
+                    })
+                    .catch(error => {
+                        this.$util.msg(error.msg, 2000)
+                    })
+            },
+            toDeductCoupon(coupon) {
+                // 点击采美豆抵扣优惠券
+                if (process.env.NODE_ENV != 'development') {
+                    this.$uma.trackEvent('Um_Event_userCouponCollectionBuy', {
+                        Um_Key_PageName: '领券中心',
+                        Um_Key_EvenName: '抵扣优惠券',
+                        Um_Key_CouponId: `${coupon.couponId}`
+                    })
+                }
+                if (this.hasLogin) {
+                    if (this.userIdentity === 1 || this.userIdentity === 3) {
+                        this.$util.msg('您的身份暂不支持领取优惠券', 2000)
+                        return
+                    }
+                    this.WeChatPayCouponBeans(coupon)
+                } else {
+                    this.$api.navigateTo('/pages/login/login')
+                }
+            },
+            WeChatPayCouponBeans(coupon) {
+                // 采美豆抵扣优惠券
+                this.PayService.WeChatPayCouponBeans({
+                        source: 1, //领取渠道 1 小程序  2 网站
+                        userId: this.couponParam.userId,
+                        couponId: coupon.couponId
+                    })
+                    .then(response => {
+                        this.$util.msg('抵扣成功', 1500)
+                        setTimeout(() => {
+                            this.currentTab = 1
+                            this.couponParam.status = 2
+                            this.queryPopupCoupons()
+                        }, 1500)
+                    })
+                    .catch(error => {
+                        this.$util.msg(error.msg, 2000)
+                    })
+            },
+            toPayCoupon(coupon) {
+                // 点击购买优惠券,友盟埋点收集购买优惠券
+                if (process.env.NODE_ENV != 'development') {
+                    this.$uma.trackEvent('Um_Event_productCouponBuy', {
+                        Um_Key_PageName: '商品详情',
+                        Um_Key_EvenName: '购买优惠券',
+                        Um_Key_CouponId: `${coupon.couponId}`
+                    })
+                }
+                this.$api.navigateTo(`/pages/user/pay/card-coupon-under?amount=${coupon.moneyCouponPrice}`)
+                // this.createCouponRecord(coupon)
+            },
+            createCouponRecord(coupon) {
+                // 生成购买优惠券记录Id
+                this.PayService.WeChatCouponRecord({
+                        userId: this.userId,
+                        couponId: coupon.couponId
+                    })
+                    .then(response => {
+                        this.MiniWxPayFor(coupon, response.data.couponRecordId)
+                    })
+                    .catch(error => {
+                        if (error.code == -1) {
+                            //个人机构不能购买
+                            this.contentModalText = '该优惠券仅限医美机构购买,请升级为医美机构后再次购买。'
+                            this.modal = true
+                        } else if (error.code == -2) {
+                            //会员机构不是医美机构不能购买
+                            this.$util.msg('该优惠券仅限医美机构购买', 2000)
+                        }
+                    })
+            },
+            async MiniWxPayFor(coupon, couponRecordId) {
+                const wechatcode = await authorize.getCode('weixin')
+                const params = {
+                    userId: this.userId,
+                    couponId: coupon.couponId,
+                    couponRecordId: couponRecordId,
+                    payType: 'XCX',
+                    code: wechatcode,
+                    source: 1 //支付来源 1 小程序 2 WWW
+                }
+                this.weChatMiniCouponWxPay(
+                    params,
+                    'Um_Event_productCouponPay',
+                    '商品详情',
+                    '线上支付优惠券',
+                    coupon.couponId,
+                    this.userId
+                )
+            },
+            hideMobel() {
+                this.modal = false
+            },
+            handleClick(e) {
+                //个人机构跳转升级页面
+                if (e.index == 1) {
+                    this.$api.navigateTo('/pages/login/apply')
+                }
+                this.modal = false
+            },
+            swiperChange(e) {
+                //顶部商品图片切换
+                const index = e.detail.current
+                this.current = index
+            },
+            previewImg1(url) {
+                let mentuzArray = []
+                mentuzArray.push(url)
+                uni.previewImage({
+                    urls: mentuzArray,
+                    current: 0
+                })
+            },
+            previewImg(index) {
+                //顶部商品图片预览
+                isPreviewImg = true
+                let previewUrls = this.productImage
+                uni.previewImage({
+                    current: index, //图片索引
+                    urls: previewUrls, //必须是http图片,本地图片无效
+                    longPressActions: ''
+                })
+            },
+            //商品详情&&供应商信息tab切换
+            tabClick(index) {
+                // 重新标记
+                this.getSectionProps()
+                this.tabCurrentIndex = index
+                this.tabSelectFlag = true
+                let timer = null
+                clearTimeout(timer)
+                // 点击tab 300ms才执行跳转,避免出错(来回跳动)
+                timer = setTimeout(() => {
+                    this.tabClickAction(index)
+                }, 500)
+            },
+            // 跳转执行
+            tabClickAction(index) {
+                const that = this
+                if (index === 4) {
+                    return uni.pageScrollTo({
+                        duration: 300, //过渡时间必须为0,uniapp bug,否则运行到手机会报错
+                        scrollTop: this.sectionPropsArr[0].scrollTop
+                    })
+                }
+                uni.pageScrollTo({
+                    duration: 300, //过渡时间必须为0,uniapp bug,否则运行到手机会报错
+                    scrollTop: this.sectionPropsArr[index].scrollTop,
+                    success() {
+                        setTimeout(() => {
+                            that.tabSelectFlag = false
+                        }, 300)
+                    }
+                })
+            },
+            handleContact(e) {
+                //跳转小程序客服
+                console.log(e.detail.path)
+                console.log(e.detail.query)
+            },
+            buyProductCart() {
+                //底部购物车按钮点击
+                if (this.hasLogin) {
+                    // 友盟埋点商品详情购物车入口点击事件
+                    if (process.env.NODE_ENV != 'development') {
+                        this.$uma.trackEvent('Um_Event_ProductShoppingCart', {
+                            Um_Key_PageName: '去购物车',
+                            Um_Key_SourcePage: '商品详情购物车入口'
+                        })
+                    }
+                    this.$api.navigateTo('/pages/goods/cart')
+                } else {
+                    this.$api.navigateTo('/pages/login/login?type=1')
+                }
+            },
+            btnGetConfirm(type) {
+                //加入购物车&&立即购买点击
+                if (this.hasLogin) {
+                    this.btnType = type
+                    this.popupShow3 = true
+                    this.unitPopupType = 1
+                } else {
+                    this.$api.navigateTo('/pages/login/login?type=1')
+                }
+            },
+            getAddProductCart() {
+                //增加购物车成功和toast弹窗提示成功
+                this.ProductService.shoppingAddCart({
+                        productId: this.productId,
+                        userId: this.userId,
+                        productCount: this.number,
+                        source: 2
+                    })
+                    .then(response => {
+                        this.specClass = 'hide'
+                        this.$util.msg('加入购物车成功', 1500, true, 'success')
+                        this.isAnimation = true
+                        setTimeout(() => {
+                            this.specClass = 'none'
+                        }, 200)
+                        setTimeout(() => {
+                            this.isAnimation = false
+                        }, 2000)
+                        this.bottomCartNumber = response.data
+                    })
+                    .catch(error => {
+                        console.log('error', error.msg)
+                    })
+            },
+            setHeaderBtnPosi() {
+                // 获得胶囊按钮位置信息
+                let headerBtnPosi = uni.getMenuButtonBoundingClientRect()
+                return headerBtnPosi
+            },
+            setSysteminfo() {
+                let systeminfo
+                uni.getSystemInfo({
+                    // 获取设备信息
+                    success: res => {
+                        systeminfo = res
+                    }
+                })
+                return systeminfo
+            },
+            goIndex() {
+                //商城首页
+                uni.switchTab({
+                    url: '/pages/tabBar/home/index'
+                })
+            },
+            goSupplier() {
+                //跳供应商资料页
+                if (!this.isShowCaimeiShop) {
+                    this.$api.navigateTo('/pages/supplier/user/my-shop?shopId=' + this.shopId)
+                }
+            },
+            discard() {
+                //丢弃
+            },
+            // onShare(res) {
+            // 	//分享转发
+            // 	if (res.from === 'button') {
+            // 		// 来自页面内转发按钮
+            // 	}
+            // 	return {
+            // 		title: `${this.product.name}`,
+            // 		path: `pages/goods/product?type=share&id=${this.productId}`,
+            // 		imageUrl: `${this.productImage[0]}`
+            // 	}
+            // },
+            // 分享海报
+            handleShare() {
+                this.posterData = {
+                    productName: this.product.name,
+                    productImage: this.productImage[0],
+                    suid: this.suid,
+                    path: 'pages/goods/product',
+                    id: this.productId
+                }
+                console.log('posterData=======>', this.posterData)
+                this.$refs.sharePopup.open()
+            },
+            handleCollection() {
+                // 收藏
+                if (this.hasLogin) {
+                    this.ProductService.getProductUserLike({
+                            userId: this.userId,
+                            productId: this.product.productId
+                        })
+                        .then(response => {
+                            this.collectionType = !this.collectionType
+                            this.$util.msg(response.data, 1500, true, 'success')
+                        })
+                        .catch(error => {
+                            this.$util.msg(error.msg, 2000)
+                        })
+                } else {
+                    this.$api.navigateTo('/pages/login/login')
+                }
+            },
+            showPopup(index) {
+                switch (index) {
+                    case 0:
+                        this.popupShow0 = true
+                        break
+                    case 1:
+                        this.popupShow1 = true
+                        break
+                    case 2:
+                        if (this.hasLogin) {
+                            this.queryPopupCoupons()
+                            this.popupShow2 = true
+                        } else {
+                            this.$api.navigateTo('/pages/login/login')
+                        }
+                        break
+                    case 3:
+                        this.popupShow3 = true
+                        this.unitPopupType = 2
+                        break
+                }
+            },
+            hidePopup(index) {
+                switch (index) {
+                    case 0:
+                        this.popupShow0 = false
+                        break
+                    case 1:
+                        this.popupShow1 = false
+                        break
+                    case 2:
+                        this.popupShow2 = false
+                        break
+                    case 3:
+                        this.popupShow3 = false
+                        break
+                }
+            },
+            couponChange(e) {
+                this.currentTab = e.index
+                switch (this.currentTab) {
+                    case 0:
+                        this.couponParam.status = 1
+                        this.queryPopupCoupons()
+                        break
+                    case 1:
+                        this.couponParam.status = 2
+                        this.queryPopupCoupons()
+                        break
+                }
+            },
+            handleSupporting() {
+                // 跳转组合商品页面
+                this.$api.navigateTo(`/pages/goods/goods-supporting?productId=${this.productId}`)
+            },
+            // 获取每个tab对应区域的区间
+            async getSectionProps() {
+                const sectionPropsArr = [],
+                    scrollTopArray = [],
+                    className = 'product-details'
+
+                // 获取相关节点元素信息
+                const productMain = await this.$util.boundingClientRect(this, '.container-product-main', false)
+                const productDetail = await this.$util.boundingClientRect(this, '.product-details', true)
+                const topBar = await this.$util.boundingClientRect(this, '#topBar', false)
+                /*
                 说明:采用累加方式来计算每一个 prdocut-details 的 scrollTop 定位
                      scrollTop = 上一个的scrollTop + 上一个的高度
             */
-			productDetail.forEach((item, index) => {
-				// 上一个 prdocut-details 的 scrollTop 值
-				const prev = sectionPropsArr[index - 1]
-				const prevScrollTop = prev ? prev.scrollTop : productMain.height
-				// 上一个 prdocut-details 的高度
-				const add = productDetail[index - 1]
-				// 第一个需要减去tabs的高度
-				const addHeight = index === 0 ? (add ? add.height : 0) - topBar.height : add ? add.height : 0
-				sectionPropsArr.push({
-					className: `${className}${index}`,
-					scrollTop: prevScrollTop + addHeight
-				})
-				// - topBar.height
-			})
-			this.sectionPropsArr = sectionPropsArr
-			console.log('更新tab影响区域', this.sectionPropsArr)
-		},
-		//当滑动时也能同步激活tab
-		activeTab: debounce(
-			(top, _this) => {
-				const { sectionPropsArr } = _this
-				if (sectionPropsArr && sectionPropsArr.length > 0) {
-					sectionPropsArr.forEach((item, index) => {
-						// 当前位置为开始位置, 下个起始位置为结束位置
-						const openInterval = (index === 0 ? 0 : item.scrollTop) - 20 // 自定义偏移
-						const next = sectionPropsArr[index + 1]
-						const closedInterval = (next ? next.scrollTop : 10000000) - 20 // 自定义偏移
-						if (top >= openInterval && top < closedInterval) {
-							_this.tabCurrentIndex = index
-						}
-					})
-				}
-			},
-			100,
-			true
-		),
-		debounce(fn, delay) {
-			let timer = null //借助闭包
-			return function() {
-				if (timer) {
-					clearTimeout(timer)
-				}
-				timer = setTimeout(fn, delay) // 简化写法
-			}
-		},
-		clipboard(data) {
-			thorui.getClipboardData(data, res => {
-				if (res) {
-					this.$util.msg('复制成功', 2000, true, 'success')
-				} else {
-					this.$util.msg('复制失败', 2000, true, 'none')
-				}
-			})
-		},
-		getWinHeight() {
-			this.winHeight = wx.getSystemInfoSync().windowHeight
-		},
-		changePreViewImageStatus(falg) {
-			this.isPreviewImage = falg
-		}
-	},
-	onPageScroll(e) {
-		//实时获取到滚动的值
-		const { scrollTop } = e
-		this.debounce(this.getSectionProps(), 1000)
-		if (!this.tabSelectFlag) {
-			this.activeTab(scrollTop, this)
-		}
-		if (e.scrollTop > 60) {
-			this.headerColor = true
-			this.navbarFiexd = 'fixed'
-			this.isNavbarFiexd = true
-			this.nvabarData = {
-				showCapsule: 1,
-				title: '商品详情'
-			}
-		} else {
-			this.headerColor = false
-			this.isNavbarFiexd = false
-			this.navbarFiexd = 'none'
-			this.nvabarData = {
-				showCapsule: 1,
-				title: ''
-			}
-		}
-		if (e.scrollTop > 700) {
-			this.isScrollTop = true
-		} else {
-			this.isScrollTop = false
-		}
-	},
-	onShareAppMessage(res) {
-		//分享转发
-		if (res.from === 'button') {
-			// 来自页面内转发按钮
-		}
-		return {
-			title: `${this.product.name}`,
-			path: `pages/goods/product?type=4&id=${this.productId}&suid=${
-				this.userInfo.userIdentity === 1 ? this.userInfo.userId : 0
-			}&spId=${this.userInfo.userIdentity === 1 ? this.userInfo.serviceProviderId : 0}`,
-			imageUrl: `${this.productImage[0]}`
-		}
-	},
-	onShow() {
-		wxLogin.wxLoginAuthorize()
-		// 是否开启图片预览 true 不刷新调用接口 false刷新调用接口
-		if (!this.isPreviewImage) {
-			this.initGetStotage()
-		}
-		this.isPreviewImage = false
-		const suid = this.options.suid
-			? this.options.suid
-			: this.scene.suid
-			? this.scene.suid
-			: uni.getStorageSync('suid') * 1
-			? uni.getStorageSync('suid') * 1
-			: 0 // 协销userId
-		const spId = this.options.spId
-			? this.options.spId
-			: this.scene.spId
-			? this.scene.spId
-			: uni.getStorageSync('spId') * 1
-			? uni.getStorageSync('spId') * 1
-			: 0 // 协销id
-		const isShare = this.options.type == 4 ? true : this.scene.type == 4 ? true : false //是否从分享页进入
-		if ((isShare || uni.getStorageSync('suid') * 1 > 0) && this.userInfo.userIdentity !== 1) {
-			// 分享进入 且 用户非协销 或不是从分享进入有缓存
-			if (
-				!uni.getStorageSync('spUserId') ||
-				uni.getStorageSync('spUserId') * 1 === uni.getStorageSync('suid') * 1
-			) {
-				// 如果未分配或者分配相同
-				this.suid = suid
-				uni.setStorageSync('suid', suid)
-				uni.setStorageSync('spId', spId)
-			} else {
-				uni.setStorageSync('suid', 0)
-				this.suid = 0
-				uni.setStorageSync('spId', 0)
-			}
-		}
-		console.log(this.suid, "uni.getStorageSync('spId')", uni.getStorageSync('spId'))
-	}
-}
+                productDetail.forEach((item, index) => {
+                    // 上一个 prdocut-details 的 scrollTop 值
+                    const prev = sectionPropsArr[index - 1]
+                    const prevScrollTop = prev ? prev.scrollTop : productMain.height
+                    // 上一个 prdocut-details 的高度
+                    const add = productDetail[index - 1]
+                    // 第一个需要减去tabs的高度
+                    const addHeight = index === 0 ? (add ? add.height : 0) - topBar.height : add ? add
+                        .height : 0
+                    sectionPropsArr.push({
+                        className: `${className}${index}`,
+                        scrollTop: prevScrollTop + addHeight
+                    })
+                    // - topBar.height
+                })
+                this.sectionPropsArr = sectionPropsArr
+                console.log('更新tab影响区域', this.sectionPropsArr)
+            },
+            //当滑动时也能同步激活tab
+            activeTab: debounce(
+                (top, _this) => {
+                    const { sectionPropsArr } = _this
+                    if (sectionPropsArr && sectionPropsArr.length > 0) {
+                        sectionPropsArr.forEach((item, index) => {
+                            // 当前位置为开始位置, 下个起始位置为结束位置
+                            const openInterval = (index === 0 ? 0 : item.scrollTop) - 20 // 自定义偏移
+                            const next = sectionPropsArr[index + 1]
+                            const closedInterval = (next ? next.scrollTop : 10000000) - 20 // 自定义偏移
+                            if (top >= openInterval && top < closedInterval) {
+                                _this.tabCurrentIndex = index
+                            }
+                        })
+                    }
+                },
+                100,
+                true
+            ),
+            debounce(fn, delay) {
+                let timer = null //借助闭包
+                return function() {
+                    if (timer) {
+                        clearTimeout(timer)
+                    }
+                    timer = setTimeout(fn, delay) // 简化写法
+                }
+            },
+            clipboard(data) {
+                thorui.getClipboardData(data, res => {
+                    if (res) {
+                        this.$util.msg('复制成功', 2000, true, 'success')
+                    } else {
+                        this.$util.msg('复制失败', 2000, true, 'none')
+                    }
+                })
+            },
+            getWinHeight() {
+                this.winHeight = wx.getSystemInfoSync().windowHeight
+            },
+            changePreViewImageStatus(falg) {
+                this.isPreviewImage = falg
+            }
+        },
+        onPageScroll(e) {
+            //实时获取到滚动的值
+            const { scrollTop } = e
+            this.debounce(this.getSectionProps(), 1000)
+            if (!this.tabSelectFlag) {
+                this.activeTab(scrollTop, this)
+            }
+            if (e.scrollTop > 60) {
+                this.headerColor = true
+                this.navbarFiexd = 'fixed'
+                this.isNavbarFiexd = true
+                this.nvabarData = {
+                    showCapsule: 1,
+                    title: '商品详情'
+                }
+            } else {
+                this.headerColor = false
+                this.isNavbarFiexd = false
+                this.navbarFiexd = 'none'
+                this.nvabarData = {
+                    showCapsule: 1,
+                    title: ''
+                }
+            }
+            if (e.scrollTop > 700) {
+                this.isScrollTop = true
+            } else {
+                this.isScrollTop = false
+            }
+        },
+        onShareAppMessage(res) {
+            //分享转发
+            if (res.from === 'button') {
+                // 来自页面内转发按钮
+                return {
+                    title: `${this.product.name}`,
+                    path: `pages/goods/product?type=4&id=${this.productId}&suid=${
+                	this.userInfo.userIdentity === 1 ? this.userInfo.userId : 0}&spId=${this.userInfo.userIdentity === 1 ? this.userInfo.serviceProviderId : 0}`,
+                    imageUrl: `${this.productImage[0]}`
+                }
+            }
+        },
+        onShow() {
+            wxLogin.wxLoginAuthorize()
+            // 是否开启图片预览 true 不刷新调用接口 false刷新调用接口
+            if (!this.isPreviewImage) {
+                this.initGetStotage()
+            }
+            this.isPreviewImage = false
+            const suid = this.options.suid ? this.options.suid : this.scene.suid ? this.scene.suid : uni.getStorageSync(
+                    'suid') * 1 ? uni.getStorageSync('suid') * 1 :
+                0 // 协销userId
+            const spId = this.options.spId ?
+                this.options.spId :
+                this.scene.spId ?
+                this.scene.spId :
+                uni.getStorageSync('spId') * 1 ?
+                uni.getStorageSync('spId') * 1 :
+                0 // 协销id
+            const isShare = this.options.type == 4 ? true : this.scene.type == 4 ? true : false //是否从分享页进入
+            if ((isShare || uni.getStorageSync('suid') * 1 > 0) && this.userInfo.userIdentity !== 1) {
+                // 分享进入 且 用户非协销 或不是从分享进入有缓存
+                if (
+                    !uni.getStorageSync('spUserId') ||
+                    uni.getStorageSync('spUserId') * 1 === uni.getStorageSync('suid') * 1
+                ) {
+                    // 如果未分配或者分配相同
+                    this.suid = suid
+                    uni.setStorageSync('suid', suid)
+                    uni.setStorageSync('spId', spId)
+                } else {
+                    uni.setStorageSync('suid', 0)
+                    this.suid = 0
+                    uni.setStorageSync('spId', 0)
+                }
+            }
+            console.log(this.suid, 'uni.getStorageSync(\'spId\')', uni.getStorageSync('spId'))
+        }
+    }
 </script>
 
 <style lang="scss">
-page {
-	background-color: #ffffff;
-}
-.banner-section {
-	width: 100%;
-	height: 750rpx;
-	position: relative;
-	.cm-product-tags {
-		position: absolute;
-		right: 30rpx;
-		top: 0;
-		z-index: 999;
-	}
-	.cm-product-type {
-		width: 64rpx;
-		height: 64rpx;
-		text-align: justify;
-		box-sizing: border-box;
-		padding: 10rpx;
-		border-radius: 0 0 8rpx 8rpx;
-		background-color: #33ccbf;
-		font-size: $font-size-22;
-		color: #ffffff;
-		line-height: 25rpx;
-		position: absolute;
-		left: 30rpx;
-		top: 0;
-		z-index: 999;
-	}
-	.cm-product-cover {
-		width: 120rpx;
-		height: 77rpx;
-		line-height: 57rpx;
-		font-size: 24rpx;
-		color: #fff;
-		text-align: center;
-		background: url(https://static.caimei365.com/app/img/icon2/cm_cover_bg_app.png) no-repeat center;
-		background-size: 120rpx;
-		float: left;
-		position: absolute;
-		right: 30rpx;
-		top: 0;
-		z-index: 999;
-	}
-}
-.banner {
-	width: 100%;
-	height: 750rpx;
-	.product-img {
-		width: 750rpx;
-	}
-	image {
-		width: 100%;
-		height: 100%;
-	}
-	.banner-item {
-		position: relative;
-	}
-}
-.swiper__dots-box {
-	position: absolute;
-	color: #fff;
-	bottom: 30rpx;
-	right: 0;
-}
-.product-wrap {
-	width: 100%;
-	height: auto;
-	padding: 24rpx 0 0 0;
-	background-color: #ffffff;
-	border-bottom: 20rpx solid #f7f7f7;
-	.productRemarks {
-		height: 48rpx;
-		width: 100%;
-		float: left;
-		line-height: 48rpx;
-		font-size: 24rpx;
-		color: #999999;
-		text-align: left;
-	}
-	.wrap-top {
-		width: 702rpx;
-		padding: 0 24rpx;
-		height: auto;
-		float: left;
-		padding-bottom: 20rpx;
-		border-bottom: 1px solid #f8f8f8;
-		&.none {
-			.p-title {
-				color: #999999;
-			}
-		}
-		.p-title {
-			width: 100%;
-			height: auto;
-			float: left;
-			position: relative;
-			.p-title-name {
-				width: 602rpx;
-				height: auto;
-				float: left;
-				line-height: 48rpx;
-				font-size: $font-size-28;
-				color: $text-color;
-				-o-text-overflow: ellipsis;
-				text-overflow: ellipsis;
-				display: -webkit-box;
-				word-break: break-all;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 2;
-				overflow: hidden;
-				&.indent {
-					text-indent: 95rpx;
-				}
-			}
-			.mclap-tag {
-				display: block;
-				width: 84rpx;
-				height: 32rpx;
-				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
-				border-radius: 4rpx 48rpx 4px 4px;
-				line-height: 32rpx;
-				font-size: $font-size-22;
-				color: #ffffff;
-				text-align: center;
-				position: absolute;
-				left: 0;
-				top: 6rpx;
-			}
-			.p-title-share {
-				width: 96rpx;
-				height: 96rpx;
-				position: absolute;
-				right: 0;
-				text-align: center;
-				color: #999999;
-				font-size: $font-size-24;
-				box-sizing: border-box;
-				display: block;
-				background: transparent;
-				border-radius: 0;
-				border: 0;
-				margin: 0;
-				padding: 8rpx 0;
-				z-index: 20;
-				.icon-fenxiang1 {
-					font-size: $font-size-34;
-				}
-			}
-			.tui-share-btn::after {
-				border: 0;
-			}
-		}
-		.wrap-main-text {
-			line-height: 56rpx;
-			color: #ff2a2a;
-			font-size: $font-size-26;
-			display: block;
-			float: left;
-			font-weight: normal;
-		}
-		.wrap-main-none {
-			display: block;
-			width: 256rpx;
-			height: 44rpx;
-			padding-left: 20rpx;
-			border-radius: 11rpx;
-			background: $btn-confirm;
-			float: right;
-			line-height: 44rpx;
-			color: #ffffff;
-			text-align: center;
-			font-size: $font-size-24;
-		}
-
-		.p-price-none {
-			height: 44rpx;
-			line-height: 44rpx;
-			float: left;
-			font-size: $font-size-24;
-			color: #666;
-			text-decoration: line-through;
-			margin-left: 8rpx;
-		}
-		.p-minBuy {
-			height: 44rpx;
-			line-height: 44rpx;
-			float: right;
-			padding: 0 18rpx;
-			border-radius: 22rpx;
-			background-color: #f7f7f7;
-			color: #7f7f7f;
-			font-size: 24rpx;
-			text-align: center;
-			.min-text {
-				margin: 0 6rpx;
-			}
-		}
-		.p-login {
-			height: 56rpx;
-			line-height: 56rpx;
-			color: $color-system;
-			font-size: $font-size-24;
-			&.grade {
-				.price-left {
-					float: left;
-					.none {
-						display: block;
-						font-size: $font-size-20;
-						line-height: 48rpx;
-						color: #4a4b54;
-						float: left;
-						font-weight: bold;
-						margin-left: 5rpx;
-						text {
-							letter-spacing: 4rpx;
-							font-size: $font-size-32;
-						}
-					}
-				}
-			}
-			.p-no {
-				float: left;
-				margin-right: 5rpx;
-				font-size: $font-size-28;
-				color: $text-color;
-			}
-			.p-login-btn {
-				display: block;
-				height: 44rpx;
-				padding: 0 10rpx 0 20rpx;
-				border-radius: 11rpx;
-				background: $btn-confirm;
-				float: right;
-				line-height: 44rpx;
-				color: #ffffff;
-				text-align: center;
-				font-size: $font-size-24;
-			}
-		}
-	}
-	.wrap-label {
-		float: left;
-		width: 85%;
-		box-sizing: border-box;
-		.label-a {
-			padding: 0 18rpx;
-			line-height: 32rpx;
-			font-size: $font-size-20;
-			color: $color-system;
-			text-align: center;
-			border-radius: 6rpx;
-			background: #ffe6dc;
-			margin: 0 20rpx 15rpx 0;
-			display: inline-block;
-		}
-	}
-	.wrap-top-price {
-		float: left;
-		width: 100%;
-		box-sizing: border-box;
-		.wrap-main-item {
-			width: 100%;
-			height: 56rpx;
-			.p-price {
-				height: 56rpx;
-				line-height: 56rpx;
-				float: left;
-				color: #ff2a2a;
-				font-weight: bold;
-				&.none {
-					text-decoration: line-through;
-					color: #999999;
-					font-weight: normal;
-				}
-				.txt {
-					margin: 0 2rpx;
-				}
-				.txt.sm {
-					font-size: $font-size-26;
-				}
-				.txt.big {
-					font-size: $font-size-34;
-				}
-			}
-			.p-right-price {
-				height: 56rpx;
-				line-height: 56rpx;
-				float: right;
-				color: #999999;
-				font-size: $font-size-30;
-				.none {
-					font-size: $font-size-26;
-					text-decoration: line-through;
-				}
-			}
-		}
-		.floor-item-act {
-			height: 56rpx;
-			text-align: center;
-			box-sizing: border-box;
-			float: left;
-			padding: 10rpx 0;
-			margin-left: 10rpx;
-		}
-		.floor-item-btn {
-			float: right;
-			height: 40rpx;
-			margin-top: 8rpx;
-			margin-left: 10rpx;
-			.btn {
-				line-height: 40rpx;
-				padding: 0 20rpx;
-				height: 40rpx;
-				background: $btn-confirm;
-				color: #ffffff;
-				font-size: $font-size-20;
-				border-radius: 4rpx;
-			}
-		}
-	}
-	.wrap-info {
-		float: left;
-		width: 702rpx;
-		padding: 24rpx 24rpx 0 24rpx;
-		border-bottom: 1px solid #f8f8f8;
-		.info-viewT {
-			width: 100%;
-			min-height: 40rpx;
-			font-size: $font-size-28;
-			color: $text-color;
-			line-height: 40rpx;
-			text-align: left;
-			&.none {
-				color: #999999;
-			}
-			.info-viewL {
-				min-width: 350rpx;
-				float: left;
-				margin-bottom: 24rpx;
-			}
-			.info-viewR {
-				min-width: 352rpx;
-				float: left;
-				margin-bottom: 24rpx;
-			}
-		}
-		.info-viewB {
-			width: 100%;
-			height: auto;
-		}
-		.info-f {
-			width: 50%;
-			float: left;
-			font-size: $font-size-28;
-			color: $text-color;
-			line-height: 40rpx;
-			margin-bottom: 24rpx;
-			text-align: left;
-		}
-	}
-}
-.product-seve {
-	width: 100%;
-	height: 60rpx;
-	background-color: #ffffff;
-	position: relative;
-	display: flex;
-	line-height: 60rpx;
-	.label {
-		font-size: $font-size-28;
-		color: #333333;
-	}
-	.iconfont {
-		color: #fea785;
-		margin-right: 20rpx;
-		font-size: $font-size-22;
-	}
-	.text {
-		font-size: $font-size-22;
-		color: #fea785;
-		margin-left: 10rpx;
-	}
-}
-.product-item-none {
-	min-height: 348rpx;
-	display: flex;
-	flex-direction: column;
-	align-items: center;
-	border-bottom: 20rpx solid #f7f7f7;
-	box-sizing: border-box;
-	padding: 40rpx 0;
-	.none-image {
-		width: 284rpx;
-		height: 225rpx;
-	}
-	.none-text {
-		text-align: center;
-		font-size: $font-size-28;
-		color: #fea785;
-		line-height: 40rpx;
-	}
-}
-.product-supporting {
-	width: 100%;
-	height: 274rpx;
-	box-sizing: border-box;
-	padding: 30rpx 24rpx;
-	background-color: #ffffff;
-	border-bottom: 20rpx solid #f7f7f7;
-	.product-supporting-title {
-		width: 100%;
-		height: 40rpx;
-		text-align: left;
-		line-height: 40rpx;
-		font-size: $font-size-28;
-		color: #333333;
-	}
-	.product-supporting-list {
-		width: 100%;
-		height: 154rpx;
-		box-sizing: border-box;
-		padding: 13rpx 0;
-		position: relative;
-		.icon-xiayibu {
-			line-height: 154rpx;
-			display: inline-block;
-			position: absolute;
-			width: 80rpx;
-			top: 0;
-			right: 0;
-			color: #b2b2b2;
-			text-align: right;
-		}
-		.list {
-			width: 128rpx;
-			height: 128rpx;
-			margin-right: 24rpx;
-			float: left;
-			border: 1px solid #e1e1e1;
-			border-radius: 8rpx;
-			.list-image {
-				width: 100%;
-				height: 100%;
-				display: block;
-				border-radius: 8rpx;
-			}
-		}
-	}
-}
-.return-instructions {
-	padding: 0 24rpx;
-	border-bottom: 20rpx solid #f7f7f7;
-}
-.product-parameter {
-	width: 702rpx;
-	height: 90rpx;
-	padding: 0 24rpx;
-	background-color: #ffffff;
-	position: relative;
-	border-bottom: 20rpx solid #f7f7f7;
-	&.coupon {
-		.title {
-			color: #f94b4b;
-		}
-		.icon-xiayibu {
-			color: #f94b4b;
-		}
-		.coupon {
-			float: right;
-			box-sizing: border-box;
-			padding: 29rpx 0;
-			padding-right: 35rpx;
-			.tags {
-				height: 32rpx;
-				box-sizing: border-box;
-				border-radius: 8rpx;
-				background-color: #fff1eb;
-				line-height: 28rpx;
-				color: #f94b4b;
-				text-align: center;
-				display: inline-block;
-				padding: 0 10rpx;
-				font-size: $font-size-20;
-				border: 1px solid #f94b4b;
-				float: right;
-				margin: 0 6rpx;
-			}
-		}
-	}
-	.title {
-		line-height: 90rpx;
-		display: inline-block;
-		float: left;
-		font-size: $font-size-28;
-		color: #666666;
-	}
-	.name {
-		line-height: 90rpx;
-		display: inline-block;
-		float: left;
-		font-size: $font-size-28;
-		color: $text-color;
-		padding-right: 48rpx;
-		overflow: hidden;
-		text-overflow: ellipsis;
-		white-space: nowrap;
-		text-align: right;
-	}
-	.icon-xiayibu {
-		line-height: 90rpx;
-		display: inline-block;
-		position: absolute;
-		width: 48rpx;
-		top: 0;
-		right: 0;
-		color: #b2b2b2;
-	}
-}
-.product-supplier {
-	width: 100%;
-	height: 174rpx;
-	padding: 30rpx 24rpx;
-	box-sizing: border-box;
-	background-color: #ffffff;
-	position: relative;
-	box-sizing: border-box;
-	border-bottom: 20rpx solid #f7f7f7;
-	.logo {
-		width: 128rpx;
-		height: 92rpx;
-		float: left;
-		border: 1px solid #efefef;
-		border-radius: 6rpx;
-		image {
-			width: 100%;
-			height: 100%;
-			display: block;
-			border-radius: 6rpx;
-		}
-	}
-	.main {
-		width: 470rpx;
-		height: 92rpx;
-		float: left;
-		margin-left: 20rpx;
-		.name {
-			width: 100%;
-			line-height: 46rpx;
-			float: left;
-			font-size: $font-size-28;
-			color: $text-color;
-			float: right;
-			overflow: hidden;
-			text-overflow: ellipsis;
-			white-space: nowrap;
-			text-align: left;
-		}
-		.massgs {
-			width: 100%;
-			line-height: 46rpx;
-			float: left;
-			font-size: $font-size-24;
-			color: #999999;
-			.label {
-				float: left;
-			}
-			.p-stars {
-				float: left;
-				margin-left: 20rpx;
-			}
-			.acount {
-				float: right;
-				text {
-					color: $color-system;
-				}
-			}
-		}
-	}
-
-	.icon-xiayibu {
-		line-height: 154rpx;
-		display: inline-block;
-		position: absolute;
-		width: 48rpx;
-		top: 0;
-		right: 0;
-		color: #b2b2b2;
-	}
-}
-.product-details {
-	width: 100%;
-	background: #ffffff;
-	border-bottom: 20rpx solid #f7f7f7;
-	&.recommend {
-		background-color: #f7f7f7;
-		border-bottom: none;
-		.title {
-			.title-tab {
-				background-color: #f7f7f7;
-				color: $text-color;
-			}
-		}
-	}
-	.product-details-image {
-		width: 100%;
-		min-height: 856rpx;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-		.product-details-table {
-			width: 100%;
-			min-height: 160rpx;
-			border: 1px solid #e1e1e1;
-			border-radius: 10rpx;
-			.ladder-tr {
-				display: flex;
-				width: 100%;
-				justify-content: center;
-				height: 80rpx;
-				align-items: center;
-				border-bottom: 1px solid #e1e1e1;
-				&:last-child {
-					border-bottom: none;
-				}
-				.ladder-item-td {
-					height: 80rpx;
-					justify-content: center;
-					text-align: center;
-					box-sizing: border-box;
-					padding: 10rpx;
-					float: left;
-					.te-text {
-						line-height: 28rpx;
-						font-size: $font-size-24;
-						text-overflow: ellipsis;
-						display: -webkit-box;
-						word-break: break-all;
-						-webkit-box-orient: vertical;
-						-webkit-line-clamp: 2;
-						overflow: hidden;
-						color: #999999;
-						&.last {
-							width: 60%;
-							float: left;
-						}
-					}
-					.te-copy {
-						width: 40%;
-						float: right;
-						font-size: $font-size-24;
-						padding-top: 10rpx;
-						.clipboard {
-							width: 84rpx;
-							height: 36rpx;
-							background: #4688fa;
-							text-align: center;
-							font-size: $font-size-24;
-							color: #ffffff;
-							border-radius: 18rpx;
-							line-height: 36rpx;
-							display: inline-block;
-						}
-					}
-					&.th {
-						display: flex;
-						height: 80rpx;
-						align-items: center;
-						line-height: 80rpx;
-						font-size: 26rpx;
-						color: #666;
-					}
-					&:nth-child(1) {
-						width: 25%;
-						border-right: 1px solid #e1e1e1;
-					}
-					&:nth-child(2) {
-						width: 35%;
-						border-right: 1px solid #e1e1e1;
-					}
-					&:nth-child(3) {
-						width: 40%;
-					}
-				}
-			}
-		}
-		.qualificationImg-image {
-			width: 100%;
-			height: 856rpx;
-			display: block;
-		}
-	}
-	.product-rich-text-none {
-		box-sizing: border-box;
-		padding: 0 24rpx;
-		text-align: left;
-		font-size: 24rpx;
-		color: #999999;
-		line-height: 60rpx;
-		&.bold {
-			font-weight: bold;
-			color: #333333;
-		}
-	}
-	.content-none {
-		width: 100%;
-		height: 80rpx;
-		line-height: 80rpx;
-		text-align: left;
-		font-size: $font-size-26;
-		color: #999999;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-	}
-	.title {
-		width: 100%;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-		.title-tab {
-			width: 100%;
-			height: 100rpx;
-			background: #fff;
-			z-index: 10;
-			font-size: $font-size-30;
-			text-align: left;
-			color: $text-color;
-			line-height: 100rpx;
-			font-weight: 600;
-		}
-		.title-msg {
-			width: 100%;
-			height: 236rpx;
-			padding: 18rpx;
-			background-color: rgba(225, 86, 22, 0.1);
-			color: $color-system;
-			box-sizing: border-box;
-			margin-bottom: 30rpx;
-			.tit {
-				line-height: 46rpx;
-				font-size: $font-size-24;
-				text-align: left;
-			}
-			.txt {
-				line-height: 38rpx;
-				font-size: $font-size-20;
-				text-align: justify;
-			}
-		}
-	}
-	.content {
-		width: 100%;
-		background-color: #ffffff;
-	}
-}
-.isLower {
-	width: 100%;
-	height: 116rpx;
-	line-height: 116rpx;
-	text-align: center;
-	color: #000000;
-	font-size: $font-size-32;
-	font-weight: bold;
-}
-.bottom-btn {
-	width: 100%;
-	height: 100rpx;
-	position: fixed;
-	bottom: 0;
-	left: 0;
-	background: #ffffff;
-	z-index: 99;
-	.bottom-le {
-		width: 300rpx;
-		height: 100rpx;
-		padding: 10rpx 20rpx 10rpx 0;
-		float: left;
-		box-sizing: border-box;
-		.item-bt {
-			width: 80rpx;
-			height: 100%;
-			margin-right: 15rpx;
-			display: flex;
-			float: left;
-			flex-direction: column;
-			align-items: center;
-			justify-content: center;
-			font-size: $font-size-22;
-			color: $text-color;
-			line-height: 34rpx;
-			position: relative;
-			.animation-num {
-				font-size: $font-size-32;
-				color: #ff2a2a;
-				position: absolute;
-				top: -12rpx;
-				right: 4rpx;
-				font-weight: bold;
-			}
-			.animation {
-				animation: showAmnation 2.2s ease-in-out both;
-			}
-			.restion {
-				animation: hideAmnation 1s ease-in-out both;
-			}
-			.icon-num {
-				position: absolute;
-				right: -12rpx;
-				top: -5rpx;
-			}
-			.icon-num.goleft {
-				right: 2rpx;
-			}
-			&:last-child {
-				margin-right: 0;
-			}
-			image {
-				width: 44rpx;
-				height: 44rpx;
-			}
-			button.contact-btn {
-				width: 100%;
-				height: 100%;
-				margin: 0;
-				padding: 0;
-				display: flex;
-				flex-direction: column;
-				align-items: center;
-				justify-content: center;
-				box-sizing: border-box;
-				font-size: $font-size-24;
-				text-align: center;
-				text-decoration: none;
-				line-height: 34rpx;
-				border-radius: 0;
-				-webkit-tap-highlight-color: transparent;
-				overflow: hidden;
-				color: $text-color;
-				background-color: #ffffff;
-			}
-		}
-	}
-	.bottom-ri {
-		width: 450rpx;
-		height: 100%;
-		float: right;
-		display: flex;
-		box-sizing: border-box;
-		padding: 13rpx 20rpx 13rpx 0;
-		.btn {
-			flex: 1;
-			width: 200rpx;
-			line-height: 80rpx;
-			text-align: center;
-			font-size: $font-size-24;
-			color: #ffffff;
-		}
-		.btn-cart {
-			background-color: #ffe6dc;
-			color: $color-system;
-			border-radius: 42rpx 0 0 42rpx;
-		}
-		.btn-cart.disabled {
-			background-color: #e1e1e1;
-			color: #ffffff;
-		}
-		.btn-bay {
-			background: linear-gradient(to right, #f28f31 0%, #ff5b00 100%);
-			border-radius: 0 42rpx 42rpx 0;
-		}
-		.btn-bay.disabled {
-			background: linear-gradient(135deg, rgba(242, 143, 49, 0.5) 0%, rgba(225, 86, 22, 0.5) 100%);
-		}
-	}
-}
-.uni-badge--small {
-	-webkit-transform: scale(0.8);
-	-ms-transform: scale(0.8);
-	transform: scale(0.8);
-	-webkit-transform-origin: center center;
-	-ms-transform-origin: center center;
-	transform-origin: center center;
-}
-.uni-badge {
-	font-family: 'Helvetica Neue', Helvetica, sans-serif;
-	-webkit-box-sizing: border-box;
-	box-sizing: border-box;
-	font-size: 12px;
-	line-height: 1;
-	display: inline-block;
-	padding: 3px 6px;
-	color: #333;
-	border-radius: 100px;
-	background-color: #f1f1f1;
-}
-.uni-badge-error {
-	color: #fff;
-	background-color: #dd524d;
-}
-.product-topnav {
-	width: 100%;
-	height: 174rpx;
-	box-sizing: border-box;
-	background: #ffffff;
-	z-index: 990;
-	position: fixed;
-	opacity: 1;
-	left: 0;
-	&.fixed {
-		animation: showFixedColor 0.1s ease-in-out both;
-	}
-	&.none {
-		animation: hideFixedColor 0.1s ease-in-out both;
-	}
-	.navbar {
-		width: 100%;
-		height: 60rpx;
-		box-sizing: border-box;
-		padding: 0 24rpx;
-		display: flex;
-		.nav-item {
-			display: flex;
-			flex: 1;
-			justify-content: center;
-			align-items: center;
-			height: 60rpx;
-			font-size: $font-size-28;
-			color: $text-color;
-			position: relative;
-			float: left;
-			position: relative;
-			.line {
-				width: 60rpx;
-				height: 2px;
-				border-radius: 1px;
-				background: #ffffff;
-				position: absolute;
-				bottom: 0;
-				left: 50%;
-				margin-left: -30rpx;
-			}
-			&.current {
-				color: $color-system;
-				.line {
-					background: $color-system;
-				}
-			}
-		}
-	}
-	.search-input {
-		width: 100%;
-		height: 114rpx;
-		padding: 24rpx;
-		box-sizing: border-box;
-		.gosearch-btn {
-			width: 100%;
-			height: 100%;
-			border-radius: 40rpx;
-			margin: 0 auto;
-			font-size: 26rpx;
-			line-height: 66rpx;
-			color: #b2b2b2;
-			position: relative;
-			box-sizing: border-box;
-			padding-left: 66rpx;
-			&.fixed {
-				background: rgba(70, 70, 70, 0.1);
-			}
-			&.none {
-				background: rgba(70, 70, 70, 0.1);
-			}
-			.search-icon {
-				width: 66rpx;
-				height: 66rpx;
-				position: absolute;
-				left: 0;
-				top: 2rpx;
-				text-align: center;
-				line-height: 66rpx;
-				.icon-iconfonticonfontsousuo1 {
-					margin: 0 6rpx;
-					font-size: $font-size-34;
-					color: #b2b2b2;
-					z-index: 10;
-				}
-			}
-			.search-text {
-				font-size: $font-size-24;
-				line-height: 66rpx;
-				color: #b2b2b2;
-			}
-		}
-	}
-}
-
-@keyframes showFixedColor {
-	0% {
-		background: rgba(255, 255, 255, 0);
-	}
-	50% {
-		background: rgba(255, 255, 255, 0.5);
-	}
-	100% {
-		background: rgba(255, 255, 255, 1);
-	}
-}
-@keyframes hideFixedColor {
-	0% {
-		background: rgba(255, 255, 255, 1);
-	}
-	50% {
-		background: rgba(255, 255, 255, 0.5);
-	}
-	100% {
-		background: rgba(255, 255, 255, 0);
-	}
-}
-/* 加入购物模态层*/
-@keyframes showPopup {
-	0% {
-		opacity: 0;
-	}
-	100% {
-		opacity: 1;
-	}
-}
-@keyframes hidePopup {
-	0% {
-		opacity: 1;
-	}
-	100% {
-		opacity: 0;
-	}
-}
-@keyframes showLayer {
-	0% {
-		transform: translateY(0);
-	}
-	100% {
-		transform: translateY(-100%);
-	}
-}
-@keyframes hideLayer {
-	0% {
-		transform: translateY(-100%);
-	}
-	100% {
-		transform: translateY(0);
-	}
-}
-@keyframes showAmnation {
-	0% {
-		top: -12rpx;
-		opacity: 0;
-	}
-	50% {
-		top: -60rpx;
-		opacity: 1;
-	}
-	100% {
-		top: -100rpx;
-		opacity: 0;
-	}
-}
-@keyframes hideAmnation {
-	0% {
-		top: -100rpx;
-		opacity: 0;
-	}
-	100% {
-		top: -12rpx;
-		opacity: 0;
-	}
-}
-.tui-popup-box {
-	position: relative;
-	box-sizing: border-box;
-	min-height: 220rpx;
-	padding: 40rpx 24rpx 0 24rpx;
-	.tui-popup-close {
-		width: 90rpx;
-		height: 90rpx;
-		position: absolute;
-		right: 0;
-		top: 24rpx;
-		line-height: 90rpx;
-		text-align: center;
-		color: #b2b2b2;
-		.icon-iconfontguanbi {
-			font-size: $font-size-40;
-		}
-	}
-	.title {
-		font-size: $font-size-34;
-		color: $text-color;
-		line-height: 88rpx;
-		text-align: center;
-		float: left;
-		width: 100%;
-		height: 88rpx;
-		font-weight: bold;
-	}
-	.tui-popup-main {
-		width: 100%;
-		float: left;
-		&.coupon {
-			padding-bottom: 40rpx;
-			.coupon-empty {
-				width: 100%;
-				height: 600rpx;
-				display: flex;
-				align-items: center;
-				justify-content: center;
-				flex-direction: column;
-				position: fixed;
-				background: $bg-color;
-				.empty-container-image {
-					width: 150rpx;
-					height: 150rpx;
-					margin-bottom: 0;
-					margin-top: 0;
-				}
-				.error-text {
-					font-size: $font-size-28;
-					color: #999999;
-					line-height: 88rpx;
-				}
-			}
-		}
-		.tui-popup-scroll {
-			width: 100%;
-			height: 600rpx;
-			.coupon-list {
-				width: 100%;
-				height: 200rpx;
-				margin-top: 24rpx;
-				box-sizing: border-box;
-				background: url(https://static.caimei365.com/app/img/icon/icon-coupon-uesb@2x.png);
-				background-size: cover;
-				&:last-child {
-					margin-bottom: 24rpx;
-				}
-				.list-cell-le {
-					width: 224rpx;
-					height: 100%;
-					box-sizing: border-box;
-					padding: 37rpx 0;
-					float: left;
-					.coupon-maxMoney {
-						width: 100%;
-						height: 78rpx;
-						line-height: 78rpx;
-						font-size: 56rpx;
-						color: #ffffff;
-						text-align: center;
-						.small {
-							font-size: $font-size-24;
-						}
-					}
-					.coupon-minMoney {
-						width: 100%;
-						height: 33rpx;
-						line-height: 33rpx;
-						font-size: $font-size-24;
-						color: #ffffff;
-						text-align: center;
-					}
-				}
-				.list-cell-ri {
-					width: 478rpx;
-					height: 100%;
-					box-sizing: border-box;
-					padding: 20rpx 24rpx 0 24rpx;
-					float: right;
-					.list-cell-top {
-						width: 100%;
-						height: 121rpx;
-						float: left;
-						border-bottom: 1px solid #e1e1e1;
-						.list-cell-type {
-							width: 286rpx;
-							height: 100%;
-							float: left;
-							.list-cell-tags {
-								width: 100%;
-								height: 32rpx;
-								margin-bottom: 7rpx;
-								.tags {
-									display: inline-block;
-									padding: 0 10rpx;
-									height: 32rpx;
-									line-height: 32rpx;
-									background-color: #ffdcce;
-									color: #f94b4b;
-									font-size: $font-size-20;
-									border-radius: 8rpx;
-									text-align: center;
-									float: left;
-								}
-							}
-							.list-cell-texts {
-								width: 100%;
-								height: auto;
-								line-height: 35rpx;
-								text-overflow: ellipsis;
-								display: -webkit-box;
-								word-break: break-all;
-								-webkit-box-orient: vertical;
-								-webkit-line-clamp: 2;
-								overflow: hidden;
-								font-size: 26rpx;
-								color: #333333;
-							}
-						}
-						.list-cell-btn {
-							width: 128rpx;
-							height: 100%;
-							float: right;
-							.icon-used {
-								width: 100%;
-								height: 100%;
-								box-sizing: border-box;
-								padding-top: 28rpx;
-								.icon-used-text {
-									width: 100%;
-									text-align: center;
-									line-height: 26rpx;
-									font-size: $font-size-20;
-									color: #f94b4b;
-								}
-								.icon-used-btn {
-									width: 128rpx;
-									height: 48rpx;
-									border-radius: 28rpx;
-									line-height: 48rpx;
-									font-size: $font-size-26;
-									text-align: center;
-									&.receive {
-										background-image: linear-gradient(270deg, #f94b4b 0%, #feb673 100%);
-										color: #ffffff;
-									}
-									&.make {
-										border: solid 1px #f94b4b;
-										color: #f94b4b;
-									}
-								}
-							}
-						}
-					}
-					.list-cell-time {
-						width: 100%;
-						height: 58rpx;
-						line-height: 58rpx;
-						text-align: left;
-						font-size: $font-size-20;
-						color: #999999;
-					}
-				}
-			}
-			&.train {
-				height: 240rpx;
-			}
-			.content-tr {
-				width: 100%;
-				min-height: 58rpx;
-				line-height: 58rpx;
-				display: flex;
-				.content-td {
-					display: flex;
-					flex: 3;
-					font-size: $font-size-26;
-					color: #999999;
-					line-height: 58rpx;
-					text-align: left;
-				}
-				.content-th {
-					display: flex;
-					flex: 7;
-					font-size: $font-size-26;
-					color: #333333;
-					line-height: 58rpx;
-					text-align: left;
-					padding-left: 10rpx;
-				}
-			}
-		}
-	}
-	.tui-shopping-main {
-		width: 100%;
-		.layer-smimg {
-			width: 114rpx;
-			height: 114rpx;
-			float: left;
-			border-radius: 10rpx;
-			margin-right: 24rpx;
-			image {
-				width: 114rpx;
-				height: 114rpx;
-				border-radius: 10rpx;
-			}
-		}
-		.layer-nunbox {
-			justify-content: space-between;
-			align-items: center;
-			width: 536rpx;
-			height: auto;
-			float: left;
-			.layer-nunbox-t {
-				width: 100%;
-				height: 44rpx;
-				position: relative;
-				display: flex;
-				margin-bottom: 10rpx;
-				.text {
-					font-size: $font-size-24;
-					line-height: 48rpx;
-					color: #999999;
-				}
-				.layer-nunbox-text {
-					line-height: 44rpx;
-					font-size: $font-size-28;
-				}
-				.number-box {
-					display: flex;
-					justify-content: center;
-					align-items: center;
-					border: 2rpx solid #ffe6dc;
-					border-radius: 30rpx;
-					height: 48rpx;
-					margin-left: 20rpx;
-					.iconfont {
-						font-size: $font-size-24;
-						padding: 0 18rpx;
-						color: #999999;
-						text-align: center;
-						line-height: 48rpx;
-						font-weight: bold;
-						background: #fef6f3;
-						&.icon-jianhao {
-							border-radius: 30rpx 0 0 30rpx;
-						}
-						&.icon-jiahao {
-							border-radius: 0 30rpx 30rpx 0;
-						}
-					}
-					.btn-input {
-						width: 62rpx;
-						height: 48rpx;
-						line-height: 48rpx;
-						background: #ffffff;
-						border-radius: 4rpx;
-						text-align: center;
-						font-size: $font-size-28;
-					}
-				}
-				.product-step {
-					position: absolute;
-					left: 45rpx;
-					bottom: 0;
-					height: 44rpx;
-					background: #ffffff;
-				}
-			}
-			.layer-nunbox-b {
-				width: 100%;
-				height: 44rpx;
-				margin-top: 13rpx;
-			}
-			.text {
-				line-height: 44rpx;
-				font-size: $font-size-28;
-				.p {
-					color: #ff2a2a;
-				}
-				.p:first-child {
-					margin-left: 30rpx;
-				}
-				.p.sm {
-					font-size: $font-size-24;
-				}
-			}
-		}
-	}
-}
-.tui-popup-btn {
-	width: 100%;
-	height: auto;
-	float: left;
-	margin-top: 24rpx;
-	.tui-button {
-		width: 100%;
-		height: 88rpx;
-		background: $btn-confirm;
-		line-height: 88rpx;
-		text-align: center;
-		color: #ffffff;
-		font-size: $font-size-28;
-		border-radius: 44rpx;
-	}
-}
-/*富文本样式*/
-rich-text.p {
-	width: 702rpx !important;
-	padding: 0 24rpx;
-	text-align: justify;
-}
-rich-text.img {
-	width: 100%;
-	height: auto;
-}
-</style>
+    page {
+        background-color: #ffffff;
+    }
+
+    .banner-section {
+        width: 100%;
+        height: 750rpx;
+        position: relative;
+
+        .cm-product-tags {
+            position: absolute;
+            right: 30rpx;
+            top: 0;
+            z-index: 999;
+        }
+
+        .cm-product-type {
+            width: 64rpx;
+            height: 64rpx;
+            text-align: justify;
+            box-sizing: border-box;
+            padding: 10rpx;
+            border-radius: 0 0 8rpx 8rpx;
+            background-color: #33ccbf;
+            font-size: $font-size-22;
+            color: #ffffff;
+            line-height: 25rpx;
+            position: absolute;
+            left: 30rpx;
+            top: 0;
+            z-index: 999;
+        }
+
+        .cm-product-cover {
+            width: 120rpx;
+            height: 77rpx;
+            line-height: 57rpx;
+            font-size: 24rpx;
+            color: #fff;
+            text-align: center;
+            background: url(https://static.caimei365.com/app/img/icon2/cm_cover_bg_app.png) no-repeat center;
+            background-size: 120rpx;
+            float: left;
+            position: absolute;
+            right: 30rpx;
+            top: 0;
+            z-index: 999;
+        }
+    }
+
+    .banner {
+        width: 100%;
+        height: 750rpx;
+
+        .product-img {
+            width: 750rpx;
+        }
+
+        image {
+            width: 100%;
+            height: 100%;
+        }
+
+        .banner-item {
+            position: relative;
+        }
+    }
+
+    .swiper__dots-box {
+        position: absolute;
+        color: #fff;
+        bottom: 30rpx;
+        right: 0;
+    }
+
+    .product-wrap {
+        width: 100%;
+        height: auto;
+        padding: 24rpx 0 0 0;
+        background-color: #ffffff;
+        border-bottom: 16rpx solid #f7f7f7;
+
+        .productRemarks {
+            height: 48rpx;
+            width: 100%;
+            float: left;
+            line-height: 48rpx;
+            font-size: 24rpx;
+            color: #999999;
+            text-align: left;
+        }
+
+        .wrap-top {
+            width: 100%;
+            box-sizing: border-box;
+            padding: 0 24rpx 10rpx 24rpx;
+            height: auto;
+            float: left;
+
+            &.none {
+                .p-title {
+                    color: #999999;
+                }
+            }
+
+            .p-title {
+                width: 100%;
+                height: auto;
+                float: left;
+                position: relative;
+
+                .p-title-name {
+                    width: 100%;
+                    height: auto;
+                    float: left;
+                    line-height: 38rpx;
+                    font-size: $font-size-28;
+                    color: $text-color;
+                    font-weight: 600;
+                    -o-text-overflow: ellipsis;
+                    text-overflow: ellipsis;
+                    display: -webkit-box;
+                    word-break: break-all;
+                    -webkit-box-orient: vertical;
+                    -webkit-line-clamp: 2;
+                    overflow: hidden;
+
+                    &.indent {
+                        text-indent: 95rpx;
+                    }
+                }
+
+                .mclap-tag {
+                    display: block;
+                    width: 84rpx;
+                    height: 32rpx;
+                    background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+                    border-radius: 4rpx 48rpx 4px 4px;
+                    line-height: 32rpx;
+                    font-size: $font-size-22;
+                    color: #ffffff;
+                    text-align: center;
+                    position: absolute;
+                    left: 0;
+                    top: 6rpx;
+                }
+
+                .p-title-share {
+                    width: 80rpx;
+                    height: 80rpx;
+                    line-height: 80rpx;
+                    position: fixed;
+                    right: 20rpx;
+                    bottom: 380rpx;
+                    text-align: center;
+                    box-sizing: border-box;
+                    display: block;
+                    background: rgba(255, 255, 255, 0.7);
+                    margin: 0;
+                    z-index: 20;
+                    border: 1px solid #E1E1E1;
+                    border-radius: 50%;
+
+                    .icon-weixin {
+                        font-size: 56rpx;
+                        color: #07c160;
+                    }
+                }
+
+                .tui-share-btn::after {
+                    border: 0;
+                }
+            }
+
+            .wrap-main-text {
+                line-height: 56rpx;
+                color: #ff2a2a;
+                font-size: $font-size-26;
+                display: block;
+                float: left;
+                font-weight: normal;
+            }
+
+            .wrap-main-none {
+                display: block;
+                width: 256rpx;
+                height: 44rpx;
+                padding-left: 20rpx;
+                border-radius: 11rpx;
+                background: $btn-confirm;
+                float: right;
+                line-height: 44rpx;
+                color: #ffffff;
+                text-align: center;
+                font-size: $font-size-24;
+            }
+
+            .p-price-none {
+                height: 44rpx;
+                line-height: 44rpx;
+                float: left;
+                font-size: $font-size-24;
+                color: #666;
+                text-decoration: line-through;
+                margin-left: 8rpx;
+            }
+
+            .p-minBuy {
+                height: 44rpx;
+                line-height: 44rpx;
+                float: right;
+                padding: 0 18rpx;
+                border-radius: 22rpx;
+                background-color: #f7f7f7;
+                color: #7f7f7f;
+                font-size: 24rpx;
+                text-align: center;
+
+                .min-text {
+                    margin: 0 6rpx;
+                }
+            }
+
+            .p-login {
+                height: 56rpx;
+                line-height: 56rpx;
+                color: $color-system;
+                font-size: $font-size-24;
+
+                &.grade {
+                    .price-left {
+                        float: left;
+
+                        .none {
+                            display: block;
+                            font-size: $font-size-20;
+                            line-height: 48rpx;
+                            color: #4a4b54;
+                            float: left;
+                            font-weight: bold;
+                            margin-left: 5rpx;
+
+                            text {
+                                letter-spacing: 4rpx;
+                                font-size: $font-size-32;
+                            }
+                        }
+                    }
+                }
+
+                .p-no {
+                    float: left;
+                    margin-right: 5rpx;
+                    font-size: $font-size-28;
+                    color: $text-color;
+                }
+
+                .p-login-btn {
+                    display: block;
+                    height: 44rpx;
+                    padding: 0 10rpx 0 20rpx;
+                    border-radius: 11rpx;
+                    background: $btn-confirm;
+                    float: right;
+                    line-height: 44rpx;
+                    color: #ffffff;
+                    text-align: center;
+                    font-size: $font-size-24;
+                }
+            }
+        }
+
+        .wrap-label {
+            float: left;
+            width: 85%;
+            box-sizing: border-box;
+
+            .label-a {
+                padding: 0 18rpx;
+                line-height: 32rpx;
+                font-size: $font-size-20;
+                color: $color-system;
+                text-align: center;
+                border-radius: 6rpx;
+                background: #ffe6dc;
+                margin: 0 20rpx 10rpx 0;
+                display: inline-block;
+            }
+        }
+
+        .wrap-top-price {
+            float: left;
+            width: 100%;
+            box-sizing: border-box;
+
+            .wrap-main-item {
+                width: 100%;
+                height: 56rpx;
+
+                .p-price {
+                    height: 56rpx;
+                    line-height: 56rpx;
+                    float: left;
+                    color: #ff2a2a;
+                    font-weight: bold;
+
+                    &.none {
+                        text-decoration: line-through;
+                        color: #999999;
+                        font-weight: normal;
+                    }
+
+                    .txt {
+                        margin: 0 2rpx;
+                    }
+
+                    .txt.sm {
+                        font-size: $font-size-26;
+                    }
+
+                    .txt.big {
+                        font-size: $font-size-34;
+                    }
+                }
+
+                .p-right-price {
+                    height: 56rpx;
+                    line-height: 56rpx;
+                    float: right;
+                    color: #999999;
+                    font-size: $font-size-30;
+
+                    .none {
+                        font-size: $font-size-26;
+                        text-decoration: line-through;
+                    }
+                }
+            }
+
+            .floor-item-act {
+                height: 56rpx;
+                text-align: center;
+                box-sizing: border-box;
+                float: left;
+                padding: 10rpx 0;
+                margin-left: 10rpx;
+            }
+
+            .floor-item-btn {
+                float: right;
+                height: 40rpx;
+                margin-top: 8rpx;
+                margin-left: 10rpx;
+
+                .btn {
+                    line-height: 40rpx;
+                    padding: 0 20rpx;
+                    height: 40rpx;
+                    background: $btn-confirm;
+                    color: #ffffff;
+                    font-size: $font-size-20;
+                    border-radius: 20rpx;
+                }
+            }
+        }
+
+        .wrap-info {
+            float: left;
+            width: 702rpx;
+            padding: 24rpx 24rpx 0 24rpx;
+            border-bottom: 1px solid #f8f8f8;
+
+            .info-viewT {
+                width: 100%;
+                min-height: 40rpx;
+                font-size: $font-size-28;
+                color: $text-color;
+                line-height: 40rpx;
+                text-align: left;
+
+                &.none {
+                    color: #999999;
+                }
+
+                .info-viewL {
+                    min-width: 350rpx;
+                    float: left;
+                    margin-bottom: 24rpx;
+                }
+
+                .info-viewR {
+                    min-width: 352rpx;
+                    float: left;
+                    margin-bottom: 24rpx;
+                }
+            }
+
+            .info-viewB {
+                width: 100%;
+                height: auto;
+            }
+
+            .info-f {
+                width: 50%;
+                float: left;
+                font-size: $font-size-28;
+                color: $text-color;
+                line-height: 40rpx;
+                margin-bottom: 24rpx;
+                text-align: left;
+            }
+        }
+    }
+
+    .product-seve {
+        width: 100%;
+        height: 70rpx;
+        background-color: #ffffff;
+        position: relative;
+        display: flex;
+        line-height: 70rpx;
+
+        .label {
+            font-size: $font-size-28;
+            color: #333333;
+        }
+
+        .iconfont {
+            color: #fea785;
+            margin-right: 20rpx;
+            font-size: $font-size-22;
+        }
+
+        .text {
+            font-size: $font-size-22;
+            color: #fea785;
+            margin-left: 10rpx;
+        }
+    }
+
+    .product-item-none {
+        min-height: 348rpx;
+        display: flex;
+        flex-direction: column;
+        align-items: center;
+        border-bottom: 16rpx solid #f7f7f7;
+        box-sizing: border-box;
+        padding: 40rpx 0;
+
+        .none-image {
+            width: 284rpx;
+            height: 225rpx;
+        }
+
+        .none-text {
+            text-align: center;
+            font-size: $font-size-28;
+            color: #fea785;
+            line-height: 40rpx;
+        }
+    }
+
+    .product-supporting {
+        width: 100%;
+        height: 262rpx;
+        box-sizing: border-box;
+        padding: 24rpx;
+        background-color: #ffffff;
+        border-bottom: 16rpx solid #f7f7f7;
+
+        .product-supporting-title {
+            width: 100%;
+            height: 40rpx;
+            text-align: left;
+            line-height: 40rpx;
+            font-size: $font-size-28;
+            color: #333333;
+        }
+
+        .product-supporting-list {
+            width: 100%;
+            height: 154rpx;
+            box-sizing: border-box;
+            padding: 13rpx 0;
+            position: relative;
+
+            .icon-xiayibu {
+                line-height: 154rpx;
+                display: inline-block;
+                position: absolute;
+                width: 80rpx;
+                top: 0;
+                right: 0;
+                color: #b2b2b2;
+                text-align: right;
+            }
+
+            .list {
+                width: 128rpx;
+                height: 128rpx;
+                margin-right: 24rpx;
+                float: left;
+                border: 1px solid #e1e1e1;
+                border-radius: 8rpx;
+
+                .list-image {
+                    width: 100%;
+                    height: 100%;
+                    display: block;
+                    border-radius: 8rpx;
+                }
+            }
+        }
+    }
+
+    .return-instructions {
+        padding: 0 24rpx;
+        border-bottom: 16rpx solid #f7f7f7;
+    }
+
+    .product-parameter {
+        width: 702rpx;
+        height: 90rpx;
+        padding: 0 24rpx;
+        background-color: #ffffff;
+        position: relative;
+        border-bottom: 16rpx solid #f7f7f7;
+
+        &.coupon {
+            .title {
+                color: #f94b4b;
+            }
+
+            .icon-xiayibu {
+                color: #f94b4b;
+            }
+
+            .coupon {
+                float: right;
+                box-sizing: border-box;
+                padding: 29rpx 0;
+                padding-right: 35rpx;
+
+                .tags {
+                    height: 32rpx;
+                    box-sizing: border-box;
+                    border-radius: 8rpx;
+                    background-color: #fff1eb;
+                    line-height: 28rpx;
+                    color: #f94b4b;
+                    text-align: center;
+                    display: inline-block;
+                    padding: 0 10rpx;
+                    font-size: $font-size-20;
+                    border: 1px solid #f94b4b;
+                    float: right;
+                    margin: 0 6rpx;
+                }
+            }
+        }
+
+        .title {
+            line-height: 90rpx;
+            display: inline-block;
+            float: left;
+            font-size: $font-size-28;
+            color: #666666;
+        }
+
+        .name {
+            line-height: 90rpx;
+            display: inline-block;
+            float: left;
+            font-size: $font-size-28;
+            color: $text-color;
+            padding-right: 48rpx;
+            overflow: hidden;
+            text-overflow: ellipsis;
+            white-space: nowrap;
+            text-align: right;
+        }
+
+        .icon-xiayibu {
+            line-height: 90rpx;
+            display: inline-block;
+            position: absolute;
+            width: 48rpx;
+            top: 0;
+            right: 0;
+            color: #b2b2b2;
+        }
+    }
+
+    .product-supplier {
+        width: 100%;
+        height: 164rpx;
+        padding: 20rpx 24rpx;
+        box-sizing: border-box;
+        background-color: #ffffff;
+        position: relative;
+        box-sizing: border-box;
+        border-bottom: 16rpx solid #f7f7f7;
+
+        .logo {
+            width: 100rpx;
+            height: 100rpx;
+            float: left;
+            border: 1px solid #efefef;
+            border-radius: 50%;
+
+            image {
+                width: 100%;
+                height: 100%;
+                display: block;
+                border-radius: 50%;
+            }
+        }
+
+        .main {
+            width: 470rpx;
+            height: 92rpx;
+            float: left;
+            margin-left: 20rpx;
+
+            .name {
+                width: 100%;
+                line-height: 46rpx;
+                float: left;
+                font-size: $font-size-28;
+                color: $text-color;
+                float: right;
+                overflow: hidden;
+                text-overflow: ellipsis;
+                white-space: nowrap;
+                text-align: left;
+            }
+
+            .massgs {
+                width: 100%;
+                line-height: 46rpx;
+                float: left;
+                font-size: $font-size-24;
+                color: #999999;
+
+                .label {
+                    float: left;
+                }
+
+                .p-stars {
+                    float: left;
+                    margin-left: 20rpx;
+                }
+
+                .acount {
+                    float: right;
+
+                    text {
+                        color: $color-system;
+                    }
+                }
+            }
+        }
+
+        .icon-xiayibu {
+            line-height: 154rpx;
+            display: inline-block;
+            position: absolute;
+            width: 48rpx;
+            top: 0;
+            right: 0;
+            color: #b2b2b2;
+        }
+    }
+
+    .product-details {
+        width: 100%;
+        background: #ffffff;
+        border-bottom: 16rpx solid #f7f7f7;
+
+        &.recommend {
+            background-color: #f7f7f7;
+            border-bottom: none;
+
+            .title {
+                .title-tab {
+                    background-color: #f7f7f7;
+                    color: $text-color;
+                }
+            }
+        }
+
+        .product-details-image {
+            width: 100%;
+            min-height: 856rpx;
+            box-sizing: border-box;
+            padding: 0 24rpx;
+
+            .product-details-table {
+                width: 100%;
+                min-height: 160rpx;
+                border: 1px solid #e1e1e1;
+                border-radius: 10rpx;
+
+                .ladder-tr {
+                    display: flex;
+                    width: 100%;
+                    justify-content: center;
+                    height: 80rpx;
+                    align-items: center;
+                    border-bottom: 1px solid #e1e1e1;
+
+                    &:last-child {
+                        border-bottom: none;
+                    }
+
+                    .ladder-item-td {
+                        height: 80rpx;
+                        justify-content: center;
+                        text-align: center;
+                        box-sizing: border-box;
+                        padding: 10rpx;
+                        float: left;
+
+                        .te-text {
+                            line-height: 28rpx;
+                            font-size: $font-size-24;
+                            text-overflow: ellipsis;
+                            display: -webkit-box;
+                            word-break: break-all;
+                            -webkit-box-orient: vertical;
+                            -webkit-line-clamp: 2;
+                            overflow: hidden;
+                            color: #999999;
+
+                            &.last {
+                                width: 60%;
+                                float: left;
+                            }
+                        }
+
+                        .te-copy {
+                            width: 40%;
+                            float: right;
+                            font-size: $font-size-24;
+                            padding-top: 10rpx;
+
+                            .clipboard {
+                                width: 84rpx;
+                                height: 36rpx;
+                                background: #4688fa;
+                                text-align: center;
+                                font-size: $font-size-24;
+                                color: #ffffff;
+                                border-radius: 18rpx;
+                                line-height: 36rpx;
+                                display: inline-block;
+                            }
+                        }
+
+                        &.th {
+                            display: flex;
+                            height: 80rpx;
+                            align-items: center;
+                            line-height: 80rpx;
+                            font-size: 26rpx;
+                            color: #666;
+                        }
+
+                        &:nth-child(1) {
+                            width: 25%;
+                            border-right: 1px solid #e1e1e1;
+                        }
+
+                        &:nth-child(2) {
+                            width: 35%;
+                            border-right: 1px solid #e1e1e1;
+                        }
+
+                        &:nth-child(3) {
+                            width: 40%;
+                        }
+                    }
+                }
+            }
+
+            .qualificationImg-image {
+                width: 100%;
+                height: 856rpx;
+                display: block;
+            }
+        }
+
+        .product-rich-text-none {
+            box-sizing: border-box;
+            padding: 0 24rpx;
+            text-align: left;
+            font-size: 24rpx;
+            color: #999999;
+            line-height: 60rpx;
+
+            &.bold {
+                font-weight: bold;
+                color: #333333;
+            }
+        }
+
+        .content-none {
+            width: 100%;
+            height: 80rpx;
+            line-height: 80rpx;
+            text-align: left;
+            font-size: $font-size-26;
+            color: #999999;
+            box-sizing: border-box;
+            padding: 0 24rpx;
+        }
+
+        .title {
+            width: 100%;
+            box-sizing: border-box;
+            padding: 0 24rpx;
+
+            .title-tab {
+                width: 100%;
+                height: 100rpx;
+                background: #fff;
+                z-index: 10;
+                font-size: $font-size-30;
+                text-align: left;
+                color: $text-color;
+                line-height: 100rpx;
+                font-weight: 600;
+            }
+
+            .title-msg {
+                width: 100%;
+                height: 236rpx;
+                padding: 18rpx;
+                background-color: rgba(225, 86, 22, 0.1);
+                color: $color-system;
+                box-sizing: border-box;
+                margin-bottom: 30rpx;
+
+                .tit {
+                    line-height: 46rpx;
+                    font-size: $font-size-24;
+                    text-align: left;
+                }
+
+                .txt {
+                    line-height: 38rpx;
+                    font-size: $font-size-20;
+                    text-align: justify;
+                }
+            }
+        }
+
+        .content {
+            width: 100%;
+            background-color: #ffffff;
+        }
+    }
+
+    .isLower {
+        width: 100%;
+        height: 116rpx;
+        line-height: 116rpx;
+        text-align: center;
+        color: #000000;
+        font-size: $font-size-32;
+        font-weight: bold;
+    }
+
+    .bottom-btn {
+        width: 100%;
+        height: 100rpx;
+        position: fixed;
+        bottom: 0;
+        left: 0;
+        background: #ffffff;
+        z-index: 99;
+
+        .bottom-le {
+            width: 300rpx;
+            height: 100rpx;
+            padding: 10rpx 20rpx 10rpx 0;
+            float: left;
+            box-sizing: border-box;
+
+            .item-bt {
+                width: 80rpx;
+                height: 100%;
+                margin-right: 15rpx;
+                display: flex;
+                float: left;
+                flex-direction: column;
+                align-items: center;
+                justify-content: center;
+                font-size: $font-size-22;
+                color: $text-color;
+                line-height: 34rpx;
+                position: relative;
+
+                .animation-num {
+                    font-size: $font-size-32;
+                    color: #ff2a2a;
+                    position: absolute;
+                    top: -12rpx;
+                    right: 4rpx;
+                    font-weight: bold;
+                }
+
+                .animation {
+                    animation: showAmnation 2.2s ease-in-out both;
+                }
+
+                .restion {
+                    animation: hideAmnation 1s ease-in-out both;
+                }
+
+                .icon-num {
+                    position: absolute;
+                    right: -12rpx;
+                    top: -5rpx;
+                }
+
+                .icon-num.goleft {
+                    right: 2rpx;
+                }
+
+                &:last-child {
+                    margin-right: 0;
+                }
+
+                image {
+                    width: 44rpx;
+                    height: 44rpx;
+                }
+
+                button.contact-btn {
+                    width: 100%;
+                    height: 100%;
+                    margin: 0;
+                    padding: 0;
+                    display: flex;
+                    flex-direction: column;
+                    align-items: center;
+                    justify-content: center;
+                    box-sizing: border-box;
+                    font-size: $font-size-24;
+                    text-align: center;
+                    text-decoration: none;
+                    line-height: 34rpx;
+                    border-radius: 0;
+                    -webkit-tap-highlight-color: transparent;
+                    overflow: hidden;
+                    color: $text-color;
+                    background-color: #ffffff;
+                }
+            }
+        }
+
+        .bottom-ri {
+            width: 450rpx;
+            height: 100%;
+            float: right;
+            display: flex;
+            box-sizing: border-box;
+            padding: 13rpx 20rpx 13rpx 0;
+
+            .btn {
+                flex: 1;
+                width: 200rpx;
+                line-height: 80rpx;
+                text-align: center;
+                font-size: $font-size-24;
+                color: #ffffff;
+            }
+
+            .btn-cart {
+                background-color: #ffe6dc;
+                color: $color-system;
+                border-radius: 42rpx 0 0 42rpx;
+            }
+
+            .btn-cart.disabled {
+                background-color: #e1e1e1;
+                color: #ffffff;
+            }
+
+            .btn-bay {
+                background: linear-gradient(to right, #f28f31 0%, #ff5b00 100%);
+                border-radius: 0 42rpx 42rpx 0;
+            }
+
+            .btn-bay.disabled {
+                background: linear-gradient(135deg, rgba(242, 143, 49, 0.5) 0%, rgba(225, 86, 22, 0.5) 100%);
+            }
+        }
+    }
+
+    .uni-badge--small {
+        -webkit-transform: scale(0.8);
+        -ms-transform: scale(0.8);
+        transform: scale(0.8);
+        -webkit-transform-origin: center center;
+        -ms-transform-origin: center center;
+        transform-origin: center center;
+    }
+
+    .uni-badge {
+        font-family: 'Helvetica Neue', Helvetica, sans-serif;
+        -webkit-box-sizing: border-box;
+        box-sizing: border-box;
+        font-size: 12px;
+        line-height: 1;
+        display: inline-block;
+        padding: 3px 6px;
+        color: #333;
+        border-radius: 100px;
+        background-color: #f1f1f1;
+    }
+
+    .uni-badge-error {
+        color: #fff;
+        background-color: #dd524d;
+    }
+
+    .product-topnav {
+        width: 100%;
+        height: 174rpx;
+        box-sizing: border-box;
+        background: #ffffff;
+        z-index: 990;
+        position: fixed;
+        opacity: 1;
+        left: 0;
+
+        &.fixed {
+            animation: showFixedColor 0.1s ease-in-out both;
+        }
+
+        &.none {
+            animation: hideFixedColor 0.1s ease-in-out both;
+        }
+
+        .navbar {
+            width: 100%;
+            height: 60rpx;
+            box-sizing: border-box;
+            padding: 0 24rpx;
+            display: flex;
+
+            .nav-item {
+                display: flex;
+                flex: 1;
+                justify-content: center;
+                align-items: center;
+                height: 60rpx;
+                font-size: $font-size-28;
+                color: $text-color;
+                position: relative;
+                float: left;
+                position: relative;
+
+                .line {
+                    width: 60rpx;
+                    height: 2px;
+                    border-radius: 1px;
+                    background: #ffffff;
+                    position: absolute;
+                    bottom: 0;
+                    left: 50%;
+                    margin-left: -30rpx;
+                }
+
+                &.current {
+                    color: $color-system;
+
+                    .line {
+                        background: $color-system;
+                    }
+                }
+            }
+        }
+
+        .search-input {
+            width: 100%;
+            height: 114rpx;
+            padding: 24rpx;
+            box-sizing: border-box;
+
+            .gosearch-btn {
+                width: 100%;
+                height: 100%;
+                border-radius: 40rpx;
+                margin: 0 auto;
+                font-size: 26rpx;
+                line-height: 66rpx;
+                color: #b2b2b2;
+                position: relative;
+                box-sizing: border-box;
+                padding-left: 66rpx;
+
+                &.fixed {
+                    background: rgba(70, 70, 70, 0.1);
+                }
+
+                &.none {
+                    background: rgba(70, 70, 70, 0.1);
+                }
+
+                .search-icon {
+                    width: 66rpx;
+                    height: 66rpx;
+                    position: absolute;
+                    left: 0;
+                    top: 2rpx;
+                    text-align: center;
+                    line-height: 66rpx;
+
+                    .icon-iconfonticonfontsousuo1 {
+                        margin: 0 6rpx;
+                        font-size: $font-size-34;
+                        color: #b2b2b2;
+                        z-index: 10;
+                    }
+                }
+
+                .search-text {
+                    font-size: $font-size-24;
+                    line-height: 66rpx;
+                    color: #b2b2b2;
+                }
+            }
+        }
+    }
+
+    @keyframes showFixedColor {
+        0% {
+            background: rgba(255, 255, 255, 0);
+        }
+
+        50% {
+            background: rgba(255, 255, 255, 0.5);
+        }
+
+        100% {
+            background: rgba(255, 255, 255, 1);
+        }
+    }
+
+    @keyframes hideFixedColor {
+        0% {
+            background: rgba(255, 255, 255, 1);
+        }
+
+        50% {
+            background: rgba(255, 255, 255, 0.5);
+        }
+
+        100% {
+            background: rgba(255, 255, 255, 0);
+        }
+    }
+
+    /* 加入购物模态层*/
+    @keyframes showPopup {
+        0% {
+            opacity: 0;
+        }
+
+        100% {
+            opacity: 1;
+        }
+    }
+
+    @keyframes hidePopup {
+        0% {
+            opacity: 1;
+        }
+
+        100% {
+            opacity: 0;
+        }
+    }
+
+    @keyframes showLayer {
+        0% {
+            transform: translateY(0);
+        }
+
+        100% {
+            transform: translateY(-100%);
+        }
+    }
+
+    @keyframes hideLayer {
+        0% {
+            transform: translateY(-100%);
+        }
+
+        100% {
+            transform: translateY(0);
+        }
+    }
+
+    @keyframes showAmnation {
+        0% {
+            top: -12rpx;
+            opacity: 0;
+        }
+
+        50% {
+            top: -60rpx;
+            opacity: 1;
+        }
+
+        100% {
+            top: -100rpx;
+            opacity: 0;
+        }
+    }
+
+    @keyframes hideAmnation {
+        0% {
+            top: -100rpx;
+            opacity: 0;
+        }
+
+        100% {
+            top: -12rpx;
+            opacity: 0;
+        }
+    }
+
+    .tui-popup-box {
+        position: relative;
+        box-sizing: border-box;
+        min-height: 220rpx;
+        padding: 40rpx 24rpx 0 24rpx;
+
+        .tui-popup-close {
+            width: 90rpx;
+            height: 90rpx;
+            position: absolute;
+            right: 0;
+            top: 24rpx;
+            line-height: 90rpx;
+            text-align: center;
+            color: #b2b2b2;
+
+            .icon-iconfontguanbi {
+                font-size: $font-size-40;
+            }
+        }
+
+        .title {
+            font-size: $font-size-34;
+            color: $text-color;
+            line-height: 88rpx;
+            text-align: center;
+            float: left;
+            width: 100%;
+            height: 88rpx;
+            font-weight: bold;
+        }
+
+        .tui-popup-main {
+            width: 100%;
+            float: left;
+
+            &.coupon {
+                padding-bottom: 40rpx;
+
+                .coupon-empty {
+                    width: 100%;
+                    height: 600rpx;
+                    display: flex;
+                    align-items: center;
+                    justify-content: center;
+                    flex-direction: column;
+                    position: fixed;
+                    background: $bg-color;
+
+                    .empty-container-image {
+                        width: 150rpx;
+                        height: 150rpx;
+                        margin-bottom: 0;
+                        margin-top: 0;
+                    }
+
+                    .error-text {
+                        font-size: $font-size-28;
+                        color: #999999;
+                        line-height: 88rpx;
+                    }
+                }
+            }
+
+            .tui-popup-scroll {
+                width: 100%;
+                height: 600rpx;
+
+                .coupon-list {
+                    width: 100%;
+                    height: 200rpx;
+                    margin-top: 24rpx;
+                    box-sizing: border-box;
+                    background: url(https://static.caimei365.com/app/img/icon/icon-coupon-uesb@2x.png);
+                    background-size: cover;
+
+                    &:last-child {
+                        margin-bottom: 24rpx;
+                    }
+
+                    .list-cell-le {
+                        width: 224rpx;
+                        height: 100%;
+                        box-sizing: border-box;
+                        padding: 37rpx 0;
+                        float: left;
+
+                        .coupon-maxMoney {
+                            width: 100%;
+                            height: 78rpx;
+                            line-height: 78rpx;
+                            font-size: 56rpx;
+                            color: #ffffff;
+                            text-align: center;
+
+                            &.six {
+                                margin-top: 20rpx;
+                            }
+
+                            .small {
+                                font-size: $font-size-24;
+                            }
+                        }
+
+                        .coupon-minMoney {
+                            width: 100%;
+                            height: 33rpx;
+                            line-height: 33rpx;
+                            font-size: $font-size-24;
+                            color: #ffffff;
+                            text-align: center;
+                        }
+                    }
+
+                    .list-cell-ri {
+                        width: 478rpx;
+                        height: 100%;
+                        box-sizing: border-box;
+                        padding: 20rpx 24rpx 0 24rpx;
+                        float: right;
+
+                        .list-cell-top {
+                            width: 100%;
+                            height: 121rpx;
+                            float: left;
+                            border-bottom: 1px solid #e1e1e1;
+
+                            .list-cell-type {
+                                width: 286rpx;
+                                height: 100%;
+                                float: left;
+
+                                .list-cell-tags {
+                                    width: 100%;
+                                    height: 32rpx;
+                                    margin-bottom: 7rpx;
+
+                                    .tags {
+                                        display: inline-block;
+                                        padding: 0 10rpx;
+                                        height: 32rpx;
+                                        line-height: 32rpx;
+                                        background-color: #ffdcce;
+                                        color: #f94b4b;
+                                        font-size: $font-size-20;
+                                        border-radius: 8rpx;
+                                        text-align: center;
+                                        float: left;
+                                    }
+                                }
+
+                                .list-cell-texts {
+                                    width: 100%;
+                                    height: auto;
+                                    line-height: 35rpx;
+                                    text-overflow: ellipsis;
+                                    display: -webkit-box;
+                                    word-break: break-all;
+                                    -webkit-box-orient: vertical;
+                                    -webkit-line-clamp: 2;
+                                    overflow: hidden;
+                                    font-size: 26rpx;
+                                    color: #333333;
+                                }
+                            }
+
+                            .list-cell-btn {
+                                width: 128rpx;
+                                height: 100%;
+                                float: right;
+
+                                .icon-used {
+                                    width: 100%;
+                                    height: 100%;
+                                    box-sizing: border-box;
+                                    padding-top: 28rpx;
+
+                                    .icon-used-text {
+                                        width: 100%;
+                                        text-align: center;
+                                        line-height: 26rpx;
+                                        font-size: $font-size-20;
+                                        color: #f94b4b;
+                                    }
+
+                                    .icon-used-btn {
+                                        width: 128rpx;
+                                        height: 48rpx;
+                                        border-radius: 28rpx;
+                                        line-height: 48rpx;
+                                        font-size: $font-size-26;
+                                        text-align: center;
+
+                                        &.receive {
+                                            background-image: linear-gradient(270deg, #f94b4b 0%, #feb673 100%);
+                                            color: #ffffff;
+                                        }
+
+                                        &.make {
+                                            border: solid 1px #f94b4b;
+                                            color: #f94b4b;
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                        .list-cell-time {
+                            width: 100%;
+                            height: 58rpx;
+                            line-height: 58rpx;
+                            text-align: left;
+                            font-size: $font-size-20;
+                            color: #999999;
+                        }
+                    }
+                }
+
+                &.train {
+                    height: 240rpx;
+                }
+
+                .content-tr {
+                    width: 100%;
+                    min-height: 58rpx;
+                    line-height: 58rpx;
+                    display: flex;
+
+                    .content-td {
+                        display: flex;
+                        flex: 3;
+                        font-size: $font-size-26;
+                        color: #999999;
+                        line-height: 58rpx;
+                        text-align: left;
+                    }
+
+                    .content-th {
+                        display: flex;
+                        flex: 7;
+                        font-size: $font-size-26;
+                        color: #333333;
+                        line-height: 58rpx;
+                        text-align: left;
+                        padding-left: 10rpx;
+                    }
+                }
+            }
+        }
+
+        .tui-shopping-main {
+            width: 100%;
+
+            .layer-smimg {
+                width: 114rpx;
+                height: 114rpx;
+                float: left;
+                border-radius: 10rpx;
+                margin-right: 24rpx;
+
+                image {
+                    width: 114rpx;
+                    height: 114rpx;
+                    border-radius: 10rpx;
+                }
+            }
+
+            .layer-nunbox {
+                justify-content: space-between;
+                align-items: center;
+                width: 536rpx;
+                height: auto;
+                float: left;
+
+                .layer-nunbox-t {
+                    width: 100%;
+                    height: 44rpx;
+                    position: relative;
+                    display: flex;
+                    margin-bottom: 10rpx;
+
+                    .text {
+                        font-size: $font-size-24;
+                        line-height: 48rpx;
+                        color: #999999;
+                    }
+
+                    .layer-nunbox-text {
+                        line-height: 44rpx;
+                        font-size: $font-size-28;
+                    }
+
+                    .number-box {
+                        display: flex;
+                        justify-content: center;
+                        align-items: center;
+                        border: 2rpx solid #ffe6dc;
+                        border-radius: 30rpx;
+                        height: 48rpx;
+                        margin-left: 20rpx;
+
+                        .iconfont {
+                            font-size: $font-size-24;
+                            padding: 0 18rpx;
+                            color: #999999;
+                            text-align: center;
+                            line-height: 48rpx;
+                            font-weight: bold;
+                            background: #fef6f3;
+
+                            &.icon-jianhao {
+                                border-radius: 30rpx 0 0 30rpx;
+                            }
+
+                            &.icon-jiahao {
+                                border-radius: 0 30rpx 30rpx 0;
+                            }
+                        }
+
+                        .btn-input {
+                            width: 62rpx;
+                            height: 48rpx;
+                            line-height: 48rpx;
+                            background: #ffffff;
+                            border-radius: 4rpx;
+                            text-align: center;
+                            font-size: $font-size-28;
+                        }
+                    }
+
+                    .product-step {
+                        position: absolute;
+                        left: 45rpx;
+                        bottom: 0;
+                        height: 44rpx;
+                        background: #ffffff;
+                    }
+                }
+
+                .layer-nunbox-b {
+                    width: 100%;
+                    height: 44rpx;
+                    margin-top: 13rpx;
+                }
+
+                .text {
+                    line-height: 44rpx;
+                    font-size: $font-size-28;
+
+                    .p {
+                        color: #ff2a2a;
+                    }
+
+                    .p:first-child {
+                        margin-left: 30rpx;
+                    }
+
+                    .p.sm {
+                        font-size: $font-size-24;
+                    }
+                }
+            }
+        }
+    }
+
+    .tui-popup-btn {
+        width: 100%;
+        height: auto;
+        float: left;
+        margin-top: 24rpx;
+
+        .tui-button {
+            width: 100%;
+            height: 88rpx;
+            background: $btn-confirm;
+            line-height: 88rpx;
+            text-align: center;
+            color: #ffffff;
+            font-size: $font-size-28;
+            border-radius: 44rpx;
+        }
+    }
+
+    /*富文本样式*/
+    rich-text.p {
+        width: 702rpx !important;
+        padding: 0 24rpx;
+        text-align: justify;
+    }
+
+    rich-text.img {
+        width: 100%;
+        height: auto;
+    }
+</style>

+ 204 - 0
pages/h5/activity/activity-entry-list.vue

@@ -0,0 +1,204 @@
+<template>
+    <view class="container cashier">
+        <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading="true"
+            :loadingType="5" />
+        <template v-else>
+            <!-- <custom :navbar-data='nvabarData' /> -->
+          
+            <scroll-view scroll-y="true" class="container-banner"
+                :style="{ paddingTop:CustomBar + 180 +'px',paddingBottom: isIphoneX ? '68rpx' : '34rpx'}">
+                <view class="list-main">
+                    <view class="fiexd-undes" v-if="isReceived"></view>
+                    <view class="list" v-for="(shop,index) in list" :key="index">
+                        <view class="list-logo">
+                            <image class="list-logo-img" :src="shop.shopLogo" mode=""></image>
+                        </view>
+                        <view class="list-name">
+                            <text class="list-name-text">{{ shop.shopName }}</text>
+                        </view>
+                        <view class="list-area">
+                            <view class="list-area-num">
+                                {{ shop.showNum }}
+                            </view>
+                        </view>
+                        <view class="list-state acve" v-if="shop.shopSign === 1">已打卡</view>
+                        <view class="list-state none" v-else>未打卡</view>
+                    </view>
+                </view>
+                
+            </scroll-view>
+        </template>
+    </view>
+</template>
+
+<script>
+    export default {
+        data() {
+            return {
+                nvabarData: { //顶部自定义导航
+                    haveBack: false,
+                    haveHome: true,
+                    showCapsule: 1, // 是否显示左上角图标  1表示显示  0表示不显示,
+                    showSearch: 0,
+                    title: '', // 导航栏 中间的标题
+                    textLeft: this.$store.state.isIphone
+                },
+                isIphoneX: this.$store.state.isIphoneX,
+                CustomBar: this.CustomBar, // 顶部导航栏高度
+                params: {
+                    userId: '',
+                },
+                list: [],
+                isReceived:false
+            }
+        },
+        onLoad() {
+            this.initData()
+        },
+        methods: {
+            // 初始化
+            async initData() {
+                const userInfo = await this.$api.getStorage()
+                this.params.userId = userInfo.userId ? userInfo.userId : 0
+                this.userTicketSignList(this.params)
+            },
+            // 获取展台打卡列表
+            async userTicketSignList(params) {
+                try {
+                    const res = await this.UserService.userTicketSignList(params)
+                    this.list = res.data
+                    this.isReceived = this.list[0].giftFlag === 1 ? true : false
+                    this.skeletonShow = false
+                } catch (error) {
+                    console.log('获取展台列表信息异常~')
+                }
+            }
+        },
+        onShow() {
+
+        }
+    }
+</script>
+
+<style lang="scss">
+    page {
+        background-color: #3d68eb;
+        height: auto !important;
+    }
+    
+    .container-banner {
+        width: 100%;
+        height: auto;
+        background: url(https://admin.caimei365.com/userfiles/1/images/photo/2024/08/ziluo_bg.jpg) no-repeat;
+        background-size: contain;
+        box-sizing: border-box;
+        padding: 0 24rpx;
+        position: relative;
+        .list-main{
+            width: 100%;
+            height: auto;
+            position: relative;
+            margin-top: 30rpx;
+            .fiexd-undes{
+                width: 144rpx;
+                height: 128rpx;
+                background: url(https://static.caimei365.com/app/img/ziyalan/collect@2x.png);
+                background-size: cover;
+                position: absolute;
+                left: 50%;
+                margin-left: -50rpx;
+                top: -30rpx;
+                z-index: 9999;
+            }
+            .list {
+                width: 100%;
+                height: 200rpx;
+                background-color: #FFFFFF;
+                border-radius: 24rpx;
+                margin-bottom: 20rpx;
+                box-sizing: border-box;
+                padding: 20rpx;
+                display: flex;
+                align-items: center;
+                position: relative;
+            
+                .list-logo {
+                    display: flex;
+                    width: 160rpx;
+                    height: 160rpx;
+                    border-radius: 50%;
+                    background-color: #F7F7F7;
+                    overflow: hidden;
+                    border: 1px solid #e1e1e1;
+            
+                    .list-logo-img {
+                        width: 160rpx;
+                        height: 160rpx;
+                        display: block;
+                        border-radius: 50%;
+                    }
+                }
+            
+                .list-name {
+                    display: flex;
+                    flex: 1;
+                    justify-content: center;
+                    font-size: $font-size-26;
+            
+                    .list-name-text {
+                        display: inline-block;
+                        width: 180rpx;
+                        -o-text-overflow: ellipsis;
+                        text-overflow: ellipsis;
+                        display: -webkit-box;
+                        word-break: break-all;
+                        -webkit-box-orient: vertical;
+                        -webkit-line-clamp: 1;
+                        overflow: hidden;
+                        font-weight: 600;
+                    }
+                }
+            
+                .list-area {
+                    display: flex;
+                    flex: 1;
+                    justify-content: left;
+                    align-items: left;
+            
+                    .list-area-num {
+                        width: 70rpx;
+                        height: 70rpx;
+                        border-radius: 50%;
+                        background-color: #e10078;
+                        font-size: $font-size-30;
+                        font-weight: 600;
+                        color: #FFFFFF;
+                        text-align: center;
+                        line-height: 70rpx;
+                    }
+                }
+            
+                .list-state {
+                    position: absolute;
+                    height: 44rpx;
+                    border-radius: 22rpx;
+                    right: 20rpx;
+                    top: 20rpx;
+                    line-height: 44rpx;
+                    padding: 0 10rpx;
+                    font-size: $font-size-22;
+            
+                    &.none {
+                        background-color: #999999;
+                        color: #FFFFFF;
+                    }
+            
+                    &.acve {
+                        background-color: #e10078;
+                        color: #FFFFFF;
+                    }
+                }
+            }
+        }
+    }
+</style>

+ 474 - 0
pages/h5/activity/activity-entry.vue

@@ -0,0 +1,474 @@
+<template>
+	<view class="container cashier">
+        <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading="true" :loadingType="5" />
+        <template v-else>
+            <!-- <custom :navbar-data='nvabarData' /> -->
+            <view class="container-banner" :style="{ paddingTop:CustomBar + 115 +'px' }">
+                <view class="container-title">{{ voteTitle }}</view>
+                <view class="login-input">
+                	<input type="text" 
+                		   v-model="params.ticket"
+                		   maxlength="20" 
+                           disabled="true"
+                		   class="input"  
+                	/>
+                </view>
+                <view class="login-input">
+                	<input type="text" 
+                		   v-model="params.name"
+                		   maxlength="6" 
+                		   class="input" 
+                		   placeholder="您的姓名"
+                           :disabled="!isBundled"
+                	/>
+                </view>
+                <view class="login-input">
+                	<input type="text" 
+                		   v-model="params.mobile"
+                		   maxlength="11" 
+                		   class="input" 
+                		   placeholder="您的联系电话"
+                           :disabled="!isBundled"
+                	/>
+                </view>
+                <view class="login-input code" v-show="isBundled">
+                	<input type="text" 
+                		   v-model="params.smsCode"
+                		   maxlength="6" 
+                		   class="input code" 
+                		   placeholder="手机验证码"
+                	/>
+                    <view class="code-btn" :class="[isMobileDisabled ? 'disabled' : '']">
+                        <button
+                            class="code-button"
+                            type="button"
+                            @click.stop="getMobileCodeFn"
+                            :disabled="isMobileDisabled"
+                        >
+                            {{ mobileCodeText }}
+                        </button>
+                    </view>
+                </view>
+                <view class="login-input">
+                	<input type="text" 
+                		   v-model="params.idCard"
+                		   maxlength="20" 
+                		   class="input" 
+                		   placeholder="证件号码(身份证/港澳台通行证/护照)"
+                           :disabled="!isBundled"
+                	/>
+                </view>
+                <view class="login-input">
+                	<input type="text" 
+                		   v-model="params.work"
+                		   maxlength="10" 
+                		   class="input" 
+                		   placeholder="您的职业"
+                           :disabled="!isBundled"
+                	/>
+                </view>
+                <view class="login-btn"  v-show="isBundled" @click="handleEntry">激活门票</view>
+                <view class="login-text">注:</view>
+                <view class="login-text">1、门票绑定的证件号码是作为进入大会会场的凭证。</view>
+                <view class="login-text">2、到采美专区签到打卡,可领取超值礼包,更多惊喜和福利等你来解琐。</view>
+            </view>
+        </template>
+        <!-- 提示弹窗 -->
+        <tui-modal
+        	:show="modal"
+        	@click="handleClick"
+        	:content="contentModalText"
+        	:button="modalButton"
+        	color="#333"
+        	:size="32"
+        	shape="circle"
+        	:maskClosable="false"
+        />
+        <activity-model :show="isShowModel" @cancel="hideModel"/>
+	</view>
+</template>
+
+<script>
+    import { mapState, mapMutations } from 'vuex'
+    import authorize from '@/common/config/authorize.js'
+    import wxLogin from '@/common/config/wxLogin.js'
+    import activityModel from './components/activity-model.vue'
+	export default{
+        components:{
+            activityModel
+        },
+		data(){
+			return{
+                nvabarData: {		//顶部自定义导航
+                	haveBack:false,
+                	haveHome:true,
+                	showCapsule:1, // 是否显示左上角图标  1表示显示  0表示不显示,
+                	showSearch: 0,
+                	title: '',  // 导航栏 中间的标题
+                	textLeft:this.$store.state.isIphone
+                },
+				isIphoneX:this.$store.state.isIphoneX,
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+                skeletonShow:true,
+                isShowModel:false,
+				params:{
+                    unionId:'',
+                    name:'',
+                    idCard:'',
+                    ticket:'',
+                    mobile:'',
+                    smsCode:'',
+                    work:'',
+                    userId:''
+                },
+                voteTitle:'',
+                modal: false,
+                contentModalText: '', //操作文字提示语句
+                modalButton: [
+                    {
+                    	text: '联系客服',
+                    	type: 'gray',
+                    	plain: true //是否空心
+                    },
+                	{
+                		text: '确认激活',
+                		customStyle: {
+                			color: '#fff',
+                			bgColor: '#e10078'
+                		},
+                		plain: false
+                	}
+                ],
+                modalType:0,
+                isMobileDisabled: false, //手机验证码按钮控制
+                mobilCount: '', //倒计时
+                mobileCodeText: '获取验证码',
+                mobilTime: null,
+                isBundled:true
+			}
+		},
+		onLoad(option) {
+            wxLogin.wxLoginAuthorize()
+            setTimeout(()=>{
+                this.initData(option)
+            },2000)
+		},
+        computed: {
+            ...mapState(['hasLogin', 'userInfo', ])
+        },
+		methods:{
+            // 初始化
+            async initData(option) {
+                this.$util.msg('活动已结束', 2000)
+                setTimeout(() => {
+                    this.$api.switchTabTo('/pages/tabBar/home/index')
+                }, 2000)
+            // 	const userInfo = await this.$api.getStorage()
+            //     this.params.ticket = option.ticket
+            //     this.voteTitle = option.voteType*1 === 1 ? '大会通票' : '学术套票'
+            //     console.log('userInfo',userInfo)
+            //     if(userInfo.userId){
+            //         this.params.userId = userInfo.userId
+            //         this.contentModalText = `您的采美帐号资料为【${userInfo.name}】,请确认并激活!`
+            //     }
+            //     this.getTicketDetails({ ticket: option.ticket ,userId: this.params.userId})
+            },
+            // 查询门票信息
+            async getTicketDetails(params){
+            	try{
+            		const res = await this.UserService.getTicketDetails(params)
+                    const data = res.data
+                    if(data && data.ticketFlag === 1){
+                        this.modalType = 1
+                        this.contentModalText = '您已激活过门票,请勿重复激活!'
+                        this.modalButton = [
+                        	{
+                        		text: '知道了',
+                        		customStyle: {
+                        			color: '#fff',
+                        			bgColor: '#e10078'
+                        		},
+                        		plain: false
+                        	}
+                        ]
+                        this.modal = true
+                    }else{
+                        if(data.userId){
+                            this.isBundled = false
+                            this.params = {...this.params ,...data}
+                            this.params.idCard = data.idCard.substring(0, 4) + '**********' + data.idCard.substring(data.idCard.length - 4)
+                            this.params.name = this.exceptSurname(data.name)
+                            this.params.mobile = this.excePhoneNumber(data.mobile)
+                        }else{
+                            this.isBundled = true
+                        }
+                        this.skeletonShow = false
+                    }
+            	}catch(error){
+                    console.log('获取门票详情异常~')
+                    
+            	}
+            },
+            //点击绑定
+            handleEntry(){
+                if(!this.params.name){
+                    this.$util.msg('请输入您的姓名~', 2000)
+                    return
+                }
+                if(!this.params.idCard){
+                    this.$util.msg('请输入您的证件号码~', 2000)
+                    return
+                }
+                if(!this.params.mobile){
+                    this.$util.msg('请输入您的联系电话~', 2000)
+                    return
+                }
+                if (this.params.smsCode == '') {
+                    this.$util.msg('请输入手机验证码', 2000)
+                    return
+                }
+                if(!this.params.work){
+                    this.$util.msg('请输入您的职业~', 2000)
+                    return
+                }
+                
+                if(this.hasLogin){
+                    this.modal = true
+                }else{
+                    this.params.unionId = uni.getStorageSync('unionId')
+                    this.userTicketCheck({ mobile:this.params.mobile, smsCode:this.params.smsCode })
+                }
+            },         
+            // 校验
+			async userTicketCheck(params){
+				try{
+					const res = await this.UserService.userTicketCheck(params)
+                    if(res.data && res.data.userId){
+                        this.params.userId = res.data.userId
+                        this.contentModalText = `您的采美帐号资料为【${userInfo.name}】,请确认并激活!`
+                        this.modal = true
+                    }else{
+                        this.userTicketBind(this.params)
+                    }
+				}catch(error){
+					this.$util.msg(error.msg,2000)
+				}
+			},
+            //确认操作
+            handleClick(e) {
+                if(this.modalType === 0){
+                    if (e.index == 1) {
+                        if(this.modalType === 0){
+                            this.userTicketBind(this.params)
+                        }else{
+                            this.$api.navigateTo('/pages/h5/activity/activity-entry-list')  
+                        }
+                    }else{
+                        // 拨号
+                        uni.makePhoneCall({
+                            phoneNumber: '15338851365' //仅为示例
+                        })
+                    }
+                }else{
+                    this.$api.navigateTo('/pages/h5/activity/activity-entry-list')  
+                }
+            	this.modal = false
+            },
+            // 绑定门票
+			async userTicketBind(params){
+				try{
+					await this.UserService.userTicketBind(params)
+                    wxLogin.wxLoginAuthorize()
+                    this.isShowModel = true
+                    this.params.idCard = ''
+				}catch(error){
+					this.$util.msg(error.msg,2000)
+				}
+			},
+            getMobileCodeFn() {
+                if (this.params.mobile == '') {
+                    this.$util.msg('请输入手机号', 2000)
+                    return
+                }
+                if (!this.$reg.isMobile(this.params.mobile)) {
+                    this.$util.msg('请输入正确的手机号', 2000)
+                    return
+                }
+                let params = {
+                    mobile: this.params.mobile,
+                    isCheckCaptcha: 1,
+                    activateCodeType: 16,
+                    platformType: 2
+                }
+                this.isMobileDisabled = true
+                this.getMobileCode(params)
+            },
+            async getMobileCode(params){
+                try{
+                    const TIME_COUNT = 60
+                    await this.PublicService.GetRegisterMobileCode(params)
+                    this.$util.msg('验证短信已发送', 2000)
+                    if (!this.mobilTime) {
+                       this.mobilCount = TIME_COUNT
+                       this.isMobileDisabled = true
+                       this.mobilTime = setInterval(() => {
+                           if (this.mobilCount > 1 && this.mobilCount <= TIME_COUNT) {
+                               this.mobilCount--
+                               this.mobileCodeText = this.mobilCount + '秒后重发'
+                           } else {
+                               this.isMobileDisabled = false
+                               clearInterval(this.mobilTime)
+                               this.mobilTime = null
+                               this.mobileCodeText = '获取验证码'
+                           }
+                       }, 1000)
+                    } 
+                }catch(error){
+                   this.$util.msg('获取短信验证码异常~', 2000)
+                   this.isMobileDisabled = false
+                }
+            },
+            hideModel(){
+                this.isShowModel = false
+                this.getTicketDetails({ticket:this.params.ticket})
+            },
+            exceptSurname(fullName) {  
+              const parts = fullName.split('')  
+              if (parts.length > 1) {  
+                // 只替换名字的第一个字符  
+                parts[0] = '*' + parts[0].slice(1)  
+                return parts.join('')  
+              } else {  
+                // 如果只有一个名字(或姓),则替换第一个字符  
+                return '*' + fullName.slice(1)  
+              }  
+            },
+            excePhoneNumber(phoneNumber) {  
+                // 假设phoneNumber是一个有效的手机号字符串  
+                // 保留手机号的前三位和后四位,中间用星号(*)替换  
+                // 检查手机号长度,确保是11位(中国大陆手机号标准)  
+                if (phoneNumber.length === 11) {  
+                  // 提取前三位和后四位  
+                  const prefix = phoneNumber.substring(0, 3)  
+                  const suffix = phoneNumber.substring(7)  
+                  // 生成中间部分的星号(*),长度为原手机号长度减去前后保留的长度  
+                  const middle = '*'.repeat(phoneNumber.length - prefix.length - suffix.length)  
+                  // 拼接脱敏后的手机号  
+                  return prefix + middle + suffix  
+                } else {  
+                  // 如果手机号长度不是11位,可以返回原始手机号或进行其他处理  
+                  console.warn('手机号长度不是11位,可能不是有效的手机号')  
+                  return phoneNumber // 或者返回 null, '' 等,根据实际需求  
+                }  
+              }  
+		},
+		onShow() {
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+        background-color: #3d68eb;
+		height: auto !important;
+	}
+    .container-banner{
+        width: 100%;
+        height: 1142rpx;
+        background: url(https://static.caimei365.com/app/img/bg/ziluo_bg.jpg) no-repeat;
+        background-size: contain;
+        box-sizing: border-box;
+        padding: 0 110rpx;
+        .container-title{
+            height: 120rpx;
+            line-height: 120rpx;
+            font-size: $font-size-48;
+            font-weight: 600;
+            text-align: center;
+            color: #FFFFFF;
+        }
+        .login-title{
+            font-size: $font-size-28;
+            line-height: 58rpx;
+            color: #ffffff;
+        }
+        .login-input{
+        	width: 100%;
+        	height: 88rpx;
+        	padding:0 24rpx;
+        	margin: 0 auto;
+        	margin-bottom: 40rpx;
+        	background: #FFFFFF;
+            box-sizing: border-box;
+            border-radius: 50rpx;
+            position: relative;
+            &.code{
+                padding-right: 180rpx;
+            }
+        	.input{
+        		width: 100%;
+        		height: 100%;
+        		background: #FFFFFF;
+        		font-size: $font-size-28;
+        		line-height: 88rpx;
+        		color: #333333;
+                border-radius: 50rpx;
+                 &.code{
+                     width: 300rpx;
+                 }
+        	}
+            .code-btn{
+                width: 180rpx;
+                height: 64rpx;
+                float: left;
+                background: #e10078;
+                padding: 0;
+                border-radius: 32rpx;
+                position: absolute;
+                right: 10rpx;
+                top:10rpx;
+                .code-button {
+                    width: 180rpx;
+                    height: 64rpx;
+                    line-height: 64rpx;
+                    padding: 0;
+                    color: #ffffff;
+                    background: #e10078;
+                    text-align: center;
+                    border-radius: 32rpx;
+                    font-size: $font-size-24;
+                }
+                &.disabled {
+                    background: #f7f7f7;
+                    .code-button {
+                        background: #f7f7f7;
+                        color: #999999;
+                        font-size: 24rpx;
+                    }
+                }
+            }
+        }
+        .login-btn {
+        	width: 100%;
+        	height: 88rpx;
+        	font-size: $font-size-30;
+            font-weight: 600;
+            letter-spacing: 3rpx;
+        	line-height: 88rpx;
+        	color: #ffffff;
+        	margin: 0 auto;
+        	text-align: center;
+        	background-color: #e10078;
+        	border-radius: 50rpx;
+            margin-bottom: 10rpx;
+        }
+        .login-text{
+            font-size: $font-size-22;
+            line-height: 36rpx;
+            color: #ffffff;
+            margin-top: 10rpx;
+        }
+    }
+	
+</style>

+ 9 - 9
pages/h5/activity/activity-floorMore.vue

@@ -82,15 +82,15 @@
 <script>
 	import { mapState,mapMutations} from 'vuex'
 	//引入产品模板
-	import productA from '@/components/cm-module/pageFloorTemplate/templateA.vue'
-	import productB from '@/components/cm-module/pageFloorTemplate/templateB.vue'
-	import productC from '@/components/cm-module/pageFloorTemplate/templateC.vue'
-	import productD from '@/components/cm-module/pageFloorTemplate/templateD.vue'
-	import productE from '@/components/cm-module/pageFloorTemplate/templateE.vue'
-	import productG from '@/components/cm-module/pageFloorTemplate/templateG.vue'
-	import productI from '@/components/cm-module/pageFloorTemplate/templateI.vue'
-	import productJ from '@/components/cm-module/pageFloorTemplate/templateJ.vue'
-	import productK from '@/components/cm-module/pageFloorTemplate/templateK.vue'
+	import productA from './components/template-floor/templateA.vue'
+	import productB from './components/template-floor/templateB.vue'
+	import productC from './components/template-floor/templateC.vue'
+	import productD from './components/template-floor/templateD.vue'
+	import productE from './components/template-floor/templateE.vue'
+	import productG from './components/template-floor/templateG.vue'
+	import productI from './components/template-floor/templateI.vue'
+	import productJ from './components/template-floor/templateJ.vue'
+	import productK from './components/template-floor/templateK.vue'
 	//引入图片模板
 	import pictureD from './components/template-picture/templateD.vue'
 	import pictureF from './components/template-picture/templateF.vue'

+ 19 - 13
pages/h5/activity/activity-list.vue

@@ -12,23 +12,18 @@
 				</view>
 			</view> 
 			<!--加载loadding-->
-			<tui-loadmore :visible="loadding" :index="3" type="black"></tui-loadmore>
-			<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text='nomoreText'></tui-nomore>
+			<tui-loadmore :visible="loadding" :index="3" type="black" />
+			<tui-nomore :visible="!pullUpOn" :backgroundColor="'#ffffff'" :text='nomoreText' />
 			<!--加载loadding-->
 		</scroll-view>
 	</view>
 </template>
 
 <script>
-	import tuiLoadmore from "@/components/tui-components/loadmore/loadmore"
-	import tuiNomore from "@/components/tui-components/nomore/nomore"
 	import cmsMixins from '@/mixins/cmsMixins.js'
 	export default{
 		mixins: [cmsMixins],
-		components:{
-			tuiLoadmore,
-			tuiNomore,
-		},
+		components:{},
 	    data() {
 	        return {
 				isEmpty:false,
@@ -59,8 +54,8 @@
 						this.isEmpty = false
 						this.hasNextPage = responseData.hasNextPage
 						this.list = responseData.list
-						this.pullFlag = false;
-						setTimeout(()=>{this.pullFlag = true;},500)
+						this.pullFlag = false
+						setTimeout(()=>{this.pullFlag = true},500)
 						if(this.hasNextPage){
 							this.pullUpOn = false
 							this.nomoreText = '上拉显示更多'
@@ -83,8 +78,8 @@
 					if(responseData.list&&responseData.list.length > 0){
 						this.hasNextPage = response.data.hasNextPage
 						this.list = this.list.concat(responseData.list) 
-						this.pullFlag = false;// 防上拉暴滑
-						setTimeout(()=>{this.pullFlag = true;},500)
+						this.pullFlag = false// 防上拉暴滑
+						setTimeout(()=>{this.pullFlag = true},500)
 						if(this.hasNextPage){
 							this.pullUpOn = false
 							this.nomoreText = '上拉显示更多'
@@ -122,7 +117,18 @@
 			this.listQuery.pageNum = 1
 			this.GetPromotionsrList()
 			uni.stopPullDownRefresh()
-		},
+		},
+        onShareAppMessage(res) {
+        	//分享转发
+        	if (res.from === 'button') {
+        		// 来自页面内转发按钮
+        	}
+        	return {
+        		title: '最近优惠~',
+        		path: 'pages/h5/activity/activity-list',
+        		imageUrl: 'https://static.caimei365.com/app/img/bg/min-banner.jpg'
+        	}
+        },
 		onShow() {
 			this.GetPromotionsrList()
 		}

+ 174 - 0
pages/h5/activity/activity-sign.vue

@@ -0,0 +1,174 @@
+<template>
+	<view class="container cashier">
+        <tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading="true" :loadingType="5" />
+        <template v-else>
+            <!-- <custom :navbar-data='nvabarData' /> -->
+            <view class="container-banner" :style="{paddingTop:CustomBar + 200 +'px'}">
+                <view class="login-input">
+                    <image  class="login-logo" :src="shopInfo.shopLogo" mode=""></image>
+                </view>
+                <view class="login-title">展位:{{ shopInfo.showNum }}</view>
+                <view class="login-title">参展商:{{ shopInfo.shopName }}</view>
+                <view class="login-btn"  @click="handleEntry">签到打卡</view>
+                <view class="login-text">
+                    注:到采美专区签到打卡,可领取超值礼包,更多惊喜和福利等你来解琐。
+                </view>
+            </view>
+        </template>
+	</view>
+</template>
+
+<script>
+    import { mapState, mapMutations } from 'vuex'
+    import authorize from '@/common/config/authorize.js'
+    import wxLogin from '@/common/config/wxLogin.js'
+	export default{
+		data(){
+			return{
+                nvabarData: {		//顶部自定义导航
+                	haveBack:false,
+                	haveHome:true,
+                	showCapsule:1, // 是否显示左上角图标  1表示显示  0表示不显示,
+                	showSearch: 0,
+                	title: '',  // 导航栏 中间的标题
+                	textLeft:this.$store.state.isIphone
+                },
+				isIphoneX:this.$store.state.isIphoneX,
+				CustomBar:this.CustomBar,// 顶部导航栏高度
+                skeletonShow:true,
+				params:{
+                    userId:'',
+                    shopId:''
+                },
+                shopInfo:{}
+			}
+		},
+		onLoad(option) {
+           this.initData(option)
+		},
+        computed: {
+            ...mapState(['hasLogin', 'userInfo', ])
+        },
+		methods:{
+            // 初始化
+            async initData(option) {
+                this.$util.msg('活动已结束', 2000)
+                setTimeout(() => {
+                    this.$api.switchTabTo('/pages/tabBar/home/index')
+                }, 2000)
+            	// const userInfo = await this.$api.getStorage()
+                //    this.params.shopId = option.id
+                //    this.params.userId = userInfo.userId ? userInfo.userId : 0
+                //    this.userShopDetail(this.params)
+            },
+            // 获取展台信息
+            async userShopDetail(params){
+            	try{
+            		const res = await this.UserService.userShopDetail(params)
+                    this.shopInfo = res.data
+                    if(this.shopInfo.shopSign === 1){
+                        this.$api.navigateTo('/pages/h5/activity/activity-entry-list')  
+                    }else{
+                        this.skeletonShow = false
+                    }
+            	}catch(error){
+            		console.log('获取展台信息异常~')
+            	}
+            },
+            handleEntry(){
+                this.$util.msg('活动已结束', 2000)
+                setTimeout(() => {
+                    this.$api.switchTabTo('/pages/tabBar/home/index')
+                }, 2000)
+                // if(!this.hasLogin){
+                //     this.$util.msg('您还未登录,请先登录!', 2000)
+                //     setTimeout(() => {
+                //         const pages = getCurrentPages()
+                //         const page = pages[pages.length - 1]
+                //         uni.setStorageSync('LOGIN_REDIRECT_URL', page.$page.fullPath)
+                //         this.$api.navigateTo('/pages/login/login')
+                //     }, 2000)
+                //     return
+                // }
+                // this.userTicketSign(this.params)
+            },
+			// 签到打卡
+			async userTicketSign(params){
+				try{
+					await this.UserService.userTicketSign(params)
+			        this.$util.msg('打卡成功', 2000, true, 'success')
+			        this.params.idCard = ''
+			        setTimeout(()=>{
+			            this.$api.navigateTo('/pages/h5/activity/activity-entry-list')  
+			        },2000)
+				}catch(error){
+					this.$util.msg(error.msg,2000)
+				}
+			}
+		},
+		onShow() {
+			
+		}
+	}
+</script>
+
+<style lang="scss">
+	page{
+        background-color: #3d68eb;
+		height: auto !important;
+	}
+    .container-banner{
+        width: 100%;
+        height: 1142rpx;
+        background: url(https://admin.caimei365.com/userfiles/1/images/photo/2024/08/ziluo_bg.jpg) no-repeat;
+        background-size: contain;
+        box-sizing: border-box;
+        padding: 0 100rpx;
+        .login-title{
+            font-size: $font-size-44;
+            line-height: 88rpx;
+            color: #ffffff;
+            text-align: center;
+        }
+        .login-input{
+        	width: 100%;
+        	height: auto;
+        	padding:0 24rpx;
+        	margin: 0 auto;
+        	margin-bottom: 30rpx;
+            box-sizing: border-box;
+            border-radius: 50rpx;
+            display: flex;
+            flex-direction: column;
+            justify-content: center;
+            align-items: center;
+        	.login-logo{
+                width: 200rpx;
+                height: 200rpx;
+                display: block;
+                border-radius: 50%;
+                border: 1px solid #e10078;
+            }
+        }
+        .login-btn {
+        	width: 300rpx;
+        	height: 88rpx;
+        	font-size: $font-size-28;
+        	line-height: 88rpx;
+        	color: #ffffff;
+        	margin: 0 auto;
+        	margin-bottom: 24rpx;
+        	text-align: center;
+        	background-color: #e10078;
+        	border-radius: 50rpx;
+            margin-top: 120rpx;
+        }
+        .login-text{
+            font-size: $font-size-26;
+            line-height: 48rpx;
+            color: #ffffff;
+            margin-top: 200rpx;
+        }
+    }
+	
+</style>

+ 11 - 15
pages/h5/activity/components/active-floor.vue

@@ -109,17 +109,17 @@
 
 <script>
 //引入产品模板
-import productA from '@/components/cm-module/pageTemplate/templateA.vue'
-import productB from '@/components/cm-module/pageTemplate/templateB.vue'
-import productC from '@/components/cm-module/pageTemplate/templateC.vue'
-import productD from '@/components/cm-module/pageTemplate/templateD.vue'
-import productE from '@/components/cm-module/pageTemplate/templateE.vue'
-import productF from '@/components/cm-module/pageTemplate/templateF.vue'
-import productG from '@/components/cm-module/pageTemplate/templateG.vue'
-import productH from '@/components/cm-module/pageTemplate/templateH.vue'
-import productI from '@/components/cm-module/pageTemplate/templateI.vue'
-import productJ from '@/components/cm-module/pageTemplate/templateJ.vue'
-import productK from '@/components/cm-module/pageTemplate/templateK.vue'
+import productA from './template-page/templateA.vue'
+import productB from './template-page/templateB.vue'
+import productC from './template-page/templateC.vue'
+import productD from './template-page/templateD.vue'
+import productE from './template-page/templateE.vue'
+import productF from './template-page/templateF.vue'
+import productG from './template-page/templateG.vue'
+import productH from './template-page/templateH.vue'
+import productI from './template-page/templateI.vue'
+import productJ from './template-page/templateJ.vue'
+import productK from './template-page/templateK.vue'
 //引入图片模板
 import pictureA from './template-picture/templateA.vue'
 import pictureB from './template-picture/templateB.vue'
@@ -127,8 +127,6 @@ import pictureC from './template-picture/templateC.vue'
 import pictureD from './template-picture/templateD.vue'
 import pictureE from './template-picture/templateE.vue'
 import pictureF from './template-picture/templateF.vue'
-import pictureG from './template-picture/templateG.vue'
-import pictureH from './template-picture/templateH.vue'
 //引入图文模板
 import articleA from './template-article/templateA.vue'
 import articleB from './template-article/templateB.vue'
@@ -164,8 +162,6 @@ export default {
         pictureD,
         pictureE,
         pictureF,
-        pictureG,
-        pictureH,
         articleA,
         articleB,
         articleC,

+ 224 - 0
pages/h5/activity/components/activity-model.vue

@@ -0,0 +1,224 @@
+ <template>
+	<view>
+		<view class="tui-alert-class tui-alert-box" :class="[show?'tui-alert-show':'tui-alert-hide']"  @touchmove.stop.prevent="discard">
+            <view class="tui-alert-content clearfix">
+                <view class="tui-alert-content-text">恭喜您!</view>
+                <view class="tui-alert-content-bean">成功激活紫亚兰大会门票!</view>
+                <view class="tui-alert-content-bean">到采美专区签到打卡,可领取超值礼包,更多惊喜和福利等你来解琐。</view>
+                <view class="tui-alert-content-tips">
+                    <view class="tips" @click.stop="handleClickCancel">知道了</view>
+                </view>
+            </view>
+			<text class="iconfont icon-2guanbi" @click.stop="handleClickCancel"></text>
+		</view>
+	</view> 
+</template>
+
+<script>
+	export default {
+		name:'tuiAlert',
+		props: {
+			//控制显示
+			show: {
+				type: Boolean,
+				default: false
+			},
+			//提示信息字体大小
+			size: {
+				type: Number,
+				default: 30
+			},
+			//提示信息字体颜色
+			color: {
+				type: String,
+				default: '#333'
+			},
+			//按钮字体颜色
+			btnColor: {
+				type: String,
+				default: '#EB0909'
+			},
+			btnText:{
+				type: String,
+				default: ''
+			},
+			beansType:{//根据类型设置背景图片:1注册机构,2升级资质机构,3个人机构修改资料,4资质机构修改资料,5下单成功,6线上支付成功,7确认收货成功
+				type: Number,
+				default: 1
+			},
+			beanNumber:{//采美豆显示数量
+				type:Number,
+				default:100
+			}
+		},
+		data() {
+			return{
+				bgImagePath:'https://static.caimei365.com/app/img/icon/bean-icon-2@2x.png',
+			}
+		},
+		created() {
+			this.handInitType(this.beansType)
+		},
+		methods: {
+			handInitType(type){
+				this.bgImagePath = `https://static.caimei365.com/app/img/icon/bean-icon-${type}@2x.png`
+			},
+			handleClick(e) {
+				console.log(e)
+				if (!this.show) return
+				this.$emit('click',false)
+			},
+			handleClickCancel() {
+				this.$emit('cancel',false)
+			},
+			discard(){
+				//丢弃
+			}
+		}
+	}
+</script>
+
+<style lang="scss">
+	.tui-alert-box {
+		width: 100%;
+		height: 100%;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		flex-direction: column;
+		position: fixed;
+		left: 0;
+		top: 100%;
+		opacity: 0;
+		background: rgba(51,51,51,0.7);
+		z-index: 99999;
+	}
+	.tui-alert-show {
+		top: 0;
+		opacity: 1;
+		// animation:rundtop 0.5s;
+	}
+	.tui-alert-hide{
+		top: 100%;
+		opacity: 0;
+		// animation:rundbottom 0.5s;
+	}
+	.tui-alert-image{
+		width: 626rpx;
+		height: 532rpx;
+		position: absolute;
+		top: 0;
+		left: 0;
+		bottom: 0;
+		right: 0;
+		margin: auto;
+		image{
+			width: 626rpx;
+			height: 532rpx;
+			display: block;
+		}
+	}
+	.tui-alert-content{
+		width: 580rpx;
+		height: 550rpx;
+        border-radius: 40rpx;
+		position: absolute;
+		top: 0;
+		left: 0;
+		bottom: 0;
+		right: 0;
+		margin: auto;
+		box-sizing: border-box;
+        background-color: #FFFFFF;
+        padding: 40rpx;
+		.tui-alert-content-text{
+			height: 100rpx;
+			line-height: 100rpx;
+			text-align: center;
+			width: 100%;
+			font-size: $font-size-36;
+			color: #333333;
+            font-weight: 600;
+            float: left;
+            letter-spacing: 2rpx;
+		}
+		.tui-alert-content-bean{
+			height: auto;
+			line-height: 60rpx;
+			text-align: center;
+			width: 100%;
+			font-size: $font-size-30;
+			color: #e10078;
+            float: left;
+		}
+		.tui-alert-content-tips{
+			width: 100%;
+			height: 66rpx;
+			line-height: 66rpx;
+			margin-top: 60rpx;
+			box-sizing: border-box;
+            float: left;
+			.tips{
+				width: 240rpx;
+				height: 70rpx;
+				background-color: #e10078;
+				border-radius: 36rpx;
+				line-height: 70rpx;
+				font-size: $font-size-30;
+				color: #FFFFFF;
+				text-align: center;
+                margin: 0 auto;
+			}
+		}
+	}
+	.icon-2guanbi{
+		display: block;
+		width: 100rpx;
+		height: 100rpx;
+		line-height: 100rpx;
+		text-align: center;
+		color: #FFFFFF;
+		position: absolute;
+		bottom: 18%;
+		left: 50%;
+		font-size: 58rpx;
+		margin-left: -50rpx;
+	}
+	.tui-alert-mask-show {
+		visibility: visible;
+		opacity: 1;
+	}
+	.tui-alert-btn {
+		width: 100%;
+		height: 90rpx;
+		display: flex;
+		align-items: center;
+		justify-content: center;
+		background-color: #fff;
+		box-sizing: border-box;
+		position: relative;
+		font-size: 32rpx;
+		line-height: 32rpx;
+	}
+	.tui-alert-btn-hover {
+		background-color: #f7f7f7;
+	}
+	.tui-alert-btn::before {
+		width: 100%;
+		content: "";
+		position: absolute;
+		border-top: 1rpx solid #E0E0E0;
+		-webkit-transform: scaleY(0.5);
+		transform: scaleY(0.5);
+		left: 0;
+		top: 0;
+	}
+	@keyframes rundtop{
+		0%{top: 100%;opacity: 0;}
+		100%{top:0;opacity: 1;}
+	}
+	@keyframes rundbottom{
+		0%{top: 0;opacity: 1;}
+		100%{top:100%;opacity: 0;}
+	}
+</style>

+ 298 - 0
pages/h5/activity/components/template-floor/templateA.vue

@@ -0,0 +1,298 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateA',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 314 - 0
pages/h5/activity/components/template-floor/templateB.vue

@@ -0,0 +1,314 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage2"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType2,
+						floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+						floorData.floorContent.adsLink2,
+						floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateB',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 347 - 0
pages/h5/activity/components/template-floor/templateC.vue

@@ -0,0 +1,347 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage2"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType2,
+						floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+						floorData.floorContent.adsLink2,
+						floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateC',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&.ad_02 {
+			margin-right: 20rpx;
+		}
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 8rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			margin-bottom: 20rpx;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 341 - 0
pages/h5/activity/components/template-floor/templateD.vue

@@ -0,0 +1,341 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage2"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType2,
+						floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+						floorData.floorContent.adsLink2,
+						floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_03">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage3"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType3,
+						floorData.floorContent.linkParam3.id ? floorData.floorContent.linkParam3.id : '',
+						floorData.floorContent.adsLink3,
+						floorData.floorContent.linkParam3.keyword ? floorData.floorContent.linkParam3.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			margin-right: 0;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 311 - 312
components/cm-module/pageTemplate/templateE.vue → pages/h5/activity/components/template-floor/templateE.vue

@@ -1,312 +1,311 @@
-<template>
-	<view class="section_page_main clearfix">
-		<view class="floor-item ad_01">
-			<image
-				class="item-img-gg"
-				:src="floorData.floorContent.appletsAdsImage1"
-				@click="
-					BannerNavigateTo(
-						floorData.floorContent.linkType1,
-						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
-						floorData.floorContent.adsLink1,
-						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
-					)
-				"
-				mode="aspectFill"
-			>
-			</image>
-		</view>
-		<view
-			class="floor-item ad_04 clearfix"
-			v-for="(item, idx) in floorData.floorImageList"
-			v-if="idx < 4"
-			:key="idx"
-			@click.stop="navToDetailPage(item)"
-		>
-			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
-			<template-Type :product="item.product"></template-Type>
-			<view class="floor-item_tag" v-if="item.listType == 2">
-				<text>{{ item.label }}</text>
-			</view>
-			<view class="floor-item-content">
-				<view class="title tui-skeleton-rect">
-					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
-					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
-						>{{ item.name }}
-					</text>
-				</view>
-				<view class="floor-item-price" v-if="item.listType == 1">
-					<template>
-						<template-Tags :product="item.product"></template-Tags>
-					</template>
-					<view v-if="hasLogin">
-						<template v-if="item.product.productCategory == 1">
-							<template-Price  :product="item.product"></template-Price>
-						</template>
-						<template v-else>
-							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
-								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
-							</view>
-							<view class="price tui-skeleton-rect" v-else>
-								<text class="p sm">¥</text>
-								<text class="p big">{{ item.product.price | NumFormat }}</text>
-							</view>
-						</template>
-					</view>
-					<view v-else class="no-price">
-						<template v-if="item.product.productCategory == 1">
-							<view class="p-stars">
-								<text class="p-no">¥</text>
-								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
-							</view>
-						</template>
-						<template v-else>
-							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
-						</template>
-					</view>
-				</view>
-			</view>
-		</view>
-	</view>
-</template>
-
-<script>
-import { mapState, mapMutations } from 'vuex'
-import uniGrader from '@/components/uni-grade/uni-grade.vue'
-import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
-import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
-import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
-
-
-export default {
-	name: 'templateE',
-	components: {
-		uniGrader,
-		templateTags,
-		templatePrice,
-		templateType
-	},
-	props: {
-		pageData: {
-			type: Object
-		},
-		userIdentity: {
-			type: Number
-		}
-	},
-	data() {
-		return {
-			shopId: 0,
-			floorData: {}
-		}
-	},
-	filters: {
-		NumFormat: function(text) {
-			//处理金额
-			return Number(text).toFixed(2)
-		}
-	},
-	created() {
-		this.initData(this.pageData)
-	},
-	computed: {
-		...mapState(['hasLogin', 'userInfo', 'isActivity'])
-	},
-	watch: {
-		pageData: {
-			handler: function(el) {
-				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
-				this.pageData = el
-				this.initData(this.pageData)
-			},
-			deep: true
-		}
-	},
-	methods: {
-		initData(data) {
-			this.floorData = data
-			// console.log(this.floorData)
-			this.$api
-				.getStorage()
-				.then(resolve => {
-					this.shopId = resolve.shopId ? resolve.shopId : 0
-				})
-				.catch(err => {
-					console.log('err', err)
-				})
-		},
-		PromotionsFormat(promo) {
-			//促销活动类型数据处理
-			if (promo != null) {
-				if (promo.type == 1 && promo.mode == 1) {
-					return true
-				} else {
-					return false
-				}
-			}
-			return false
-		},
-		navToDetailPage(pros) {
-			//跳转商品详情页
-			this.$api.FlooryNavigateTo(pros)
-		},
-		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
-			//跳转商品详情页
-			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
-		}
-	}
-}
-</script>
-
-<style lang="scss">
-.section_page_main {
-	width: 100%;
-	height: auto;
-	box-sizing: border-box;
-	.floor-item {
-		width: 339rpx;
-		height: 516rpx;
-		margin-right: 20rpx;
-		font-size: $font-size-24;
-		color: $text-color;
-		line-height: 36rpx;
-		border-radius: 16rpx;
-		margin-bottom: 20rpx;
-		float: left;
-		box-sizing: border-box;
-		position: relative;
-		&.ad_01 {
-			width: 100%;
-			height: 240rpx;
-			.item-img-gg {
-				width: 100%;
-				height: 240rpx;
-				display: block;
-				border-radius: 16rpx;
-			}
-		}
-		&.ad_02 {
-			margin-right: 20rpx;
-		}
-		&:nth-child(odd) {
-			margin-right: 0;
-		}
-		.item-img-gg {
-			width: 339rpx;
-			height: 516rpx;
-			display: block;
-			border-radius: 16rpx;
-		}
-		.item-img {
-			width: 339rpx;
-			height: 339rpx;
-			border-radius: 16rpx 16rpx 0 0;
-			display: block;
-			margin-bottom: 8rpx;
-		}
-		.floor-item_tag {
-			width: 100%;
-			height: 32rpx;
-			float: left;
-			margin: 20rpx 0;
-			padding: 0 20rpx;
-			box-sizing: border-box;
-			text {
-				display: inline-block;
-				padding: 0 8rpx;
-				border: 1px solid #e3ebf7;
-				border-radius: 8rpx;
-				color: #9aa5b5;
-				font-size: $font-size-22;
-				line-height: 32rpx;
-				text-align: center;
-				float: left;
-			}
-		}
-		.floor-item-content {
-			width: 100%;
-			padding: 0 20rpx;
-			box-sizing: border-box;
-		}
-		.floor-item-act {
-			display: block;
-			width: 100%;
-			height: 32rpx;
-			text-align: center;
-			box-sizing: border-box;
-		}
-		.title-none {
-			font-size: $font-size-26;
-			color: #ff2a2a;
-			line-height: 54rpx;
-		}
-		.title {
-			width: 100%;
-			height: 70rpx;
-			display: flex;
-			line-height: 35rpx;
-			flex-direction: column;
-			margin: 8rpx 0;
-			padding: 0;
-			position: relative;
-			.mclap {
-				width: 100%;
-				line-height: 35rpx;
-				text-overflow: ellipsis;
-				display: -webkit-box;
-				word-break: break-all;
-				-webkit-box-orient: vertical;
-				-webkit-line-clamp: 2;
-				overflow: hidden;
-				font-size: 26rpx;
-				&.indent {
-					text-indent: 95rpx;
-				}
-			}
-			.mclap-tag {
-				display: block;
-				width: 84rpx;
-				height: 32rpx;
-				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
-				border-radius: 4rpx 48rpx 4px 4px;
-				line-height: 32rpx;
-				font-size: $font-size-22;
-				color: #ffffff;
-				text-align: center;
-				position: absolute;
-				left: 0;
-				top: 0;
-			}
-		}
-		.no-price {
-			height: 54rpx;
-			line-height: 54rpx;
-			display: flex;
-			box-sizing: border-box;
-			.p-no {
-				font-size: $font-size-28;
-				color: $text-color;
-				display: block;
-				float: left;
-			}
-			.p-stars {
-				float: left;
-			}
-		}
-		.price {
-			color: #ff2a2a;
-			line-height: 54rpx;
-			&.none {
-				text-decoration: line-through;
-				color: #999999;
-			}
-			.sm {
-				font-size: $font-size-24;
-			}
-			.big {
-				font-size: $font-size-28;
-			}
-		}
-	}
-}
-</style>
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateE',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&.ad_02 {
+			margin-right: 20rpx;
+		}
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 278 - 0
pages/h5/activity/components/template-floor/templateF.vue

@@ -0,0 +1,278 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateG',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-30;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 274 - 0
pages/h5/activity/components/template-floor/templateG.vue

@@ -0,0 +1,274 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateG',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.$api.getStorage().then(resolve => {
+				this.shopId = resolve.shopId ? resolve.shopId : 0
+			})
+			this.floorData = data
+			// console.log(this.floorData)
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-30;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 342 - 0
pages/h5/activity/components/template-floor/templateI.vue

@@ -0,0 +1,342 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage2"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType2,
+						floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+						floorData.floorContent.adsLink2,
+						floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_03">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage3"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType3,
+						floorData.floorContent.linkParam3.id ? floorData.floorContent.linkParam3.id : '',
+						floorData.floorContent.adsLink3,
+						floorData.floorContent.linkParam3.keyword ? floorData.floorContent.linkParam3.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.$api.getStorage().then(resolve => {
+				this.shopId = resolve.shopId ? resolve.shopId : 0
+			})
+			this.floorData = data
+			// console.log(this.floorData)
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			margin-right: 0;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+
+		&.ad_02,
+		&.ad_03 {
+			width: 339rpx;
+			height: 260rpx;
+			.item-img-gg {
+				width: 339rpx;
+				height: 260rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 357 - 0
pages/h5/activity/components/template-floor/templateJ.vue

@@ -0,0 +1,357 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item-ad clearfix">
+			<view class="floor-item-left">
+				<image
+					class="item-img-gg"
+					:src="floorData.floorContent.appletsAdsImage1"
+					@click="
+						BannerNavigateTo(
+							floorData.floorContent.linkType1,
+							floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+							floorData.floorContent.adsLink1,
+							floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+						)
+					"
+					mode="aspectFill"
+				>
+				</image>
+			</view>
+			<view class="floor_item_right">
+				<image
+					class="item-img-gg"
+					:src="floorData.floorContent.appletsAdsImage2"
+					@click="
+						BannerNavigateTo(
+							floorData.floorContent.linkType2,
+							floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+							floorData.floorContent.adsLink2,
+							floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+						)
+					"
+					mode="aspectFill"
+				>
+				</image>
+				<image
+					class="item-img-gg"
+					:src="floorData.floorContent.appletsAdsImage3"
+					@click="
+						BannerNavigateTo(
+							floorData.floorContent.linkType3,
+							floorData.floorContent.linkParam3.id ? floorData.floorContent.linkParam3.id : '',
+							floorData.floorContent.adsLink3,
+							floorData.floorContent.linkParam3.keyword ? floorData.floorContent.linkParam3.keyword : ''
+						)
+					"
+					mode="aspectFill"
+				>
+				</image>
+			</view>
+		</view>
+
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<template>
+					<template-Tags :product="item.product"></template-Tags>
+				</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.$api.getStorage().then(resolve => {
+				this.shopId = resolve.shopId ? resolve.shopId : 0
+			})
+			this.floorData = data
+			// console.log(this.floorData)
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+
+	.floor-item-ad {
+		width: 100%;
+		margin-bottom: 24rpx;
+		.floor-item-left,
+		.floor_item_right {
+			width: 339rpx;
+			height: 516rpx;
+		}
+		.floor-item-left {
+			margin-right: 20rpx;
+			float: left;
+			.item-img-gg {
+				width: 339rpx;
+				height: 516rpx;
+				border-radius: 16rpx;
+			}
+		}
+		.floor_item_right {
+			float: left;
+			.item-img-gg {
+				width: 100%;
+				height: 246rpx;
+				display: block;
+				border-radius: 16rpx;
+				&:nth-child(1) {
+					margin-bottom: 24rpx;
+				}
+			}
+		}
+	}
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 403 - 0
pages/h5/activity/components/template-floor/templateK.vue

@@ -0,0 +1,403 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item-ad clearfix">
+			<view class="floor-item-left">
+				<image
+					class="item-img-gg"
+					:src="floorData.floorContent.appletsAdsImage1"
+					@click="
+						BannerNavigateTo(
+							floorData.floorContent.linkType1,
+							floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+							floorData.floorContent.adsLink1,
+							floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+						)
+					"
+					mode="aspectFill"
+				>
+				</image>
+			</view>
+			<view class="floor_item_right">
+				<image
+					class="item-img-gg"
+					:src="floorData.floorContent.appletsAdsImage2"
+					@click="
+						BannerNavigateTo(
+							floorData.floorContent.linkType2,
+							floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+							floorData.floorContent.adsLink2,
+							floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+						)
+					"
+					mode="aspectFill"
+				>
+				</image>
+				<image
+					class="item-img-gg"
+					:src="floorData.floorContent.appletsAdsImage3"
+					@click="
+						BannerNavigateTo(
+							floorData.floorContent.linkType3,
+							floorData.floorContent.linkParam3.id ? floorData.floorContent.linkParam3.id : '',
+							floorData.floorContent.adsLink3,
+							floorData.floorContent.linkParam3.keyword ? floorData.floorContent.linkParam3.keyword : ''
+						)
+					"
+					mode="aspectFill"
+				>
+				</image>
+			</view>
+		</view>
+
+		<view class="floor-item-ad ad-row2 clearfix">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage2"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType2,
+						floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+						floorData.floorContent.adsLink2,
+						floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage3"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType3,
+						floorData.floorContent.linkParam3.id ? floorData.floorContent.linkParam3.id : '',
+						floorData.floorContent.adsLink3,
+						floorData.floorContent.linkParam3.keyword ? floorData.floorContent.linkParam3.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.$api.getStorage().then(resolve => {
+				this.shopId = resolve.shopId ? resolve.shopId : 0
+			})
+			this.floorData = data
+			// console.log(this.floorData)
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+
+	.floor-item-ad {
+		width: 100%;
+		margin-bottom: 20rpx;
+		.floor-item-left,
+		.floor_item_right {
+			width: 339rpx;
+			height: 516rpx;
+		}
+		.floor-item-left {
+			margin-right: 20rpx;
+			float: left;
+			.item-img-gg {
+				width: 339rpx;
+				height: 516rpx;
+				border-radius: 16rpx;
+			}
+		}
+		.floor_item_right {
+			float: left;
+			.item-img-gg {
+				width: 100%;
+				height: 246rpx;
+				display: block;
+				border-radius: 16rpx;
+				&:nth-child(1) {
+					margin-bottom: 24rpx;
+				}
+			}
+		}
+		&.ad-row2 {
+			width: 100%;
+			margin: 24rpx 0;
+			.item-img-gg {
+				width: 339rpx;
+				height: 246rpx;
+				float: left;
+				display: block;
+				border-radius: 16rpx;
+				&:nth-child(1) {
+					margin-right: 20rpx;
+				}
+			}
+		}
+	}
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+
+		&:nth-child(even) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 297 - 0
pages/h5/activity/components/template-page/templateA.vue

@@ -0,0 +1,297 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			v-if="idx < 3"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+export default {
+	name: 'templateA',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 314 - 0
pages/h5/activity/components/template-page/templateB.vue

@@ -0,0 +1,314 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage2"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType2,
+						floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+						floorData.floorContent.adsLink2,
+						floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			v-if="idx < 2"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+export default {
+	name: 'templateB',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 348 - 0
pages/h5/activity/components/template-page/templateC.vue

@@ -0,0 +1,348 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage2"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType2,
+						floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+						floorData.floorContent.adsLink2,
+						floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			v-if="idx < 3"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateC',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&.ad_02 {
+			margin-right: 20rpx;
+		}
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 8rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			margin-bottom: 20rpx;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 342 - 0
pages/h5/activity/components/template-page/templateD.vue

@@ -0,0 +1,342 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_02">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage2"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType2,
+						floorData.floorContent.linkParam2.id ? floorData.floorContent.linkParam2.id : '',
+						floorData.floorContent.adsLink2,
+						floorData.floorContent.linkParam2.keyword ? floorData.floorContent.linkParam2.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view class="floor-item ad_03">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage3"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType3,
+						floorData.floorContent.linkParam3.id ? floorData.floorContent.linkParam3.id : '',
+						floorData.floorContent.adsLink3,
+						floorData.floorContent.linkParam3.keyword ? floorData.floorContent.linkParam3.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			v-if="idx < 2"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateD',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			margin-right: 0;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 313 - 0
pages/h5/activity/components/template-page/templateE.vue

@@ -0,0 +1,313 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			v-if="idx < 4"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+
+export default {
+	name: 'templateE',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		line-height: 36rpx;
+        background: #ffffff;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&.ad_02 {
+			margin-right: 20rpx;
+		}
+		&:nth-child(odd) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 330 - 0
pages/h5/activity/components/template-page/templateF.vue

@@ -0,0 +1,330 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			v-if="idx < 4"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+		<view class="floor-item ad_01">
+			<image
+				class="item-img-gg"
+				:src="floorData.floorContent.appletsAdsImage1"
+				@click="
+					BannerNavigateTo(
+						floorData.floorContent.linkType1,
+						floorData.floorContent.linkParam1.id ? floorData.floorContent.linkParam1.id : '',
+						floorData.floorContent.adsLink1,
+						floorData.floorContent.linkParam1.keyword ? floorData.floorContent.linkParam1.keyword : ''
+					)
+				"
+				mode="aspectFill"
+			>
+			</image>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateF',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		},
+		BannerNavigateTo(linkType, linkId, linkHref, keyword) {
+			//跳转商品详情页
+			this.$api.BannerNavigateTo(linkType, linkId, linkHref, keyword)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&.ad_01 {
+			width: 100%;
+			height: 240rpx;
+			margin-right: 0;
+			.item-img-gg {
+				width: 100%;
+				height: 240rpx;
+				display: block;
+				border-radius: 16rpx;
+			}
+		}
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 8rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			margin-bottom: 20rpx;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-28;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 280 - 0
pages/h5/activity/components/template-page/templateG.vue

@@ -0,0 +1,280 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view
+			class="floor-item ad_04 clearfix"
+			v-for="(item, idx) in floorData.floorImageList"
+			v-if="idx < 4"
+			:key="idx"
+			@click.stop="navToDetailPage(item)"
+		>
+			<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+			<template-Type :product="item.product"></template-Type>
+			<view class="floor-item_tag" v-if="item.listType == 2">
+				<text>{{ item.label }}</text>
+			</view>
+			<view class="floor-item-content">
+				<view class="title tui-skeleton-rect">
+					<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+					<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+						>{{ item.name }}
+					</text>
+				</view>
+				<view class="floor-item-price" v-if="item.listType == 1">
+					<template>
+						<template-Tags :product="item.product"></template-Tags>
+					</template>
+					<view v-if="hasLogin">
+						<template v-if="item.product.productCategory == 1">
+							<template-Price  :product="item.product"></template-Price>
+						</template>
+						<template v-else>
+							<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+								<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+							</view>
+							<view class="price tui-skeleton-rect" v-else>
+								<text class="p sm">¥</text>
+								<text class="p big">{{ item.product.price | NumFormat }}</text>
+							</view>
+						</template>
+					</view>
+					<view v-else class="no-price">
+						<template v-if="item.product.productCategory == 1">
+							<view class="p-stars">
+								<text class="p-no">¥</text>
+								<uni-grader :grade="Number(item.product.priceGrade)" :margin="14"></uni-grader>
+							</view>
+						</template>
+						<template v-else>
+							<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+						</template>
+					</view>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateG',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			floorData: {}
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity'])
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.floorData = data
+			// console.log(this.floorData)
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.floor-item {
+		width: 339rpx;
+		height: 516rpx;
+		margin-right: 20rpx;
+		font-size: $font-size-24;
+		color: $text-color;
+		background: #ffffff;
+		line-height: 36rpx;
+		border-radius: 16rpx;
+		margin-bottom: 20rpx;
+		float: left;
+		box-sizing: border-box;
+		position: relative;
+		&:nth-child(2n) {
+			margin-right: 0;
+		}
+		.item-img-gg {
+			width: 339rpx;
+			height: 516rpx;
+			display: block;
+			border-radius: 16rpx;
+		}
+		.item-img {
+			width: 339rpx;
+			height: 339rpx;
+			border-radius: 16rpx 16rpx 0 0;
+			display: block;
+			margin-bottom: 8rpx;
+		}
+		.floor-item_tag {
+			width: 100%;
+			height: 32rpx;
+			float: left;
+			margin: 20rpx 0;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+			text {
+				display: inline-block;
+				padding: 0 8rpx;
+				border: 1px solid #e3ebf7;
+				border-radius: 8rpx;
+				color: #9aa5b5;
+				font-size: $font-size-22;
+				line-height: 32rpx;
+				text-align: center;
+				float: left;
+			}
+		}
+		.floor-item-content {
+			width: 100%;
+			padding: 0 20rpx;
+			box-sizing: border-box;
+		}
+		.floor-item-act {
+			display: block;
+			width: 100%;
+			height: 32rpx;
+			text-align: center;
+			box-sizing: border-box;
+		}
+		.title-none {
+			font-size: $font-size-26;
+			color: #ff2a2a;
+			line-height: 54rpx;
+		}
+		.title {
+			width: 100%;
+			height: 70rpx;
+			display: flex;
+			line-height: 35rpx;
+			flex-direction: column;
+			margin: 8rpx 0;
+			padding: 0;
+			position: relative;
+			.mclap {
+				width: 100%;
+				line-height: 35rpx;
+				text-overflow: ellipsis;
+				display: -webkit-box;
+				word-break: break-all;
+				-webkit-box-orient: vertical;
+				-webkit-line-clamp: 2;
+				overflow: hidden;
+				font-size: 26rpx;
+				&.indent {
+					text-indent: 95rpx;
+				}
+			}
+			.mclap-tag {
+				display: block;
+				width: 84rpx;
+				height: 32rpx;
+				background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+				border-radius: 4rpx 48rpx 4px 4px;
+				line-height: 32rpx;
+				font-size: $font-size-22;
+				color: #ffffff;
+				text-align: center;
+				position: absolute;
+				left: 0;
+				top: 0;
+			}
+		}
+		.no-price {
+			height: 54rpx;
+			line-height: 54rpx;
+			display: flex;
+			box-sizing: border-box;
+			.p-no {
+				font-size: $font-size-30;
+				color: $text-color;
+				display: block;
+				float: left;
+			}
+			.p-stars {
+				float: left;
+			}
+		}
+		.price {
+			color: #ff2a2a;
+			line-height: 54rpx;
+			&.none {
+				text-decoration: line-through;
+				color: #999999;
+			}
+			.sm {
+				font-size: $font-size-24;
+			}
+			.big {
+				font-size: $font-size-28;
+			}
+		}
+	}
+}
+</style>

+ 361 - 0
pages/h5/activity/components/template-page/templateH.vue

@@ -0,0 +1,361 @@
+<template>
+	<view class="section_page_main clearfix">
+		<view class="recommend-list" :style="hasLessProduct ? 'height:269px' : ''">
+			<swiper
+				class="tui-banner-swiper"
+				:autoplay="true"
+				:interval="5000"
+				:duration="500"
+				:circular="true"
+				@change="swiperChange"
+				:style="hasLessProduct ? 'height:269px' : ''"
+			>
+				<swiper-item v-for="(product, index) in productList" :key="index">
+					<view
+						class="floor-item ad_04 clearfix"
+						v-for="(item, idx) in product"
+						:key="idx"
+						@click.stop="navToDetailPage(item)"
+					>
+						<image class="item-img tui-skeleton-fillet" :src="item.image" mode="aspectFill"></image>
+						<template-Type :product="item.product"></template-Type>
+						<view class="floor-item_tag" v-if="item.listType == 2">
+							<text>{{ item.label }}</text>
+						</view>
+						<view class="floor-item-content">
+							<view class="title tui-skeleton-rect">
+								<text class="mclap-tag" v-if="item.product.beautyActFlag == '1'">美博会</text>
+								<text class="mclap" :class="item.product.beautyActFlag == '1' ? 'indent' : ''"
+									>{{ item.name }}
+								</text>
+							</view>
+							<view class="floor-item-price" v-if="item.listType == 1">
+								<template>
+									<template-Tags :product="item.product"></template-Tags>
+								</template>
+								<view v-if="hasLogin">
+									<template v-if="item.product.productCategory == 1">
+										<template-Price  :product="item.product"></template-Price>
+									</template>
+									<template v-else>
+										<view class="price tui-skeleton-rect" v-if="item.product.detailTalkFlag == '2'">
+											<text class="p sm">¥</text> <text class="p big">价格详聊</text>
+										</view>
+										<view class="price tui-skeleton-rect" v-else>
+											<text class="p sm">¥</text>
+											<text class="p big">{{ item.product.price | NumFormat }}</text>
+										</view>
+									</template>
+								</view>
+								<view v-else class="no-price">
+									<template v-if="item.product.productCategory == 1">
+										<view class="p-stars">
+											<text class="p-no">¥</text>
+											<uni-grader
+												:grade="Number(item.product.priceGrade)"
+												:margin="14"
+											></uni-grader>
+										</view>
+									</template>
+									<template v-else>
+										<view class="p-stars"> <text class="p-no">¥登录可见</text> </view>
+									</template>
+								</view>
+							</view>
+						</view>
+					</view>
+				</swiper-item>
+			</swiper>
+			<view class="swiper__recommenddots-box" v-if="productList.length > 1">
+				<view
+					v-for="(item, idx) in productList"
+					:key="idx"
+					:class="[idx === swiperCurrent ? 'swiper__dots-long' : 'none']"
+					:data-index="swiperCurrent"
+					class="swiper__dots-item"
+				>
+				</view>
+			</view>
+		</view>
+	</view>
+</template>
+
+<script>
+import { mapState, mapMutations } from 'vuex'
+import uniGrader from '@/components/uni-grade/uni-grade.vue'
+import templateTags from '@/components/cm-module/pageTemplate/templateTags.vue'
+import templatePrice from '@/components/cm-module/pageTemplate/templatePrice.vue'
+import templateType from '@/components/cm-module/pageTemplate/templateType.vue'
+
+export default {
+	name: 'templateH',
+	components: {
+		uniGrader,
+		templateTags,
+		templatePrice,
+		templateType
+	},
+	props: {
+		pageData: {
+			type: Object
+		},
+		userIdentity: {
+			type: Number
+		}
+	},
+	data() {
+		return {
+			shopId: 0,
+			productList: [],
+			current: 100,
+			swiperCurrent: 0,
+			pageSize: 4,
+			productCount: 0
+		}
+	},
+	filters: {
+		NumFormat: function(text) {
+			//处理金额
+			return Number(text).toFixed(2)
+		}
+	},
+	created() {
+		this.initData(this.pageData)
+	},
+	computed: {
+		...mapState(['hasLogin', 'userInfo', 'isActivity']),
+		hasLessProduct() {
+			return this.productCount <= 2
+		}
+	},
+	watch: {
+		pageData: {
+			handler: function(el) {
+				//监听对象的变换使用 function,箭头函数容易出现this指向不正确
+				this.pageData = el
+				this.initData(this.pageData)
+			},
+			deep: true
+		}
+	},
+	methods: {
+		initData(data) {
+			this.$api
+				.getStorage()
+				.then(resolve => {
+					this.shopId = resolve.shopId ? resolve.shopId : 0
+				})
+				.catch(err => {
+					console.log('err', err)
+				})
+			this.productCount = data.floorImageList.length
+			if (this.productCount > 0) {
+				this.productList.splice(0, this.productList.length)
+				for (var i = 0, j = data.floorImageList.length; i < j; i += this.pageSize) {
+					this.productList.push(data.floorImageList.slice(i, i + this.pageSize))
+				}
+			}
+		},
+		PromotionsFormat(promo) {
+			//促销活动类型数据处理
+			if (promo != null) {
+				if (promo.type == 1 && promo.mode == 1) {
+					return true
+				} else {
+					return false
+				}
+			}
+			return false
+		},
+		tabClick(index) {
+			//轮播图切换
+			this.current = index
+		},
+		swiperChange(e) {
+			//轮播切换
+			const index = e.detail.current
+			this.swiperCurrent = index
+		},
+		navToDetailPage(pros) {
+			//跳转商品详情页
+			this.$api.FlooryNavigateTo(pros)
+		}
+	}
+}
+</script>
+
+<style lang="scss">
+.section_page_main {
+	width: 100%;
+	height: auto;
+	box-sizing: border-box;
+	.recommend-list {
+		width: 100%;
+		height: 1100rpx;
+		position: relative;
+		padding-bottom: 20rpx;
+		.tui-banner-swiper {
+			width: 100%;
+			margin: 0 auto;
+			height: 1100rpx;
+			overflow: hidden;
+			transform: translateY(0);
+			.floor-item {
+				width: 339rpx;
+				height: 516rpx;
+				margin-right: 20rpx;
+				font-size: $font-size-24;
+				color: $text-color;
+				background: #ffffff;
+				line-height: 36rpx;
+				border-radius: 16rpx;
+				margin-bottom: 20rpx;
+				float: left;
+				box-sizing: border-box;
+				position: relative;
+				&:nth-child(2n) {
+					margin-right: 0;
+				}
+				.item-img {
+					width: 339rpx;
+					height: 339rpx;
+					border-radius: 16rpx 16rpx 0 0;
+					display: block;
+					margin-bottom: 8rpx;
+				}
+				.floor-item_tag {
+					width: 100%;
+					height: 32rpx;
+					float: left;
+					margin: 20rpx 0;
+					padding: 0 20rpx;
+					box-sizing: border-box;
+					text {
+						display: inline-block;
+						padding: 0 8rpx;
+						border: 1px solid #e3ebf7;
+						border-radius: 8rpx;
+						color: #9aa5b5;
+						font-size: $font-size-22;
+						line-height: 32rpx;
+						text-align: center;
+						float: left;
+					}
+				}
+				.floor-item-content {
+					width: 100%;
+					padding: 0 20rpx;
+					box-sizing: border-box;
+				}
+				.floor-item-act {
+					display: block;
+					width: 100%;
+					height: 32rpx;
+					text-align: center;
+					box-sizing: border-box;
+				}
+				.title-none {
+					font-size: $font-size-26;
+					color: #ff2a2a;
+					line-height: 54rpx;
+				}
+				.title {
+					width: 100%;
+					height: 70rpx;
+					display: flex;
+					line-height: 35rpx;
+					flex-direction: column;
+					margin: 8rpx 0;
+					padding: 0;
+					position: relative;
+					.mclap {
+						width: 100%;
+						line-height: 35rpx;
+						text-overflow: ellipsis;
+						display: -webkit-box;
+						word-break: break-all;
+						-webkit-box-orient: vertical;
+						-webkit-line-clamp: 2;
+						overflow: hidden;
+						font-size: 26rpx;
+						&.indent {
+							text-indent: 95rpx;
+						}
+					}
+					.mclap-tag {
+						display: block;
+						width: 84rpx;
+						height: 32rpx;
+						background-image: linear-gradient(270deg, #f9c023 0%, #f83600 100%);
+						border-radius: 4rpx 48rpx 4px 4px;
+						line-height: 32rpx;
+						font-size: $font-size-22;
+						color: #ffffff;
+						text-align: center;
+						position: absolute;
+						left: 0;
+						top: 0;
+					}
+				}
+				.no-price {
+					height: 54rpx;
+					line-height: 54rpx;
+					display: flex;
+					box-sizing: border-box;
+					.p-no {
+						font-size: $font-size-28;
+						color: $text-color;
+						display: block;
+						float: left;
+					}
+					.p-stars {
+						float: left;
+					}
+				}
+				.price {
+					color: #ff2a2a;
+					line-height: 54rpx;
+					&.none {
+						text-decoration: line-through;
+						color: #999999;
+					}
+					.sm {
+						font-size: $font-size-24;
+					}
+					.big {
+						font-size: $font-size-28;
+					}
+				}
+			}
+		}
+	}
+	.swiper__recommenddots-box {
+		position: absolute;
+		bottom: 0;
+		left: 0;
+		right: 0;
+		/* #ifndef APP-NVUE */
+		display: flex;
+		/* #endif */
+		flex: 1;
+		flex-direction: row;
+		justify-content: center;
+		align-items: center;
+		height: 60rpx;
+		.swiper__dots-item {
+			width: 8rpx;
+			height: 8rpx;
+			border-radius: 100%;
+			margin-left: 6px;
+			background-color: rgba(225, 86, 22, 0.3);
+		}
+		.swiper__dots-long {
+			width: 32rpx;
+			height: 8rpx;
+			border-radius: 4rpx;
+			background-color: #FF5B00;
+			transition: all 0.4s;
+		}
+	}
+}
+</style>

+ 0 - 0
components/cm-module/pageTemplate/templateI.vue → pages/h5/activity/components/template-page/templateI.vue


+ 0 - 0
components/cm-module/pageTemplate/templateJ.vue → pages/h5/activity/components/template-page/templateJ.vue


+ 0 - 0
components/cm-module/pageTemplate/templateK.vue → pages/h5/activity/components/template-page/templateK.vue


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