Sfoglia il codice sorgente

commit -m 商品详情增加资质编号信息

zhengjinyi 3 anni fa
parent
commit
03b8ebe706
3 ha cambiato i file con 332 aggiunte e 142 eliminazioni
  1. 0 2
      components/cm-module/homeIndex/certificate.vue
  2. 80 36
      pages/goods/good-hot.vue
  3. 252 104
      pages/goods/product.vue

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

@@ -38,9 +38,7 @@
 		},
 		methods:{
 			handleClick(id){// 跳转资质证书
-				// let link = 'https://www.nmpa.gov.cn/datasearch/search-info.html?nmpa=aWQ9NTk0NjAmaXRlbUlkPTJjOWJhMzg0NzU5Yzk1NzcwMTc1OWNjZmMwMmIwMzQz'
 				this.$api.navigateTo(`/pages/service/certificate?id=${id}`)
-				// this.$api.navigateTo(`/pages/h5/article/path?link=${link}`)
 			}
 		}
 	}

+ 80 - 36
pages/goods/good-hot.vue

@@ -1,11 +1,24 @@
 <template>
 	<view class="container floor clearfix">
-		<tui-skeleton v-if="skeletonShow" backgroundColor="#fafafa" borderRadius="10rpx" :isLoading	="true" :loadingType="5"></tui-skeleton>
+		<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">
-						采美新品橱窗 <view class="topcontent-title-icon" @click="haveBack"> <text class="iconfont icon-fanhui"></text> </view>
+					<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' }">
@@ -24,7 +37,9 @@
 									:key="index"
 									@click.stop="navToDetailPage(item.productId)"
 								>
-									<view class="swiper-goods-image"> <image :src="item.mainImage" mode="scaleToFill" /> </view>
+									<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>
@@ -46,7 +61,7 @@
 				</view>
 			</view>
 			<view class="container-screen">
-				<view class="container-screen-box"  @click="showDropShow">
+				<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>
@@ -55,7 +70,10 @@
 						</view>
 					</view>
 					<view class="screen-box-sp">
-						<text class="iconfont" :class="dropShow ? 'icon-xiangshangjiantou' : 'icon-xiangxiajiantou'"></text>
+						<text
+							class="iconfont"
+							:class="dropShow ? 'icon-xiangshangjiantou' : 'icon-xiangxiajiantou'"
+						></text>
 					</view>
 				</view>
 				<view class="container-screen-popup" v-if="dropShow">
@@ -63,7 +81,9 @@
 					<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" :class="isAllcheckedBrand ? 'active' : ''" @click="choiceBrandAll"
+								>全部</view
+							>
 							<view
 								class="screen-list"
 								v-for="(brand, index) in brandList"
@@ -74,7 +94,9 @@
 								{{ brand.name }}
 							</view>
 						</scroll-view>
-						<view class="container-screen-btnbox"> <view class="btns" @tap="btnCloseDrop">确定</view> </view>
+						<view class="container-screen-btnbox">
+							<view class="btns" @tap="btnCloseDrop">确定</view>
+						</view>
 					</view>
 					<!-- </uni-transition> -->
 				</view>
@@ -113,7 +135,9 @@
 									<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 class="price" v-if="isShowVipFlag(pros)">{{
+												pros.svipPriceTag
+											}}</view>
 										</view>
 									</template>
 								</view>
@@ -192,7 +216,7 @@
 										<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)">
+										<view class="price-larger" v-if="pros.priceFlag == 3 && firstClubType != 1">
 											<text class="txt">¥仅医美机构可见</text>
 										</view>
 										<text
@@ -238,8 +262,9 @@ export default {
 	},
 	data() {
 		return {
+			fixedClass: 'float',
 			StatusBar: this.StatusBar,
-			skeletonShow:true,
+			skeletonShow: true,
 			dropShow: false,
 			vipFlag: 0,
 			userIdentity: 0,
@@ -251,11 +276,11 @@ export default {
 			current: 0,
 			appletsBanner: '',
 			listQuery: {
-				userId:0,
-				brandID:'',
+				userId: 0,
+				brandID: '',
 				pageSize: 10,
 				pageNum: 1,
-				source:2
+				source: 2
 			},
 			NavigationBarTitle: '',
 			nomoreText: '上拉显示更多',
@@ -288,23 +313,25 @@ export default {
 			this.GetHomeNewBrandNames()
 			this.GetHomeNewFloorList()
 		},
-		GetHomeNewBrandNames(){
+		GetHomeNewBrandNames() {
 			//新品商品品牌列表
-			this.CommonService.GetHomeNewBrandNames().then(response => {
-				this.brandList = response.data
-			})
-			.catch(error => {
-				console.log('获取新品橱窗推荐模块信息异常')
-			})
+			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('获取新品橱窗推荐模块信息异常')
-			})
+			this.CommonService.GetHomeRecommend()
+				.then(response => {
+					this.topGoodList = response.data
+				})
+				.catch(error => {
+					console.log('获取新品橱窗推荐模块信息异常')
+				})
 		},
 		GetHomeNewFloorList() {
 			//楼层查看更多
@@ -387,11 +414,11 @@ export default {
 			// 选择品牌
 			brand.isChecked = !brand.isChecked
 			if (brand.isChecked) {
-				if(!this.contains(this.checkedBrandList,brand.id)){
+				if (!this.contains(this.checkedBrandList, brand.id)) {
 					this.checkedBrandList.push(brand.id)
 				}
 			} else {
-				this.checkedBrandList.splice(this.checkedBrandList.indexOf(brand.id),1)
+				this.checkedBrandList.splice(this.checkedBrandList.indexOf(brand.id), 1)
 			}
 			this.isAllcheckedBrand = false
 			this.checkedBrandLength = this.checkedBrandList.length
@@ -406,7 +433,8 @@ export default {
 				el.isChecked = false
 			})
 		},
-		contains(arr, val) {// 校验
+		contains(arr, val) {
+			// 校验
 			return arr.some(item => item === val)
 		},
 		showDropShow() {
@@ -418,11 +446,19 @@ export default {
 			this.listQuery.pageNum = 1
 			this.GetHomeNewFloorList()
 		},
-		haveBack(){
+		haveBack() {
 			uni.navigateBack({
 				delta: 1
 			})
-		},
+		}
+	},
+	onPageScroll(e) {
+		//实时获取到滚动的值
+		if (e.scrollTop > 50) {
+			this.fixedClass = 'fixed'
+		} else {
+			this.fixedClass = 'float'
+		}
 	},
 	onPullDownRefresh() {
 		setTimeout(() => {
@@ -472,6 +508,14 @@ page {
 			font-weight: bold;
 			text-align: center;
 			position: relative;
+			&.fixed {
+				position: fixed;
+				top: 0;
+				height: 80rpx;
+				background: linear-gradient(90deg, #e15616 0%, #f28f31 100%);
+				z-index: 9999;
+				
+			}
 		}
 		.topcontent-title-icon {
 			width: 50rpx;
@@ -540,7 +584,7 @@ page {
 			width: 326rpx;
 			height: 336rpx;
 			box-sizing: border-box;
-			padding:32rpx 24rpx;
+			padding: 32rpx 24rpx;
 			float: right;
 			position: relative;
 			.swiper-goods-name {
@@ -894,10 +938,10 @@ page {
 				top: 0;
 			}
 		}
-		.floor-item-price{
-			.list-login-now{
+		.floor-item-price {
+			.list-login-now {
 				line-height: 44rpx;
-				.p-no{
+				.p-no {
 					height: 44rpx;
 					line-height: 44rpx;
 					display: inline-block;

+ 252 - 104
pages/goods/product.vue

@@ -21,7 +21,7 @@
 			id="topBar"
 			v-show="isNavbarFiexd"
 			:class="navbarFiexd"
-			:style="{ top: ( CustomBar - 2 ) + 'px' }"
+			:style="{ top: CustomBar - 2 + 'px' }"
 		>
 			<view class="search-input">
 				<view class="gosearch-btn" :class="navbarFiexd" @click="this.$api.navigateTo(clickPath)">
@@ -89,7 +89,7 @@
 					<view class="product-top">
 						<view class="banner-section">
 							<!-- <view class="cm-product-tags"> -->
-								<!-- <view class="cm-product-cover" v-if="product.appletsActType === 1"
+							<!-- <view class="cm-product-cover" v-if="product.appletsActType === 1"
 									>云上美博会</view
 								> -->
 							<view class="cm-product-type" v-if="product.productType == 2">医疗器械</view>
@@ -283,9 +283,35 @@
 					<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">
-							<image class="qualificationImg-image" :src="product.qualificationImg" mode="aspectFill" @click="previewImg1(product.qualificationImg)"></image>
+							<view class="product-details-table clearfix">
+								<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>
 					<!-- 相关推荐 -->
 					<view class="product-details recommend product-details3">
 						<view class="title"> <view class="title-tab">相关推荐</view> </view>
@@ -404,11 +430,17 @@
 												<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>
+															<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>
+															<text class="tags">{{
+																coupon.couponType | TypeFormat
+															}}</text>
 														</template>
 													</view>
 													<view class="list-cell-texts">
@@ -438,13 +470,15 @@
 													<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-text"
+																	>{{ coupon.moneyCouponPrice }}采美豆</view
+																>
 																<view
 																	class="icon-used-btn receive"
 																	@click="toDeductCoupon(coupon)"
 																	>抵扣</view
 																>
-															</template>								
+															</template>
 															<template v-else-if="coupon.couponPayWay == 1">
 																<view class="icon-used-text">购买</view>
 																<view
@@ -453,7 +487,7 @@
 																	>¥{{ coupon.moneyCouponPrice }}</view
 																>
 															</template>
-															<template v-else>	
+															<template v-else>
 																<view
 																	class="icon-used-btn receive"
 																	@click="receiveCoupon(coupon)"
@@ -461,7 +495,9 @@
 																>
 															</template>
 														</template>
-														<view class="icon-used-btn make" v-if="coupon.couponBtnType == 1"
+														<view
+															class="icon-used-btn make"
+															v-if="coupon.couponBtnType == 1"
 															>已领取</view
 														>
 													</view>
@@ -651,6 +687,7 @@ import authorize from '@/common/config/authorize.js'
 import wxLogin from '@/common/config/wxLogin.js'
 import { debounce } from '@/common/config/common.js'
 import wechatPay from '@/utils/mixins/wechatPay.js'
+import thorui from '@/components/clipboard/clipboard.thorui.js'
 var isPreviewImg
 export default {
 	mixins: [wechatPay],
@@ -753,7 +790,7 @@ export default {
 			collectionType: false,
 			isShowSupportingList: false,
 			supportingList: [],
-			supportingNum: 0 ,// 组合商品总数
+			supportingNum: 0, // 组合商品总数
 			contentModalText: '', //操作文字提示语句
 			contentModalText1: '', //操作文字提示语句
 			modal: false,
@@ -788,7 +825,7 @@ export default {
 					plain: false
 				}
 			],
-			isShowCaimeiShop:false
+			isShowCaimeiShop: false
 		}
 	},
 	computed: {
@@ -852,7 +889,8 @@ export default {
 		console.log('是iPhoneX', this.isIphoneX)
 	},
 	methods: {
-		async initGetStotage() {// 初始化
+		async initGetStotage() {
+			// 初始化
 			const userInfo = await this.$api.getStorage()
 			this.userId = this.couponParam.userId = userInfo.userId ? userInfo.userId : 0
 			this.userIdentity = userInfo.userIdentity ? userInfo.userIdentity : 0
@@ -883,7 +921,7 @@ export default {
 					this.shop = response.data.shop
 					this.shopId = response.data.shopId
 					this.product = response.data
-					if(this.product.shopType === 2){
+					if (this.product.shopType === 2) {
 						this.isShowCaimeiShop = true
 					}
 					if (this.product.userLike && this.product.userLike == 1) {
@@ -907,7 +945,7 @@ export default {
 					this.buyRetailPriceStep = this.product.step
 					this.number = this.product.minBuyNumber
 					this.minBuyNumber = this.product.minBuyNumber
-					
+
 					//处理商品图片列表
 					this.product.imageList.forEach(item => {
 						this.productImage.push(item.image)
@@ -964,7 +1002,7 @@ export default {
 					// setTimeout(() => {
 					//     this.getSectionProps()
 					// }, 2000)
-					if(this.product.productType === 2 && (this.userIdentity != 1 || this.userIdentity != 3)){
+					if (this.product.productType === 2 && (this.userIdentity != 1 || this.userIdentity != 3)) {
 						this.handleShowProductType()
 					}
 					if ((this.hasLogin && this.userIdentity == 2) || this.userIdentity == 4) {
@@ -972,48 +1010,60 @@ export default {
 					}
 					this.queryProductDetilsCoupons()
 					this.getCommodityCombinationList()
-					setTimeout(()=>{
+					setTimeout(() => {
 						this.skeletonShow = false
 						this.isRequest = true
-					},1000)
+					}, 1000)
 				})
 				.catch(error => {
 					this.$util.msg(error.msg, 2000)
 				})
 		},
-		handleShowProductType(){// 根据用户弹窗提示
-			if(!this.hasLogin){//游客
+		handleShowProductType() {
+			// 根据用户弹窗提示
+			if (!this.hasLogin) {
+				//游客
 				this.modal1 = true
-				this.contentModalText1 = '该商品仅限医美类机构查看,请注册医美机构后继续查看。有采美账号的,请直接登录。'
+				this.contentModalText1 =
+					'该商品仅限医美类机构查看,请注册医美机构后继续查看。有采美账号的,请直接登录。'
 				this.modalButton1 = [
-					{ text: '关闭', type: 'gray',plain: true },
-					{ text: '去注册/登录',
-					  customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #E15616 100%)'},
-					  plain: false
+					{ text: '关闭', type: 'gray', plain: true },
+					{
+						text: '去注册/登录',
+						customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #E15616 100%)' },
+					 plain: false
 					}
 				]
 				return
-			}else{
-				if(this.userIdentity === 4 ){// 普通机构
+			} else {
+				if (this.userIdentity === 4) {
+					// 普通机构
 					this.modal1 = true
 					this.contentModalText1 = '该商品仅限医美类机构查看,请升级为医美机构后继续查看。'
 					this.modalButton1 = [
-						{ text: '关闭', type: 'gray',plain: true },
-						{ text: '去升级',
-						  customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #E15616 100%)'},
-						  plain: false
+						{ text: '关闭', type: 'gray', plain: true },
+						{
+							text: '去升级',
+							customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #E15616 100%)' },
+							plain: false
 						}
 					]
 					return
-				}else if( this.userIdentity === 2 ){//会员机构
-					if(this.firstClubType != 1){
+				} else if (this.userIdentity === 2) {
+					//会员机构
+					if (this.firstClubType != 1) {
 						this.modal1 = true
-						this.contentModalText1 = '该商品仅限医美类机构查看,您暂无权限。您可去机构资料页面查看机构类型。'
+						this.contentModalText1 =
+							'该商品仅限医美类机构查看,您暂无权限。您可去机构资料页面查看机构类型。'
 						this.modalButton1 = [
-							{ text: '关闭', type: 'gray',plain: true },
-							{ text: '去查看资料',
-							  customStyle: { color: '#fff', bgColor: 'linear-gradient(90deg, #F28F31 0%, #E15616 100%)'},
-							  plain: false
+							{ text: '关闭', type: 'gray', plain: true },
+							{
+								text: '去查看资料',
+								customStyle: {
+									color: '#fff',
+									bgColor: 'linear-gradient(90deg, #F28F31 0%, #E15616 100%)'
+								},
+								plain: false
 							}
 						]
 						return
@@ -1021,29 +1071,34 @@ export default {
 				}
 			}
 		},
-		hideMobel1(){
+		hideMobel1() {
 			this.modal1 = false
 			this.$api.navigateBack(1)
 		},
-		handleClick1(e){// 医美器械弹窗跳转
+		handleClick1(e) {
+			// 医美器械弹窗跳转
 			if (e.index == 1) {
-				if(!this.hasLogin){//游客跳转登录页
+				if (!this.hasLogin) {
+					//游客跳转登录页
 					this.$api.navigateTo('/pages/login/login')
-				}else{
-					if(this.userIdentity === 4 ){// 个人机构跳转升级页面
+				} else {
+					if (this.userIdentity === 4) {
+						// 个人机构跳转升级页面
 						this.$api.navigateTo('/pages/login/apply')
-					}else if( this.userIdentity === 2 ){//会员机构
-						if(this.firstClubType != 1){// 会员非医美机构跳转资料页
+					} else if (this.userIdentity === 2) {
+						//会员机构
+						if (this.firstClubType != 1) {
+							// 会员非医美机构跳转资料页
 							this.$api.navigateTo('/pages/login/information')
 						}
 					}
 				}
 				this.modal1 = false
-			}else{
+			} else {
 				this.modal1 = false
 				if (this.isShareType == 'share') {
 					this.$api.switchTabTo('/pages/tabBar/home/index')
-				}else{
+				} else {
 					this.$api.navigateBack(1)
 				}
 			}
@@ -1061,11 +1116,11 @@ export default {
 						? this.$api.adaptRichTextImg(product.productDetail.detailInfo)
 						: defaulHtml
 				} else {
-					if(product.productDetail.commonDetailInfo){
+					if (product.productDetail.commonDetailInfo) {
 						html = product.productDetail
 							? this.$api.adaptRichTextImg(product.productDetail.commonDetailInfo)
 							: defaulHtml
-					}else{
+					} else {
 						html = defaulHtml
 					}
 				}
@@ -1139,7 +1194,7 @@ export default {
 				this.$uma.trackEvent('Um_Event_productCouponReceive', {
 					Um_Key_PageName: '商品详情',
 					Um_Key_EvenName: '领取优惠券',
-					Um_Key_CouponId: `${coupon.couponId}`,
+					Um_Key_CouponId: `${coupon.couponId}`
 				})
 			}
 			this.ProductService.ReceiveCoupon({
@@ -1165,7 +1220,7 @@ export default {
 				this.$uma.trackEvent('Um_Event_userCouponCollectionBuy', {
 					Um_Key_PageName: '领券中心',
 					Um_Key_EvenName: '抵扣优惠券',
-					Um_Key_CouponId: `${coupon.couponId}`,
+					Um_Key_CouponId: `${coupon.couponId}`
 				})
 			}
 			if (this.hasLogin) {
@@ -1178,24 +1233,24 @@ export default {
 				this.$api.navigateTo('/pages/login/login')
 			}
 		},
-		WeChatPayCouponBeans(coupon){
+		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)
-			})
+				.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) {
 			// 点击购买优惠券,友盟埋点收集购买优惠券
@@ -1203,46 +1258,54 @@ export default {
 				this.$uma.trackEvent('Um_Event_productCouponBuy', {
 					Um_Key_PageName: '商品详情',
 					Um_Key_EvenName: '购买优惠券',
-					Um_Key_CouponId: `${coupon.couponId}`,
+					Um_Key_CouponId: `${coupon.couponId}`
 				})
 			}
 			this.createCouponRecord(coupon)
 		},
-		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)
-				}
-			})
+				.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){
+		async MiniWxPayFor(coupon, couponRecordId) {
 			const wechatcode = await authorize.getCode('weixin')
 			const params = {
 				userId: this.userId,
 				couponId: coupon.couponId,
-				couponRecordId:couponRecordId,
-				payType:'XCX',
+				couponRecordId: couponRecordId,
+				payType: 'XCX',
 				code: wechatcode,
 				source: 1 //支付来源 1 小程序 2 WWW
 			}
-			this.weChatMiniCouponWxPay(params,'Um_Event_productCouponPay','商品详情','线上支付优惠券',coupon.couponId,this.userId)
+			this.weChatMiniCouponWxPay(
+				params,
+				'Um_Event_productCouponPay',
+				'商品详情',
+				'线上支付优惠券',
+				coupon.couponId,
+				this.userId
+			)
 		},
-		hideMobel(){
+		hideMobel() {
 			this.modal = false
 		},
-		handleClick(e){
+		handleClick(e) {
 			//个人机构跳转升级页面
 			if (e.index == 1) {
 				this.$api.navigateTo('/pages/login/apply')
@@ -1254,7 +1317,7 @@ export default {
 			const index = e.detail.current
 			this.current = index
 		},
-		previewImg1(url){
+		previewImg1(url) {
 			let mentuzArray = []
 			mentuzArray.push(url)
 			uni.previewImage({
@@ -1484,7 +1547,7 @@ export default {
 		},
 		goSupplier() {
 			//跳供应商资料页
-			if(!this.isShowCaimeiShop){
+			if (!this.isShowCaimeiShop) {
 				this.$api.navigateTo('/pages/supplier/user/my-shop?shopId=' + this.shopId)
 			}
 		},
@@ -1623,14 +1686,23 @@ export default {
 			100,
 			true
 		),
-		debounce (fn,delay){
-		    let timer = null //借助闭包
-		    return function() {
-		        if(timer){
-		            clearTimeout(timer) 
-		        }
-		        timer = setTimeout(fn,delay) // 简化写法
-		    }
+		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
@@ -1641,8 +1713,8 @@ export default {
 	},
 	onPageScroll(e) {
 		//实时获取到滚动的值
-		const { scrollTop } = e 
-		this.debounce(this.getSectionProps(),1000)
+		const { scrollTop } = e
+		this.debounce(this.getSectionProps(), 1000)
 		if (!this.tabSelectFlag) {
 			this.activeTab(scrollTop, this)
 		}
@@ -1699,22 +1771,22 @@ page {
 	width: 100%;
 	height: 750rpx;
 	position: relative;
-	.cm-product-tags{
+	.cm-product-tags {
 		position: absolute;
 		right: 30rpx;
 		top: 0;
 		z-index: 999;
 	}
-	.cm-product-type{
+	.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;
+		background-color: #33ccbf;
 		font-size: $font-size-22;
-		color: #FFFFFF;
+		color: #ffffff;
 		line-height: 25rpx;
 		position: absolute;
 		left: 30rpx;
@@ -1722,8 +1794,8 @@ page {
 		z-index: 999;
 	}
 	.cm-product-cover {
-	    width: 120rpx;
-	    height: 77rpx;
+		width: 120rpx;
+		height: 77rpx;
 		line-height: 57rpx;
 		font-size: 24rpx;
 		color: #fff;
@@ -2281,12 +2353,88 @@ page {
 			}
 		}
 	}
-	.product-details-image{
+	.product-details-image {
 		width: 100%;
 		min-height: 856rpx;
 		box-sizing: border-box;
 		padding: 0 24rpx;
-		.qualificationImg-image{
+		.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;